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:
@@ -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>()
|
||||
|
||||
Reference in New Issue
Block a user