macros: fix ignoreCase comparison; add more tests dbe/144.962 phpstorm/144.961 pycharm/144.963
authorSergey Simonchik <sergey.simonchik@jetbrains.com>
Mon, 9 Nov 2015 12:22:46 +0000 (15:22 +0300)
committerSergey Simonchik <sergey.simonchik@jetbrains.com>
Mon, 9 Nov 2015 12:22:46 +0000 (15:22 +0300)
platform/lang-impl/src/com/intellij/ide/macro/FileDirPathFromParentMacro.java
platform/lang-impl/testSources/com/intellij/ide/macro/MacroManagerTest.java

index faee0d18ab2f1f437bbf7b6ac47c2da58ba0f26b..c7a70bf1a4cb6eafde22fc2e5eeefba524a7021d 100644 (file)
@@ -65,7 +65,7 @@ public class FileDirPathFromParentMacro extends Macro {
     if (ind >= 0) {
       return surroundedDirPath.substring(ind + surroundedSubDir.length());
     }
-    return dirPath;
+    return dirPath.endsWith(PATH_DELIMITER) ? dirPath : dirPath + PATH_DELIMITER;
   }
 
   private static int lastIndexOf(@NotNull CharSequence buffer, @NotNull String pattern, int maxIndex, boolean ignoreCase) {
@@ -78,7 +78,7 @@ public class FileDirPathFromParentMacro extends Macro {
       boolean found = true;
       for (int j = 0; j < patternLength; j++) {
         if (ignoreCase) {
-          if (StringUtil.charsEqualIgnoreCase(pattern.charAt(j), buffer.charAt(i + j))) {
+          if (!StringUtil.charsEqualIgnoreCase(pattern.charAt(j), buffer.charAt(i + j))) {
             found = false;
             break;
           }
index 1e75aa12409e15270e1f074ea8dfae43b5520b8f..316b9eb1f18765fbf63c0326c71ef1f8a18188d4 100644 (file)
@@ -20,6 +20,7 @@ import com.intellij.openapi.actionSystem.DataContext;
 import com.intellij.openapi.actionSystem.PlatformDataKeys;
 import com.intellij.openapi.actionSystem.impl.SimpleDataContext;
 import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.psi.PsiFile;
 import com.intellij.testFramework.fixtures.CodeInsightFixtureTestCase;
@@ -37,7 +38,7 @@ public class MacroManagerTest extends CodeInsightFixtureTestCase {
 
   public DataContext getContext(VirtualFile file) {
     Project project = myFixture.getProject();
-    Map<String, Object> dataId2data = new THashMap<String, Object>();
+    Map<String, Object> dataId2data = new THashMap<>();
     dataId2data.put(CommonDataKeys.PROJECT.getName(), project);
     dataId2data.put(CommonDataKeys.VIRTUAL_FILE.getName(), file);
     dataId2data.put(PlatformDataKeys.PROJECT_FILE_DIRECTORY.getName(), project.getBaseDir());
@@ -50,13 +51,28 @@ public class MacroManagerTest extends CodeInsightFixtureTestCase {
       "ans: $FileParentDir(bar)$ ",
       "ans: " + myFixture.getTempDirPath() + File.separator + "foo "
     );
-  }
-
-  public void testFileDirPathFromParentMacro() throws Throwable {
     doTest(
-      "foo/bar/baz/test.txt",
+      "foo/bar/baz/test2.txt",
       "ans: $FileDirPathFromParent(bar)$ ",
       "ans: baz/ "
     );
+    doTest(
+      "foo/bar/baz/test3.txt",
+      "ans: $FileDirPathFromParent(foo/bar)$ ",
+      "ans: baz/ "
+    );
+    doTest(
+      "foo/bar/baz/test4.txt",
+      "ans: $FileDirPathFromParent(foo/bar/baz/)$ ",
+      "ans:  "
+    );
+  }
+
+  public void testFileDirPathFromParentMacro_NoParentFound() throws Throwable {
+    PsiFile file = myFixture.addFileToProject("foo/bar/baz/test.txt", "");
+    String args = "ans: $FileDirPathFromParent(qqq/)$ ";
+    String actual = MacroManager.getInstance().expandMacrosInString(args, false, getContext(file.getVirtualFile()));
+    String expected = "ans: " + StringUtil.trimEnd(file.getVirtualFile().getParent().getPath(), "/") + "/ ";
+    assertEquals(expected, actual);
   }
 }