AbstractFirPsiCheckerTest: do partial error diagnostic comparison for some cases
This commit is contained in:
Vendored
+2
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
fun <T> checkSubtype(t: T) = t
|
fun <T> checkSubtype(t: T) = t
|
||||||
|
|
||||||
fun test() : Unit {
|
fun test() : Unit {
|
||||||
|
|||||||
@@ -1 +1,3 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
fun <T> foo<error><SOME_TYPE></error> () {}
|
fun <T> foo<error><SOME_TYPE></error> () {}
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
// LANGUAGE_VERSION: 1.4
|
// LANGUAGE_VERSION: 1.4
|
||||||
|
|
||||||
fun main(<warning descr="[UNUSED_PARAMETER] Parameter 'args' is never used">args</warning>: Array<String>) {
|
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
|
// LANGUAGE_VERSION: 1.3
|
||||||
|
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
sealed <warning descr="[REDUNDANT_MODIFIER] Modifier 'abstract' is redundant because 'sealed' is present">abstract</warning> class First
|
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
|
<warning descr="[REDUNDANT_MODIFIER] Modifier 'abstract' is redundant because 'sealed' is present">abstract</warning> sealed class Second
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
package a
|
package a
|
||||||
|
|
||||||
import java.*
|
import java.*
|
||||||
|
|||||||
Vendored
+2
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
fun test(<warning textAttributesKey="NOT_USED_ELEMENT_ATTRIBUTES">unusedParam</warning>: Int) { // UNUSED_PARAMETER
|
fun test(<warning textAttributesKey="NOT_USED_ELEMENT_ATTRIBUTES">unusedParam</warning>: Int) { // UNUSED_PARAMETER
|
||||||
val str = ":)"
|
val str = ":)"
|
||||||
str <warning textAttributesKey="NOT_USED_ELEMENT_ATTRIBUTES">as String</warning> // USELESS_CAST
|
str <warning textAttributesKey="NOT_USED_ELEMENT_ATTRIBUTES">as String</warning> // USELESS_CAST
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
// KT-3750 When without else
|
// KT-3750 When without else
|
||||||
|
|
||||||
enum class A {
|
enum class A {
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
package a.b
|
package a.b
|
||||||
|
|
||||||
class String
|
class String
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
class C {
|
class C {
|
||||||
<error>val x</error> = 1
|
<error>val x</error> = 1
|
||||||
<error>fun getX()</error> = 1
|
<error>fun getX()</error> = 1
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
class C {
|
class C {
|
||||||
companion object {
|
companion object {
|
||||||
<error>val x</error> = 1
|
<error>val x</error> = 1
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
fun foo() {
|
fun foo() {
|
||||||
class C {
|
class C {
|
||||||
<error>val x</error> = 1
|
<error>val x</error> = 1
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
class B {
|
class B {
|
||||||
class C {
|
class C {
|
||||||
<error>val x</error> = 1
|
<error>val x</error> = 1
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
object C {
|
object C {
|
||||||
<error>val x</error> = 1
|
<error>val x</error> = 1
|
||||||
<error>fun getX()</error> = 1
|
<error>fun getX()</error> = 1
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
fun foo() =
|
fun foo() =
|
||||||
object {
|
object {
|
||||||
<error>val x</error> = 1
|
<error>val x</error> = 1
|
||||||
|
|||||||
@@ -1,2 +1,4 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
<error>val x</error> = 1
|
<error>val x</error> = 1
|
||||||
<error>fun getX()</error> = 1
|
<error>fun getX()</error> = 1
|
||||||
Vendored
+2
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
// RUNTIME
|
// RUNTIME
|
||||||
@file:JvmName("TopLevelMultifile")
|
@file:JvmName("TopLevelMultifile")
|
||||||
@file:JvmMultifileClass
|
@file:JvmMultifileClass
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
interface T {
|
interface T {
|
||||||
<error descr="[CONFLICTING_JVM_DECLARATIONS] Platform declaration clash: The following declarations have the same JVM signature (foo(Ljava/util/List;)V):
|
<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
|
fun foo(l: List<Int>): Unit defined in T
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
fun baz(s: String?): Int {
|
fun baz(s: String?): Int {
|
||||||
return if (s == null) {
|
return if (s == null) {
|
||||||
""
|
""
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
|
// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
|
||||||
|
|
||||||
fun baz(s: String?): Int {
|
fun baz(s: String?): Int {
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
// See KT-15901
|
// See KT-15901
|
||||||
|
|
||||||
<info>enum</info> class En { A }
|
<info>enum</info> class En { A }
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
package test2
|
package test2
|
||||||
|
|
||||||
<info descr="null">enum</info> class En { A, B, С }
|
<info descr="null">enum</info> class En { A, B, С }
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
interface A {
|
interface A {
|
||||||
fun foo()
|
fun foo()
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
fun refs() {
|
fun refs() {
|
||||||
var <warning>a</warning> = 1
|
var <warning>a</warning> = 1
|
||||||
val <warning>v</warning> = {
|
val <warning>v</warning> = {
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
interface I1
|
interface I1
|
||||||
interface I2
|
interface I2
|
||||||
interface I3
|
interface I3
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
|
// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
|
||||||
|
|
||||||
fun foo(s: String) = s.length
|
fun foo(s: String) = s.length
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
var a : Any? = null
|
var a : Any? = null
|
||||||
if (a is Any) else a = null;
|
if (a is Any) else a = null;
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
String.class<EOLError descr="Name expected"></EOLError>
|
String.class<EOLError descr="Name expected"></EOLError>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
class A
|
class A
|
||||||
|
|
||||||
fun f() {
|
fun f() {
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
class A
|
class A
|
||||||
|
|
||||||
fun f() {
|
fun f() {
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
val p = 1 < <error>class A {
|
val p = 1 < <error>class A {
|
||||||
fun f() {
|
fun f() {
|
||||||
f()
|
f()
|
||||||
|
|||||||
@@ -1 +1,3 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
fun g() = 1 < <error>class A</error>
|
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(<warning>i</warning>: Int = 3 < <error>class A {
|
||||||
fun f() {
|
fun f() {
|
||||||
f()
|
f()
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
data class XY(val x: Int, val y: Int)
|
data class XY(val x: Int, val y: Int)
|
||||||
|
|
||||||
fun convert(xy: XY, f: (XY) -> Int) = f(xy)
|
fun convert(xy: XY, f: (XY) -> Int) = f(xy)
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
class `A$B` {
|
class `A$B` {
|
||||||
class `$$$` {
|
class `$$$` {
|
||||||
class `$`
|
class `$`
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
fun <K, V> intercept(<warning>block</warning>: (key: K, next: (K) -> V, K) -> V) {
|
fun <K, V> intercept(<warning>block</warning>: (key: K, next: (K) -> V, K) -> V) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
fun foo1() : (Int) -> Int = { x: Int -> x }
|
fun foo1() : (Int) -> Int = { x: Int -> x }
|
||||||
|
|
||||||
fun foo() {
|
fun foo() {
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
fun set(<warning>key</warning> : String, <warning>value</warning> : String) {
|
fun set(<warning>key</warning> : String, <warning>value</warning> : String) {
|
||||||
val a : String? = ""
|
val a : String? = ""
|
||||||
when (a) {
|
when (a) {
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
enum class ProtocolState {
|
enum class ProtocolState {
|
||||||
WAITING {
|
WAITING {
|
||||||
override fun signal() = ProtocolState.TALKING
|
override fun signal() = ProtocolState.TALKING
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
enum class ProtocolState {
|
enum class ProtocolState {
|
||||||
WAITING {
|
WAITING {
|
||||||
override fun signal() = ProtocolState.TALKING
|
override fun signal() = ProtocolState.TALKING
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
import java.util.Collections
|
import java.util.Collections
|
||||||
|
|
||||||
fun <T> checkSubtype(t: T) = t
|
fun <T> checkSubtype(t: T) = t
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
abstract class XXX {
|
abstract class XXX {
|
||||||
abstract val a : Int get
|
abstract val a : Int get
|
||||||
|
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
class Foo()
|
class Foo()
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
class Command() {}
|
class Command() {}
|
||||||
|
|
||||||
fun parse(<warning>cmd</warning>: String): Command? { return null }
|
fun parse(<warning>cmd</warning>: String): Command? { return null }
|
||||||
|
|||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
// JET-72 Type inference doesn't work when iterating over ArrayList
|
// JET-72 Type inference doesn't work when iterating over ArrayList
|
||||||
|
|
||||||
import java.util.ArrayList
|
import java.util.ArrayList
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
fun box() {
|
fun box() {
|
||||||
val a : C = C()
|
val a : C = C()
|
||||||
a.foo()
|
a.foo()
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
fun <T> checkSubtype(t: T) = t
|
fun <T> checkSubtype(t: T) = t
|
||||||
|
|
||||||
class Foo(var bar : Int, var barr : Int, var barrr : Int) {
|
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 Any.<warning>equals</warning>(<warning>other</warning> : Any?) : Boolean = true
|
||||||
|
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
interface Bar {
|
interface Bar {
|
||||||
fun <T> T.bar() {}
|
fun <T> T.bar() {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// FIR_COMPARISON
|
||||||
|
|
||||||
interface A
|
interface A
|
||||||
|
|
||||||
open class B(<warning>i</warning>: Int, <warning>a</warning>: 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.fir.FirResolution
|
||||||
import org.jetbrains.kotlin.idea.test.configureCompilerOptions
|
import org.jetbrains.kotlin.idea.test.configureCompilerOptions
|
||||||
import org.jetbrains.kotlin.idea.test.rollbackCompilerOptions
|
import org.jetbrains.kotlin.idea.test.rollbackCompilerOptions
|
||||||
|
import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
abstract class AbstractFirPsiCheckerTest : AbstractPsiCheckerTest() {
|
abstract class AbstractFirPsiCheckerTest : AbstractPsiCheckerTest() {
|
||||||
override fun setUp() {
|
override fun setUp() {
|
||||||
@@ -28,11 +30,17 @@ abstract class AbstractFirPsiCheckerTest : AbstractPsiCheckerTest() {
|
|||||||
): Long {
|
): Long {
|
||||||
val file = file
|
val file = file
|
||||||
val configured = configureCompilerOptions(file.text, project, module)
|
val configured = configureCompilerOptions(file.text, project, module)
|
||||||
|
val doComparison = InTextDirectivesUtils.isDirectiveDefined(myFixture.file.text, "FIR_COMPARISON")
|
||||||
return try {
|
return try {
|
||||||
myFixture.checkHighlighting(checkWarnings, checkInfos, checkWeakWarnings)
|
myFixture.checkHighlighting(checkWarnings, checkInfos, checkWeakWarnings)
|
||||||
} catch (e: FileComparisonFailure) {
|
} catch (e: FileComparisonFailure) {
|
||||||
// NB: yet we do not actually compare highlighting
|
if (doComparison) {
|
||||||
0
|
// 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 {
|
} finally {
|
||||||
if (configured) {
|
if (configured) {
|
||||||
rollbackCompilerOptions(project, module)
|
rollbackCompilerOptions(project, module)
|
||||||
|
|||||||
Reference in New Issue
Block a user