FIR IDE: Allow FIR-specific "after" files for

AbstractHighLevelQuickFixTest.
This commit is contained in:
Mark Punzalan
2021-03-18 22:23:29 +00:00
committed by Ilya Kirillov
parent 14ca2d207d
commit e9298d1d71
57 changed files with 76 additions and 57 deletions
@@ -7,7 +7,9 @@ package org.jetbrains.kotlin.idea.quickfix
import com.intellij.codeInsight.intention.IntentionAction import com.intellij.codeInsight.intention.IntentionAction
import com.intellij.codeInspection.InspectionProfileEntry import com.intellij.codeInspection.InspectionProfileEntry
import com.intellij.openapi.util.io.FileUtil
import org.jetbrains.kotlin.test.uitls.IgnoreTests import org.jetbrains.kotlin.test.uitls.IgnoreTests
import java.io.File
import java.nio.file.Paths import java.nio.file.Paths
@@ -15,7 +17,7 @@ abstract class AbstractHighLevelQuickFixTest : AbstractQuickFixTest() {
override fun doTest(beforeFileName: String) { override fun doTest(beforeFileName: String) {
IgnoreTests.runTestIfEnabledByFileDirective( IgnoreTests.runTestIfEnabledByFileDirective(
Paths.get(beforeFileName), Paths.get(beforeFileName),
enableTestDirective = IgnoreTests.DIRECTIVES.FIR_COMPARISON_MUTLTILINE_COMMENT, enableTestDirective = IgnoreTests.DIRECTIVES.FIR_COMPARISON_MULTILINE_COMMENT,
directivePosition = IgnoreTests.DirectivePosition.LAST_LINE_IN_FILE, directivePosition = IgnoreTests.DirectivePosition.LAST_LINE_IN_FILE,
additionalFilesExtensions = arrayOf("after") additionalFilesExtensions = arrayOf("after")
) { ) {
@@ -23,6 +25,15 @@ abstract class AbstractHighLevelQuickFixTest : AbstractQuickFixTest() {
} }
} }
override fun getAfterFileName(beforeFileName: String): String {
val firAfterFile = File(testPath(beforeFileName + ".fir.after"))
return if (firAfterFile.exists()) {
firAfterFile.name
} else {
super.getAfterFileName(beforeFileName)
}
}
// TODO: Enable these as more actions/inspections are enabled, and/or add more FIR-specific directives // TODO: Enable these as more actions/inspections are enabled, and/or add more FIR-specific directives
override fun checkForUnexpectedErrors() {} override fun checkForUnexpectedErrors() {}
override fun checkAvailableActionsAreExpected(actions: List<IntentionAction>) {} override fun checkAvailableActionsAreExpected(actions: List<IntentionAction>) {}
@@ -170,7 +170,7 @@ object IgnoreTests {
object DIRECTIVES { object DIRECTIVES {
const val FIR_COMPARISON = "// FIR_COMPARISON" const val FIR_COMPARISON = "// FIR_COMPARISON"
const val FIR_COMPARISON_MUTLTILINE_COMMENT = "/* FIR_COMPARISON */" const val FIR_COMPARISON_MULTILINE_COMMENT = "/* FIR_COMPARISON */"
const val IGNORE_FIR = "// IGNORE_FIR" const val IGNORE_FIR = "// IGNORE_FIR"
const val FIX_ME = "// FIX_ME: " const val FIX_ME = "// FIX_ME: "
} }
@@ -2,4 +2,4 @@
class A() { class A() {
<caret>abstract fun foo() {} <caret>abstract fun foo() {}
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
class A() { class A() {
fun foo() {} fun foo() {}
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -8,4 +8,4 @@ class Owner {
<caret>abstract val x: Int <caret>abstract val x: Int
} }
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
class A() { class A() {
<caret>abstract var i : Int <caret>abstract var i : Int
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
abstract class A() { abstract class A() {
<caret>abstract var i : Int <caret>abstract var i : Int
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
class A() { class A() {
<caret>abstract var i : Int = 0 <caret>abstract var i : Int = 0
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
class A() { class A() {
var i : Int = 0 var i : Int = 0
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
public class A() { public class A() {
<caret>abstract var i : Int <caret>abstract var i : Int
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
public abstract class A() { public abstract class A() {
<caret>abstract var i : Int <caret>abstract var i : Int
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -3,4 +3,4 @@ class B {
<caret>abstract val i: Int = 0 <caret>abstract val i: Int = 0
get() = field get() = field
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -3,4 +3,4 @@ class B {
val i: Int = 0 val i: Int = 0
get() = field get() = field
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
class A { class A {
<caret>abstract var i = 0 <caret>abstract var i = 0
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
class A { class A {
<caret>var i = 0 <caret>var i = 0
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -3,4 +3,4 @@ class B {
abstract<caret> var j: Int = 0 abstract<caret> var j: Int = 0
set(v: Int) {} set(v: Int) {}
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -3,4 +3,4 @@ class B {
var j: Int = 0 var j: Int = 0
set(v: Int) {} set(v: Int) {}
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
+1 -1
View File
@@ -7,4 +7,4 @@ enum class E {
abstract fun foo() abstract fun foo()
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
+1 -1
View File
@@ -10,4 +10,4 @@ interface I {
} }
inline class A<caret> : I inline class A<caret> : I
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -8,4 +8,4 @@
object O { object O {
<caret>fun foo() <caret>fun foo()
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
+1 -1
View File
@@ -6,4 +6,4 @@
// ERROR: Function 'foo' must have a body // ERROR: Function 'foo' must have a body
<caret>fun foo() <caret>fun foo()
/* FIR_COMPARISON */ /* FIR_COMPARISON */
+1 -1
View File
@@ -19,4 +19,4 @@ object Impl : D, E {
} }
<caret>class X : D by Impl, E by Impl {} <caret>class X : D by Impl, E by Impl {}
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
sealed class A() { sealed class A() {
fun <caret>i() : Int fun <caret>i() : Int
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
sealed class A() { sealed class A() {
abstract fun <caret>i() : Int abstract fun <caret>i() : Int
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
class A() { class A() {
fun <caret>foo() fun <caret>foo()
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
class A() { class A() {
fun <caret>foo() {} fun <caret>foo() {}
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
+1 -1
View File
@@ -2,4 +2,4 @@
abstract class B() { abstract class B() {
open fun <caret>foo() open fun <caret>foo()
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
+1 -1
View File
@@ -2,4 +2,4 @@
abstract class B() { abstract class B() {
abstract fun <caret>foo() abstract fun <caret>foo()
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -11,4 +11,4 @@ fun foo() {
val test: Some? = Some() val test: Some? = Some()
for (i in <caret>test) { } for (i in <caret>test) { }
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -3,4 +3,4 @@ abstract class My {
abstract var foo: Int abstract var foo: Int
<caret>private set <caret>private set
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -3,4 +3,4 @@ abstract class My {
abstract var foo: Int abstract var foo: Int
set set
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
+1 -1
View File
@@ -4,4 +4,4 @@ class A() {
abstract class <caret>C abstract class <caret>C
} }
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -4,4 +4,4 @@ class A() {
abstract inner class C abstract inner class C
} }
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
+1 -1
View File
@@ -5,4 +5,4 @@ class A() {
} }
} }
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -5,4 +5,4 @@ class A() {
} }
} }
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
class A() { class A() {
<caret>open fun foo() {} <caret>open fun foo() {}
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
open class A() { open class A() {
<caret>open fun foo() {} <caret>open fun foo() {}
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
class A() { class A() {
<caret>open fun foo() {} <caret>open fun foo() {}
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
class A() { class A() {
<caret>fun foo() {} <caret>fun foo() {}
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
public class A() { public class A() {
<caret>open fun foo() {} <caret>open fun foo() {}
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
public open class A() { public open class A() {
<caret>open fun foo() {} <caret>open fun foo() {}
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -2,4 +2,4 @@
@Deprecated("") class A() { @Deprecated("") class A() {
<caret>open fun foo() {} <caret>open fun foo() {}
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -3,4 +3,4 @@
open class A() { open class A() {
open fun foo() {} open fun foo() {}
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -3,4 +3,4 @@ open class My {
open var foo = 42 open var foo = 42
<caret>private set <caret>private set
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -3,4 +3,4 @@ open class My {
var foo = 42 var foo = 42
<caret>private set <caret>private set
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -3,4 +3,4 @@ open class My {
open var foo = 42 open var foo = 42
<caret>private set <caret>private set
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -3,4 +3,4 @@ open class My {
open var foo = 42 open var foo = 42
<caret>set <caret>set
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -7,4 +7,4 @@ open class FooImpl : Foo {
override var bar: String = "" override var bar: String = ""
<caret>private set <caret>private set
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -7,4 +7,4 @@ open class FooImpl : Foo {
final override var bar: String = "" final override var bar: String = ""
<caret>private set <caret>private set
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -7,4 +7,4 @@ open class FooImpl : Foo {
override var bar: String = "" override var bar: String = ""
<caret>private set <caret>private set
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -7,4 +7,4 @@ open class FooImpl : Foo {
override var bar: String = "" override var bar: String = ""
<caret>set <caret>set
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
@@ -12,4 +12,4 @@ interface C : A, B {
override fun foo(): <caret>Long override fun foo(): <caret>Long
} }
/* FIR_COMPARISON */ /* FIR_COMPARISON */
+2 -1
View File
@@ -5,4 +5,5 @@ fun foo(a: String?) {
// comment2 // comment2
.<caret>length .<caret>length
} }
/* FIR_COMPARISON */ // FIR_IDENTICAL
/* FIR_COMPARISON */
@@ -5,4 +5,5 @@ fun foo(a: String?) {
// comment2 // comment2
?.length ?.length
} }
/* FIR_COMPARISON */ // FIR_IDENTICAL
/* FIR_COMPARISON */
+2 -1
View File
@@ -4,4 +4,5 @@ fun foo(a: String?) {
val b = a val b = a
.<caret>length .<caret>length
} }
/* FIR_COMPARISON */ // FIR_IDENTICAL
/* FIR_COMPARISON */
@@ -4,4 +4,5 @@ fun foo(a: String?) {
val b = a val b = a
?.length ?.length
} }
/* FIR_COMPARISON */ // FIR_IDENTICAL
/* FIR_COMPARISON */
@@ -191,7 +191,7 @@ abstract class AbstractQuickFixTest : KotlinLightCodeInsightFixtureTestCase(), Q
) )
} }
myFixture.checkResultByFile(File(fileName).name + ".after") myFixture.checkResultByFile(getAfterFileName(fileName))
if (stubComparisonFailure != null) { if (stubComparisonFailure != null) {
throw stubComparisonFailure throw stubComparisonFailure
@@ -201,6 +201,10 @@ abstract class AbstractQuickFixTest : KotlinLightCodeInsightFixtureTestCase(), Q
} }
} }
protected open fun getAfterFileName(beforeFileName: String): String {
return File(beforeFileName).name + ".after"
}
@Throws(ClassNotFoundException::class) @Throws(ClassNotFoundException::class)
private fun checkForUnexpectedActions() { private fun checkForUnexpectedActions() {
val text = myFixture.editor.document.text val text = myFixture.editor.document.text