package com.jetbrains.dart.analysisServer;
import com.intellij.codeInsight.daemon.GutterMark;
import com.intellij.icons.AllIcons;
import com.intellij.testFramework.fixtures.CodeInsightFixtureTestCase;
import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl;
import com.intellij.util.TimeoutUtil;
import com.jetbrains.lang.dart.util.DartTestUtils;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.util.List;
public class DartServerImplementationsMarkerProviderTest extends CodeInsightFixtureTestCase {
@Override
public void setUp() throws Exception {
super.setUp();
DartTestUtils.configureDartSdk(myModule, myFixture.getTestRootDisposable(), true);
myFixture.setTestDataPath(DartTestUtils.BASE_TEST_DATA_PATH + getBasePath());
((CodeInsightTestFixtureImpl)myFixture).canChangeDocumentDuringHighlighting(true);
}
@Override
protected String getBasePath() {
return "/analysisServer/implementationsMarker";
}
private void checkHasGutterAtCaret(final String expectedText, final Icon expectedIcon) {
final String testName = getTestName(false);
myFixture.configureByFile(testName + ".dart");
myFixture.doHighlighting(); // make sure server is warmed up
if (!someGutterHasIcon(myFixture.findGuttersAtCaret(), expectedIcon)) {
TimeoutUtil.sleep(200); // wait a bit for info about line markers 'up' to arrive
}
DartServerOverrideMarkerProviderTest.checkGutter(myFixture.findGuttersAtCaret(), expectedText, expectedIcon);
}
private static boolean someGutterHasIcon(@NotNull final List<GutterMark> gutters, @NotNull final Icon icon) {
for (GutterMark gutter : gutters) {
if (icon.equals(gutter.getIcon())) {
return true;
}
}
return false;
}
public void testClassExtended() throws Throwable {
checkHasGutterAtCaret("Has subclasses", AllIcons.Gutter.OverridenMethod);
}
public void testClassImplemented() throws Throwable {
checkHasGutterAtCaret("Has subclasses", AllIcons.Gutter.OverridenMethod);
}
public void testMethodExtended() throws Throwable {
checkHasGutterAtCaret("Is overridden in subclasses", AllIcons.Gutter.OverridenMethod);
}
public void testMethodImplemented() throws Throwable {
checkHasGutterAtCaret("Is overridden in subclasses", AllIcons.Gutter.OverridenMethod);
}
public void testOperatorOverridden() throws Throwable {
checkHasGutterAtCaret("Is overridden in subclasses", AllIcons.Gutter.OverridenMethod);
}
}