[test] Support dumping rendered diagnostics from multiple modules
This commit is contained in:
committed by
Space Team
parent
d27adf6677
commit
a5c8ecae0b
+35
-24
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.test.frontend.fir.handlers.toMetaInfos
|
|||||||
import org.jetbrains.kotlin.test.model.BinaryArtifactHandler
|
import org.jetbrains.kotlin.test.model.BinaryArtifactHandler
|
||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.services.*
|
import org.jetbrains.kotlin.test.services.*
|
||||||
|
import org.jetbrains.kotlin.test.utils.MultiModuleInfoDumper
|
||||||
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@@ -55,35 +56,45 @@ fun BinaryArtifactHandler<*>.reportKtDiagnostics(module: TestModule, ktDiagnosti
|
|||||||
processModule(module)
|
processModule(module)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun BinaryArtifactHandler<*>.checkFullDiagnosticRender(module: TestModule) {
|
fun BinaryArtifactHandler<*>.checkFullDiagnosticRender() {
|
||||||
if (DiagnosticsDirectives.RENDER_ALL_DIAGNOSTICS_FULL_TEXT !in module.directives) return
|
val dumper = MultiModuleInfoDumper()
|
||||||
|
val moduleStructure = testServices.moduleStructure
|
||||||
val reportedDiagnostics = mutableListOf<String>()
|
var needToVerifyDiagnostics = false
|
||||||
for (testFile in module.files) {
|
for (module in moduleStructure.modules) {
|
||||||
val finder =
|
if (DiagnosticsDirectives.RENDER_ALL_DIAGNOSTICS_FULL_TEXT !in module.directives) continue
|
||||||
SequentialPositionFinder(testServices.sourceFileProvider.getContentOfSourceFile(testFile).byteInputStream().reader())
|
needToVerifyDiagnostics = true
|
||||||
for (metaInfo in testServices.globalMetadataInfoHandler.getReportedMetaInfosForFile(testFile).sortedBy { it.start }) {
|
val reportedDiagnostics = mutableListOf<String>()
|
||||||
when (metaInfo) {
|
for (testFile in module.files) {
|
||||||
is DiagnosticCodeMetaInfo -> metaInfo.diagnostic.let {
|
val finder =
|
||||||
val message = DefaultErrorMessages.render(it)
|
SequentialPositionFinder(testServices.sourceFileProvider.getContentOfSourceFile(testFile).byteInputStream().reader())
|
||||||
val position = DiagnosticUtils.getLineAndColumnRange(it.psiFile, it.textRanges).start
|
for (metaInfo in testServices.globalMetadataInfoHandler.getReportedMetaInfosForFile(testFile).sortedBy { it.start }) {
|
||||||
reportedDiagnostics +=
|
when (metaInfo) {
|
||||||
renderDiagnosticMessage(it.psiFile.name, it.severity, message, position.line, position.column)
|
is DiagnosticCodeMetaInfo -> metaInfo.diagnostic.let {
|
||||||
}
|
val message = DefaultErrorMessages.render(it)
|
||||||
is FirDiagnosticCodeMetaInfo -> metaInfo.diagnostic.let {
|
val position = DiagnosticUtils.getLineAndColumnRange(it.psiFile, it.textRanges).start
|
||||||
val message = RootDiagnosticRendererFactory(it).render(it)
|
reportedDiagnostics +=
|
||||||
val position = finder.findNextPosition(DiagnosticUtils.firstRange(it.textRanges).startOffset, false)
|
renderDiagnosticMessage(it.psiFile.name, it.severity, message, position.line, position.column)
|
||||||
reportedDiagnostics +=
|
}
|
||||||
renderDiagnosticMessage(testFile.relativePath, it.severity, message, position.line, position.column)
|
is FirDiagnosticCodeMetaInfo -> metaInfo.diagnostic.let {
|
||||||
|
val message = RootDiagnosticRendererFactory(it).render(it)
|
||||||
|
val position = finder.findNextPosition(DiagnosticUtils.firstRange(it.textRanges).startOffset, false)
|
||||||
|
reportedDiagnostics +=
|
||||||
|
renderDiagnosticMessage(testFile.relativePath, it.severity, message, position.line, position.column)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (reportedDiagnostics.isNotEmpty()) {
|
||||||
|
reportedDiagnostics.joinTo(dumper.builderForModule(module), separator = "\n\n", postfix = "\n")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
testServices.assertions.assertEqualsToFile(
|
if (needToVerifyDiagnostics) {
|
||||||
File(FileUtil.getNameWithoutExtension(module.files.first().originalFile.absolutePath) + ".diag.txt"),
|
testServices.assertions.assertEqualsToFile(
|
||||||
reportedDiagnostics.joinToString(separator = "\n\n", postfix = "\n")
|
File(FileUtil.getNameWithoutExtension(moduleStructure.originalTestDataFiles.first().absolutePath) + ".diag.txt"),
|
||||||
)
|
dumper.generateResultingDump()
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun renderDiagnosticMessage(fileName: String, severity: Severity, message: String?, line: Int, column: Int): String {
|
private fun renderDiagnosticMessage(fileName: String, severity: Severity, message: String?, line: Int, column: Int): String {
|
||||||
|
|||||||
+3
-2
@@ -23,10 +23,11 @@ class JvmBackendDiagnosticsHandler(testServices: TestServices) : JvmBinaryArtifa
|
|||||||
override fun processModule(module: TestModule, info: BinaryArtifacts.Jvm) {
|
override fun processModule(module: TestModule, info: BinaryArtifacts.Jvm) {
|
||||||
reportDiagnostics(module, info)
|
reportDiagnostics(module, info)
|
||||||
reportKtDiagnostics(module, info)
|
reportKtDiagnostics(module, info)
|
||||||
checkFullDiagnosticRender(module)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {}
|
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {
|
||||||
|
checkFullDiagnosticRender()
|
||||||
|
}
|
||||||
|
|
||||||
private fun reportDiagnostics(module: TestModule, info: BinaryArtifacts.Jvm) {
|
private fun reportDiagnostics(module: TestModule, info: BinaryArtifacts.Jvm) {
|
||||||
val testFiles = module.files.associateBy { "/${it.name}" }
|
val testFiles = module.files.associateBy { "/${it.name}" }
|
||||||
|
|||||||
+3
-2
@@ -15,8 +15,9 @@ import org.jetbrains.kotlin.test.services.*
|
|||||||
class JsBackendDiagnosticsHandler(testServices: TestServices) : KlibArtifactHandler(testServices) {
|
class JsBackendDiagnosticsHandler(testServices: TestServices) : KlibArtifactHandler(testServices) {
|
||||||
override fun processModule(module: TestModule, info: BinaryArtifacts.KLib) {
|
override fun processModule(module: TestModule, info: BinaryArtifacts.KLib) {
|
||||||
reportKtDiagnostics(module, info.reporter)
|
reportKtDiagnostics(module, info.reporter)
|
||||||
checkFullDiagnosticRender(module)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {}
|
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {
|
||||||
|
checkFullDiagnosticRender()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user