Allow different diagnostics in Javac tests - workaround for IDEA-184289

This commit is contained in:
Nikolay Krasko
2017-12-26 21:06:30 +03:00
parent 27b3cdf1fa
commit 4c09a6cf06
3 changed files with 84 additions and 12 deletions
@@ -0,0 +1,47 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// FILE: a/a.java
package a;
public class a {}
// FILE: a/b.java
package a;
public class b {
public void a_b() {}
}
// FILE: test/a.java
package test;
public class a {}
// FILE: test/d.java
package test;
public class d {
public a.b getB() { return null; }
}
// FILE: b.kt
package test
val x = d().getB()
// FILE: test/c.java
package test;
import a.a;
public class c {
public static a getA() { return null; }
}
// FILE: c.kt
package test
fun foo() {
val a = c.getA()
a.<!UNRESOLVED_REFERENCE!>a<!>
a.<!UNRESOLVED_REFERENCE!>a<!>()
}
@@ -141,18 +141,8 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
}
var exceptionFromDescriptorValidation: Throwable? = null
val originalTestFile = testDataFile.readText()
try {
val postfix = when {
InTextDirectivesUtils.isDirectiveDefined(originalTestFile, "// JAVAC_EXPECTED_FILE") &&
environment.configuration.getBoolean(JVMConfigurationKeys.USE_JAVAC) -> ".javac.txt"
InTextDirectivesUtils.isDirectiveDefined(originalTestFile, "// NI_EXPECTED_FILE") &&
files.any { it.newInferenceEnabled } && !USE_OLD_INFERENCE_DIAGNOSTICS_FOR_NI -> ".ni.txt"
else -> ".txt"
}
val expectedFile = File(FileUtil.getNameWithoutExtension(testDataFile.absolutePath) + postfix)
val expectedFile = getExpectedDescriptorFile(testDataFile, files)
validateAndCompareDescriptorWithFile(expectedFile, files, modules)
}
catch (e: Throwable) {
@@ -190,7 +180,7 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
exceptionFromDynamicCallDescriptorsValidation = e
}
KotlinTestUtils.assertEqualsToFile(testDataFile, actualText.toString())
KotlinTestUtils.assertEqualsToFile(getExpectedDiagnosticsFile(testDataFile), actualText.toString())
assertTrue("Diagnostics mismatch. See the output above", ok)
@@ -202,6 +192,26 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
performAdditionalChecksAfterDiagnostics(testDataFile, files, groupedByModule, modules, moduleBindings)
}
protected open fun getExpectedDiagnosticsFile(testDataFile: File): File {
return testDataFile
}
protected open fun getExpectedDescriptorFile(testDataFile: File, files: List<TestFile>): File {
val originalTestFileText = testDataFile.readText()
val postfix = when {
InTextDirectivesUtils.isDirectiveDefined(originalTestFileText, "// JAVAC_EXPECTED_FILE") &&
environment.configuration.getBoolean(JVMConfigurationKeys.USE_JAVAC) -> ".javac.txt"
InTextDirectivesUtils.isDirectiveDefined(originalTestFileText, "// NI_EXPECTED_FILE") &&
files.any { it.newInferenceEnabled } && !USE_OLD_INFERENCE_DIAGNOSTICS_FOR_NI -> ".ni.txt"
else -> ".txt"
}
return File(FileUtil.getNameWithoutExtension(testDataFile.absolutePath) + postfix)
}
protected open fun performAdditionalChecksAfterDiagnostics(
testDataFile: File,
testFiles: List<TestFile>,
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.checkers.javac
import org.jetbrains.kotlin.checkers.AbstractDiagnosticsTest
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.test.KotlinTestUtils
import java.io.File
abstract class AbstractJavacDiagnosticsTest : AbstractDiagnosticsTest() {
@@ -39,5 +40,19 @@ abstract class AbstractJavacDiagnosticsTest : AbstractDiagnosticsTest() {
super.doTest(path)
}
override fun getExpectedDiagnosticsFile(testDataFile: File): File {
val suffix = if (useJavac) ".WithJavac.txt" else ".WithoutJavac.txt"
val specialFile = File(testDataFile.parent, testDataFile.name + suffix)
return specialFile.takeIf { it.exists() } ?: super.getExpectedDiagnosticsFile(testDataFile)
}
override fun createTestFiles(file: File, expectedText: String, modules: MutableMap<String, ModuleAndDependencies>?): List<TestFile> {
val specialFile = getExpectedDiagnosticsFile(file)
if (file.path == specialFile.path) {
return super.createTestFiles(file, expectedText, modules)
}
return super.createTestFiles(specialFile, KotlinTestUtils.doLoadFile(specialFile), modules)
}
}