From e3ab3d6be387aa2be3fef79091a59c6a8655c9e3 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Tue, 26 Jan 2021 09:28:58 +0300 Subject: [PATCH] [Test] Align lines in TestFile with lines in real testdata file --- .../services/GlobalMetadataInfoHandler.kt | 12 +++++++- .../impl/ModuleStructureExtractorImpl.kt | 28 +++++++++++-------- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/services/GlobalMetadataInfoHandler.kt b/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/services/GlobalMetadataInfoHandler.kt index b6a3517a678..f3b38b30367 100644 --- a/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/services/GlobalMetadataInfoHandler.kt +++ b/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/services/GlobalMetadataInfoHandler.kt @@ -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() diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/impl/ModuleStructureExtractorImpl.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/impl/ModuleStructureExtractorImpl.kt index 517d2fa470f..aa6beb1b97a 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/impl/ModuleStructureExtractorImpl.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/impl/ModuleStructureExtractorImpl.kt @@ -97,7 +97,7 @@ class ModuleStructureExtractorImpl( private var currentFileName: String? = null private var firstFileInModule: Boolean = true private var linesOfCurrentFile = mutableListOf() - 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 }