[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) {
|
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 ktPsiFactory = KtPsiFactory.contextual(mainFile, markGenerated = true, eventSystemEnabled = true)
|
||||||
val fakeKtFile = ktPsiFactory.createFile("fake.kt", mainFile.text)
|
val fakeKtFile = ktPsiFactory.createFile("fake.kt", mainFile.text)
|
||||||
@@ -57,7 +57,7 @@ abstract class AbstractDanglingFileReferenceResolveTest : AbstractReferenceResol
|
|||||||
fakeKtFile.originalFile = mainFile
|
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 {
|
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) {
|
override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) {
|
||||||
val caretPosition = testServices.expressionMarkerProvider.getAllCaretsPositions(mainFile).single()
|
val caretPositions = testServices.expressionMarkerProvider.getAllCaretsPositions(mainFile)
|
||||||
doTestByFileStructure(mainFile, caretPosition, mainModule, testServices)
|
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 {
|
fun getRenderedReferencesForCaretPosition(caretPosition: Int): String {
|
||||||
val ktReferences = findReferencesAtCaret(ktFile, caretPosition)
|
val ktReferences = findReferencesAtCaret(ktFile, caretPosition)
|
||||||
@@ -67,8 +70,19 @@ abstract class AbstractReferenceResolveTest : AbstractAnalysisApiBasedTest() {
|
|||||||
return resolvedTo
|
return resolvedTo
|
||||||
}
|
}
|
||||||
|
|
||||||
val resolvedTo = getRenderedReferencesForCaretPosition(caretPosition)
|
val resolutionAtPositions = caretPositions.map { getRenderedReferencesForCaretPosition(it) }
|
||||||
val actual = "Resolved to:\n$resolvedTo"
|
|
||||||
|
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)
|
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) {
|
fun A.foo(a: A) {
|
||||||
print(a.<caret>something)
|
print(a.<caret_1>something)
|
||||||
a.<caret>something = 1
|
a.<caret_2>something = 1
|
||||||
a.<caret>something += 1
|
a.<caret_3>something += 1
|
||||||
a.<caret>something++
|
a.<caret_4>something++
|
||||||
--a.<caret>something
|
--a.<caret_5>something
|
||||||
|
|
||||||
<caret>something++
|
<caret_6>something++
|
||||||
(<caret>something)++
|
(<caret_7>something)++
|
||||||
(<caret>something) = 1
|
(<caret_8>something) = 1
|
||||||
(a.<caret>something) = 1
|
(a.<caret_9>something) = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
// MULTIRESOLVE
|
// 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
|
0: (in A) var something: kotlin.Int
|
||||||
|
|||||||
Reference in New Issue
Block a user