[Test] Align lines in TestFile with lines in real testdata file

This commit is contained in:
Dmitriy Novozhilov
2021-01-26 09:28:58 +03:00
parent 60e0831c11
commit e3ab3d6be3
2 changed files with 28 additions and 12 deletions
@@ -60,16 +60,26 @@ class GlobalMetadataInfoHandler(
if (file.isAdditional) continue
processors.forEach { it.processMetaInfos(module, file) }
val codeMetaInfos = infosPerFile.getValue(file)
val fileBuilder = StringBuilder()
CodeMetaInfoRenderer.renderTagsToText(
builder,
fileBuilder,
codeMetaInfos,
testServices.sourceFileProvider.getContentOfSourceFile(file)
)
builder.append(fileBuilder.stripAdditionalEmptyLines(file))
}
}
val actualText = builder.toString()
testServices.assertions.assertEqualsToFile(moduleStructure.originalTestDataFiles.single(), actualText)
}
private fun StringBuilder.stripAdditionalEmptyLines(file: TestFile): CharSequence {
return if (file.startLineNumberInOriginalFile != 0) {
this.removePrefix((1..file.startLineNumberInOriginalFile).joinToString(separator = "") { "\n" })
} else {
this.toString()
}
}
}
val TestServices.globalMetadataInfoHandler: GlobalMetadataInfoHandler by TestServices.testServiceAccessor()
@@ -97,7 +97,7 @@ class ModuleStructureExtractorImpl(
private var currentFileName: String? = null
private var firstFileInModule: Boolean = true
private var linesOfCurrentFile = mutableListOf<String>()
private var startLineNumberOfCurrentFile = 0
private var endLineNumberOfLastFile = -1
private var directivesBuilder = RegisteredDirectivesParser(directivesContainer, assertions)
private var moduleDirectivesBuilder: RegisteredDirectivesParser = directivesBuilder
@@ -123,7 +123,7 @@ class ModuleStructureExtractorImpl(
linesOfCurrentFile.add(line)
}
}
finishModule()
finishModule(lineNumber = -1)
val sortedModules = sortModules(modules)
checkCycles(modules)
return TestModuleStructureImpl(sortedModules, testDataFiles)
@@ -170,7 +170,7 @@ class ModuleStructureExtractorImpl(
* There was previous module, so we should save it
*/
if (currentModuleName != null) {
finishModule()
finishModule(lineNumber)
} else {
finishGlobalDirectives()
}
@@ -213,12 +213,11 @@ class ModuleStructureExtractorImpl(
}
ModuleStructureDirectives.FILE -> {
if (currentFileName != null) {
finishFile()
finishFile(lineNumber)
} else {
resetFileCaches()
}
currentFileName = (values.first() as String).also(::validateFileName)
startLineNumberOfCurrentFile = lineNumber
}
else -> return false
}
@@ -275,8 +274,8 @@ class ModuleStructureExtractorImpl(
error("Directive $this has $applicability applicability but it declared in $context")
}
private fun finishModule() {
finishFile()
private fun finishModule(lineNumber: Int) {
finishFile(lineNumber)
val isImplicitModule = currentModuleName == null
val moduleDirectives = moduleDirectivesBuilder.build() + testServices.defaultDirectives + globalDirectives
moduleDirectives.forEach { it.checkDirectiveApplicability(contextIsGlobal = isImplicitModule, contextIsModule = true) }
@@ -323,7 +322,8 @@ class ModuleStructureExtractorImpl(
}
}
private fun finishFile() {
@OptIn(ExperimentalStdlibApi::class)
private fun finishFile(lineNumber: Int) {
val actualDefaultFileName = if (currentModuleName == null) {
defaultFileName
} else {
@@ -336,17 +336,24 @@ class ModuleStructureExtractorImpl(
val directives = fileDirectivesBuilder?.build()?.also { directives ->
directives.forEach { it.checkDirectiveApplicability(contextIsFile = true) }
}
val fileContent = buildString {
for (i in 0 until endLineNumberOfLastFile) {
appendLine()
}
appendLine(linesOfCurrentFile.joinToString("\n"))
}
filesOfCurrentModule.add(
TestFile(
relativePath = filename,
originalContent = linesOfCurrentFile.joinToString(separator = "\n", postfix = "\n"),
originalContent = fileContent,
originalFile = currentTestDataFile,
startLineNumberInOriginalFile = startLineNumberOfCurrentFile,
startLineNumberInOriginalFile = endLineNumberOfLastFile,
isAdditional = false,
directives = directives ?: RegisteredDirectives.Empty
)
)
firstFileInModule = false
endLineNumberOfLastFile = lineNumber - 1
resetFileCaches()
}
@@ -376,7 +383,6 @@ class ModuleStructureExtractorImpl(
moduleDirectivesBuilder = directivesBuilder
}
currentFileName = null
startLineNumberOfCurrentFile = 0
resetDirectivesBuilder()
fileDirectivesBuilder = directivesBuilder
}