Allow different diagnostics in Javac tests - workaround for IDEA-184289
This commit is contained in:
Vendored
+47
@@ -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<!>()
|
||||||
|
}
|
||||||
+22
-12
@@ -141,18 +141,8 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var exceptionFromDescriptorValidation: Throwable? = null
|
var exceptionFromDescriptorValidation: Throwable? = null
|
||||||
val originalTestFile = testDataFile.readText()
|
|
||||||
try {
|
try {
|
||||||
val postfix = when {
|
val expectedFile = getExpectedDescriptorFile(testDataFile, files)
|
||||||
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)
|
|
||||||
validateAndCompareDescriptorWithFile(expectedFile, files, modules)
|
validateAndCompareDescriptorWithFile(expectedFile, files, modules)
|
||||||
}
|
}
|
||||||
catch (e: Throwable) {
|
catch (e: Throwable) {
|
||||||
@@ -190,7 +180,7 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
|
|||||||
exceptionFromDynamicCallDescriptorsValidation = e
|
exceptionFromDynamicCallDescriptorsValidation = e
|
||||||
}
|
}
|
||||||
|
|
||||||
KotlinTestUtils.assertEqualsToFile(testDataFile, actualText.toString())
|
KotlinTestUtils.assertEqualsToFile(getExpectedDiagnosticsFile(testDataFile), actualText.toString())
|
||||||
|
|
||||||
assertTrue("Diagnostics mismatch. See the output above", ok)
|
assertTrue("Diagnostics mismatch. See the output above", ok)
|
||||||
|
|
||||||
@@ -202,6 +192,26 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
|
|||||||
performAdditionalChecksAfterDiagnostics(testDataFile, files, groupedByModule, modules, moduleBindings)
|
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(
|
protected open fun performAdditionalChecksAfterDiagnostics(
|
||||||
testDataFile: File,
|
testDataFile: File,
|
||||||
testFiles: List<TestFile>,
|
testFiles: List<TestFile>,
|
||||||
|
|||||||
+15
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.checkers.javac
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.checkers.AbstractDiagnosticsTest
|
import org.jetbrains.kotlin.checkers.AbstractDiagnosticsTest
|
||||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||||
|
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
abstract class AbstractJavacDiagnosticsTest : AbstractDiagnosticsTest() {
|
abstract class AbstractJavacDiagnosticsTest : AbstractDiagnosticsTest() {
|
||||||
@@ -39,5 +40,19 @@ abstract class AbstractJavacDiagnosticsTest : AbstractDiagnosticsTest() {
|
|||||||
super.doTest(path)
|
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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user