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.debugger.impl.OutputChecker
import com.intellij.execution.configurations.JavaParameters import com.intellij.execution.configurations.JavaParameters
import com.intellij.execution.process.ProcessOutputTypes 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.LibraryOrderEntry
import com.intellij.openapi.roots.ModifiableRootModel import com.intellij.openapi.roots.ModifiableRootModel
import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.ModuleRootManager
@@ -23,7 +21,6 @@ import com.intellij.openapi.vfs.VfsUtil
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
import com.intellij.testFramework.EdtTestUtil import com.intellij.testFramework.EdtTestUtil
import com.intellij.xdebugger.XDebugSession import com.intellij.xdebugger.XDebugSession
import org.jetbrains.idea.maven.aether.ArtifactKind
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime
import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.idea.debugger.evaluate.KotlinDebuggerCaches 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.jetbrains.kotlin.test.testFramework.runWriteAction
import org.junit.ComparisonFailure import org.junit.ComparisonFailure
import java.io.File import java.io.File
import org.jetbrains.jps.model.library.JpsMavenRepositoryLibraryDescriptor as JpsMavenRepositoryLibraryDescriptor
internal const val KOTLIN_LIBRARY_NAME = "KotlinLibrary" internal const val KOTLIN_LIBRARY_NAME = "KotlinLibrary"
internal const val TEST_LIBRARY_NAME = "TestLibrary" internal const val TEST_LIBRARY_NAME = "TestLibrary"
@@ -153,7 +149,7 @@ abstract class KotlinDescriptorTestCase : DescriptorTestCase() {
abstract fun doMultiFileTest(files: TestFiles, preferences: DebuggerPreferences) abstract fun doMultiFileTest(files: TestFiles, preferences: DebuggerPreferences)
override fun initOutputChecker(): OutputChecker { override fun initOutputChecker(): OutputChecker {
return KotlinOutputChecker(getTestDirectoryPath(), testAppPath, appOutputPath, useIrBackend()) return KotlinOutputChecker(getTestDirectoryPath(), testAppPath, appOutputPath, useIrBackend(), getExpectedOutputFile())
} }
override fun setUpModule() { override fun setUpModule() {
@@ -220,9 +216,16 @@ abstract class KotlinDescriptorTestCase : DescriptorTestCase() {
try { try {
super.checkTestOutput() super.checkTestOutput()
} catch (e: ComparisonFailure) { } 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? { override fun getData(dataId: String): Any? {
@@ -24,7 +24,8 @@ internal class KotlinOutputChecker(
private val testDir: String, private val testDir: String,
appPath: String, appPath: String,
outputPath: String, outputPath: String,
private val useIrBackend: Boolean private val useIrBackend: Boolean,
private val expectedOutputFile: File,
) : OutputChecker(appPath, outputPath) { ) : OutputChecker(appPath, outputPath) {
companion object { companion object {
@JvmStatic @JvmStatic
@@ -58,14 +59,7 @@ internal class KotlinOutputChecker(
val actual = preprocessBuffer(buildOutputString()) val actual = preprocessBuffer(buildOutputString())
val outDir = File(testDir) val outDir = File(testDir)
var outFile = File(outDir, "$myTestName.out") var outFile = expectedOutputFile
if (useIrBackend) {
val irBackendOutFile = File(outDir, "$myTestName.ir.out")
if (irBackendOutFile.exists()) {
outFile = irBackendOutFile
}
}
if (!outFile.exists()) { if (!outFile.exists()) {
if (SystemInfo.isWindows) { if (SystemInfo.isWindows) {