diff --git a/build.gradle.kts b/build.gradle.kts index 2a72e0b64a7..ff7e6cff0dc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -607,6 +607,8 @@ tasks { register("toolsTest") { dependsOn(":tools:kotlinp:test") + dependsOn(":native:kotlin-native-utils:test") + dependsOn(":native:kotlin-klib-commonizer:test") } register("examplesTest") { @@ -637,13 +639,6 @@ tasks { dependsOn(":jps-plugin:test") } - register("konan-tests") { - dependsOn("dist") - dependsOn( - ":native:kotlin-klib-commonizer:test" - ) - } - register("idea-plugin-main-tests") { dependsOn("dist") dependsOn(":idea:test") @@ -725,7 +720,6 @@ tasks { dependsOn( "idea-plugin-tests", "jps-tests", - "konan-tests", "plugins-tests", "android-ide-tests", ":generators:test" diff --git a/native/utils/build.gradle.kts b/native/utils/build.gradle.kts index 8ce7f9dd92c..6ffa804e5b3 100644 --- a/native/utils/build.gradle.kts +++ b/native/utils/build.gradle.kts @@ -8,11 +8,14 @@ description = "Kotlin/Native utils" dependencies { compile(kotlinStdlib()) compile(project(":kotlin-util-io")) -} + + testCompile(commonDep("junit:junit")) + testCompileOnly(project(":kotlin-reflect-api")) + testRuntime(project(":kotlin-reflect"))} sourceSets { "main" { projectDefault() } - "test" { none() } + "test" { projectDefault() } } publish() diff --git a/native/utils/src/org/jetbrains/kotlin/konan/target/HostManager.kt b/native/utils/src/org/jetbrains/kotlin/konan/target/HostManager.kt index b57f90dfcc8..a35068e16c2 100644 --- a/native/utils/src/org/jetbrains/kotlin/konan/target/HostManager.kt +++ b/native/utils/src/org/jetbrains/kotlin/konan/target/HostManager.kt @@ -12,23 +12,11 @@ open class HostManager(protected val distribution: Distribution = Distribution() fun targetManager(userRequest: String? = null): TargetManager = TargetManagerImpl(userRequest, this) - // TODO: need a better way to enumerated predefined targets. - private val predefinedTargets = listOf( - ANDROID_ARM32, ANDROID_ARM64, ANDROID_X86, ANDROID_X64, - IOS_ARM32, IOS_ARM64, IOS_X64, - WATCHOS_ARM32, WATCHOS_ARM64, - WATCHOS_X86, WATCHOS_X64, - TVOS_ARM64, TVOS_X64, - LINUX_X64, LINUX_ARM32_HFP, LINUX_ARM64, LINUX_MIPS32, LINUX_MIPSEL32, - MINGW_X64, MINGW_X86, - MACOS_X64, - WASM32) - private val zephyrSubtargets = distribution.availableSubTarget("zephyr").map { ZEPHYR(it) } private val experimentalEnabled = experimental || distribution.experimentalEnabled private val configurableSubtargets = zephyrSubtargets - val targetValues: List by lazy { predefinedTargets + configurableSubtargets } + val targetValues: List by lazy { KonanTarget.predefinedTargets.toList() + configurableSubtargets } val targets = targetValues.associateBy { it.visibleName } diff --git a/native/utils/src/org/jetbrains/kotlin/konan/target/KonanTarget.kt b/native/utils/src/org/jetbrains/kotlin/konan/target/KonanTarget.kt index 6c0cbed0c34..0fee31a7b20 100644 --- a/native/utils/src/org/jetbrains/kotlin/konan/target/KonanTarget.kt +++ b/native/utils/src/org/jetbrains/kotlin/konan/target/KonanTarget.kt @@ -36,4 +36,21 @@ sealed class KonanTarget(override val name: String, val family: Family, val arch KonanTarget("${genericName}_$subName", Family.ZEPHYR, Architecture.ARM32) override fun toString() = name + + companion object { + // TODO: need a better way to enumerated predefined targets. + val predefinedTargets by lazy { + setOf( + ANDROID_X64, ANDROID_X86, ANDROID_ARM32, ANDROID_ARM64, + IOS_ARM32, IOS_ARM64, IOS_X64, + WATCHOS_ARM32, WATCHOS_ARM64, WATCHOS_X86, WATCHOS_X64, + TVOS_ARM64, TVOS_X64, + LINUX_X64, + MINGW_X86, MINGW_X64, + MACOS_X64, + LINUX_ARM64, LINUX_ARM32_HFP, LINUX_MIPS32, LINUX_MIPSEL32, + WASM32 + ) + } + } } diff --git a/native/utils/tests/org/jetbrains/kotlin/konan/target/KonanTargetTest.kt b/native/utils/tests/org/jetbrains/kotlin/konan/target/KonanTargetTest.kt new file mode 100644 index 00000000000..3d52b5c9a4a --- /dev/null +++ b/native/utils/tests/org/jetbrains/kotlin/konan/target/KonanTargetTest.kt @@ -0,0 +1,20 @@ +/* + * Copyright 2010-2020 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. + */ + +package org.jetbrains.kotlin.konan.target + +import org.junit.Assert.assertEquals +import org.junit.Test + +class KonanTargetTest { + @Test + fun allPredefinedTargetsRegistered() { + assertEquals( + "Some of predefined KonanTarget instances are not listed in 'KonanTarget.predefinedTargets'", + KonanTarget::class.sealedSubclasses.mapNotNull { it.objectInstance }.toSet(), + KonanTarget.predefinedTargets + ) + } +}