[native][test] Fix main module select
This commit is contained in:
@@ -265,7 +265,7 @@ class RunExternalTestGroup extends JavaExec implements CompilerRunner {
|
|||||||
return text
|
return text
|
||||||
}
|
}
|
||||||
|
|
||||||
List<TestFile> createTestFiles(String src) {
|
List<TestFile> createTestFiles(String src, TestModule defaultModule) {
|
||||||
def identifier = /[a-zA-Z_][a-zA-Z0-9_]/
|
def identifier = /[a-zA-Z_][a-zA-Z0-9_]/
|
||||||
def fullQualified = /[a-zA-Z_][a-zA-Z0-9_.]/
|
def fullQualified = /[a-zA-Z_][a-zA-Z0-9_.]/
|
||||||
def importRegex = /(?m)^\s*import\s+/
|
def importRegex = /(?m)^\s*import\s+/
|
||||||
@@ -279,8 +279,12 @@ class RunExternalTestGroup extends JavaExec implements CompilerRunner {
|
|||||||
def imports = []
|
def imports = []
|
||||||
def classes = []
|
def classes = []
|
||||||
def vars = new HashSet<String>() // variables that has the same name as a package
|
def vars = new HashSet<String>() // variables that has the same name as a package
|
||||||
TestModule mainModule = null
|
TestModule mainModule = defaultModule
|
||||||
def testFiles = TestDirectivesKt.buildCompileList(project.rootProject.file(src).toPath(), "$outputDirectory/${project.rootProject.file(src).name}")
|
def testFiles = TestDirectivesKt.buildCompileList(
|
||||||
|
project.rootProject.file(src).toPath(),
|
||||||
|
"$outputDirectory/${project.rootProject.file(src).name}",
|
||||||
|
mainModule
|
||||||
|
)
|
||||||
for (TestFile testFile : testFiles) {
|
for (TestFile testFile : testFiles) {
|
||||||
def text = testFile.text
|
def text = testFile.text
|
||||||
def filePath = testFile.path
|
def filePath = testFile.path
|
||||||
@@ -380,8 +384,7 @@ class RunExternalTestGroup extends JavaExec implements CompilerRunner {
|
|||||||
"_launcher.kt",
|
"_launcher.kt",
|
||||||
"$outputDirectory/$src/_launcher.kt".toString(),
|
"$outputDirectory/$src/_launcher.kt".toString(),
|
||||||
launcherText,
|
launcherText,
|
||||||
mainModule ?: testFiles.collect { it.module }.find { it.isDefaultModule() }
|
mainModule
|
||||||
?: TestModule.default()
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return testFiles
|
return testFiles
|
||||||
@@ -505,6 +508,8 @@ fun runTest() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def defaultModule = TestModule.default()
|
||||||
|
|
||||||
testGroupReporter.suite(name) { suite ->
|
testGroupReporter.suite(name) { suite ->
|
||||||
// Build tests in the group
|
// Build tests in the group
|
||||||
flags = (flags ?: []) + "-tr"
|
flags = (flags ?: []) + "-tr"
|
||||||
@@ -514,9 +519,14 @@ fun runTest() {
|
|||||||
if (isEnabledForNativeBackend(src)) {
|
if (isEnabledForNativeBackend(src)) {
|
||||||
// Create separate output directory for each test in the group.
|
// Create separate output directory for each test in the group.
|
||||||
parseLanguageFlags(src)
|
parseLanguageFlags(src)
|
||||||
compileList.addAll(createTestFiles(src))
|
compileList.addAll(createTestFiles(src, defaultModule))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (compileList.any { it.module.dependencies.contains("support") }) {
|
||||||
|
def supportModule = TestModule.support()
|
||||||
|
compileList.add(new TestFile("helpers.kt", "$outputDirectory/helpers.kt",
|
||||||
|
CoroutineTestUtilKt.createTextForHelpers(), supportModule))
|
||||||
|
}
|
||||||
compileList*.writeTextToFile()
|
compileList*.writeTextToFile()
|
||||||
try {
|
try {
|
||||||
if (enableTwoStageCompilation) {
|
if (enableTwoStageCompilation) {
|
||||||
@@ -532,7 +542,9 @@ fun runTest() {
|
|||||||
} else {
|
} else {
|
||||||
// Regular compilation with modules.
|
// Regular compilation with modules.
|
||||||
Map<String, TestModule> modules = compileList.stream()
|
Map<String, TestModule> modules = compileList.stream()
|
||||||
.map { it.module }
|
.map {
|
||||||
|
println(it.module)
|
||||||
|
it.module }
|
||||||
.distinct()
|
.distinct()
|
||||||
.collect(Collectors.toMap({ it.name }, UnaryOperator.identity()))
|
.collect(Collectors.toMap({ it.name }, UnaryOperator.identity()))
|
||||||
|
|
||||||
@@ -542,6 +554,7 @@ fun runTest() {
|
|||||||
def compiler = new MultiModuleCompilerInvocations(this, outputDirectory, executablePath(), modules, flags)
|
def compiler = new MultiModuleCompilerInvocations(this, outputDirectory, executablePath(), modules, flags)
|
||||||
|
|
||||||
orderedModules.reverse().each { module ->
|
orderedModules.reverse().each { module ->
|
||||||
|
println("${module.name} ${module.dependencies}")
|
||||||
if (!module.isDefaultModule()) {
|
if (!module.isDefaultModule()) {
|
||||||
compiler.produceLibrary(module)
|
compiler.produceLibrary(module)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ class MultiModuleCompilerInvocations(
|
|||||||
|
|
||||||
fun produceProgram(compileList: List<TestFile>) {
|
fun produceProgram(compileList: List<TestFile>) {
|
||||||
val compileMain = compileList.filter {
|
val compileMain = compileList.filter {
|
||||||
it.module.isDefaultModule() || it.module.isSupportModule()
|
it.module.isDefaultModule() && !it.module.isSupportModule()
|
||||||
}
|
}
|
||||||
compileMain.forEach { f ->
|
compileMain.forEach { f ->
|
||||||
libs.addAll(f.module.dependencies)
|
libs.addAll(f.module.dependencies)
|
||||||
|
|||||||
@@ -26,20 +26,17 @@ private val DIRECTIVE_PATTERN = Pattern.compile("^//\\s*[!]?([A-Z_]+)(:[ \\t]*(.
|
|||||||
*
|
*
|
||||||
* @return list of test files [TestFile] to be compiled
|
* @return list of test files [TestFile] to be compiled
|
||||||
*/
|
*/
|
||||||
fun buildCompileList(source: Path, outputDirectory: String): List<TestFile> {
|
fun buildCompileList(
|
||||||
|
source: Path,
|
||||||
|
outputDirectory: String,
|
||||||
|
defaultModule: TestModule = TestModule.default()): List<TestFile> {
|
||||||
val result = mutableListOf<TestFile>()
|
val result = mutableListOf<TestFile>()
|
||||||
val srcFile = source.toFile()
|
val srcFile = source.toFile()
|
||||||
// Remove diagnostic parameters in external tests.
|
// Remove diagnostic parameters in external tests.
|
||||||
val srcText = srcFile.readText().replace(Regex("<!.*?!>(.*?)<!>")) { match -> match.groupValues[1] }
|
val srcText = srcFile.readText().replace(Regex("<!.*?!>(.*?)<!>")) { match -> match.groupValues[1] }
|
||||||
|
|
||||||
var supportModule: TestModule? = null
|
var supportModule: TestModule? = if (srcText.contains("// WITH_COROUTINES")) TestModule.support() else null
|
||||||
if (srcText.contains("// WITH_COROUTINES")) {
|
|
||||||
supportModule = TestModule.support()
|
|
||||||
result.add(TestFile("helpers.kt", "$outputDirectory/helpers.kt",
|
|
||||||
createTextForHelpers(), supportModule))
|
|
||||||
}
|
|
||||||
|
|
||||||
val defaultModule = TestModule.default()
|
|
||||||
val moduleMatcher = MODULE_PATTERN.matcher(srcText)
|
val moduleMatcher = MODULE_PATTERN.matcher(srcText)
|
||||||
val fileMatcher = FILE_PATTERN.matcher(srcText)
|
val fileMatcher = FILE_PATTERN.matcher(srcText)
|
||||||
var nextModuleExists = moduleMatcher.find()
|
var nextModuleExists = moduleMatcher.find()
|
||||||
@@ -47,6 +44,7 @@ fun buildCompileList(source: Path, outputDirectory: String): List<TestFile> {
|
|||||||
|
|
||||||
if (!nextModuleExists && !nextFileExists) {
|
if (!nextModuleExists && !nextFileExists) {
|
||||||
// There is only one file in the input
|
// There is only one file in the input
|
||||||
|
if (supportModule != null) defaultModule.dependencies.add(supportModule.name)
|
||||||
result.add(TestFile(srcFile.name, "$outputDirectory/${srcFile.name}", srcText, defaultModule))
|
result.add(TestFile(srcFile.name, "$outputDirectory/${srcFile.name}", srcText, defaultModule))
|
||||||
} else {
|
} else {
|
||||||
// There are several files
|
// There are several files
|
||||||
@@ -62,18 +60,22 @@ fun buildCompileList(source: Path, outputDirectory: String): List<TestFile> {
|
|||||||
if (moduleName != null) {
|
if (moduleName != null) {
|
||||||
moduleName = moduleName.trim { it <= ' ' }
|
moduleName = moduleName.trim { it <= ' ' }
|
||||||
val dependencies = mutableListOf<String>().apply {
|
val dependencies = mutableListOf<String>().apply {
|
||||||
addAll(moduleDependencies.parseModuleList())
|
addAll(moduleDependencies.parseModuleList()
|
||||||
if (supportModule != null && !contains("support")) {
|
.map { if (it != "support") "${srcFile.name}.$it" else it }
|
||||||
add("support")
|
)
|
||||||
}
|
|
||||||
}.map {
|
|
||||||
if (it != "support") "${srcFile.name}.$it" else it
|
|
||||||
}
|
}
|
||||||
module = TestModule("${srcFile.name}.$moduleName",
|
module = TestModule(
|
||||||
dependencies,
|
"${srcFile.name}.$moduleName",
|
||||||
moduleFriends.parseModuleList().map { "${srcFile.name}.$it" })
|
dependencies,
|
||||||
|
mutableListOf<String>().apply {
|
||||||
|
addAll(moduleFriends.parseModuleList().map { "${srcFile.name}.$it" })
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (supportModule != null && !module.dependencies.contains("support")) {
|
||||||
|
module.dependencies.add("support")
|
||||||
|
}
|
||||||
|
|
||||||
nextModuleExists = moduleMatcher.find()
|
nextModuleExists = moduleMatcher.find()
|
||||||
while (nextFileExists) {
|
while (nextFileExists) {
|
||||||
@@ -112,8 +114,8 @@ private fun String?.parseModuleList() = this
|
|||||||
*/
|
*/
|
||||||
data class TestModule(
|
data class TestModule(
|
||||||
val name: String,
|
val name: String,
|
||||||
val dependencies: List<String>,
|
val dependencies: MutableList<String>,
|
||||||
val friends: List<String>
|
val friends: MutableList<String>
|
||||||
) {
|
) {
|
||||||
val files = mutableListOf<TestFile>()
|
val files = mutableListOf<TestFile>()
|
||||||
fun isDefaultModule() = this.name == "default" || name.endsWith(".main")
|
fun isDefaultModule() = this.name == "default" || name.endsWith(".main")
|
||||||
@@ -123,8 +125,8 @@ data class TestModule(
|
|||||||
fun versionFiles(version: Int) = this.files.filter { it.version == null || it.version == version }
|
fun versionFiles(version: Int) = this.files.filter { it.version == null || it.version == version }
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@JvmStatic fun default() = TestModule("default", emptyList(), emptyList())
|
@JvmStatic fun default() = TestModule("default", mutableListOf(), mutableListOf())
|
||||||
@JvmStatic fun support() = TestModule("support", emptyList(), emptyList())
|
@JvmStatic fun support() = TestModule("support", mutableListOf(), mutableListOf())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user