diff --git a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/GutterFixture.kt b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/GutterFixture.kt index 006f178c30c6..76b420cb8944 100644 --- a/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/GutterFixture.kt +++ b/platform/testGuiFramework/src/com/intellij/testGuiFramework/fixtures/GutterFixture.kt @@ -7,13 +7,16 @@ import com.intellij.openapi.editor.markup.MarkupModel import com.intellij.testGuiFramework.impl.GuiTestUtilKt.runOnEdt import com.intellij.testGuiFramework.impl.GuiTestUtilKt.waitUntil import org.fest.swing.exception.WaitTimedOutError +import javax.swing.Icon /** * @author Artem.Gainanov */ -class GutterFixture(private val myIde: IdeFrameFixture) { +open class GutterFixture(private val myIde: IdeFrameFixture) { - enum class GutterIcon { + interface IGutterIcon + + enum class GutterIcon : IGutterIcon { BREAKPOINT, DISABLED_BREAKPOINT, CSS_COLOR, @@ -32,15 +35,16 @@ class GutterFixture(private val myIde: IdeFrameFixture) { * OVERRIDDEN=[7, 8]} */ get() { - val result = GutterIcon.values().map { Pair(it, mutableListOf()) }.toMap() + val result: Map> = GutterIcon.values().map { Pair(it, mutableListOf()) }.toMap() runOnEdt { for (highlighter in getMarkupModel().allHighlighters) { val lineNumber = myIde.editor.editor.document.getLineNumber(highlighter.startOffset) + 1 - if (highlighter.gutterIconRenderer?.icon != null) { + val icon = highlighter.gutterIconRenderer?.icon + if (icon != null) { if (highlighter.gutterIconRenderer?.javaClass?.name == "com.intellij.psi.css.browse.CssColorGutterRenderer") { result[GutterIcon.CSS_COLOR]!!.add(lineNumber) } - when (highlighter.gutterIconRenderer?.icon) { + when (icon) { AllIcons.Gutter.ImplementingMethod -> result[GutterIcon.IMPLEMENTATION]!!.add(lineNumber) AllIcons.Gutter.OverridenMethod -> result[GutterIcon.OVERRIDDEN]!!.add(lineNumber) AllIcons.Gutter.ImplementedMethod -> result[GutterIcon.IMPLEMENTED]!!.add(lineNumber) @@ -48,6 +52,7 @@ class GutterFixture(private val myIde: IdeFrameFixture) { AllIcons.RunConfigurations.TestState.Run -> result[GutterIcon.RUN_SCRIPT]!!.add(lineNumber) AllIcons.Debugger.Db_set_breakpoint -> result[GutterIcon.BREAKPOINT]!!.add(lineNumber) AllIcons.Debugger.Db_disabled_breakpoint -> result[GutterIcon.DISABLED_BREAKPOINT]!!.add(lineNumber) + else -> handleUnmatchedIcon(icon)?.let { result.getOrDefault(it, mutableListOf(lineNumber)).add(lineNumber) } } } } @@ -55,6 +60,8 @@ class GutterFixture(private val myIde: IdeFrameFixture) { return result.mapValues { it.value.toList() } } + protected open fun handleUnmatchedIcon(icon: Icon): IGutterIcon? = null + /** * Waits until all specified kinds of gutter icons are shown and in required quantities * @param expectedIcons map where key is expected icon kind and value number of expected icons of this kind