From cc3438f20c4d03d42e995de9707f3b937d713ad8 Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Thu, 5 Dec 2019 17:15:30 +0700 Subject: [PATCH] Gradle, native: Add separate classes for targets with different tests --- .../generators/gradle/dsl/presetEntries.kt | 19 +++------ ...otlinTargetContainerWithPresetFunctions.kt | 29 +++++++------- .../targets/native/KotlinNativeTarget.kt | 14 +++++-- .../native/KotlinNativeTargetConfigurator.kt | 39 ++++++++++++------- .../native/KotlinNativeTargetPreset.kt | 20 ++++------ 5 files changed, 64 insertions(+), 57 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-dsl-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/dsl/presetEntries.kt b/libraries/tools/kotlin-gradle-plugin-dsl-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/dsl/presetEntries.kt index 48f74b9230b..3117f441b2d 100644 --- a/libraries/tools/kotlin-gradle-plugin-dsl-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/dsl/presetEntries.kt +++ b/libraries/tools/kotlin-gradle-plugin-dsl-codegen/src/main/kotlin/org/jetbrains/kotlin/generators/gradle/dsl/presetEntries.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.generators.gradle.dsl import org.jetbrains.kotlin.generators.gradle.dsl.NativeFQNames.Presets import org.jetbrains.kotlin.generators.gradle.dsl.NativeFQNames.Targets -import org.jetbrains.kotlin.generators.gradle.dsl.NativeFQNames.TestRuns import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.presetName @@ -23,11 +22,10 @@ internal fun KotlinPresetEntry.typeNames(): Set = setOf(presetType, ta internal const val MPP_PACKAGE = "org.jetbrains.kotlin.gradle.plugin.mpp" internal object NativeFQNames { - const val nativePackage = "org.jetbrains.kotlin.gradle.targets.native" - object Targets { const val base = "$MPP_PACKAGE.KotlinNativeTarget" - const val withTests = "$MPP_PACKAGE.KotlinNativeTargetWithTests" + const val withHostTests = "$MPP_PACKAGE.KotlinNativeTargetWithHostTests" + const val withSimulatorTests = "$MPP_PACKAGE.KotlinNativeTargetWithSimulatorTests" } object Presets { @@ -35,11 +33,6 @@ internal object NativeFQNames { const val withHostTests = "$MPP_PACKAGE.KotlinNativeTargetWithHostTestsPreset" const val withSimulatorTests = "$MPP_PACKAGE.KotlinNativeTargetWithSimulatorTestsPreset" } - - object TestRuns { - const val host = "$nativePackage.KotlinNativeHostTestRun" - const val simulator = "$nativePackage.KotlinNativeSimulatorTestRun" - } } internal val jvmPresetEntry = KotlinPresetEntry( @@ -71,14 +64,14 @@ internal val nativePresetEntries = HostManager().targets val (presetType, targetType) = when (target) { in nativeTargetsWithHostTests -> - typeName(Presets.withHostTests) to typeName(Targets.withTests, TestRuns.host) + Presets.withHostTests to Targets.withHostTests in nativeTargetsWithSimulatorTests -> - typeName(Presets.withSimulatorTests) to typeName(Targets.withTests, TestRuns.simulator) + Presets.withSimulatorTests to Targets.withSimulatorTests else -> - typeName(Presets.simple) to typeName(Targets.base) + Presets.simple to Targets.base } - KotlinPresetEntry(target.presetName, presetType, targetType) + KotlinPresetEntry(target.presetName, typeName(presetType), typeName(targetType)) } internal val allPresetEntries = listOf( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithPresetFunctions.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithPresetFunctions.kt index de12ef49c46..cefc0f2082b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithPresetFunctions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithPresetFunctions.kt @@ -9,13 +9,12 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsTargetPreset import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmTargetPreset import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetPreset +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithHostTests import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithHostTestsPreset +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithSimulatorTests import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithSimulatorTestsPreset -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithTests import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget -import org.jetbrains.kotlin.gradle.targets.native.KotlinNativeHostTestRun -import org.jetbrains.kotlin.gradle.targets.native.KotlinNativeSimulatorTestRun // DO NOT EDIT MANUALLY! Generated by org.jetbrains.kotlin.generators.gradle.dsl.MppPresetFunctionsCodegenKt @@ -158,8 +157,8 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP fun iosX64( name: String = "iosX64", - configure: KotlinNativeTargetWithTests.() -> Unit = { } - ): KotlinNativeTargetWithTests = + configure: KotlinNativeTargetWithSimulatorTests.() -> Unit = { } + ): KotlinNativeTargetWithSimulatorTests = configureOrCreate( name, presets.getByName("iosX64") as KotlinNativeTargetWithSimulatorTestsPreset, @@ -203,8 +202,8 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP fun watchosX86( name: String = "watchosX86", - configure: KotlinNativeTargetWithTests.() -> Unit = { } - ): KotlinNativeTargetWithTests = + configure: KotlinNativeTargetWithSimulatorTests.() -> Unit = { } + ): KotlinNativeTargetWithSimulatorTests = configureOrCreate( name, presets.getByName("watchosX86") as KotlinNativeTargetWithSimulatorTestsPreset, @@ -233,8 +232,8 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP fun tvosX64( name: String = "tvosX64", - configure: KotlinNativeTargetWithTests.() -> Unit = { } - ): KotlinNativeTargetWithTests = + configure: KotlinNativeTargetWithSimulatorTests.() -> Unit = { } + ): KotlinNativeTargetWithSimulatorTests = configureOrCreate( name, presets.getByName("tvosX64") as KotlinNativeTargetWithSimulatorTestsPreset, @@ -248,8 +247,8 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP fun linuxX64( name: String = "linuxX64", - configure: KotlinNativeTargetWithTests.() -> Unit = { } - ): KotlinNativeTargetWithTests = + configure: KotlinNativeTargetWithHostTests.() -> Unit = { } + ): KotlinNativeTargetWithHostTests = configureOrCreate( name, presets.getByName("linuxX64") as KotlinNativeTargetWithHostTestsPreset, @@ -323,8 +322,8 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP fun mingwX64( name: String = "mingwX64", - configure: KotlinNativeTargetWithTests.() -> Unit = { } - ): KotlinNativeTargetWithTests = + configure: KotlinNativeTargetWithHostTests.() -> Unit = { } + ): KotlinNativeTargetWithHostTests = configureOrCreate( name, presets.getByName("mingwX64") as KotlinNativeTargetWithHostTestsPreset, @@ -353,8 +352,8 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP fun macosX64( name: String = "macosX64", - configure: KotlinNativeTargetWithTests.() -> Unit = { } - ): KotlinNativeTargetWithTests = + configure: KotlinNativeTargetWithHostTests.() -> Unit = { } + ): KotlinNativeTargetWithHostTests = configureOrCreate( name, presets.getByName("macosX64") as KotlinNativeTargetWithHostTestsPreset, diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt index 65311ba7fb2..a68f100a5aa 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt @@ -16,8 +16,9 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinNativeBinaryContainer import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTests import org.jetbrains.kotlin.gradle.targets.native.KotlinNativeBinaryTestRun +import org.jetbrains.kotlin.gradle.targets.native.KotlinNativeHostTestRun +import org.jetbrains.kotlin.gradle.targets.native.KotlinNativeSimulatorTestRun import org.jetbrains.kotlin.gradle.targets.native.NativeBinaryTestRunSource -import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import org.jetbrains.kotlin.konan.target.KonanTarget import javax.inject.Inject @@ -65,12 +66,17 @@ open class KotlinNativeTarget @Inject constructor( } } -// TODO: Add separate classes for corresponding targets? -open class KotlinNativeTargetWithTests @Inject constructor( +abstract class KotlinNativeTargetWithTests( project: Project, konanTarget: KonanTarget ) : KotlinNativeTarget(project, konanTarget), KotlinTargetWithTests { override lateinit var testRuns: NamedDomainObjectContainer internal set -} \ No newline at end of file +} + +open class KotlinNativeTargetWithHostTests @Inject constructor(project: Project, konanTarget: KonanTarget) : + KotlinNativeTargetWithTests(project, konanTarget) + +open class KotlinNativeTargetWithSimulatorTests @Inject constructor(project: Project, konanTarget: KonanTarget) : + KotlinNativeTargetWithTests(project, konanTarget) \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt index f6c29cc5cf0..d9f3ef3bc77 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt @@ -394,16 +394,19 @@ open class KotlinNativeTargetConfigurator( } } -abstract class KotlinNativeTargetWithTestsConfigurator( +abstract class KotlinNativeTargetWithTestsConfigurator< + TargetType : KotlinNativeTargetWithTests, + TestRunType : KotlinNativeBinaryTestRun, + TaskType : KotlinNativeTest>( kotlinPluginVersion: String -) : KotlinNativeTargetConfigurator>(kotlinPluginVersion), - KotlinTargetWithTestsConfigurator> { +) : KotlinNativeTargetConfigurator(kotlinPluginVersion), + KotlinTargetWithTestsConfigurator { abstract val testTaskClass: Class - abstract fun isTestTaskEnabled(target: KotlinNativeTargetWithTests<*>): Boolean + abstract fun isTestTaskEnabled(target: TargetType): Boolean - protected open fun configureTestTask(target: KotlinNativeTargetWithTests<*>, testTask: TaskType) { + protected open fun configureTestTask(target: TargetType, testTask: TaskType) { testTask.group = LifecycleBasePlugin.VERIFICATION_GROUP testTask.description = "Executes Kotlin/Native unit tests for target ${target.name}." testTask.targetName = target.name @@ -415,7 +418,7 @@ abstract class KotlinNativeTargetWithTestsConfigurator, testRun: AbstractKotlinNativeTestRun) { + protected open fun configureTestRun(target: TargetType, testRun: AbstractKotlinNativeTestRun) { with(testRun) { val project = target.project @@ -433,7 +436,12 @@ abstract class KotlinNativeTargetWithTestsConfigurator(kotlinPluginVersion) { + KotlinNativeTargetWithTestsConfigurator< + KotlinNativeTargetWithHostTests, + KotlinNativeHostTestRun, + KotlinNativeHostTest>( + kotlinPluginVersion + ) { override val testTaskClass: Class get() = KotlinNativeHostTest::class.java @@ -441,18 +449,23 @@ class KotlinNativeTargetWithHostTestsConfigurator(kotlinPluginVersion: String) : override val testRunClass: Class get() = KotlinNativeHostTestRun::class.java - override fun isTestTaskEnabled(target: KotlinNativeTargetWithTests<*>): Boolean = + override fun isTestTaskEnabled(target: KotlinNativeTargetWithHostTests): Boolean = target.konanTarget.isCurrentHost override fun createTestRun( name: String, - target: KotlinNativeTargetWithTests + target: KotlinNativeTargetWithHostTests ): KotlinNativeHostTestRun = DefaultHostTestRun(name, target).apply { configureTestRun(target, this) } } class KotlinNativeTargetWithSimulatorTestsConfigurator(kotlinPluginVersion: String) : - KotlinNativeTargetWithTestsConfigurator(kotlinPluginVersion) { + KotlinNativeTargetWithTestsConfigurator< + KotlinNativeTargetWithSimulatorTests, + KotlinNativeSimulatorTestRun, + KotlinNativeSimulatorTest>( + kotlinPluginVersion + ) { override val testTaskClass: Class get() = KotlinNativeSimulatorTest::class.java @@ -460,10 +473,10 @@ class KotlinNativeTargetWithSimulatorTestsConfigurator(kotlinPluginVersion: Stri override val testRunClass: Class get() = KotlinNativeSimulatorTestRun::class.java - override fun isTestTaskEnabled(target: KotlinNativeTargetWithTests<*>): Boolean = + override fun isTestTaskEnabled(target: KotlinNativeTargetWithSimulatorTests): Boolean = HostManager.hostIsMac - override fun configureTestTask(target: KotlinNativeTargetWithTests<*>, testTask: KotlinNativeSimulatorTest) { + override fun configureTestTask(target: KotlinNativeTargetWithSimulatorTests, testTask: KotlinNativeSimulatorTest) { super.configureTestTask(target, testTask) testTask.deviceId = when (target.konanTarget) { @@ -476,7 +489,7 @@ class KotlinNativeTargetWithSimulatorTestsConfigurator(kotlinPluginVersion: Stri override fun createTestRun( name: String, - target: KotlinNativeTargetWithTests + target: KotlinNativeTargetWithSimulatorTests ): KotlinNativeSimulatorTestRun = DefaultSimulatorTestRun(name, target).apply { configureTestRun(target, this) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt index 9f6a21e1168..cf16cd4ae11 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt @@ -184,27 +184,23 @@ open class KotlinNativeTargetPreset(name: String, project: Project, konanTarget: } open class KotlinNativeTargetWithHostTestsPreset(name: String, project: Project, konanTarget: KonanTarget, kotlinPluginVersion: String) : - AbstractKotlinNativeTargetPreset>(name, project, konanTarget, kotlinPluginVersion) { + AbstractKotlinNativeTargetPreset(name, project, konanTarget, kotlinPluginVersion) { - override fun createTargetConfigurator(): KotlinTargetConfigurator> = + override fun createTargetConfigurator(): KotlinNativeTargetWithHostTestsConfigurator = KotlinNativeTargetWithHostTestsConfigurator(kotlinPluginVersion) - @Suppress("UNCHECKED_CAST") - override fun instantiateTarget(name: String): KotlinNativeTargetWithTests = - project.objects.newInstance(KotlinNativeTargetWithTests::class.java, project, konanTarget) - as KotlinNativeTargetWithTests + override fun instantiateTarget(name: String): KotlinNativeTargetWithHostTests = + project.objects.newInstance(KotlinNativeTargetWithHostTests::class.java, project, konanTarget) } open class KotlinNativeTargetWithSimulatorTestsPreset(name: String, project: Project, konanTarget: KonanTarget, kotlinPluginVersion: String) : - AbstractKotlinNativeTargetPreset>(name, project, konanTarget, kotlinPluginVersion) { + AbstractKotlinNativeTargetPreset(name, project, konanTarget, kotlinPluginVersion) { - override fun createTargetConfigurator(): KotlinTargetConfigurator> = + override fun createTargetConfigurator(): KotlinNativeTargetWithSimulatorTestsConfigurator = KotlinNativeTargetWithSimulatorTestsConfigurator(kotlinPluginVersion) - @Suppress("UNCHECKED_CAST") - override fun instantiateTarget(name: String): KotlinNativeTargetWithTests = - project.objects.newInstance(KotlinNativeTargetWithTests::class.java, project, konanTarget) - as KotlinNativeTargetWithTests + override fun instantiateTarget(name: String): KotlinNativeTargetWithSimulatorTests = + project.objects.newInstance(KotlinNativeTargetWithSimulatorTests::class.java, project, konanTarget) } internal val KonanTarget.isCurrentHost: Boolean