Files
Dmitry Trofimov 13503ced4c Rationalize PlatformCoreDataKeys usages
GitOrigin-RevId: a07b3295a4af22918daa19f521888645f16e8017
2021-08-25 15:23:28 +00:00

76 lines
3.4 KiB
Java

// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.ide.macro;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.PlatformCoreDataKeys;
import com.intellij.openapi.actionSystem.impl.SimpleDataContext;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.testFramework.PlatformTestUtil;
import com.intellij.testFramework.fixtures.CodeInsightFixtureTestCase;
import java.io.File;
public class MacroManagerTest extends CodeInsightFixtureTestCase {
private void doTest(String filePath, String str, String expected) throws Macro.ExecutionCancelledException {
PsiFile file = myFixture.addFileToProject(filePath, "");
String actual = MacroManager.getInstance().expandMacrosInString(str, false, getContext(file.getVirtualFile()));
assertEquals(expected, actual);
}
public DataContext getContext(VirtualFile file) {
Project project = myFixture.getProject();
return SimpleDataContext.builder()
.add(CommonDataKeys.PROJECT, project)
.add(CommonDataKeys.VIRTUAL_FILE, file)
.add(PlatformCoreDataKeys.PROJECT_FILE_DIRECTORY, PlatformTestUtil.getOrCreateProjectBaseDir(project))
.build();
}
public void testFileParentDirMacro() throws Throwable {
doTest(
"foo/bar/baz/test.txt",
"ans: $FileParentDir(bar)$ ",
"ans: " + myFixture.getTempDirPath() + File.separator + "foo "
);
doTest(
"foo/bar/baz/test2.txt",
"ans: $FileDirPathFromParent(bar)$ ",
"ans: baz" + File.separator + " "
);
doTest(
"foo/bar/baz/test3.txt",
"ans: $FileDirPathFromParent(foo/bar)$ ",
"ans: baz" + File.separator + " "
);
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: " + FileUtil.toSystemDependentName(StringUtil.trimEnd(file.getVirtualFile().getParent().getPath(), "/") + "/ ");
assertEquals(expected, actual);
}
public void testContentRootMacro() throws Exception {
String root = FileUtil.toSystemDependentName(ModuleRootManager.getInstance(myModule).getContentRoots()[0].getPath());
doTest("foo/bar/baz.txt", "$ContentRoot$", root);
doTest("foo/bar/baz2.txt", "$ContentRoot$$ContentRoot$", root+root);
doTest("foo/bar/baz3.txt", "$ContentRoot$$ContentRoot$$ContentRoot$", root+root+root);
doTest("foo/bar/baz4.txt", "$ContentRoot$test", root+"test");
doTest("foo/bar/baz5.txt", "test$ContentRoot$$ContentRoot$", "test"+root+root);
doTest("foo/bar/baz6.txt", "test$ContentRoot$test$ContentRoot$", "test"+root+"test"+root);
doTest("foo/bar/baz7.txt", "$ContentRoot$$ContentRoot$$ContentRoot$test", root+root+root+"test");
}
}