[TEST] Support module step directives in TestModel parser

This commit is contained in:
Roman Artemev
2021-12-13 17:14:50 +03:00
committed by teamcity
parent e47871f98b
commit 5ba6ca4c16
@@ -38,11 +38,23 @@ class ModuleInfo(val moduleName: String) {
abstract fun execute(testDirectory: File, sourceDirectory: File) abstract fun execute(testDirectory: File, sourceDirectory: File)
} }
class ModuleStep(val id: Int, val dependencies: Collection<String>, val dirtyFiles: Collection<String>, val modifications: List<Modification>) class ModuleStep(
val id: Int,
val dependencies: Collection<String>,
val dirtyFiles: Collection<String>,
val modifications: List<Modification>,
val directives: Set<StepDirectives>
)
val steps = mutableListOf<ModuleStep>() val steps = mutableListOf<ModuleStep>()
} }
enum class StepDirectives(val mnemonic: String) {
FAST_PATH_UPDATE("FP")
}
const val MODULES_LIST = "MODULES" const val MODULES_LIST = "MODULES"
const val PROJECT_INFO_FILE = "project.info" const val PROJECT_INFO_FILE = "project.info"
const val MODULE_INFO_FILE = "module.info" const val MODULE_INFO_FILE = "module.info"
@@ -183,10 +195,18 @@ class ModuleInfoParser(infoFile: File) : InfoParser<ModuleInfo>(infoFile) {
return modifications return modifications
} }
private fun MutableSet<StepDirectives>.parseStepFlags(flags: String) {
val tokens = flags.trim().split(" ").map { it.trim() }
for (directive in StepDirectives.values()) {
if (directive.mnemonic in tokens) add(directive)
}
}
private fun parseStep(stepId: Int): ModuleInfo.ModuleStep { private fun parseStep(stepId: Int): ModuleInfo.ModuleStep {
val dependencies = mutableSetOf<String>() val dependencies = mutableSetOf<String>()
val dirtyFiles = mutableSetOf<String>() val dirtyFiles = mutableSetOf<String>()
val modifications = mutableListOf<ModuleInfo.Modification>() val modifications = mutableListOf<ModuleInfo.Modification>()
val directives = mutableSetOf<StepDirectives>()
loop { line -> loop { line ->
if (line.matches(STEP_PATTERN.toRegex())) if (line.matches(STEP_PATTERN.toRegex()))
@@ -201,12 +221,13 @@ class ModuleInfoParser(infoFile: File) : InfoParser<ModuleInfo>(infoFile) {
"dependencies" -> line.substring(opIndex + 1).split(",").filter { it.isNotBlank() }.forEach { dependencies.add(it.trim()) } "dependencies" -> line.substring(opIndex + 1).split(",").filter { it.isNotBlank() }.forEach { dependencies.add(it.trim()) }
"dirty" -> line.substring(opIndex + 1).split(",").filter { it.isNotBlank() }.forEach { dirtyFiles.add(it.trim()) } "dirty" -> line.substring(opIndex + 1).split(",").filter { it.isNotBlank() }.forEach { dirtyFiles.add(it.trim()) }
"modifications" -> modifications.addAll(parseModifications()) "modifications" -> modifications.addAll(parseModifications())
"flags" -> directives.parseStepFlags(line.substring(opIndex + 1))
else -> println(diagnosticMessage("Unknown op $op", line)) else -> println(diagnosticMessage("Unknown op $op", line))
} }
false false
} }
return ModuleInfo.ModuleStep(stepId, dependencies, dirtyFiles, modifications) return ModuleInfo.ModuleStep(stepId, dependencies, dirtyFiles, modifications, directives)
} }
override fun parse(entryName: String): ModuleInfo { override fun parse(entryName: String): ModuleInfo {