[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:
committed by
Space Team
parent
17c1352d82
commit
ec97659462
+2
-2
@@ -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 {
|
||||
|
||||
+19
-5
@@ -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)
|
||||
}
|
||||
|
||||
+26
@@ -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
|
||||
Vendored
+9
-9
@@ -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
|
||||
|
||||
Vendored
+30
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user