[tests] Refactor AbstractReferenceResolveTest. Part 1
Instead of relying on UNRESOLVED_REFERENCE directive for the whole file, just render the unresolved reference right in the .txt testdata This will allow to introduce multi-caret resolve testdata more naturally Required for KT-65152 and KT-62695
This commit is contained in:
committed by
Space Team
parent
c958aef679
commit
304112cd8a
-26
@@ -58,15 +58,10 @@ abstract class AbstractReferenceResolveTest : AbstractAnalysisApiBasedTest() {
|
||||
|
||||
val resolvedTo = analyzeReferenceElement(ktReferences.first().element, mainModule) {
|
||||
val symbols = ktReferences.flatMap { it.resolveToSymbols() }
|
||||
checkReferenceResultForValidity(ktReferences, mainModule, testServices, symbols)
|
||||
val renderPsiClassName = Directives.RENDER_PSI_CLASS_NAME in mainModule.directives
|
||||
renderResolvedTo(symbols, renderPsiClassName, renderingOptions) { getAdditionalSymbolInfo(it) }
|
||||
}
|
||||
|
||||
if (Directives.UNRESOLVED_REFERENCE in mainModule.directives) {
|
||||
return
|
||||
}
|
||||
|
||||
val actual = "Resolved to:\n$resolvedTo"
|
||||
testServices.assertions.assertEqualsToTestDataFileSibling(actual)
|
||||
}
|
||||
@@ -80,28 +75,7 @@ abstract class AbstractReferenceResolveTest : AbstractAnalysisApiBasedTest() {
|
||||
private fun findReferencesAtCaret(mainKtFile: KtFile, caretPosition: Int): List<KtReference> =
|
||||
mainKtFile.findReferenceAt(caretPosition)?.unwrapMultiReferences().orEmpty().filterIsInstance<KtReference>()
|
||||
|
||||
private fun KtAnalysisSession.checkReferenceResultForValidity(
|
||||
references: List<KtReference>,
|
||||
module: TestModule,
|
||||
testServices: TestServices,
|
||||
resolvedTo: List<KtSymbol>,
|
||||
) {
|
||||
if (Directives.UNRESOLVED_REFERENCE in module.directives) {
|
||||
testServices.assertions.assertTrue(resolvedTo.isEmpty()) {
|
||||
"Reference should be unresolved, but was resolved to ${renderResolvedTo(resolvedTo)}"
|
||||
}
|
||||
} else {
|
||||
if (resolvedTo.isEmpty()) {
|
||||
testServices.assertions.fail { "Unresolved reference ${references.first().element.text}" }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private object Directives : SimpleDirectivesContainer() {
|
||||
val UNRESOLVED_REFERENCE by directive(
|
||||
"Reference should be unresolved",
|
||||
)
|
||||
|
||||
val RENDER_PSI_CLASS_NAME by directive(
|
||||
"Render also PSI class name for resolved reference"
|
||||
)
|
||||
|
||||
+10
-2
@@ -15,16 +15,24 @@ import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
|
||||
object TestReferenceResolveResultRenderer {
|
||||
private const val UNRESOLVED_REFERENCE_RESULT = "Nothing (Unresolved reference)"
|
||||
|
||||
/**
|
||||
* Empty [symbols] list equals to unresolved reference.
|
||||
*/
|
||||
fun KtAnalysisSession.renderResolvedTo(
|
||||
symbols: List<KtSymbol>,
|
||||
renderPsiClassName: Boolean = false,
|
||||
renderer: KtDeclarationRenderer = KtDeclarationRendererForDebug.WITH_QUALIFIED_NAMES,
|
||||
additionalInfo: KtAnalysisSession.(KtSymbol) -> String? = { null }
|
||||
) =
|
||||
symbols.map { renderResolveResult(it, renderPsiClassName, renderer, additionalInfo) }
|
||||
): String {
|
||||
if (symbols.isEmpty()) return UNRESOLVED_REFERENCE_RESULT
|
||||
|
||||
return symbols.map { renderResolveResult(it, renderPsiClassName, renderer, additionalInfo) }
|
||||
.sorted()
|
||||
.withIndex()
|
||||
.joinToString(separator = "\n") { "${it.index}: ${it.value}" }
|
||||
}
|
||||
|
||||
private fun KtAnalysisSession.renderResolveResult(
|
||||
symbol: KtSymbol,
|
||||
|
||||
Reference in New Issue
Block a user