[K/N] Use enforced property PIPELINE_TYPE in CompilerOutputTest to avoid duplicated "-language-version" setting.

This commit is contained in:
Vladimir Sukharev
2023-09-13 12:16:31 +02:00
committed by Space Team
parent e23801fdfc
commit ef5346e62e
7 changed files with 34 additions and 17 deletions
@@ -21,11 +21,11 @@ import java.io.File
@TestDataPath("\$PROJECT_ROOT") @TestDataPath("\$PROJECT_ROOT")
@EnforcedProperty(ClassLevelProperty.COMPILER_OUTPUT_INTERCEPTOR, "NONE") @EnforcedProperty(ClassLevelProperty.COMPILER_OUTPUT_INTERCEPTOR, "NONE")
@EnforcedProperty(ClassLevelProperty.PIPELINE_TYPE, "DEFAULT")
class CompilerOutputTest : AbstractNativeSimpleTest() { class CompilerOutputTest : AbstractNativeSimpleTest() {
// TODO: unmute after fix of KT-61773
@Test @Test
fun testReleaseCompilerAgainstPreReleaseLibrary() = muteForK2(isK2 = testRunSettings.get<PipelineType>() == PipelineType.K2) { fun testReleaseCompilerAgainstPreReleaseLibrary() = muteForK2(isK2 = true) { // TODO: unmute after fix of KT-61773
// We intentionally use JS testdata, because the compilers should behave the same way in such a test. // We intentionally use JS testdata, because the compilers should behave the same way in such a test.
// To be refactored later, after CompileKotlinAgainstCustomBinariesTest.testReleaseCompilerAgainstPreReleaseLibraryJs is fixed. // To be refactored later, after CompileKotlinAgainstCustomBinariesTest.testReleaseCompilerAgainstPreReleaseLibraryJs is fixed.
val rootDir = File("compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibraryJs") val rootDir = File("compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibraryJs")
@@ -74,7 +74,6 @@ class CompilerOutputTest : AbstractNativeSimpleTest() {
): TestCompilationResult<out TestCompilationArtifact.KLIB> { ): TestCompilationResult<out TestCompilationArtifact.KLIB> {
val testCase = generateTestCaseWithSingleModule(source, TestCompilerArgs(freeCompilerArgs)) val testCase = generateTestCaseWithSingleModule(source, TestCompilerArgs(freeCompilerArgs))
val compilation = LibraryCompilation( val compilation = LibraryCompilation(
pipelineType = null,
settings = testRunSettings, settings = testRunSettings,
freeCompilerArgs = testCase.freeCompilerArgs, freeCompilerArgs = testCase.freeCompilerArgs,
sourceModules = testCase.modules, sourceModules = testCase.modules,
@@ -22,6 +22,7 @@ internal enum class ProcessLevelProperty(shortName: String) {
/*************** Class-level system properties ***************/ /*************** Class-level system properties ***************/
@Repeatable
@Target(AnnotationTarget.CLASS) @Target(AnnotationTarget.CLASS)
internal annotation class EnforcedProperty(val property: ClassLevelProperty, val propertyValue: String) internal annotation class EnforcedProperty(val property: ClassLevelProperty, val propertyValue: String)
@@ -33,11 +34,11 @@ internal annotation class AcceptablePropertyValues(val property: ClassLevelPrope
internal class EnforcedProperties(testClass: Class<*>) { internal class EnforcedProperties(testClass: Class<*>) {
private val enforcedAnnotations: Map<ClassLevelProperty, String> = buildMap { private val enforcedAnnotations: Map<ClassLevelProperty, String> = buildMap {
testClass.annotations.forEach { annotation -> testClass.getAnnotationsByType(EnforcedProperty::class.java).forEach {
when (annotation) { this[it.property] = it.propertyValue
is EnforcedProperty -> this[annotation.property] = annotation.propertyValue }
is EnforcedHostTarget -> this[ClassLevelProperty.TEST_TARGET] = HostManager.host.name if (testClass.isAnnotationPresent(EnforcedHostTarget::class.java)) {
} this[ClassLevelProperty.TEST_TARGET] = HostManager.host.name
} }
} }
@@ -69,7 +70,7 @@ internal enum class ClassLevelProperty(shortName: String) {
EXECUTION_TIMEOUT("executionTimeout"), EXECUTION_TIMEOUT("executionTimeout"),
SANITIZER("sanitizer"), SANITIZER("sanitizer"),
COMPILER_OUTPUT_INTERCEPTOR("compilerOutputInterceptor"), COMPILER_OUTPUT_INTERCEPTOR("compilerOutputInterceptor"),
PIPELINE_TYPE("pipelineType"),
; ;
internal val propertyName = fullPropertyName(shortName) internal val propertyName = fullPropertyName(shortName)
@@ -210,7 +210,7 @@ private object NativeTestSupport {
output += computeForcedNoopTestRunner(enforcedProperties) output += computeForcedNoopTestRunner(enforcedProperties)
output += computeTimeouts(enforcedProperties) output += computeTimeouts(enforcedProperties)
// Parse annotations of current class, since there's no way to put annotations to upper-level enclosing class // Parse annotations of current class, since there's no way to put annotations to upper-level enclosing class
output += computePipelineType(testClass.get()) output += computePipelineType(enforcedProperties, testClass.get())
output += computeUsedPartialLinkageConfig(enclosingTestClass) output += computeUsedPartialLinkageConfig(enclosingTestClass)
output += computeCompilerOutputInterceptor(enforcedProperties) output += computeCompilerOutputInterceptor(enforcedProperties)
@@ -468,10 +468,16 @@ private object NativeTestSupport {
) )
} }
private fun computePipelineType(testClass: Class<*>): PipelineType { private fun computePipelineType(enforcedProperties: EnforcedProperties, testClass: Class<*>): PipelineType {
return if (testClass.annotations.any { it is FirPipeline }) val pipelineTypeFromFirPipelineAnnotation = if (testClass.annotations.any { it is FirPipeline })
PipelineType.K2 PipelineType.K2
else PipelineType.K1 else PipelineType.K1
return ClassLevelProperty.PIPELINE_TYPE.readValue(
enforcedProperties,
PipelineType.entries.toTypedArray(),
default = pipelineTypeFromFirPipelineAnnotation
)
} }
private fun computeUsedPartialLinkageConfig(enclosingTestClass: Class<*>): UsedPartialLinkageConfig { private fun computeUsedPartialLinkageConfig(enclosingTestClass: Class<*>): UsedPartialLinkageConfig {
@@ -160,6 +160,7 @@ internal enum class TestRunnerType {
} }
internal enum class MutedOption { internal enum class MutedOption {
DEFAULT,
K1, K1,
K2 K2
} }
@@ -139,7 +139,7 @@ internal abstract class SourceBasedCompilation<A : TestCompilationArtifact>(
private val gcType: GCType, private val gcType: GCType,
private val gcScheduler: GCScheduler, private val gcScheduler: GCScheduler,
private val allocator: Allocator, private val allocator: Allocator,
private val pipelineType: PipelineType?, private val pipelineType: PipelineType,
freeCompilerArgs: TestCompilerArgs, freeCompilerArgs: TestCompilerArgs,
compilerPlugins: CompilerPlugins, compilerPlugins: CompilerPlugins,
override val sourceModules: Collection<TestModule>, override val sourceModules: Collection<TestModule>,
@@ -162,7 +162,7 @@ internal abstract class SourceBasedCompilation<A : TestCompilationArtifact>(
sanitizer.compilerFlag?.let { compilerFlag -> add(compilerFlag) } sanitizer.compilerFlag?.let { compilerFlag -> add(compilerFlag) }
gcType.compilerFlag?.let { compilerFlag -> add(compilerFlag) } gcType.compilerFlag?.let { compilerFlag -> add(compilerFlag) }
gcScheduler.compilerFlag?.let { compilerFlag -> add(compilerFlag) } gcScheduler.compilerFlag?.let { compilerFlag -> add(compilerFlag) }
pipelineType?.compilerFlags?.forEach { compilerFlag -> add(compilerFlag) } pipelineType.compilerFlags.forEach { compilerFlag -> add(compilerFlag) }
applyK2MPPArgs(this) applyK2MPPArgs(this)
} }
@@ -191,8 +191,7 @@ internal class LibraryCompilation(
freeCompilerArgs: TestCompilerArgs, freeCompilerArgs: TestCompilerArgs,
sourceModules: Collection<TestModule>, sourceModules: Collection<TestModule>,
dependencies: Iterable<TestCompilationDependency<*>>, dependencies: Iterable<TestCompilationDependency<*>>,
expectedArtifact: KLIB, expectedArtifact: KLIB
pipelineType: PipelineType? = settings.get(),
) : SourceBasedCompilation<KLIB>( ) : SourceBasedCompilation<KLIB>(
targets = settings.get(), targets = settings.get(),
home = settings.get(), home = settings.get(),
@@ -204,7 +203,7 @@ internal class LibraryCompilation(
gcType = settings.get(), gcType = settings.get(),
gcScheduler = settings.get(), gcScheduler = settings.get(),
allocator = settings.get(), allocator = settings.get(),
pipelineType = pipelineType, pipelineType = settings.get(),
freeCompilerArgs = freeCompilerArgs, freeCompilerArgs = freeCompilerArgs,
compilerPlugins = settings.get(), compilerPlugins = settings.get(),
sourceModules = sourceModules, sourceModules = sourceModules,
@@ -167,6 +167,13 @@ private class ExtTestDataFile(
IGNORE_BACKEND_DIRECTIVE_PREFIX, IGNORE_BACKEND_DIRECTIVE_PREFIX,
IGNORE_BACKEND_K2_DIRECTIVE_PREFIX IGNORE_BACKEND_K2_DIRECTIVE_PREFIX
) )
PipelineType.DEFAULT ->
isIgnoredTarget(
backend,
testDataFile,
/*includeAny = */true,
IGNORE_BACKEND_DIRECTIVE_PREFIX,
)
} }
} }
@@ -274,6 +274,10 @@ internal sealed class CacheMode {
} }
internal enum class PipelineType(val mutedOption: MutedOption, val compilerFlags: List<String>) { internal enum class PipelineType(val mutedOption: MutedOption, val compilerFlags: List<String>) {
DEFAULT(
MutedOption.DEFAULT,
emptyList()
),
K1( K1(
MutedOption.K1, MutedOption.K1,
listOf("-language-version", "1.9") listOf("-language-version", "1.9")