[Gradle][KPM] Implement *VariantFactoryTests

This commit is contained in:
sebastian.sellmair
2021-11-26 17:53:33 +01:00
committed by Space
parent 1fb723f844
commit 60633335ef
2 changed files with 258 additions and 0 deletions
@@ -0,0 +1,158 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@file:Suppress("FunctionName")
package org.jetbrains.kotlin.gradle.kpm
import org.gradle.api.attributes.Attribute
import org.gradle.api.tasks.bundling.Zip
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertSame
import kotlin.test.assertTrue
class KotlinJvmVariantFactoryTest : AbstractKpmExtensionTest() {
private val testAttribute = Attribute.of("this.test", String::class.java)
@Test
fun `test platform type`() {
val variant = KotlinJvmVariantFactory(kotlin.main).create("jvm")
assertEquals(KotlinPlatformType.jvm, variant.platformType)
assertEquals("jvm", variant.fragmentName)
}
@Test
fun `test accessing configurations`() {
val variant = KotlinJvmVariantFactory(kotlin.main).create("jvm")
variant.compileDependenciesConfiguration.get()
variant.runtimeDependenciesConfiguration.get()
variant.apiElementsConfiguration.get()
variant.runtimeElementsConfiguration.get()
variant.implementationConfiguration.get()
variant.apiConfiguration.get()
variant.runtimeOnlyConfiguration.get()
variant.compileOnlyConfiguration.get()
}
@Test
fun `test compilationData`() {
val variant = KotlinJvmVariantFactory(kotlin.main).create("jvm")
assertSame(variant, variant.compilationData.owner)
}
@Test
fun `test accessing compileDependencyFiles`() {
val variant = KotlinJvmVariantFactory(kotlin.main).create("jvm")
variant.compileDependencyFiles.files
}
@Test
fun `test accessing runtimeDependencyFiles`() {
val variant = KotlinJvmVariantFactory(kotlin.main).create("jvm")
variant.runtimeDependencyFiles.files
}
@Test
fun `test accessing runtimeFiles`() {
val variant = KotlinJvmVariantFactory(kotlin.main).create("jvm")
variant.runtimeFiles.files
}
@Test
fun `test has source roots`() {
val variant = KotlinJvmVariantFactory(kotlin.main).create("jvm")
assertTrue(variant.kotlinSourceRoots.srcDirs.isNotEmpty())
}
@Test
fun `test sourceArchiveTaskName registered`() {
val variant = KotlinJvmVariantFactory(kotlin.main).create("jvm")
assertTrue(project.tasks.getByName(variant.sourceArchiveTaskName) is Zip)
}
@Test
fun `test compileTask registered`() {
val variant = KotlinJvmVariantFactory(kotlin.main).create("jvm")
assertTrue(project.tasks.getByName(variant.compilationData.compileKotlinTaskName) is KotlinCompile)
}
@Test
fun `test custom configure compileDependenciesConfiguration`() {
val variant = KotlinJvmVariantFactory(
KotlinJvmVariantInstantiator(kotlin.main),
KotlinJvmVariantConfigurator(compileDependenciesConfigurator = { fragment, configuration ->
assertSame(fragment.compileDependenciesConfiguration.get(), configuration)
configuration.attributes.attribute(testAttribute, "compileDependencies")
})
).create("jvm")
assertEquals(
"compileDependencies", variant.compileDependenciesConfiguration.get().attributes.getAttribute(testAttribute)
)
}
@Test
fun `test custom configure runtimeDependenciesConfiguration`() {
val variant = KotlinJvmVariantFactory(
KotlinJvmVariantInstantiator(kotlin.main),
KotlinJvmVariantConfigurator(runtimeDependenciesConfigurator = { fragment, configuration ->
assertSame(fragment.runtimeDependenciesConfiguration.get(), configuration)
configuration.attributes.attribute(testAttribute, "runtimeDependencies")
})
).create("jvm")
assertEquals(
"runtimeDependencies", variant.runtimeDependenciesConfiguration.get().attributes.getAttribute(testAttribute)
)
}
@Test
fun `test custom configure apiElementsConfiguration`() {
val variant = KotlinJvmVariantFactory(
KotlinJvmVariantInstantiator(kotlin.main), KotlinJvmVariantConfigurator(apiElementsConfigurator = { fragment, configuration ->
assertSame(fragment.apiElementsConfiguration.get(), configuration)
configuration.attributes.attribute(testAttribute, "apiElements")
})
).create("jvm")
assertEquals(
"apiElements", variant.apiElementsConfiguration.get().attributes.getAttribute(testAttribute)
)
}
@Test
fun `test custom configure runtimeElementsConfiguration`() {
val variant = KotlinJvmVariantFactory(
KotlinJvmVariantInstantiator(kotlin.main),
KotlinJvmVariantConfigurator(runtimeElementsConfigurator = { fragment, configuration ->
assertSame(fragment.runtimeElementsConfiguration.get(), configuration)
configuration.attributes.attribute(testAttribute, "runtimeElements")
})
).create("jvm")
assertEquals(
"runtimeElements", variant.runtimeElementsConfiguration.get().attributes.getAttribute(testAttribute)
)
}
@Test
fun `test custom sourceDirectories configuration`() {
val variant = KotlinJvmVariantFactory(
KotlinJvmVariantInstantiator(kotlin.main),
KotlinJvmVariantConfigurator(sourceDirectoriesConfigurator = object : KotlinSourceDirectoriesConfigurator<KotlinJvmVariant> {
override fun configure(fragment: KotlinJvmVariant) {
fragment.kotlinSourceRoots.setSrcDirs(listOf(project.file("src/abc/kotlin")))
}
})
).create("jvm")
assertEquals(listOf(project.file("src/abc/kotlin")), variant.kotlinSourceRoots.srcDirs.toList())
}
}
@@ -0,0 +1,100 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@file:Suppress("FunctionName")
package org.jetbrains.kotlin.gradle.kpm
import org.gradle.api.tasks.bundling.Zip
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
import kotlin.test.BeforeTest
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue
@RunWith(Parameterized::class)
class KotlinNativeVariantFactoryTest(
private val variantConstructor: KotlinNativeVariantConstructor<*>,
@Suppress("unused") private val variantClassName: String
) : AbstractKpmExtensionTest() {
private lateinit var variant: KotlinNativeVariantInternal
@BeforeTest
fun createVariant() {
variant = KotlinNativeVariantFactory(
KotlinNativeVariantInstantiator(kotlin.main, variantConstructor)
).create("native")
}
@Test
fun `test platform type`() {
assertEquals(KotlinPlatformType.native, variant.platformType)
}
@Test
fun `test konanTarget`() {
assertEquals(variantConstructor.konanTarget, variant.konanTarget)
}
@Test
fun `test variantClass`() {
assertEquals(variantConstructor.variantClass, variant.javaClass)
}
@Test
fun `test compileDependenciesConfiguration - contains konanTarget`() {
assertEquals(
variantConstructor.konanTarget.name,
variant.compileDependenciesConfiguration.get()
.attributes.getAttribute(KotlinNativeTarget.konanTargetAttribute)
)
}
@Test
fun `test apiElementsConfiguration - contains konanTarget`() {
assertEquals(
variantConstructor.konanTarget.name,
variant.apiElementsConfiguration.get()
.attributes.getAttribute(KotlinNativeTarget.konanTargetAttribute)
)
}
@Test
fun `test has source roots`() {
assertTrue(variant.kotlinSourceRoots.srcDirs.isNotEmpty())
}
@Test
fun `test sourceArchiveTaskName registered`() {
assertTrue(project.tasks.getByName(variant.sourceArchiveTaskName) is Zip)
}
@Test
fun `test compileTask registered`() {
assertTrue(
project.tasks.getByName(variant.compilationData.compileKotlinTaskName) is KotlinNativeCompile,
"Expected registered compileKotlinTask to be instance of ${KotlinNativeCompile::class.simpleName}"
)
}
companion object {
@JvmStatic
@Parameterized.Parameters(name = "{1}")
fun data() = listOf(
KotlinLinuxX64Variant.constructor,
KotlinMacosX64Variant.constructor,
KotlinMacosX64Variant.constructor,
KotlinMacosArm64Variant.constructor,
KotlinIosX64Variant.constructor,
KotlinIosArm64Variant.constructor
).map { arrayOf(it, it.variantClass.simpleName) }
}
}