[tests] Return caret names from ExpressionMarkerProvider

Render caret names in resolve testData, so that we don't have to guess
the indices of the carets;
it makes the multi-caret testData less error-prone.

Relevant for KT-65152 and KT-62695
This commit is contained in:
Roman Golyshev
2024-01-24 16:05:23 +01:00
committed by Space Team
parent 2befd2bffb
commit fb225f5f20
20 changed files with 128 additions and 114 deletions
@@ -99,8 +99,8 @@ class ExpressionMarkerProvider : TestService {
}
}
fun getAllCaretsPositions(file: PsiFile): List<Int> {
return carets.getAllCaretsOffsets(file.name)
fun getAllCarets(file: PsiFile): List<CaretMarker> {
return carets.getAllCarets(file.name)
}
fun getSelectedRangeOrNull(file: PsiFile): TextRange? = selected[file.name]
@@ -261,6 +261,21 @@ class ExpressionMarkerProvider : TestService {
}
}
data class CaretMarker(val tag: String, val offset: Int) {
/**
* Full render of this caret marker in the `<caret>` or `<caret_$tag>` form.
*
* @see ExpressionMarkersSourceFilePreprocessor.TAGS.CARET_REGEXP
*/
val fullTag: String
get() = if (tag.isEmpty()) {
"<caret>"
} else {
"<caret_${tag}>"
}
}
private class CaretProvider {
private val caretToFile = mutableMapOf<String, CaretsInFile>()
@@ -269,8 +284,8 @@ private class CaretProvider {
return cartsInFile.getCaretOffsetByTag(caretTag)
}
fun getAllCaretsOffsets(filename: String): List<Int> {
return caretToFile[filename]?.getAllCaretsOffsets().orEmpty()
fun getAllCarets(filename: String): List<CaretMarker> {
return caretToFile[filename]?.getAllCarets().orEmpty()
}
fun addCaret(filename: String, caretTag: String?, caretOffset: Int) {
@@ -285,8 +300,8 @@ private class CaretProvider {
return carets[tag.orEmpty()]
}
fun getAllCaretsOffsets(): List<Int> {
return carets.values.toList()
fun getAllCarets(): List<CaretMarker> {
return carets.map { (tag, offset) -> CaretMarker(tag, offset) }
}
fun addCaret(caretTag: String?, caretOffset: Int) {