package com.jetbrains.dart.analysisServer;
import com.intellij.codeInsight.navigation.GotoTargetHandler;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.psi.PsiNamedElement;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.testFramework.fixtures.CodeInsightFixtureTestCase;
import com.intellij.testFramework.fixtures.CodeInsightTestUtil;
import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl;
import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.lang.dart.psi.DartClass;
import com.jetbrains.lang.dart.sdk.DartSdk;
import com.jetbrains.lang.dart.util.DartTestUtils;
import java.util.List;
public class DartGotoImplementationTest 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 FileUtil.toSystemDependentName("/analysisServer/gotoImplementation");
}
protected void doTest(int expectedLength) throws Throwable {
myFixture.configureByFile(getTestName(false) + ".dart");
myFixture.doHighlighting();
doTestInner(expectedLength);
}
private void doTestInner(int expectedLength) {
final GotoTargetHandler.GotoData data = CodeInsightTestUtil.gotoImplementation(myFixture.getEditor(), myFixture.getFile());
assertNotNull(myFixture.getFile().toString(), data);
assertEquals(expectedLength, data.targets.length);
}
public void testGti1() throws Throwable {
doTest(2);
}
public void testGti2() throws Throwable {
doTest(1);
}
public void testGti3() throws Throwable {
doTest(2);
}
public void testGti4() throws Throwable {
doTest(1);
}
public void testMixin1() throws Throwable {
doTest(1);
}
public void testOperator() throws Throwable {
doTest(3);
}
public void testIterableSubclasses() throws Throwable {
myFixture.configureByText("foo.dart", "");
myFixture.doHighlighting();
final DartSdk sdk = DartSdk.getDartSdk(getProject());
assertNotNull(sdk);
DartTestUtils.letAnalyzerSmellCoreFile(myFixture, "set.dart");
DartTestUtils.letAnalyzerSmellCoreFile(myFixture, "string.dart");
DartTestUtils.letAnalyzerSmellCoreFile(myFixture, "list.dart");
DartTestUtils.letAnalyzerSmellCoreFile(myFixture, "iterable.dart");
final DartClass iterableClass = PsiTreeUtil.findChildOfType(getFile(), DartClass.class);
assertNotNull(iterableClass);
assertEquals("Iterable", iterableClass.getName());
getEditor().getCaretModel().moveToOffset(iterableClass.getTextOffset());
final GotoTargetHandler.GotoData data = CodeInsightTestUtil.gotoImplementation(myFixture.getEditor(), myFixture.getFile());
final List<String> actual = ContainerUtil.map(data.targets,
psiElement -> psiElement instanceof PsiNamedElement
? ((PsiNamedElement)psiElement).getName()
: psiElement.toString());
assertSameElements(actual, "List", "Set", "Runes"); // only subclasses from dart:core are known to analyzer at this point
}
}