mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
move tests for scopes into the community project
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
package pack;
|
||||
class AbaB{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package pack;
|
||||
class Ba{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package pack1;
|
||||
class Out {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package pack1.pack2;
|
||||
class In {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
class Test {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package package1;
|
||||
class Test1 {
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
package package1.package2.package3;
|
||||
class Test3 {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,576 @@
|
||||
// Copyright 2000-2018 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.projectView;
|
||||
|
||||
import com.intellij.ide.IdeView;
|
||||
import com.intellij.ide.projectView.ProjectView;
|
||||
import com.intellij.ide.projectView.impl.AbstractProjectViewPane;
|
||||
import com.intellij.ide.projectView.impl.ProjectViewImpl;
|
||||
import com.intellij.ide.projectView.impl.ProjectViewSharedSettings;
|
||||
import com.intellij.ide.scopeView.ScopeTreeViewPanel;
|
||||
import com.intellij.ide.scopeView.ScopeViewPane;
|
||||
import com.intellij.idea.Bombed;
|
||||
import com.intellij.openapi.actionSystem.LangDataKeys;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.command.WriteCommandAction;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.scope.ProjectFilesScope;
|
||||
import com.intellij.psi.search.scope.ProjectProductionScope;
|
||||
import com.intellij.psi.search.scope.packageSet.FilePatternPackageSet;
|
||||
import com.intellij.psi.search.scope.packageSet.NamedScope;
|
||||
import com.intellij.refactoring.PackageWrapper;
|
||||
import com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesProcessor;
|
||||
import com.intellij.refactoring.move.moveClassesOrPackages.SingleSourceRootMoveDestination;
|
||||
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesProcessor;
|
||||
import com.intellij.refactoring.rename.RenameProcessor;
|
||||
import com.intellij.testFramework.PlatformTestUtil;
|
||||
import com.intellij.testFramework.TestSourceBasedTestCase;
|
||||
import com.intellij.util.xmlb.XmlSerializerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Calendar;
|
||||
|
||||
public class ScopeViewPaneTest extends TestSourceBasedTestCase {
|
||||
private static final int DELAY = 200;
|
||||
|
||||
@Override
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
restoreProjectViewDefaultSettings();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tearDown() throws Exception {
|
||||
try {
|
||||
restoreProjectViewDefaultSettings();
|
||||
}
|
||||
finally {
|
||||
super.tearDown();
|
||||
}
|
||||
}
|
||||
|
||||
private static void restoreProjectViewDefaultSettings() {
|
||||
XmlSerializerUtil.copyBean(new ProjectViewSharedSettings(), ProjectViewSharedSettings.Companion.getInstance());
|
||||
}
|
||||
|
||||
@Bombed(user = "SAM", year = 2019, month = Calendar.JUNE, day = 1)
|
||||
public void testStructure() {
|
||||
final Project project = getProject();
|
||||
final ProjectViewImpl view = (ProjectViewImpl)ProjectView.getInstance(project);
|
||||
changeView(view, ProjectProductionScope.INSTANCE);
|
||||
final AbstractProjectViewPane pane = view.getCurrentProjectViewPane();
|
||||
final PsiDirectory src = getContentDirectory().findSubdirectory("src");
|
||||
assert src != null;
|
||||
final PsiDirectory directory1 = src.findSubdirectory("package1");
|
||||
assert directory1 != null;
|
||||
final PsiDirectory directory2 = directory1.findSubdirectory("package2");
|
||||
assert directory2 != null;
|
||||
final PsiDirectory directory = directory2.findSubdirectory("package3");
|
||||
assert directory != null;
|
||||
final PsiFile psiFile = directory.findFile("Test3.java");
|
||||
assert psiFile != null;
|
||||
pane.select(psiFile, psiFile.getVirtualFile(), true);
|
||||
|
||||
PlatformTestUtil.waitWhileBusy(pane.getTree());
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" -package2/package3\n" +
|
||||
" Test3\n" +
|
||||
" Test1\n" +
|
||||
" Test\n", false);
|
||||
|
||||
final PsiPackage psiPackage = JavaDirectoryService.getInstance().getPackage(directory);
|
||||
assert psiPackage != null;
|
||||
WriteCommandAction.runWriteCommandAction(null, () -> psiPackage.getClasses()[0].delete());
|
||||
|
||||
PlatformTestUtil.waitWhileBusy(pane.getTree());
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" Test1\n" +
|
||||
" Test\n", false);
|
||||
|
||||
|
||||
final PsiJavaFile psiFile1 = (PsiJavaFile)directory1.findFile("Test1.java");
|
||||
assert psiFile1 != null;
|
||||
final PsiClass aClass = psiFile1.getClasses()[0];
|
||||
new RenameProcessor(myProject, aClass, "Test111", false, false).run();
|
||||
|
||||
PlatformTestUtil.waitWhileBusy(pane.getTree());
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" Test111\n" +
|
||||
" Test\n", false);
|
||||
|
||||
final PsiClass aClass1 = JavaDirectoryService.getInstance().createClass(directory1, "Class");
|
||||
pane.select(aClass1, aClass1.getContainingFile().getVirtualFile(), true);
|
||||
|
||||
PlatformTestUtil.waitWhileBusy(pane.getTree());
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" Class\n" +
|
||||
" Test111\n" +
|
||||
" Test\n", false);
|
||||
|
||||
new MoveClassesOrPackagesProcessor(myProject,
|
||||
new PsiElement[]{aClass1},
|
||||
new SingleSourceRootMoveDestination(PackageWrapper.create(JavaDirectoryService
|
||||
.getInstance()
|
||||
.getPackage(directory)),
|
||||
directory),
|
||||
false, false, null).run();
|
||||
|
||||
pane.select(aClass1, aClass1.getContainingFile().getVirtualFile(), true);
|
||||
|
||||
PlatformTestUtil.waitWhileBusy(pane.getTree());
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" -package2/package3\n" +
|
||||
" Class\n" +
|
||||
" Test111\n" +
|
||||
" Test\n", false);
|
||||
|
||||
final PsiFile textFile = WriteCommandAction.runWriteCommandAction(null, (Computable<PsiFile>)() -> directory2.createFile("t.txt"));
|
||||
pane.select(textFile, textFile.getVirtualFile(), true);
|
||||
|
||||
PlatformTestUtil.waitWhileBusy(pane.getTree());
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" -package2\n" +
|
||||
" -package3\n" +
|
||||
" Class\n" +
|
||||
" t.txt\n" +
|
||||
" Test111\n" +
|
||||
" Test\n", false);
|
||||
|
||||
new MoveFilesOrDirectoriesProcessor(myProject, new PsiElement[]{textFile}, directory, false, false, null, null).run();
|
||||
|
||||
pane.select(textFile, textFile.getVirtualFile(), true);
|
||||
|
||||
PlatformTestUtil.waitWhileBusy(pane.getTree());
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" -package2/package3\n" +
|
||||
" Class\n" +
|
||||
" t.txt\n" +
|
||||
" Test111\n" +
|
||||
" Test\n", false);
|
||||
|
||||
final PsiDirectory emptyDir = WriteCommandAction.runWriteCommandAction(null,
|
||||
(Computable<PsiDirectory>)() -> directory2.createSubdirectory("emptyDir"));
|
||||
final IdeView data = (IdeView)pane.getData(LangDataKeys.IDE_VIEW.getName());
|
||||
assert data != null;
|
||||
data.selectElement(emptyDir);
|
||||
|
||||
PlatformTestUtil.waitWhileBusy(pane.getTree());
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" -package2\n" +
|
||||
" emptyDir\n" +
|
||||
" -package3\n" +
|
||||
" Class\n" +
|
||||
" t.txt\n" +
|
||||
" Test111\n" +
|
||||
" Test\n", false);
|
||||
|
||||
Disposer.dispose(pane);
|
||||
}
|
||||
|
||||
public void testInScope() {
|
||||
ScopeTreeViewPanel pane = null;
|
||||
try {
|
||||
final NamedScope namedScope = new NamedScope("sc", new FilePatternPackageSet(null, "*/Test3*"));
|
||||
pane = new ScopeTreeViewPanel(getProject()){
|
||||
@Override
|
||||
protected NamedScope getCurrentScope() {
|
||||
return namedScope;
|
||||
}
|
||||
};
|
||||
pane.initListeners();
|
||||
|
||||
final ProjectViewImpl view = (ProjectViewImpl)ProjectView.getInstance(getProject());
|
||||
changeView(view, ProjectFilesScope.INSTANCE);
|
||||
view.setHideEmptyPackages(ScopeViewPane.ID, true);
|
||||
|
||||
pane.refreshScope(namedScope);
|
||||
|
||||
final PsiClass aClass = getJavaFacade().findClass("package1.package2.package3.Test3");
|
||||
assert aClass != null;
|
||||
pane.selectNode(aClass, aClass.getContainingFile(), true);
|
||||
|
||||
PlatformTestUtil.waitForAlarm(DELAY);
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1/package2/package3\n" +
|
||||
" Test3\n", false);
|
||||
|
||||
//exclude from scope
|
||||
new RenameProcessor(myProject, aClass, "ATest3", false, false).run();
|
||||
|
||||
PlatformTestUtil.waitForAlarm(DELAY);
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"Root\n", false);
|
||||
|
||||
//restore in scope
|
||||
new RenameProcessor(myProject, aClass, "Test3", false, false).run();
|
||||
pane.selectNode(aClass, aClass.getContainingFile(), true);
|
||||
PlatformTestUtil.waitForAlarm(DELAY);
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1/package2/package3\n" +
|
||||
" Test3\n", false);
|
||||
|
||||
|
||||
final PsiPackage package3 = JavaPsiFacade.getInstance(getProject()).findPackage("package1.package2.package3");
|
||||
final PsiPackage package1 = JavaPsiFacade.getInstance(getProject()).findPackage("package1");
|
||||
|
||||
new MoveClassesOrPackagesProcessor(myProject,
|
||||
new PsiElement[]{package3},
|
||||
new SingleSourceRootMoveDestination(PackageWrapper.create(package1),
|
||||
package1.getDirectories()[0]),
|
||||
false, false, null).run();
|
||||
|
||||
pane.selectNode(aClass, aClass.getContainingFile(), true);
|
||||
PlatformTestUtil.waitForAlarm(DELAY);
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1/package3\n" +
|
||||
" Test3\n", false);
|
||||
|
||||
final PsiPackage package13 = JavaPsiFacade.getInstance(getProject()).findPackage("package1.package3");
|
||||
final PsiPackage package123 = JavaPsiFacade.getInstance(getProject()).findPackage("package1.package2");
|
||||
new MoveClassesOrPackagesProcessor(myProject,
|
||||
new PsiElement[]{package13},
|
||||
new SingleSourceRootMoveDestination(PackageWrapper.create(package123),
|
||||
package123.getDirectories()[0]),
|
||||
false, false, null).run();
|
||||
|
||||
pane.selectNode(aClass, aClass.getContainingFile(), true);
|
||||
PlatformTestUtil.waitForAlarm(DELAY);
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1/package2/package3\n" +
|
||||
" Test3\n", false);
|
||||
}
|
||||
finally {
|
||||
if (pane != null) {
|
||||
Disposer.dispose(pane);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void testInScopeNoCompacting() {
|
||||
ScopeTreeViewPanel pane = null;
|
||||
try {
|
||||
final NamedScope namedScope = new NamedScope("sc", new FilePatternPackageSet(null, "*/Test3*"));
|
||||
pane = new ScopeTreeViewPanel(getProject()){
|
||||
@Override
|
||||
protected NamedScope getCurrentScope() {
|
||||
return namedScope;
|
||||
}
|
||||
};
|
||||
pane.initListeners();
|
||||
|
||||
final ProjectViewImpl view = (ProjectViewImpl)ProjectView.getInstance(getProject());
|
||||
changeView(view, ProjectFilesScope.INSTANCE);
|
||||
view.setHideEmptyPackages(ScopeViewPane.ID, false);
|
||||
|
||||
pane.refreshScope(namedScope);
|
||||
|
||||
final PsiClass aClass = getJavaFacade().findClass("package1.package2.package3.Test3");
|
||||
assert aClass != null;
|
||||
pane.selectNode(aClass, aClass.getContainingFile(), true);
|
||||
|
||||
PlatformTestUtil.waitForAlarm(DELAY);
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" -package2\n" +
|
||||
" -package3\n" +
|
||||
" Test3\n", false);
|
||||
|
||||
//exclude from scope
|
||||
new RenameProcessor(myProject, aClass, "ATest3", false, false).run();
|
||||
|
||||
PlatformTestUtil.waitForAlarm(DELAY);
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"Root\n", false);
|
||||
|
||||
//restore in scope
|
||||
new RenameProcessor(myProject, aClass, "Test3", false, false).run();
|
||||
pane.selectNode(aClass, aClass.getContainingFile(), true);
|
||||
PlatformTestUtil.waitForAlarm(DELAY);
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" -package2\n" +
|
||||
" -package3\n" +
|
||||
" Test3\n", false);
|
||||
|
||||
|
||||
final PsiPackage package3 = JavaPsiFacade.getInstance(getProject()).findPackage("package1.package2.package3");
|
||||
final PsiPackage package1 = JavaPsiFacade.getInstance(getProject()).findPackage("package1");
|
||||
|
||||
new MoveClassesOrPackagesProcessor(myProject,
|
||||
new PsiElement[]{package3},
|
||||
new SingleSourceRootMoveDestination(PackageWrapper.create(package1),
|
||||
package1.getDirectories()[0]),
|
||||
false, false, null).run();
|
||||
|
||||
pane.selectNode(aClass, aClass.getContainingFile(), true);
|
||||
PlatformTestUtil.waitForAlarm(DELAY);
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" -package3\n" +
|
||||
" Test3\n", false);
|
||||
|
||||
final PsiPackage package13 = JavaPsiFacade.getInstance(getProject()).findPackage("package1.package3");
|
||||
final PsiPackage package123 = JavaPsiFacade.getInstance(getProject()).findPackage("package1.package2");
|
||||
new MoveClassesOrPackagesProcessor(myProject,
|
||||
new PsiElement[]{package13},
|
||||
new SingleSourceRootMoveDestination(PackageWrapper.create(package123),
|
||||
package123.getDirectories()[0]),
|
||||
false, false, null).run();
|
||||
|
||||
pane.selectNode(aClass, aClass.getContainingFile(), true);
|
||||
PlatformTestUtil.waitForAlarm(DELAY);
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" -package2\n" +
|
||||
" -package3\n" +
|
||||
" Test3\n", false);
|
||||
}
|
||||
finally {
|
||||
if (pane != null) {
|
||||
Disposer.dispose(pane);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Bombed(user = "SAM", year = 2020, month = Calendar.JANUARY, day = 1)
|
||||
public void testCompactEmptyDirectories() {
|
||||
final Project project = getProject();
|
||||
final ProjectViewImpl view = (ProjectViewImpl)ProjectView.getInstance(project);
|
||||
changeView(view, ProjectFilesScope.INSTANCE);
|
||||
view.setHideEmptyPackages(ScopeViewPane.ID, true);
|
||||
final AbstractProjectViewPane pane = view.getCurrentProjectViewPane();
|
||||
final PsiDirectory src = getContentDirectory().findSubdirectory("src");
|
||||
assert src != null;
|
||||
final PsiDirectory directory1 = src.findSubdirectory("package1");
|
||||
assert directory1 != null;
|
||||
final PsiDirectory directory2 = directory1.findSubdirectory("package2");
|
||||
assert directory2 != null;
|
||||
final PsiDirectory directory = directory2.findSubdirectory("package3");
|
||||
assert directory != null;
|
||||
|
||||
final PsiPackage psiPackage = JavaDirectoryService.getInstance().getPackage(directory1);
|
||||
assert psiPackage != null;
|
||||
|
||||
WriteCommandAction.runWriteCommandAction(null, () -> psiPackage.getClasses()[0].delete());
|
||||
|
||||
|
||||
final PsiFile psiFile3 = directory.findFile("Test3.java");
|
||||
assert psiFile3 != null;
|
||||
pane.select(psiFile3, psiFile3.getVirtualFile(), true);
|
||||
|
||||
PlatformTestUtil.waitWhileBusy(pane.getTree());
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1/package2/package3\n" +
|
||||
" Test3\n" +
|
||||
" Test\n", false);
|
||||
|
||||
final PsiJavaFile psiFile = (PsiJavaFile)src.findFile("Test.java");
|
||||
assert psiFile != null;
|
||||
final PsiClass aClass111 = psiFile.getClasses()[0];
|
||||
new RenameProcessor(myProject, aClass111, "Test111", false, false).run();
|
||||
|
||||
PlatformTestUtil.waitWhileBusy(pane.getTree());
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1/package2/package3\n" +
|
||||
" Test3\n" +
|
||||
" Test111\n", false);
|
||||
|
||||
final PsiClass aClass = JavaDirectoryService.getInstance().createClass(directory2, "Class");
|
||||
pane.select(aClass, aClass.getContainingFile().getVirtualFile(), true);
|
||||
|
||||
PlatformTestUtil.waitWhileBusy(pane.getTree());
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1/package2\n" +
|
||||
" +package3\n" +
|
||||
" Class\n" +
|
||||
" Test111\n", false);
|
||||
|
||||
view.setFlattenPackages(ScopeViewPane.ID, true);
|
||||
pane.select(aClass, aClass.getContainingFile().getVirtualFile(), true);
|
||||
|
||||
PlatformTestUtil.waitWhileBusy(pane.getTree());
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(),
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1/package2\n" +
|
||||
" Class\n" +
|
||||
" +package1/package2/package3\n" +
|
||||
" Test111\n", false);
|
||||
|
||||
Disposer.dispose(pane);
|
||||
}
|
||||
|
||||
@Bombed(user = "SAM", year = 2020, month = Calendar.JANUARY, day = 1)
|
||||
public void testFlattenPackages() {
|
||||
final Project project = getProject();
|
||||
final ProjectViewImpl view = (ProjectViewImpl)ProjectView.getInstance(project);
|
||||
changeView(view, ProjectFilesScope.INSTANCE);
|
||||
view.setFlattenPackages(ScopeViewPane.ID, true);
|
||||
final AbstractProjectViewPane pane = view.getCurrentProjectViewPane();
|
||||
final PsiDirectory src = getContentDirectory().findSubdirectory("src");
|
||||
assert src != null;
|
||||
final PsiDirectory directory1 = src.findSubdirectory("package1");
|
||||
assert directory1 != null;
|
||||
final PsiDirectory directory2 = directory1.findSubdirectory("package2");
|
||||
assert directory2 != null;
|
||||
final PsiDirectory directory = directory2.findSubdirectory("package3");
|
||||
assert directory != null;
|
||||
final PsiFile psiFile = directory.findFile("Test3.java");
|
||||
assert psiFile != null;
|
||||
pane.select(psiFile, psiFile.getVirtualFile(), true);
|
||||
|
||||
PlatformTestUtil.waitWhileBusy(pane.getTree());
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(), "-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" +package1\n" +
|
||||
" -package1/package2/package3\n" +
|
||||
" Test3\n" +
|
||||
" Test\n", false);
|
||||
|
||||
final PsiPackage psiPackage = JavaDirectoryService.getInstance().getPackage(directory);
|
||||
assert psiPackage != null;
|
||||
ApplicationManager.getApplication().runWriteAction(() -> psiPackage.getClasses()[0].delete());
|
||||
|
||||
|
||||
final PsiJavaFile psiFile1 = (PsiJavaFile)directory1.findFile("Test1.java");
|
||||
assert psiFile1 != null;
|
||||
pane.select(psiFile1, psiFile1.getVirtualFile(), true);
|
||||
|
||||
PlatformTestUtil.waitWhileBusy(pane.getTree());
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(), "-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" Test1\n" +
|
||||
" Test\n", false);
|
||||
|
||||
final PsiClass aClass = psiFile1.getClasses()[0];
|
||||
new RenameProcessor(myProject, aClass, "Test111", false, false).run();
|
||||
|
||||
PlatformTestUtil.waitWhileBusy(pane.getTree());
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(), "-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" Test111\n" +
|
||||
" Test\n", false);
|
||||
|
||||
final PsiClass aClass1 = JavaDirectoryService.getInstance().createClass(directory1, "Class");
|
||||
pane.select(aClass1, aClass1.getContainingFile().getVirtualFile(), true);
|
||||
|
||||
PlatformTestUtil.waitWhileBusy(pane.getTree());
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(), "-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" Class\n" +
|
||||
" Test111\n" +
|
||||
" Test\n", false);
|
||||
|
||||
view.setHideEmptyPackages(ScopeViewPane.ID, true);
|
||||
pane.select(aClass1, aClass1.getContainingFile().getVirtualFile(), true);
|
||||
|
||||
PlatformTestUtil.waitWhileBusy(pane.getTree());
|
||||
PlatformTestUtil.assertTreeEqual(pane.getTree(), "-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" Class\n" +
|
||||
" Test111\n" +
|
||||
" Test\n", false);
|
||||
|
||||
Disposer.dispose(pane);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTestPath() {
|
||||
return "packageSet";
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected String getTestDirectoryName() {
|
||||
return "structure";
|
||||
}
|
||||
|
||||
private static void changeView(@NotNull ProjectView view, @NotNull NamedScope scope) {
|
||||
AbstractProjectViewPane pane = view.getProjectViewPaneById(ScopeViewPane.ID);
|
||||
for (String id : pane.getSubIds()) {
|
||||
if (id.startsWith(scope.toString())) {
|
||||
view.changeViewCB(ScopeViewPane.ID, id);
|
||||
assertSame("view not changed", pane, view.getCurrentProjectViewPane());
|
||||
return;
|
||||
}
|
||||
}
|
||||
fail("scope not found: " + scope);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
// Copyright 2000-2018 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.scopes;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightTestCase;
|
||||
import com.intellij.ide.util.scopeChooser.ScopeChooserConfigurable;
|
||||
import com.intellij.ide.util.scopeChooser.ScopeConfigurable;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.ui.MasterDetailsStateService;
|
||||
import com.intellij.packageDependencies.DependencyValidationManager;
|
||||
import com.intellij.psi.search.scope.packageSet.NamedScope;
|
||||
import com.intellij.psi.search.scope.packageSet.PatternPackageSet;
|
||||
|
||||
public class ScopeConfigurableTest extends CodeInsightTestCase {
|
||||
public void testModified() throws ConfigurationException {
|
||||
DependencyValidationManager manager = DependencyValidationManager.getInstance(getProject());
|
||||
final ScopeChooserConfigurable.ScopeChooserConfigurableState state = new ScopeChooserConfigurable.ScopeChooserConfigurableState();
|
||||
NamedScope utilScope = new NamedScope("util", new PatternPackageSet( "java.util.*", PatternPackageSet.SCOPE_LIBRARY, null));
|
||||
manager.addScope(utilScope);
|
||||
state.myOrder.add(utilScope.getName());
|
||||
NamedScope xScope = new NamedScope("xxx", new PatternPackageSet("*..*", PatternPackageSet.SCOPE_ANY, null));
|
||||
manager.addScope(xScope);
|
||||
state.myOrder.add(xScope.getName());
|
||||
try {
|
||||
ScopeChooserConfigurable configurable = new ScopeChooserConfigurable(getProject());
|
||||
MasterDetailsStateService.getInstance(getProject()).setComponentState(ScopeChooserConfigurable.SCOPE_CHOOSER_CONFIGURABLE_UI_KEY, state);
|
||||
configurable.reset();
|
||||
assertFalse(configurable.isModified());
|
||||
configurable.apply();
|
||||
assertFalse(configurable.isModified());
|
||||
}
|
||||
finally {
|
||||
manager.removeAllSets();
|
||||
}
|
||||
}
|
||||
|
||||
public void testScopeConfigurablesModified() throws ConfigurationException {
|
||||
DependencyValidationManager manager = DependencyValidationManager.getInstance(getProject());
|
||||
NamedScope utilscope = new NamedScope("util", new PatternPackageSet("java.util.*", PatternPackageSet.SCOPE_LIBRARY, null));
|
||||
manager.addScope(utilscope);
|
||||
try {
|
||||
for (NamedScope scope : manager.getScopes()) {
|
||||
System.out.println("scope = " + scope);
|
||||
ScopeConfigurable configurable = new ScopeConfigurable(scope, true, getProject(), null);
|
||||
configurable.reset();
|
||||
assertFalse("Configurable " + configurable + " is modified immediately after creation", configurable.isModified());
|
||||
assertTrue(!configurable.isModified());
|
||||
configurable.apply();
|
||||
}
|
||||
}
|
||||
finally {
|
||||
manager.removeAllSets();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
// Copyright 2000-2018 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.scopes;
|
||||
|
||||
import com.intellij.module.ModuleGroupTestsKt;
|
||||
import com.intellij.openapi.application.WriteAction;
|
||||
import com.intellij.openapi.command.WriteCommandAction;
|
||||
import com.intellij.openapi.command.undo.UndoManager;
|
||||
import com.intellij.openapi.fileEditor.FileEditor;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||
import com.intellij.openapi.module.EmptyModuleType;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.packageDependencies.DependencyValidationManager;
|
||||
import com.intellij.packageDependencies.ui.RefactoringScopeElementListenerProvider;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.search.scope.packageSet.*;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.refactoring.rename.RenameUtil;
|
||||
import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase;
|
||||
import com.intellij.usageView.UsageInfo;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class ScopeRefactoringTest extends JavaCodeInsightFixtureTestCase {
|
||||
public void testClassRename() {
|
||||
doTestClassRename("src:p.A", "src:p.B");
|
||||
}
|
||||
|
||||
public void testUnionPattern() {
|
||||
doTestClassRename("src:p.A||src:p.X", "src:p.B||src:p.X");
|
||||
}
|
||||
|
||||
public void testDoNotRenameEntryInDifferentPackage() {
|
||||
doTestClassRename("src:x.p.A||src:p.A", "src:x.p.A||src:p.B");
|
||||
}
|
||||
|
||||
public void testClassRenameWhenFilePatternIsUsed() {
|
||||
doTestClassRename("file:p/A.java", "file:p/B.java");
|
||||
}
|
||||
|
||||
private void doTestClassRename(String oldPattern, String newPattern) {
|
||||
final PsiClass psiClass = myFixture.addClass("package p; public class A {}");
|
||||
final VirtualFile file = PsiUtilCore.getVirtualFile(psiClass);
|
||||
assertNotNull(file);
|
||||
myFixture.openFileInEditor(file);
|
||||
final String scopeName = "myscope";
|
||||
PackageSet packageSet;
|
||||
try {
|
||||
packageSet = PackageSetFactory.getInstance().compile(oldPattern);
|
||||
}
|
||||
catch (ParsingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
NamedScope namedScope = new NamedScope(scopeName, packageSet);
|
||||
final DependencyValidationManager validationManager = DependencyValidationManager.getInstance(getProject());
|
||||
validationManager.addScope(namedScope);
|
||||
WriteCommandAction.runWriteCommandAction(
|
||||
getProject(),
|
||||
() -> RenameUtil.doRename(psiClass, "B", UsageInfo.EMPTY_ARRAY, getProject(),
|
||||
new RefactoringScopeElementListenerProvider().getListener(psiClass)));
|
||||
namedScope = validationManager.getScope(scopeName);
|
||||
assertNotNull(namedScope);
|
||||
PackageSet value = namedScope.getValue();
|
||||
assertNotNull(value);
|
||||
String valueText = value.getText();
|
||||
assertEquals(newPattern, valueText);
|
||||
|
||||
final FileEditor selectedEditor = FileEditorManager.getInstance(getProject()).getSelectedEditor(file);
|
||||
UndoManager.getInstance(getProject()).undo(selectedEditor);
|
||||
namedScope = validationManager.getScope(scopeName);
|
||||
assertNotNull(namedScope);
|
||||
value = namedScope.getValue();
|
||||
assertNotNull(value);
|
||||
valueText = value.getText();
|
||||
assertEquals(oldPattern, valueText);
|
||||
validationManager.setScopes(new NamedScope[0]);
|
||||
}
|
||||
|
||||
public void testRenameModule() throws IOException {
|
||||
String path = FileUtil.createTempDirectory("renameModuleInScope", null).getAbsolutePath();
|
||||
Module module = WriteAction.compute(
|
||||
() -> ModuleManager.getInstance(getProject()).newModule(path + "/m.iml", EmptyModuleType.EMPTY_MODULE));
|
||||
String scopeName = "module";
|
||||
NamedScopeManager.getInstance(getProject()).addScope(new NamedScope(scopeName, new FilePatternPackageSet(module.getName(), "*/")));
|
||||
|
||||
String newName = "newModuleName";
|
||||
ModuleGroupTestsKt.renameModule(module, newName);
|
||||
NamedScope scope = NamedScopeManager.getInstance(getProject()).getScope(scopeName);
|
||||
assertEquals(newName, assertInstanceOf(scope.getValue(), FilePatternPackageSet.class).getModulePattern());
|
||||
}
|
||||
|
||||
public void testRenameModuleInCompositeScope() throws IOException {
|
||||
String path = FileUtil.createTempDirectory("renameModuleInScope", null).getAbsolutePath();
|
||||
Module module = WriteAction.compute(
|
||||
() -> ModuleManager.getInstance(getProject()).newModule(path + "/m.iml", EmptyModuleType.EMPTY_MODULE));
|
||||
String scopeName = "module";
|
||||
NamedScopeManager.getInstance(getProject()).addScope(new NamedScope(scopeName,
|
||||
UnionPackageSet.create(
|
||||
new FilePatternPackageSet(module.getName(), "*/a.txt"),
|
||||
new FilePatternPackageSet(module.getName(), "*/b.txt"))));
|
||||
|
||||
String newName = "newModuleName";
|
||||
ModuleGroupTestsKt.renameModule(module, newName);
|
||||
NamedScope scope = NamedScopeManager.getInstance(getProject()).getScope(scopeName);
|
||||
PackageSet firstSet = assertInstanceOf(scope.getValue(), UnionPackageSet.class).getSets()[0];
|
||||
PackageSet secondSet = assertInstanceOf(scope.getValue(), UnionPackageSet.class).getSets()[1];
|
||||
assertEquals(newName, assertInstanceOf(firstSet, FilePatternPackageSet.class).getModulePattern());
|
||||
assertEquals(newName, assertInstanceOf(secondSet, FilePatternPackageSet.class).getModulePattern());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
// Copyright 2000-2018 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.scopes;
|
||||
|
||||
import com.intellij.openapi.application.WriteAction;
|
||||
import com.intellij.openapi.module.ModifiableModuleModel;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.packageDependencies.ui.DependenciesPanel;
|
||||
import com.intellij.packageDependencies.ui.FileTreeModelBuilder;
|
||||
import com.intellij.packageDependencies.ui.Marker;
|
||||
import com.intellij.packageDependencies.ui.TreeModel;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.testFramework.PlatformTestUtil;
|
||||
import com.intellij.testFramework.TestSourceBasedTestCase;
|
||||
import com.intellij.ui.treeStructure.Tree;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.ui.tree.TreeUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.tree.DefaultMutableTreeNode;
|
||||
import javax.swing.tree.TreeNode;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class ScopeViewTest extends TestSourceBasedTestCase {
|
||||
private static final Marker ALL_MARKED = new Marker() {
|
||||
@Override
|
||||
public boolean isMarked(@NotNull VirtualFile file) {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
public void testFiles() {
|
||||
final Set<PsiFile> set = new HashSet<>();
|
||||
ContainerUtil.addAll(set, getPackageDirectory("package1").getFiles());
|
||||
ContainerUtil.addAll(set, getPackageDirectory("package1/package2/package3").getFiles());
|
||||
ContainerUtil.addAll(set, getPackageDirectory(".").getFiles());
|
||||
final DependenciesPanel.DependencyPanelSettings panelSettings = new DependenciesPanel.DependencyPanelSettings();
|
||||
panelSettings.UI_COMPACT_EMPTY_MIDDLE_PACKAGES = false;
|
||||
panelSettings.UI_FLATTEN_PACKAGES = false;
|
||||
panelSettings.UI_SHOW_FILES = true;
|
||||
panelSettings.UI_FILTER_LEGALS = false;
|
||||
panelSettings.UI_SHOW_MODULES = true;
|
||||
panelSettings.UI_GROUP_BY_SCOPE_TYPE = false;
|
||||
TreeModel model = FileTreeModelBuilder.createTreeModel(getProject(), false, set, ALL_MARKED, panelSettings);
|
||||
|
||||
JTree tree = new Tree();
|
||||
tree.setModel(model);
|
||||
TreeUtil.expandAll(tree);
|
||||
PlatformTestUtil.assertTreeEqual(tree,
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" -package2\n" +
|
||||
" -package3\n" +
|
||||
" Test3.java\n" +
|
||||
" Test1.java\n" +
|
||||
" Test.java\n");
|
||||
|
||||
panelSettings.UI_COMPACT_EMPTY_MIDDLE_PACKAGES = true;
|
||||
model = FileTreeModelBuilder.createTreeModel(getProject(), false, set, ALL_MARKED, panelSettings);
|
||||
tree.setModel(model);
|
||||
TreeUtil.expandAll(tree);
|
||||
TreeUtil.traverse((TreeNode)model.getRoot(), node -> {
|
||||
((DefaultMutableTreeNode)node).setUserObject(node.toString());
|
||||
return true;
|
||||
});
|
||||
PlatformTestUtil.assertTreeEqual(tree,
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" -package2/package3\n" +
|
||||
" Test3.java\n" +
|
||||
" Test1.java\n" +
|
||||
" Test.java\n");
|
||||
|
||||
panelSettings.UI_FLATTEN_PACKAGES = true;
|
||||
model = FileTreeModelBuilder.createTreeModel(getProject(), false, set, ALL_MARKED, panelSettings);
|
||||
tree.setModel(model);
|
||||
TreeUtil.expandAll(tree);
|
||||
PlatformTestUtil.assertTreeEqual(tree,
|
||||
"-Root\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" Test1.java\n" +
|
||||
" -package1/package2/package3\n" +
|
||||
" Test3.java\n" +
|
||||
" Test.java\n");
|
||||
}
|
||||
|
||||
public void testModuleGroups() throws Exception {
|
||||
ModifiableModuleModel moduleModel = ModuleManager.getInstance(myProject).getModifiableModel();
|
||||
moduleModel.setModuleGroupPath(myModule, new String[]{"a", "b"});
|
||||
moduleModel.renameModule(myModule, "module");
|
||||
WriteAction.run(moduleModel::commit);
|
||||
createModule("util"); // groups aren't shown for single-module projects so we need to add an empty second module
|
||||
|
||||
Set<PsiFile> files = ContainerUtil.set(getPackageDirectory("package1").getFiles());
|
||||
DependenciesPanel.DependencyPanelSettings settings = new DependenciesPanel.DependencyPanelSettings();
|
||||
settings.UI_GROUP_BY_SCOPE_TYPE = false;
|
||||
TreeModel model = FileTreeModelBuilder.createTreeModel(getProject(), false, files, ALL_MARKED, settings);
|
||||
JTree tree = new Tree(model);
|
||||
TreeUtil.expandAll(tree);
|
||||
PlatformTestUtil.assertTreeEqual(tree, "-Root\n" +
|
||||
" -a\n" +
|
||||
" -b\n" +
|
||||
" -module\n" +
|
||||
" -structure\n" +
|
||||
" -src\n" +
|
||||
" -package1\n" +
|
||||
" Test1.java\n");
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected String getTestDirectoryName() {
|
||||
return "structure";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTestPath() {
|
||||
return "packageSet";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user