Fix muted usage highlighter test by ignoring irrelevant highlighting

UsageHighlightingTestGenerated.testImplicitReturnExpressionsInLambdasNoHightlighting
This commit is contained in:
Nikolay Krasko
2019-09-12 16:19:43 +03:00
parent 7b8abc5457
commit 26bef2d109
2 changed files with 30 additions and 13 deletions
@@ -6,7 +6,7 @@ fun some(a: Int, b: Int) {
if (b > 100) {
101 + j
} else {
<info descr="null">~102</info> * j
~102 * j
}
} else {
return@run false
@@ -7,16 +7,20 @@ package org.jetbrains.kotlin.idea.highlighter
import com.intellij.codeInsight.daemon.impl.HighlightInfo
import com.intellij.codeInsight.daemon.impl.HighlightInfoType
import com.intellij.codeInsight.highlighting.actions.HighlightUsagesAction
import com.intellij.codeInsight.highlighting.HighlightUsagesHandler
import com.intellij.openapi.editor.colors.EditorColors
import com.intellij.openapi.editor.colors.EditorColorsManager
import com.intellij.openapi.editor.markup.RangeHighlighter
import com.intellij.openapi.editor.markup.TextAttributes
import com.intellij.testFramework.ExpectedHighlightingData
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.idea.test.KotlinLightProjectDescriptor
import org.jetbrains.kotlin.idea.test.extractMarkerOffset
abstract class AbstractUsageHighlightingTest: KotlinLightCodeInsightFixtureTestCase() {
abstract class AbstractUsageHighlightingTest : KotlinLightCodeInsightFixtureTestCase() {
companion object {
// Not standard <caret> to leave it in text after configureByFile and remove manually after collecting highlighting information
val CARET_TAG = "~"
const val CARET_TAG = "~"
}
protected fun doTest(filePath: String) {
@@ -29,24 +33,37 @@ abstract class AbstractUsageHighlightingTest: KotlinLightCodeInsightFixtureTestC
assert(caret != -1) { "Caret marker '$CARET_TAG' expected" }
editor.caretModel.moveToOffset(caret)
myFixture.testAction(HighlightUsagesAction())
HighlightUsagesHandler.invoke(project, editor, myFixture.file)
val highlighters = myFixture.editor.markupModel.allHighlighters
val infos = highlighters.map { highlighter ->
var startOffset = highlighter.startOffset
var endOffset = highlighter.endOffset
val infos = highlighters
.filter { isUsageHighlighting(it) }
.map { highlighter ->
var startOffset = highlighter.startOffset
var endOffset = highlighter.endOffset
if (startOffset > caret) startOffset += CARET_TAG.length
if (endOffset > caret) endOffset += CARET_TAG.length
if (startOffset > caret) startOffset += CARET_TAG.length
if (endOffset > caret) endOffset += CARET_TAG.length
HighlightInfo.newHighlightInfo(HighlightInfoType.INFORMATION).range(startOffset, endOffset).create()
}
HighlightInfo.newHighlightInfo(HighlightInfoType.INFORMATION)
.range(startOffset, endOffset)
.create()
}
data.checkResult(infos, StringBuilder(document.text).insert(caret, CARET_TAG).toString())
}
private fun isUsageHighlighting(info: RangeHighlighter): Boolean {
val globalScheme = EditorColorsManager.getInstance().globalScheme
val readAttributes: TextAttributes =
globalScheme.getAttributes(EditorColors.SEARCH_RESULT_ATTRIBUTES)
val writeAttributes: TextAttributes =
globalScheme.getAttributes(EditorColors.WRITE_SEARCH_RESULT_ATTRIBUTES)
override fun getProjectDescriptor() = KotlinLightProjectDescriptor.INSTANCE
return info.textAttributes == readAttributes || info.textAttributes == writeAttributes
}
override fun getProjectDescriptor(): KotlinLightProjectDescriptor = KotlinLightProjectDescriptor.INSTANCE
override fun getTestDataPath() = ""
}