[tests] Refactor AbstractReferenceResolveTest. Part 4

Allow multiple carets to be used in reference resolve tests.
Adjust the testdata for the only test case which has actually
had multiple carets in it.

Required for KT-65152 and KT-62695
This commit is contained in:
Roman Golyshev
2024-01-18 16:48:47 +01:00
committed by Space Team
parent 17c1352d82
commit ec97659462
5 changed files with 86 additions and 17 deletions
@@ -48,7 +48,7 @@ abstract class AbstractDanglingFileReferenceResolveTest : AbstractReferenceResol
}
override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) {
val caretPosition = testServices.expressionMarkerProvider.getCaretPosition(mainFile)
val caretPositions = testServices.expressionMarkerProvider.getAllCaretsPositions(mainFile)
val ktPsiFactory = KtPsiFactory.contextual(mainFile, markGenerated = true, eventSystemEnabled = true)
val fakeKtFile = ktPsiFactory.createFile("fake.kt", mainFile.text)
@@ -57,7 +57,7 @@ abstract class AbstractDanglingFileReferenceResolveTest : AbstractReferenceResol
fakeKtFile.originalFile = mainFile
}
doTestByFileStructure(fakeKtFile, caretPosition, mainModule, testServices)
doTestByFileStructure(fakeKtFile, caretPositions, mainModule, testServices)
}
override fun <R> analyzeReferenceElement(element: KtElement, mainModule: TestModule, action: KtAnalysisSession.() -> R): R {
@@ -46,11 +46,14 @@ abstract class AbstractReferenceResolveTest : AbstractAnalysisApiBasedTest() {
}
override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) {
val caretPosition = testServices.expressionMarkerProvider.getAllCaretsPositions(mainFile).single()
doTestByFileStructure(mainFile, caretPosition, mainModule, testServices)
val caretPositions = testServices.expressionMarkerProvider.getAllCaretsPositions(mainFile)
doTestByFileStructure(mainFile, caretPositions, mainModule, testServices)
}
protected fun doTestByFileStructure(ktFile: KtFile, caretPosition: Int, mainModule: TestModule, testServices: TestServices) {
protected fun doTestByFileStructure(ktFile: KtFile, caretPositions: List<Int>, mainModule: TestModule, testServices: TestServices) {
if (caretPositions.isEmpty()) {
testServices.assertions.fail { "No carets were specified for resolve test" }
}
fun getRenderedReferencesForCaretPosition(caretPosition: Int): String {
val ktReferences = findReferencesAtCaret(ktFile, caretPosition)
@@ -67,8 +70,19 @@ abstract class AbstractReferenceResolveTest : AbstractAnalysisApiBasedTest() {
return resolvedTo
}
val resolvedTo = getRenderedReferencesForCaretPosition(caretPosition)
val actual = "Resolved to:\n$resolvedTo"
val resolutionAtPositions = caretPositions.map { getRenderedReferencesForCaretPosition(it) }
val actual = if (resolutionAtPositions.size == 1) {
val singleResolutionResult = resolutionAtPositions.single()
"Resolved to:\n$singleResolutionResult"
} else {
resolutionAtPositions
.withIndex()
.joinToString(separator = "\n\n") { (idx, resolutionResult) ->
"Caret ${idx + 1} resolved to:\n$resolutionResult"
}
}
testServices.assertions.assertEqualsToTestDataFileSibling(actual)
}
@@ -0,0 +1,26 @@
Caret 1 resolved to:
0: (in A) var something: kotlin.Int
Caret 2 resolved to:
0: (in A) var something: kotlin.Int
Caret 3 resolved to:
0: (in A) var something: kotlin.Int
Caret 4 resolved to:
0: (in A) var something: kotlin.Int
Caret 5 resolved to:
0: (in A) var something: kotlin.Int
Caret 6 resolved to:
0: (in A) var something: kotlin.Int
Caret 7 resolved to:
0: (in A) var something: kotlin.Int
Caret 8 resolved to:
0: (in A) var something: kotlin.Int
Caret 9 resolved to:
0: (in A) var something: kotlin.Int
@@ -5,16 +5,16 @@ class A {
}
fun A.foo(a: A) {
print(a.<caret>something)
a.<caret>something = 1
a.<caret>something += 1
a.<caret>something++
--a.<caret>something
print(a.<caret_1>something)
a.<caret_2>something = 1
a.<caret_3>something += 1
a.<caret_4>something++
--a.<caret_5>something
<caret>something++
(<caret>something)++
(<caret>something) = 1
(a.<caret>something) = 1
<caret_6>something++
(<caret_7>something)++
(<caret_8>something) = 1
(a.<caret_9>something) = 1
}
// MULTIRESOLVE
@@ -1,2 +1,31 @@
Resolved to:
Caret 1 resolved to:
0: (in A) var something: kotlin.Int
Caret 2 resolved to:
0: (in A) var something: kotlin.Int
Caret 3 resolved to:
0: (in A) var something: kotlin.Int
1: (in A) var something: kotlin.Int
Caret 4 resolved to:
0: (in A) var something: kotlin.Int
1: (in A) var something: kotlin.Int
Caret 5 resolved to:
0: (in A) var something: kotlin.Int
1: (in A) var something: kotlin.Int
Caret 6 resolved to:
0: (in A) var something: kotlin.Int
1: (in A) var something: kotlin.Int
Caret 7 resolved to:
0: (in A) var something: kotlin.Int
1: (in A) var something: kotlin.Int
Caret 8 resolved to:
0: (in A) var something: kotlin.Int
Caret 9 resolved to:
0: (in A) var something: kotlin.Int