[Test] Add new directive for specifying target platform for module

This commit is contained in:
Dmitriy Novozhilov
2021-05-13 15:22:41 +03:00
committed by TeamCityServer
parent 06b2efe65f
commit 73a63359df
3 changed files with 54 additions and 1 deletions
@@ -52,4 +52,8 @@ object ModuleStructureDirectives : SimpleDirectivesContainer() {
Declares backend for analyzing current module
""".trimIndent()
)
val TARGET_PLATFORM by enumDirective<TargetPlatformEnum>(
"Declares target platform for current module"
)
}
@@ -0,0 +1,33 @@
/*
* 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.
*/
package org.jetbrains.kotlin.test.directives
import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.js.JsPlatforms
import org.jetbrains.kotlin.platform.jvm.JdkPlatform
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.platform.konan.NativePlatformUnspecifiedTarget
import org.jetbrains.kotlin.platform.konan.NativePlatforms
enum class TargetPlatformEnum(val targetPlatform: TargetPlatform) {
Common(
TargetPlatform(
setOf(
JdkPlatform(JvmTarget.DEFAULT),
JsPlatforms.DefaultSimpleJsPlatform,
NativePlatformUnspecifiedTarget
)
)
),
JVM(JvmPlatforms.unspecifiedJvmPlatform),
JVM_1_6(JvmPlatforms.jvm16),
JVM_1_8(JvmPlatforms.jvm18),
JS(JsPlatforms.defaultJsPlatform),
Native(NativePlatforms.unspecifiedNativePlatform)
}
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.test.services.impl
import org.jetbrains.kotlin.platform.CommonPlatforms
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.isCommon
import org.jetbrains.kotlin.platform.js.JsPlatforms
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.platform.konan.NativePlatforms
@@ -17,6 +16,7 @@ import org.jetbrains.kotlin.test.TestInfrastructureInternals
import org.jetbrains.kotlin.test.builders.LanguageVersionSettingsBuilder
import org.jetbrains.kotlin.test.directives.AdditionalFilesDirectives
import org.jetbrains.kotlin.test.directives.ModuleStructureDirectives
import org.jetbrains.kotlin.test.directives.TargetPlatformEnum
import org.jetbrains.kotlin.test.directives.model.ComposedRegisteredDirectives
import org.jetbrains.kotlin.test.directives.model.Directive
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
@@ -220,6 +220,22 @@ class ModuleStructureExtractorImpl(
}
currentFileName = (values.first() as String).also(::validateFileName)
}
ModuleStructureDirectives.TARGET_PLATFORM -> {
if (currentModuleTargetPlatform != null) {
assertions.fail { "Target platform already specified twice for module $currentModuleName" }
}
val platforms = values.map { (it as TargetPlatformEnum).targetPlatform }
currentModuleTargetPlatform = when (platforms.size) {
0 -> assertions.fail { "Target platform specified incorrectly\nUsage: ${directive.description}" }
1 -> platforms.single()
else -> {
if (TargetPlatformEnum.Common in values) {
assertions.fail { "You can't specify `Common` platform in combination with others" }
}
TargetPlatform(platforms.flatMapTo(mutableSetOf()) { it.componentPlatforms })
}
}
}
else -> return false
}