AbstractFirPsiCheckerTest: do partial error diagnostic comparison for some cases

This commit is contained in:
Mikhail Glukhikh
2019-12-09 13:11:43 +03:00
parent 4b251eb986
commit fc117466a8
51 changed files with 110 additions and 2 deletions
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
fun <T> checkSubtype(t: T) = t
fun test() : Unit {
@@ -1 +1,3 @@
// FIR_COMPARISON
fun <T> foo<error><SOME_TYPE></error> () {}
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
// LANGUAGE_VERSION: 1.4
fun main(<warning descr="[UNUSED_PARAMETER] Parameter 'args' is never used">args</warning>: Array<String>) {
@@ -1,3 +1,5 @@
// FIR_COMPARISON
// LANGUAGE_VERSION: 1.3
fun main(args: Array<String>) {
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
sealed <warning descr="[REDUNDANT_MODIFIER] Modifier 'abstract' is redundant because 'sealed' is present">abstract</warning> class First
<warning descr="[REDUNDANT_MODIFIER] Modifier 'abstract' is redundant because 'sealed' is present">abstract</warning> sealed class Second
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
package a
import java.*
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
fun test(<warning textAttributesKey="NOT_USED_ELEMENT_ATTRIBUTES">unusedParam</warning>: Int) { // UNUSED_PARAMETER
val str = ":)"
str <warning textAttributesKey="NOT_USED_ELEMENT_ATTRIBUTES">as String</warning> // USELESS_CAST
@@ -1,3 +1,5 @@
// FIR_COMPARISON
// KT-3750 When without else
enum class A {
@@ -1,3 +1,5 @@
// FIR_COMPARISON
package a.b
class String
@@ -1,3 +1,5 @@
// FIR_COMPARISON
class C {
<error>val x</error> = 1
<error>fun getX()</error> = 1
@@ -1,3 +1,5 @@
// FIR_COMPARISON
class C {
companion object {
<error>val x</error> = 1
@@ -1,3 +1,5 @@
// FIR_COMPARISON
fun foo() {
class C {
<error>val x</error> = 1
@@ -1,3 +1,5 @@
// FIR_COMPARISON
class B {
class C {
<error>val x</error> = 1
@@ -1,3 +1,5 @@
// FIR_COMPARISON
object C {
<error>val x</error> = 1
<error>fun getX()</error> = 1
@@ -1,3 +1,5 @@
// FIR_COMPARISON
fun foo() =
object {
<error>val x</error> = 1
@@ -1,2 +1,4 @@
// FIR_COMPARISON
<error>val x</error> = 1
<error>fun getX()</error> = 1
@@ -1,3 +1,5 @@
// FIR_COMPARISON
// RUNTIME
@file:JvmName("TopLevelMultifile")
@file:JvmMultifileClass
@@ -1,3 +1,5 @@
// FIR_COMPARISON
interface T {
<error descr="[CONFLICTING_JVM_DECLARATIONS] Platform declaration clash: The following declarations have the same JVM signature (foo(Ljava/util/List;)V):
fun foo(l: List<Int>): Unit defined in T
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
fun baz(s: String?): Int {
return if (s == null) {
""
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
fun baz(s: String?): Int {
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
// See KT-15901
<info>enum</info> class En { A }
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
package test2
<info descr="null">enum</info> class En { A, B, С }
@@ -1,3 +1,5 @@
// FIR_COMPARISON
interface A {
fun foo()
}
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
fun refs() {
var <warning>a</warning> = 1
val <warning>v</warning> = {
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
interface I1
interface I2
interface I3
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
fun foo(s: String) = s.length
@@ -1,3 +1,5 @@
// FIR_COMPARISON
fun test() {
var a : Any? = null
if (a is Any) else a = null;
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
fun main(args: Array<String>) {
String.class<EOLError descr="Name expected"></EOLError>
}
@@ -1,3 +1,5 @@
// FIR_COMPARISON
class A
fun f() {
@@ -1,3 +1,5 @@
// FIR_COMPARISON
class A
fun f() {
@@ -1,3 +1,5 @@
// FIR_COMPARISON
val p = 1 < <error>class A {
fun f() {
f()
@@ -1 +1,3 @@
// FIR_COMPARISON
fun g() = 1 < <error>class A</error>
@@ -1,3 +1,5 @@
// FIR_COMPARISON
fun f(<warning>i</warning>: Int = 3 < <error>class A {
fun f() {
f()
@@ -1,3 +1,5 @@
// FIR_COMPARISON
data class XY(val x: Int, val y: Int)
fun convert(xy: XY, f: (XY) -> Int) = f(xy)
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
class `A$B` {
class `$$$` {
class `$`
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
fun <K, V> intercept(<warning>block</warning>: (key: K, next: (K) -> V, K) -> V) {
}
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
fun foo1() : (Int) -> Int = { x: Int -> x }
fun foo() {
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
fun set(<warning>key</warning> : String, <warning>value</warning> : String) {
val a : String? = ""
when (a) {
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
enum class ProtocolState {
WAITING {
override fun signal() = ProtocolState.TALKING
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
enum class ProtocolState {
WAITING {
override fun signal() = ProtocolState.TALKING
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
import java.util.Collections
fun <T> checkSubtype(t: T) = t
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
abstract class XXX {
abstract val a : Int get
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
class Foo()
fun test() {
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
class Command() {}
fun parse(<warning>cmd</warning>: String): Command? { return null }
+2
View File
@@ -1,3 +1,5 @@
// FIR_COMPARISON
// JET-72 Type inference doesn't work when iterating over ArrayList
import java.util.ArrayList
@@ -1,3 +1,5 @@
// FIR_COMPARISON
fun box() {
val a : C = C()
a.foo()
@@ -1,3 +1,5 @@
// FIR_COMPARISON
fun <T> checkSubtype(t: T) = t
class Foo(var bar : Int, var barr : Int, var barrr : Int) {
@@ -1,3 +1,5 @@
// FIR_COMPARISON
fun Any.<warning>equals</warning>(<warning>other</warning> : Any?) : Boolean = true
fun main(args: Array<String>) {
@@ -1,3 +1,5 @@
// FIR_COMPARISON
interface Bar {
fun <T> T.bar() {}
}
@@ -1,3 +1,5 @@
// FIR_COMPARISON
interface A
open class B(<warning>i</warning>: Int, <warning>a</warning>: A)
@@ -9,6 +9,8 @@ import com.intellij.rt.execution.junit.FileComparisonFailure
import org.jetbrains.kotlin.idea.fir.FirResolution
import org.jetbrains.kotlin.idea.test.configureCompilerOptions
import org.jetbrains.kotlin.idea.test.rollbackCompilerOptions
import org.jetbrains.kotlin.test.InTextDirectivesUtils
import java.io.File
abstract class AbstractFirPsiCheckerTest : AbstractPsiCheckerTest() {
override fun setUp() {
@@ -28,11 +30,17 @@ abstract class AbstractFirPsiCheckerTest : AbstractPsiCheckerTest() {
): Long {
val file = file
val configured = configureCompilerOptions(file.text, project, module)
val doComparison = InTextDirectivesUtils.isDirectiveDefined(myFixture.file.text, "FIR_COMPARISON")
return try {
myFixture.checkHighlighting(checkWarnings, checkInfos, checkWeakWarnings)
} catch (e: FileComparisonFailure) {
// NB: yet we do not actually compare highlighting
0
if (doComparison) {
// Even this is very partial check (only error compatibility, no warnings / infos)
throw FileComparisonFailure(e.message, e.expected, e.actual, File(e.filePath).absolutePath)
} else {
// Here we just check that we haven't crashed due to exception
0
}
} finally {
if (configured) {
rollbackCompilerOptions(project, module)