Files
openide/java/java-tests/testSrc/com/intellij/projectView/PackagesTreeStructureTest.java
Tagir Valeev aa6829d7c1 [java-tests] IDEA-333831 Separate mock JDK and JetBrains annotations for testing
Also: avoid manual mocking of Java 10 classes in StreamCollector10Inlining test, use mockJDK11 instead
Also: rewrite SliceTestCase and its inheritors to LightJavaCodeInsightFixtureTestCase, as annotations.jar is not included into project created by DaemonAnalyzerTestCase
Also: 'mutates' attribute of @Contract annotation is resolvable now, as we can use newer jetbrains-annotations library.
Also: documentation tests now don't generate links to JetBrains annotations, which corresponds to the actual behavior in production

GitOrigin-RevId: e460826893c1277cb2b78b18aae9d5aca97d8333
2023-10-05 11:24:29 +00:00

245 lines
8.0 KiB
Java

/*
* Copyright 2000-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.projectView;
import com.intellij.ide.projectView.ProjectView;
import com.intellij.ide.projectView.impl.PackageViewPane;
import com.intellij.ide.projectView.impl.ProjectAbstractTreeStructureBase;
import com.intellij.ide.projectView.impl.ProjectViewImpl;
import com.intellij.lang.properties.projectView.ResourceBundleGrouper;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.module.ModifiableModuleModel;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.testFramework.PlatformTestUtil;
import com.intellij.testFramework.TestSourceBasedTestCase;
import com.intellij.util.ui.tree.TreeUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.io.IOException;
public class PackagesTreeStructureTest extends TestSourceBasedTestCase {
public void testPackageView() {
ModifiableModuleModel moduleModel = ModuleManager.getInstance(myProject).getModifiableModel();
moduleModel.setModuleGroupPath(myModule, new String[]{"Group"});
WriteAction.runAndWait(() -> moduleModel.commit());
final VirtualFile srcFile = getSrcDirectory().getVirtualFile();
if (srcFile.findChild("empty") == null){
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
try {
srcFile.createChildDirectory(this, "empty");
}
catch (IOException e) {
fail(e.getLocalizedMessage());
}
}
});
}
doTest(true, true,
"""
-Project
-Module
-PsiPackage: com.package1
Class1.java
Class2.java
Class4.java
emptyClassFile.class
Form1.form
Form1.java
Form2.form
PsiPackage: empty
-PsiPackage: java
Class1.java
-PsiPackage: javax.servlet
Class1.java
-Libraries
-PsiPackage: java
+PsiPackage: awt
+PsiPackage: beans.beancontext
+PsiPackage: io
+PsiPackage: lang
+PsiPackage: net
+PsiPackage: rmi
+PsiPackage: security
+PsiPackage: sql
+PsiPackage: util
-PsiPackage: javax.swing
+PsiPackage: table
AbstractButton.class
Icon.class
JButton.class
JComponent.class
JDialog.class
JFrame.class
JLabel.class
JPanel.class
JScrollPane.class
JTable.class
SwingConstants.class
SwingUtilities.class
-PsiPackage: META-INF
MANIFEST.MF
LICENSE
"""
, 4);
doTest(false, true,
"""
-Project
-PsiPackage: com.package1
Class1.java
Class2.java
Class4.java
emptyClassFile.class
Form1.form
Form1.java
Form2.form
PsiPackage: empty
-PsiPackage: java
Class1.java
-PsiPackage: javax.servlet
Class1.java
-Libraries
-PsiPackage: java
+PsiPackage: awt
+PsiPackage: beans.beancontext
+PsiPackage: io
+PsiPackage: lang
+PsiPackage: net
+PsiPackage: rmi
+PsiPackage: security
+PsiPackage: sql
+PsiPackage: util
-PsiPackage: javax.swing
+PsiPackage: table
AbstractButton.class
Icon.class
JButton.class
JComponent.class
JDialog.class
JFrame.class
JLabel.class
JPanel.class
JScrollPane.class
JTable.class
SwingConstants.class
SwingUtilities.class
-PsiPackage: META-INF
MANIFEST.MF
LICENSE
"""
, 3);
doTest(true, false,
"""
-Project
-Module
-PsiPackage: com.package1
Class1.java
Class2.java
Class4.java
emptyClassFile.class
Form1.form
Form1.java
Form2.form
PsiPackage: empty
-PsiPackage: java
Class1.java
-PsiPackage: javax.servlet
Class1.java
""", 3);
doTest(false, false, true, true, """
-Project
-PsiPackage: com.package1
Class1.java
Class2.java
Class4.java
emptyClassFile.class
Form1.form
Form1.java
Form2.form
PsiPackage: empty
-PsiPackage: java
Class1.java
-PsiPackage: j.servlet
Class1.java
""", 3);
doTest(false, false, """
-Project
-PsiPackage: com.package1
Class1.java
Class2.java
Class4.java
emptyClassFile.class
Form1.form
Form1.java
Form2.form
PsiPackage: empty
-PsiPackage: java
Class1.java
-PsiPackage: javax.servlet
Class1.java
""", 3);
}
private void doTest(final boolean showModules, final boolean showLibraryContents, @NonNls final String expected, final int levels) {
doTest(showModules, showLibraryContents, false, false, expected, levels);
}
private void doTest(final boolean showModules, final boolean showLibraryContents, boolean flattenPackages, boolean abbreviatePackageNames, @NonNls final String expected, final int levels) {
final ProjectViewImpl projectView = (ProjectViewImpl)ProjectView.getInstance(myProject);
projectView.setShowModules(PackageViewPane.ID, showModules);
projectView.setShowLibraryContents(PackageViewPane.ID, showLibraryContents);
projectView.setFlattenPackages(PackageViewPane.ID, flattenPackages);
projectView.setAbbreviatePackageNames(PackageViewPane.ID, abbreviatePackageNames);
projectView.setHideEmptyPackages(PackageViewPane.ID, true);
PackageViewPane packageViewPane = new PackageViewPane(myProject) {
@NotNull
@Override
protected ProjectAbstractTreeStructureBase createStructure() {
ProjectAbstractTreeStructureBase structure = super.createStructure();
structure.setProviders(new ResourceBundleGrouper(myProject));
return structure;
}
};
packageViewPane.createComponent();
JTree tree = packageViewPane.getTree();
PlatformTestUtil.waitForPromise(TreeUtil.promiseExpand(tree, levels));
PlatformTestUtil.assertTreeEqual(tree, expected);
BaseProjectViewTestCase.checkContainsMethod(packageViewPane.getTreeStructure().getRootElement(), packageViewPane.getTreeStructure());
Disposer.dispose(packageViewPane);
}
@Override
protected String getTestPath() {
return "projectView";
}
}