Files
openide/java/java-tests/testSrc/com/intellij/codeInsight/CtrlMouseHandlerTest.kt
Daniil Ovchinnikov d3bd081feb inline documentation.v2.ctrl.mouse key
GitOrigin-RevId: 8c256b53e99693af3b211f8d4f70f2f09b885f7c
2023-02-07 12:51:43 +00:00

69 lines
2.7 KiB
Kotlin

// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInsight
import com.intellij.codeInsight.navigation.CtrlMouseHandler2
import com.intellij.ide.highlighter.JavaFileType
import com.intellij.openapi.components.service
import com.intellij.openapi.editor.RangeMarker
import com.intellij.openapi.editor.colors.EditorColors
import com.intellij.openapi.editor.colors.EditorColorsManager
import com.intellij.openapi.editor.impl.AbstractEditorTest
import com.intellij.openapi.editor.markup.RangeHighlighter
import com.intellij.openapi.progress.timeoutRunBlocking
import com.intellij.psi.PsiDocumentManager
import com.intellij.util.ui.UIUtil
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import java.util.stream.Collectors
import java.util.stream.Stream
class CtrlMouseHandlerTest : AbstractEditorTest() {
fun `test highlighter disappears on mouse moving away`() {
init("class A {}", JavaFileType.INSTANCE)
val mouse = mouse()
val handler = project.service<CtrlMouseHandler2>()
mouse.ctrl().moveTo(0, 6)
handler.handlerJob().joinPumping()
assertHighlighted(6, 7)
mouse.moveTo(0, 0)
handler.handlerJob().joinPumping()
assertHighlighted()
}
// input parameters should have the following form:
// firstHighlighterStartOffset, firstHighlighterEndOffset, secondHighlighterStartOffset, secondHighlighterEndOffset, ...
private fun assertHighlighted(vararg offsets: Int) {
assert(offsets.size % 2 == 0)
val highlighterCount = offsets.size / 2
val highlighters = getCurrentHighlighters()
assertEquals("Unexpected number of highlighters", highlighterCount, highlighters.size)
for (i in 0 until highlighterCount) {
assertEquals("Unexpected start of " + (i + 1) + " highlighter", offsets[i * 2], highlighters[i].startOffset)
assertEquals("Unexpected end of " + (i + 1) + " highlighter", offsets[i * 2 + 1], highlighters[i].endOffset)
}
}
private fun getCurrentHighlighters(): List<RangeHighlighter> {
val attributes = EditorColorsManager.getInstance().globalScheme.getAttributes(EditorColors.REFERENCE_HYPERLINK_COLOR)
return Stream.of(*editor.markupModel.allHighlighters)
.filter { h: RangeHighlighter ->
attributes == h.getTextAttributes(null) || EditorColors.REFERENCE_HYPERLINK_COLOR == h.textAttributesKey
}
.sorted(RangeMarker.BY_START_OFFSET)
.collect(Collectors.toList())
}
private fun Job.joinPumping() {
PsiDocumentManager.getInstance(project).commitAllDocuments()
UIUtil.dispatchAllInvocationEvents()
timeoutRunBlocking {
val job = this@joinPumping
while (job.isActive) {
delay(10)
UIUtil.dispatchAllInvocationEvents()
}
}
}
}