From 035ee662b854128c6435a94768977c34cfea5866 Mon Sep 17 00:00:00 2001 From: Sergey Simonchik Date: Mon, 9 Nov 2015 15:22:46 +0300 Subject: [PATCH] macros: fix ignoreCase comparison; add more tests --- .../ide/macro/FileDirPathFromParentMacro.java | 4 +-- .../intellij/ide/macro/MacroManagerTest.java | 26 +++++++++++++++---- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/macro/FileDirPathFromParentMacro.java b/platform/lang-impl/src/com/intellij/ide/macro/FileDirPathFromParentMacro.java index faee0d18ab2f..c7a70bf1a4cb 100644 --- a/platform/lang-impl/src/com/intellij/ide/macro/FileDirPathFromParentMacro.java +++ b/platform/lang-impl/src/com/intellij/ide/macro/FileDirPathFromParentMacro.java @@ -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; } diff --git a/platform/lang-impl/testSources/com/intellij/ide/macro/MacroManagerTest.java b/platform/lang-impl/testSources/com/intellij/ide/macro/MacroManagerTest.java index 1e75aa12409e..316b9eb1f187 100644 --- a/platform/lang-impl/testSources/com/intellij/ide/macro/MacroManagerTest.java +++ b/platform/lang-impl/testSources/com/intellij/ide/macro/MacroManagerTest.java @@ -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 dataId2data = new THashMap(); + Map 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); } } -- 2.32.0