JVM IR: use correct file for final test output check in debugger tests

Before this change, a test with incorrect .ir.out could pass if the test
execution result was equivalent to the main .out file, which was a bit
confusing.
This commit is contained in:
Alexander Udalov
2020-09-21 19:50:10 +02:00
parent 78483930bc
commit fde7fc6951
2 changed files with 12 additions and 15 deletions
@@ -9,8 +9,6 @@ import com.intellij.debugger.impl.DescriptorTestCase
import com.intellij.debugger.impl.OutputChecker
import com.intellij.execution.configurations.JavaParameters
import com.intellij.execution.process.ProcessOutputTypes
import com.intellij.jarRepository.JarRepositoryManager
import com.intellij.jarRepository.RemoteRepositoryDescription
import com.intellij.openapi.roots.LibraryOrderEntry
import com.intellij.openapi.roots.ModifiableRootModel
import com.intellij.openapi.roots.ModuleRootManager
@@ -23,7 +21,6 @@ import com.intellij.openapi.vfs.VfsUtil
import com.intellij.psi.PsiFile
import com.intellij.testFramework.EdtTestUtil
import com.intellij.xdebugger.XDebugSession
import org.jetbrains.idea.maven.aether.ArtifactKind
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime
import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.idea.debugger.evaluate.KotlinDebuggerCaches
@@ -38,7 +35,6 @@ import org.jetbrains.kotlin.test.KotlinBaseTest.TestFile
import org.jetbrains.kotlin.test.testFramework.runWriteAction
import org.junit.ComparisonFailure
import java.io.File
import org.jetbrains.jps.model.library.JpsMavenRepositoryLibraryDescriptor as JpsMavenRepositoryLibraryDescriptor
internal const val KOTLIN_LIBRARY_NAME = "KotlinLibrary"
internal const val TEST_LIBRARY_NAME = "TestLibrary"
@@ -153,7 +149,7 @@ abstract class KotlinDescriptorTestCase : DescriptorTestCase() {
abstract fun doMultiFileTest(files: TestFiles, preferences: DebuggerPreferences)
override fun initOutputChecker(): OutputChecker {
return KotlinOutputChecker(getTestDirectoryPath(), testAppPath, appOutputPath, useIrBackend())
return KotlinOutputChecker(getTestDirectoryPath(), testAppPath, appOutputPath, useIrBackend(), getExpectedOutputFile())
}
override fun setUpModule() {
@@ -220,9 +216,16 @@ abstract class KotlinDescriptorTestCase : DescriptorTestCase() {
try {
super.checkTestOutput()
} catch (e: ComparisonFailure) {
KotlinTestUtils.assertEqualsToFile(File(getTestDirectoryPath(), getTestName(true) + ".out"), e.actual)
KotlinTestUtils.assertEqualsToFile(getExpectedOutputFile(), e.actual)
}
}
private fun getExpectedOutputFile(): File {
if (useIrBackend()) {
val irOut = File(getTestDirectoryPath(), getTestName(true) + ".ir.out")
if (irOut.exists()) return irOut
}
return File(getTestDirectoryPath(), getTestName(true) + ".out")
}
override fun getData(dataId: String): Any? {
@@ -24,7 +24,8 @@ internal class KotlinOutputChecker(
private val testDir: String,
appPath: String,
outputPath: String,
private val useIrBackend: Boolean
private val useIrBackend: Boolean,
private val expectedOutputFile: File,
) : OutputChecker(appPath, outputPath) {
companion object {
@JvmStatic
@@ -58,14 +59,7 @@ internal class KotlinOutputChecker(
val actual = preprocessBuffer(buildOutputString())
val outDir = File(testDir)
var outFile = File(outDir, "$myTestName.out")
if (useIrBackend) {
val irBackendOutFile = File(outDir, "$myTestName.ir.out")
if (irBackendOutFile.exists()) {
outFile = irBackendOutFile
}
}
var outFile = expectedOutputFile
if (!outFile.exists()) {
if (SystemInfo.isWindows) {