[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)
}