package requirejs; import com.intellij.lang.javascript.psi.JSFile; import com.intellij.openapi.editor.LogicalPosition; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReference; import com.intellij.psi.impl.source.resolve.reference.impl.PsiMultiReference; import requirejs.settings.Settings; import java.util.Arrays; import java.util.List; public class ConfigParseTest extends RequirejsTestCase { @Override public void setUp() throws Exception { super.setUp(); myFixture.configureByFiles( "public/rootWebPathConfigTest.js", "public/blocks/fileWithDotPath.js", "public/blocks/childWebPathFile.js", "public/blocks/fileWithTwoDotPath.js", "public/main.js", "public/blocks/block.js", "public/blocks/childBlocks/childBlock.js", "public/rootWebPathFile.js", "public/blocks/childBlocks/templates/index.html", "public/mainRequireJs.js", "public/mainRequire.js" ); setWebPathSetting(); } public void testCompletion() { Settings.getInstance(getProject()).configFilePath = "mainRequireJs.js"; // moduleDepend List<String> strings = getCompletionStrings(1, 38); assertCompletionList(Arrays.asList( "moduleRelativeBaseUrlPath", "moduleAbsolutePath", "moduleRelativeOneDotPath", "moduleRelativeTwoDotPath" ), strings); // moduleDepend2 strings = getCompletionStrings(2, 39); assertCompletionList(Arrays.asList( "moduleRelativeBaseUrlPath", "moduleRelativeOneDotPath", "moduleRelativeTwoDotPath" ), strings); } public void testReference() { Settings.getInstance(getProject()).configFilePath = "mainRequireJs.js"; PsiReference reference; PsiElement referenceElement; myFixture .getEditor() .getCaretModel() .moveToLogicalPosition(new LogicalPosition(1, 36)); reference = myFixture.getReferenceAtCaretPosition(); assert (reference) != null; reference = ((PsiMultiReference)reference).getReferences()[1]; assertTrue(reference instanceof RequirejsReference); assertEquals("'module'", reference.getCanonicalText()); referenceElement = reference.resolve(); assertEquals("rootWebPathConfigTest.js", ((JSFile) referenceElement).getName()); myFixture .getEditor() .getCaretModel() .moveToLogicalPosition(new LogicalPosition(2, 36)); reference = myFixture.getReferenceAtCaretPosition(); assert (reference) != null; reference = ((PsiMultiReference)reference).getReferences()[1]; assertTrue(reference instanceof RequirejsReference); assertEquals("'moduleR'", reference.getCanonicalText()); referenceElement = reference.resolve(); assertNull(referenceElement); myFixture .getEditor() .getCaretModel() .moveToLogicalPosition(new LogicalPosition(3, 51)); reference = myFixture.getReferenceAtCaretPosition(); assert (reference) != null; reference = ((PsiMultiReference)reference).getReferences()[1]; assertTrue(reference instanceof RequirejsReference); assertEquals("'moduleRelativeBaseUrlPath'", reference.getCanonicalText()); referenceElement = reference.resolve(); assertTrue(referenceElement instanceof JSFile); assertEquals("childBlock.js", ((JSFile) referenceElement).getName()); myFixture .getEditor() .getCaretModel() .moveToLogicalPosition(new LogicalPosition(4, 51)); reference = myFixture.getReferenceAtCaretPosition(); assert (reference) != null; reference = ((PsiMultiReference)reference).getReferences()[1]; assertTrue(reference instanceof RequirejsReference); assertEquals("'moduleAbsolutePath'", reference.getCanonicalText()); referenceElement = reference.resolve(); assertTrue(referenceElement instanceof JSFile); assertEquals("block.js", ((JSFile) referenceElement).getName()); myFixture .getEditor() .getCaretModel() .moveToLogicalPosition(new LogicalPosition(5, 51)); reference = myFixture.getReferenceAtCaretPosition(); assert (reference) != null; reference = ((PsiMultiReference)reference).getReferences()[1]; assertTrue(reference instanceof RequirejsReference); assertEquals("'moduleRelativeOneDotPath'", reference.getCanonicalText()); referenceElement = reference.resolve(); assertTrue(referenceElement instanceof JSFile); assertEquals("block.js", ((JSFile) referenceElement).getName()); myFixture .getEditor() .getCaretModel() .moveToLogicalPosition(new LogicalPosition(6, 51)); reference = myFixture.getReferenceAtCaretPosition(); assert (reference) != null; reference = ((PsiMultiReference)reference).getReferences()[1]; assertTrue(reference instanceof RequirejsReference); assertEquals("'moduleRelativeTwoDotPAth'", reference.getCanonicalText()); referenceElement = reference.resolve(); assertNull(referenceElement); } protected void testCompletionOtherConfigFile(String configPath) { Settings.getInstance(getProject()).configFilePath = configPath; // moduleDepend List<String> strings = getCompletionStrings(1, 38); assertCompletionList(Arrays.asList( "moduleRelativeBaseUrlPath", "moduleAbsolutePath", "moduleRelativeTwoDotPAth" ), strings); // moduleDepend2 strings = getCompletionStrings(2, 39); assertCompletionList(Arrays.asList( "moduleRelativeBaseUrlPath", "moduleRelativeTwoDotPAth" ), strings); } public void testCompletionConfigRequire() { myFixture.configureByFiles( "public/rootWebPathConfigTest.js", "public/config/configWithRequire.js" ); testCompletionOtherConfigFile("config/configWithRequire.js"); } public void testCompletionConfigRequireInHTMLFile() { myFixture.configureByFiles( "public/rootWebPathConfigTest.js", "public/config/configWithRequire.html" ); testCompletionOtherConfigFile("config/configWithRequire.html"); } public void testCompletionConfigRequireJs() { myFixture.configureByFiles( "public/rootWebPathConfigTest.js", "public/config/configWithRequireJs.js" ); testCompletionOtherConfigFile("config/configWithRequireJs.js"); } public void testCompletionConfigRequireFirstObject() { myFixture.configureByFiles( "public/rootWebPathConfigTest.js", "public/config/configWithRequireFirstObject.js" ); testCompletionOtherConfigFile("config/configWithRequireFirstObject.js"); } public void testCompletionConfigRequireFirstObjectInHTMLFile() { myFixture.configureByFiles( "public/rootWebPathConfigTest.js", "public/config/configWithRequireFirstObject.html" ); testCompletionOtherConfigFile("config/configWithRequireFirstObject.html"); } public void testCompletionConfigRequireJsFirstObject() { myFixture.configureByFiles( "public/rootWebPathConfigTest.js", "public/config/configWithRequireJsFirstObject.js" ); testCompletionOtherConfigFile("config/configWithRequireJsFirstObject.js"); } public void testCompletionConfigWithStringLiteral() { myFixture.configureByFiles( "public/rootWebPathConfigTest.js", "public/config/configWithStringLiteral.js" ); testCompletionOtherConfigFile("config/configWithStringLiteral.js"); } public void testCompletionConfigWithGlobalRequireObject() { myFixture.configureByFiles( "public/rootWebPathConfigTest.js", "public/config/configWithGlobalRequireObject.js" ); testCompletionOtherConfigFile("config/configWithGlobalRequireObject.js"); } public void testCompletionConfigWithGlobalRequireObjectInHTMLFile() { myFixture.configureByFiles( "public/rootWebPathConfigTest.js", "public/config/configWithGlobalRequireObject.html" ); testCompletionOtherConfigFile("config/configWithGlobalRequireObject.html"); } public void testCompletionConfigWithGlobalRequirejsObject() { myFixture.configureByFiles( "public/rootWebPathConfigTest.js", "public/config/configWithGlobalRequirejsObject.js" ); testCompletionOtherConfigFile("config/configWithGlobalRequirejsObject.js"); } public void testConfigWithBaseUrlWithoutStartSlash() { List<String> strings; PsiReference reference; myFixture.configureByFile("public/config/configWithBaseUrlWithoutStartSlash.js"); Settings.getInstance(getProject()).configFilePath = "config/configWithBaseUrlWithoutStartSlash.js"; // Completion 1 strings = getCompletionStringsForHumanPosition(10, 11); assertCompletionList(Arrays.asList( "aliasChildBlock", "aliasRelativePath/fileWithDotPath", "aliasRelativePath/childWebPathFile", "aliasRelativePath/fileWithTwoDotPath", "aliasRelativePath/block", "aliasRelativePath/childBlocks/childBlock" ), strings); // Completion 2 strings = getCompletionStringsForHumanPosition(11, 29); assertCompletionList(Arrays.asList( "aliasRelativePath/childWebPathFile", "aliasRelativePath/childBlocks/childBlock" ), strings); // Reference 1 reference = getReferenceForHumanPosition(13, 16); assertReference(reference, "'aliasChildBlock'", "childBlock.js"); // Reference 2 reference = getReferenceForHumanPosition(14,16); assertReference(reference, "'aliasRelativePath/block'", "block.js"); } public void testConfigWithRelativePathReference() { PsiReference reference; initForTestConfigWithRelativePath(); // 1 reference = getReferenceForHumanPosition(11, 12); assertReference(reference, "'moduleOne'", "kit.js"); } public void testConfigWithRelativePathReference2() { PsiReference reference; initForTestConfigWithRelativePath(); // 2 reference = getReferenceForHumanPosition(12, 12); assertReference(reference, "'moduleTwo'", "mainWithRelativePath.js"); } public void testConfigWithRelativePathReference3() { PsiReference reference; initForTestConfigWithRelativePath(); // 3 reference = getReferenceForHumanPosition(13, 12); assertReference(reference, "'moduleThree'", "main.js"); } protected void initForTestConfigWithRelativePath() { myFixture.configureByFiles( "public/config/configWithRelativePathTest.js", "public/sub/kits/kit.js", "public/sub/mainWithRelativePath.js" ); Settings.getInstance(getProject()).configFilePath = "config/configWithRelativePathTest.js"; } protected void initForTestsConfigWithoutBaseUrlWithRelativePathReference() { myFixture.configureByFiles( "public/blocks/fileForReferenceTestConfigWithoutBaseUrlWithRelativePath.js", "public/sub/kits/kit.js", "public/sub/kits/configWithoutBaseUrlWithRelativePath.js" ); Settings.getInstance(getProject()).configFilePath = "sub/kits/configWithoutBaseUrlWithRelativePath.js"; } public void testConfigWithoutBaseUrlWithRelativePathReference1() { PsiReference reference; initForTestsConfigWithoutBaseUrlWithRelativePathReference(); // 1 reference = getReferenceForHumanPosition(2, 30); assertReference(reference, "pathForBlock", "block.js"); } public void testConfigWithoutBaseUrlWithRelativePathReference2() { PsiReference reference; initForTestsConfigWithoutBaseUrlWithRelativePathReference(); // 2 reference = getReferenceForHumanPosition(3, 30); assertReference(reference, "pathForDirectoryTwoDot/block", "block.js"); } public void testConfigWithoutBaseUrlWithRelativePathReference3() { PsiReference reference; initForTestsConfigWithoutBaseUrlWithRelativePathReference(); // 3 reference = getReferenceForHumanPosition(4, 30); assertReference(reference, "pathForDirectoryOneDot/kit", "kit.js"); } public void testConfigWithoutBaseUrlWithRelativePathReference4() { PsiReference reference; initForTestsConfigWithoutBaseUrlWithRelativePathReference(); // 4 reference = getReferenceForHumanPosition(5, 30); assertReference(reference, "pathForKit", "kit.js"); } public void testConfigWithoutBaseUrlWithRelativePathReference5() { PsiReference reference; initForTestsConfigWithoutBaseUrlWithRelativePathReference(); // 5 reference = getReferenceForHumanPosition(6, 30); assertReference(reference, "pathForNotFound", null); } public void testConfigWithoutBaseUrlWithRelativePathReference6() { PsiReference reference; initForTestsConfigWithoutBaseUrlWithRelativePathReference(); // 6 reference = getReferenceForHumanPosition(7, 30); assertReference(reference, "kit", "kit.js"); } public void testConfigWithoutBaseUrlWithRelativePathReference7() { PsiReference reference; initForTestsConfigWithoutBaseUrlWithRelativePathReference(); // 7 reference = getReferenceForHumanPosition(8, 30); assertReference(reference, "./block", "block.js"); } protected void initForTestsConfigWithoutBaseUrlWithRelativePathCompletion() { myFixture.configureByFiles( "public/blocks/fileForCompletionTestConfigWithoutBaseUrlWithRelativePath.js", "public/sub/kits/kit.js", "public/sub/kits/configWithoutBaseUrlWithRelativePath.js" ); Settings.getInstance(getProject()).configFilePath = "sub/kits/configWithoutBaseUrlWithRelativePath.js"; } public void testConfigWithoutBaseUrlWithRelativePathCompletion1() { List<String> strings; initForTestsConfigWithoutBaseUrlWithRelativePathCompletion(); // 1 strings = getCompletionStringsForHumanPosition(2, 35); assertCompletionList(Arrays.asList( "pathForBlock", "pathForDirectoryTwoDot/fileWithDotPath", "pathForDirectoryTwoDot/childWebPathFile", "pathForDirectoryTwoDot/fileWithTwoDotPath", "pathForDirectoryTwoDot/block", "pathForDirectoryTwoDot/childBlocks/childBlock", "pathForDirectoryTwoDot/fileForCompletionTestConfigWithoutBaseUrlWithRelativePath", "pathForDirectoryOneDot/kit", "pathForDirectoryOneDot/configWithoutBaseUrlWithRelativePath", "pathForKit" ), strings); } public void testConfigWithoutBaseUrlWithRelativePathCompletion2() { List<String> strings; initForTestsConfigWithoutBaseUrlWithRelativePathCompletion(); // 2 strings = getCompletionStringsForHumanPosition(3, 51); assertCompletionList(Arrays.asList( "pathForDirectoryTwoDot/fileWithDotPath", "pathForDirectoryTwoDot/childWebPathFile", "pathForDirectoryTwoDot/fileWithTwoDotPath", "pathForDirectoryTwoDot/block", "pathForDirectoryTwoDot/childBlocks/childBlock", "pathForDirectoryTwoDot/fileForCompletionTestConfigWithoutBaseUrlWithRelativePath" ), strings); } public void testConfigWithoutBaseUrlWithRelativePathCompletion3() { List<String> strings; initForTestsConfigWithoutBaseUrlWithRelativePathCompletion(); // 3 strings = getCompletionStringsForHumanPosition(4, 51); assertCompletionList(Arrays.asList( "pathForDirectoryOneDot/kit", "pathForDirectoryOneDot/configWithoutBaseUrlWithRelativePath" ), strings); } public void testConfigWithoutBaseUrlWithRelativePathCompletion4() { List<String> strings; initForTestsConfigWithoutBaseUrlWithRelativePathCompletion(); // 4 strings = getCompletionStringsForHumanPosition(5, 28); assertCompletionList(Arrays.asList( "kit", "configWithoutBaseUrlWithRelativePath", "pathForBlock", "pathForDirectoryTwoDot/fileWithDotPath", "pathForDirectoryTwoDot/childWebPathFile", "pathForDirectoryTwoDot/fileWithTwoDotPath", "pathForDirectoryTwoDot/block", "pathForDirectoryTwoDot/childBlocks/childBlock", "pathForDirectoryTwoDot/fileForCompletionTestConfigWithoutBaseUrlWithRelativePath", "pathForDirectoryOneDot/kit", "pathForDirectoryOneDot/configWithoutBaseUrlWithRelativePath", "pathForKit" ), strings); } public void testConfigWithoutBaseUrlWithRelativePathCompletion5() { List<String> strings; initForTestsConfigWithoutBaseUrlWithRelativePathCompletion(); // 5 strings = getCompletionStringsForHumanPosition(6, 30); assertCompletionList(Arrays.asList( "./fileWithDotPath", "./childWebPathFile", "./fileWithTwoDotPath", "./block", "./childBlocks/childBlock", "./fileForCompletionTestConfigWithoutBaseUrlWithRelativePath" ), strings); } }