[test] Allow files with same names in tests

Introduce a directive that allows compiling different files with
matching names in tests.
This commit is contained in:
Sergej Jaskiewicz
2022-12-01 15:47:41 +01:00
committed by Space Team
parent ee9d9d7b32
commit 672be7ecb5
2 changed files with 13 additions and 1 deletions
@@ -39,6 +39,12 @@ object ModuleStructureDirectives : SimpleDirectivesContainer() {
""".trimIndent()
)
val ALLOW_FILES_WITH_SAME_NAMES by directive(
"""
Allows specifying test files with the same names using the // FILE directive.
""".trimIndent()
)
val TARGET_FRONTEND by stringDirective(
"""
Usage: // TARGET_FRONTEND: {Frontend}
@@ -100,6 +100,8 @@ class ModuleStructureExtractorImpl(
private var linesOfCurrentFile = mutableListOf<String>()
private var endLineNumberOfLastFile = -1
private var allowFilesWithSameNames = false
private var directivesBuilder = RegisteredDirectivesParser(directivesContainer, assertions)
private var moduleDirectivesBuilder: RegisteredDirectivesParser = directivesBuilder
private var fileDirectivesBuilder: RegisteredDirectivesParser? = null
@@ -218,6 +220,9 @@ class ModuleStructureExtractorImpl(
}
currentFileName = (values.first() as String).also(::validateFileName)
}
ModuleStructureDirectives.ALLOW_FILES_WITH_SAME_NAMES -> {
allowFilesWithSameNames = true
}
ModuleStructureDirectives.TARGET_PLATFORM -> {
if (currentModuleTargetPlatform != null) {
assertions.fail { "Target platform already specified twice for module $currentModuleName" }
@@ -367,7 +372,7 @@ class ModuleStructureExtractorImpl(
"module_${currentModuleName}_$defaultFileName"
}
val filename = currentFileName ?: actualDefaultFileName
if (filesOfCurrentModule.any { it.name == filename }) {
if (!allowFilesWithSameNames && filesOfCurrentModule.any { it.name == filename }) {
error("File with name \"$filename\" already defined in module ${currentModuleName ?: actualDefaultFileName}")
}
val directives = fileDirectivesBuilder?.build()?.also { directives ->
@@ -419,6 +424,7 @@ class ModuleStructureExtractorImpl(
moduleDirectivesBuilder = directivesBuilder
}
currentFileName = null
allowFilesWithSameNames = false
resetDirectivesBuilder()
fileDirectivesBuilder = directivesBuilder
}