FIR test merging: compare diagnostic files symbol-by-symbol
This commit is contained in:
@@ -41,7 +41,7 @@ abstract class AbstractFir2IrTextTest : AbstractIrTextTestCase() {
|
|||||||
val oldFrontendTextFile = File(oldFrontendTextPath)
|
val oldFrontendTextFile = File(oldFrontendTextPath)
|
||||||
val firTextFile = File(firTextPath)
|
val firTextFile = File(firTextPath)
|
||||||
if (oldFrontendTextFile.exists() && firTextFile.exists()) {
|
if (oldFrontendTextFile.exists() && firTextFile.exists()) {
|
||||||
compareAndMergeFirFileAndOldFrontendFile(oldFrontendTextFile, firTextFile)
|
compareAndMergeFirFileAndOldFrontendFile(oldFrontendTextFile, firTextFile, compareWithTrimming = true)
|
||||||
}
|
}
|
||||||
super.doTest(filePath)
|
super.doTest(filePath)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,16 +12,24 @@ import org.jetbrains.kotlin.test.KotlinTestUtils
|
|||||||
import org.jetbrains.kotlin.test.util.trimTrailingWhitespacesAndAddNewlineAtEOF
|
import org.jetbrains.kotlin.test.util.trimTrailingWhitespacesAndAddNewlineAtEOF
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
fun compareAndMergeFirFileAndOldFrontendFile(oldFrontendTestDataFile: File, frontendIRTestDataFile: File) {
|
fun compareAndMergeFirFileAndOldFrontendFile(
|
||||||
|
oldFrontendTestDataFile: File,
|
||||||
|
frontendIRTestDataFile: File,
|
||||||
|
compareWithTrimming: Boolean = false
|
||||||
|
) {
|
||||||
if (oldFrontendTestDataFile.exists() && frontendIRTestDataFile.exists()) {
|
if (oldFrontendTestDataFile.exists() && frontendIRTestDataFile.exists()) {
|
||||||
val originalLines = oldFrontendTestDataFile.readLines()
|
val originalLines = oldFrontendTestDataFile.readLines()
|
||||||
val firLines = frontendIRTestDataFile.readLines()
|
val firLines = frontendIRTestDataFile.readLines()
|
||||||
val sameDumps = firLines.withIndex().all { (index, line) ->
|
val sameDumps = if (compareWithTrimming) {
|
||||||
val trimmed = line.trim()
|
firLines.withIndex().all { (index, line) ->
|
||||||
val originalTrimmed = originalLines.getOrNull(index)?.trim()
|
val trimmed = line.trim()
|
||||||
trimmed.isEmpty() && originalTrimmed?.isEmpty() != false || trimmed == originalTrimmed
|
val originalTrimmed = originalLines.getOrNull(index)?.trim()
|
||||||
} && originalLines.withIndex().all { (index, line) ->
|
trimmed.isEmpty() && originalTrimmed?.isEmpty() != false || trimmed == originalTrimmed
|
||||||
index < firLines.size || line.trim().isEmpty()
|
} && originalLines.withIndex().all { (index, line) ->
|
||||||
|
index < firLines.size || line.trim().isEmpty()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
firLines == originalLines
|
||||||
}
|
}
|
||||||
if (sameDumps) {
|
if (sameDumps) {
|
||||||
frontendIRTestDataFile.delete()
|
frontendIRTestDataFile.delete()
|
||||||
|
|||||||
Reference in New Issue
Block a user