package requirejs; import com.intellij.codeInsight.completion.CompletionType; import com.intellij.lang.javascript.psi.JSFile; import com.intellij.openapi.editor.LogicalPosition; import com.intellij.openapi.util.io.FileUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiNamedElement; import com.intellij.psi.PsiReference; import com.intellij.psi.impl.source.resolve.reference.impl.PsiMultiReference; import com.intellij.testFramework.fixtures.CodeInsightFixtureTestCase; import requirejs.settings.Settings; import java.io.File; import java.io.IOException; import java.util.List; public abstract class RequirejsTestCase extends CodeInsightFixtureTestCase { @Override protected void setUp() throws Exception { super.setUp(); Settings.getInstance(myFixture.getProject()).pluginEnabled = true; } protected void setWebPathSetting() { setWebPathSetting("public"); } protected void setWebPathSetting(String path) { Settings.getInstance(myFixture.getProject()).publicPath = path; } protected void setConfigPath(String configPath) { Settings.getInstance(getProject()).configFilePath = configPath; } protected void setBaseUrlOverride(String baseUrl) { Settings.getInstance(getProject()).overrideBaseUrl = true; Settings.getInstance(getProject()).baseUrl = baseUrl; } protected void setBaseUrlOverrideDisable() { Settings.getInstance(getProject()).overrideBaseUrl = false; } protected void assertCompletionList(List<String> expected, List<String> actual) { assertCompletionList(expected, expected.size(), actual); } protected void assertCompletionList(List<String> expected, int expectedSize, List<String> actual) { assertNotNull(actual); assertContainsElements(actual, expected); assertEquals(expectedSize, actual.size()); } protected void assertCompletionSingle(String expected) { PsiElement element = myFixture.getFile().findElementAt(myFixture.getCaretOffset()); assert element != null; assertEquals("'" + expected + "'", element.getText()); } protected List<String> getCompletionStrings(int line, int column) { List<String> strings; myFixture.getEditor().getCaretModel().moveToLogicalPosition(new LogicalPosition(line, column)); myFixture.complete(CompletionType.BASIC, 1); strings = myFixture.getLookupElementStrings(); return strings; } protected List<String> getCompletionStringsForHumanPosition(int line, int column) { return getCompletionStrings(line - 1, column - 1); } protected PsiReference getReferenceForHumanPosition(int line, int column) { return getReferenceForPosition(line - 1, column - 1); } protected PsiReference getReferenceForPosition(int line, int column) { myFixture .getEditor() .getCaretModel() .moveToLogicalPosition(new LogicalPosition(line, column)); return myFixture.getReferenceAtCaretPosition(); } protected void assertReference(PsiReference reference, String expectedText, String expectedFileName) { assertNotNull("wrong cursor position", reference); if (reference instanceof PsiMultiReference) { for (PsiReference ref : ((PsiMultiReference)reference).getReferences()) { if (ref instanceof RequirejsReference) { reference = ref; break; } } } if (!expectedText.startsWith("'")) { expectedText = "'".concat(expectedText).concat("'"); } assertInstanceOf(reference, RequirejsReference.class); assertEquals(expectedText, reference.getCanonicalText()); PsiElement referenceElement = reference.resolve(); if (null == expectedFileName) { assertNull(referenceElement); } else { assertNotNull("Not resolved", referenceElement); assertInstanceOf(referenceElement, PsiFile.class); assertEquals(expectedFileName, ((PsiFile) referenceElement).getName()); } } protected void assertUrlReference(PsiReference reference, String expectedUrl) { PsiElement referenceElement = reference.resolve(); assertTrue(referenceElement instanceof PsiNamedElement); assertEquals(expectedUrl, ((PsiNamedElement) referenceElement).getName()); } }