Introduce base class for codegen and diagnostic tests

Extract base TestFile and TestModule classes.
 Move coroutinePackage related logic to base class
This commit is contained in:
Mikhael Bogdanov
2020-02-20 17:01:07 +01:00
parent b031706ea9
commit a795c38eb7
29 changed files with 257 additions and 188 deletions
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.js.test.utils.LineOutputToStringVisitor
import org.jetbrains.kotlin.js.util.TextOutputImpl
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.serialization.js.ModuleKind
import org.jetbrains.kotlin.test.KotlinBaseTest
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.KotlinTestWithEnvironment
import org.jetbrains.kotlin.test.TestFiles
@@ -51,7 +52,7 @@ abstract class AbstractJsLineNumberTest : KotlinTestWithEnvironment() {
.map { it.module }.distinct()
.associateBy { it.name }
val orderedModules = DFS.topologicalOrder(modules.values) { module -> module.dependencies.mapNotNull { modules[it] } }
val orderedModules = DFS.topologicalOrder(modules.values) { module -> module.dependenciesSymbols.mapNotNull { modules[it] } }
orderedModules.asReversed().forEach { module ->
val baseOutputPath = module.outputFileName(file)
@@ -110,7 +111,7 @@ abstract class AbstractJsLineNumberTest : KotlinTestWithEnvironment() {
KotlinCoreEnvironment.createForTests(testRootDisposable, CompilerConfiguration(), EnvironmentConfigFiles.JS_CONFIG_FILES)
private fun createConfig(module: TestModule, inputFile: File, modules: Map<String, TestModule>): JsConfig {
val dependencies = module.dependencies
val dependencies = module.dependenciesSymbols
.mapNotNull { modules[it]?.outputFileName(inputFile) }
.map { "$it.meta.js" }
@@ -137,7 +138,7 @@ abstract class AbstractJsLineNumberTest : KotlinTestWithEnvironment() {
private inner class TestFileFactoryImpl : TestFiles.TestFileFactory<TestModule, TestFile>, Closeable {
private val tmpDir = KotlinTestUtils.tmpDir("js-tests")
private val defaultModule = TestModule(BasicBoxTest.TEST_MODULE, emptyList())
private val defaultModule = TestModule(BasicBoxTest.TEST_MODULE, emptyList(), emptyList())
override fun createFile(module: TestModule?, fileName: String, text: String, directives: Map<String, String>): TestFile? {
val currentModule = module ?: defaultModule
@@ -146,11 +147,10 @@ abstract class AbstractJsLineNumberTest : KotlinTestWithEnvironment() {
KotlinTestUtils.mkdirs(temporaryFile.parentFile)
temporaryFile.writeText(text, Charsets.UTF_8)
return TestFile(temporaryFile.absolutePath, currentModule)
return TestFile(temporaryFile.absolutePath, text, currentModule)
}
override fun createModule(name: String, dependencies: List<String>, friends: List<String>) = TestModule(name, dependencies)
override fun createModule(name: String, dependencies: List<String>, friends: List<String>) = TestModule(name, dependencies, friends)
override fun close() {
FileUtil.delete(tmpDir)
@@ -158,14 +158,14 @@ abstract class AbstractJsLineNumberTest : KotlinTestWithEnvironment() {
}
private class TestModule(
val name: String,
dependencies: List<String>
) {
val dependencies = dependencies.toMutableList()
name: String,
dependenciesSymbols: List<String>,
friendsSymbols: List<String>
): KotlinBaseTest.TestModule(name, dependenciesSymbols, friendsSymbols) {
val files = mutableListOf<TestFile>()
}
private class TestFile(val fileName: String, val module: TestModule) {
private class TestFile(val fileName: String, content: String, val module: TestModule) : KotlinBaseTest.TestFile(fileName, content) {
init {
module.files += this
}
@@ -141,10 +141,10 @@ abstract class BasicBoxTest(
.map { it.name to it }.toMap()
fun TestModule.allTransitiveDependencies(): Set<String> {
return dependencies.toSet() + dependencies.flatMap { modules[it]!!.allTransitiveDependencies() }
return dependenciesSymbols.toSet() + dependenciesSymbols.flatMap { modules[it]!!.allTransitiveDependencies() }
}
val orderedModules = DFS.topologicalOrder(modules.values) { module -> module.dependencies.mapNotNull { modules[it] } }
val orderedModules = DFS.topologicalOrder(modules.values) { module -> module.dependenciesSymbols.mapNotNull { modules[it] } }
val testPackage = if (runPlainBoxFunction) null else testFactory.testPackage
@@ -159,9 +159,9 @@ abstract class BasicBoxTest(
val mainModule = modules[mainModuleName] ?: error("No module with name \"$mainModuleName\"")
val generatedJsFiles = orderedModules.asReversed().mapNotNull { module ->
val dependencies = module.dependencies.map { modules[it]?.outputFileName(outputDir) + ".meta.js" }
val dependencies = module.dependenciesSymbols.map { modules[it]?.outputFileName(outputDir) + ".meta.js" }
val allDependencies = module.allTransitiveDependencies().map { modules[it]?.outputFileName(outputDir) + ".meta.js" }
val friends = module.friends.map { modules[it]?.outputFileName(outputDir) + ".meta.js" }
val friends = module.friendsSymbols.map { modules[it]?.outputFileName(outputDir) + ".meta.js" }
val outputFileName = module.outputFileName(outputDir) + ".js"
val dceOutputFileName = module.outputFileName(dceOutputDir) + ".js"
@@ -863,12 +863,10 @@ abstract class BasicBoxTest(
}
private class TestModule(
val name: String,
name: String,
dependencies: List<String>,
friends: List<String>
) {
val dependencies = dependencies.toMutableList()
val friends = friends.toMutableList()
): KotlinBaseTest.TestModule(name, dependencies, friends) {
var moduleKind = ModuleKind.PLAIN
var inliningDisabled = false
val files = mutableListOf<TestFile>()