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