[Test] Introduce two module structure transformers for codegen test
This commit is contained in:
+37
@@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* 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.services
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.test.TargetBackend
|
||||||
|
import org.jetbrains.kotlin.test.TestInfrastructureInternals
|
||||||
|
import org.jetbrains.kotlin.test.model.DependencyDescription
|
||||||
|
import org.jetbrains.kotlin.test.model.DependencyKind
|
||||||
|
import org.jetbrains.kotlin.test.model.DependencyRelation
|
||||||
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
|
import org.jetbrains.kotlin.test.services.impl.TestModuleStructureImpl
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This transformers is used for transforming target backend
|
||||||
|
* in tests with exactly two modules in it
|
||||||
|
*/
|
||||||
|
@TestInfrastructureInternals
|
||||||
|
class ModuleTransformerForSwitchingBackend(
|
||||||
|
val backendForLib: TargetBackend,
|
||||||
|
val backendForMain: TargetBackend
|
||||||
|
) : ModuleStructureTransformer() {
|
||||||
|
override fun transformModuleStructure(moduleStructure: TestModuleStructure): TestModuleStructure {
|
||||||
|
if (moduleStructure.modules.size != 2) error("Test should contain only one module")
|
||||||
|
val (first, second) = moduleStructure.modules
|
||||||
|
|
||||||
|
return TestModuleStructureImpl(
|
||||||
|
listOf(
|
||||||
|
first.copy(targetBackend = backendForLib),
|
||||||
|
second.copy(targetBackend = backendForMain)
|
||||||
|
),
|
||||||
|
moduleStructure.originalTestDataFiles
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
+57
@@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* 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.services
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.test.TestInfrastructureInternals
|
||||||
|
import org.jetbrains.kotlin.test.model.DependencyDescription
|
||||||
|
import org.jetbrains.kotlin.test.model.DependencyKind
|
||||||
|
import org.jetbrains.kotlin.test.model.DependencyRelation
|
||||||
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
|
import org.jetbrains.kotlin.test.services.impl.TestModuleStructureImpl
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This transformers is used for transforming test with two files
|
||||||
|
* into test with two modules
|
||||||
|
*
|
||||||
|
* It will fail in case when module structure contains more than one module
|
||||||
|
* or not exactly two files in it
|
||||||
|
*/
|
||||||
|
@TestInfrastructureInternals
|
||||||
|
class ModuleTransformerForTwoFilesBoxTests : ModuleStructureTransformer() {
|
||||||
|
override fun transformModuleStructure(moduleStructure: TestModuleStructure): TestModuleStructure {
|
||||||
|
val module = moduleStructure.modules.singleOrNull() ?: error("Test should contain only one module")
|
||||||
|
val realFiles = module.files.filterNot { it.isAdditional }
|
||||||
|
if (realFiles.size != 2) error("Test should contain exactly two files")
|
||||||
|
val additionalFiles = module.files.filter { it.isAdditional }
|
||||||
|
val (first, second) = realFiles
|
||||||
|
val firstModule = TestModule(
|
||||||
|
name = "lib",
|
||||||
|
module.targetPlatform,
|
||||||
|
module.targetBackend,
|
||||||
|
module.frontendKind,
|
||||||
|
module.binaryKind,
|
||||||
|
files = listOf(first) + additionalFiles,
|
||||||
|
dependencies = emptyList(),
|
||||||
|
friends = emptyList(),
|
||||||
|
module.directives,
|
||||||
|
module.languageVersionSettings
|
||||||
|
)
|
||||||
|
|
||||||
|
val secondModule = TestModule(
|
||||||
|
name = "main",
|
||||||
|
module.targetPlatform,
|
||||||
|
module.targetBackend,
|
||||||
|
module.frontendKind,
|
||||||
|
module.binaryKind,
|
||||||
|
files = listOf(second) + additionalFiles,
|
||||||
|
dependencies = listOf(DependencyDescription("lib", DependencyKind.Binary, DependencyRelation.Dependency)),
|
||||||
|
friends = emptyList(),
|
||||||
|
module.directives,
|
||||||
|
module.languageVersionSettings
|
||||||
|
)
|
||||||
|
return TestModuleStructureImpl(listOf(firstModule, secondModule), moduleStructure.originalTestDataFiles)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user