use nio.Path instead of io.File in jps project serializers with check on file existence
[idea/community.git] / java / idea-ui / testSrc / com / intellij / ide / projectWizard / ImportActionTest.java
1 // 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.
2 package com.intellij.ide.projectWizard;
3
4 import com.intellij.ide.actions.ImportModuleAction;
5 import com.intellij.ide.util.newProjectWizard.AddModuleWizard;
6 import com.intellij.ide.util.projectWizard.ImportFromSourcesProvider;
7 import com.intellij.ide.util.projectWizard.ModuleImportProvider;
8 import com.intellij.openapi.application.ex.PathManagerEx;
9 import com.intellij.openapi.module.Module;
10 import com.intellij.openapi.module.ModuleManager;
11 import com.intellij.openapi.project.Project;
12 import com.intellij.openapi.roots.ModuleRootManager;
13 import com.intellij.openapi.roots.OrderEntry;
14 import com.intellij.openapi.roots.libraries.Library;
15 import com.intellij.openapi.roots.libraries.LibraryTable;
16 import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar;
17 import com.intellij.openapi.util.io.FileUtil;
18 import com.intellij.openapi.vfs.LocalFileSystem;
19 import com.intellij.openapi.vfs.VirtualFile;
20 import com.intellij.util.containers.ContainerUtil;
21
22 import java.io.File;
23 import java.util.ArrayList;
24 import java.util.List;
25 import java.util.Set;
26
27 /**
28  * @author Dmitry Avdeev
29  */
30 public class ImportActionTest extends ProjectWizardTestCase<AddModuleWizard> {
31
32   public void testImportModule() {
33     String path = PathManagerEx.getTestDataPath("/ide/importAction/module/foo.iml");
34     VirtualFile file = LocalFileSystem.getInstance().refreshAndFindFileByPath(path);
35     assertNotNull(file);
36     assertEquals(1, ModuleManager.getInstance(getProject()).getModules().length);
37     Module module = importModuleFrom(new ModuleImportProvider(), file.getPath());
38     assertEquals("foo", module.getName());
39     assertEquals(2, ModuleManager.getInstance(getProject()).getModules().length);
40   }
41
42   public void testImportModuleFromSources() {
43     Module module = importModuleFrom(new ImportFromSourcesProvider(), PathManagerEx.getTestDataPath("/ide/importAction/sources"));
44     assertEquals("importAction", module.getName());
45     VirtualFile[] roots = ModuleRootManager.getInstance(module).getSourceRoots();
46     assertEquals(1, roots.length);
47   }
48
49   public void testBalanced() {
50     String path = getModuleMaximizationPath("balanced");
51     Project project = importProjectFrom(path, null, new ImportFromSourcesProvider()).getProject();
52     Module[] modules = ModuleManager.getInstance(project).getModules();
53     assertEquals(2, modules.length);
54     List<VirtualFile> contentRoots = getSingleContentRoots(modules);
55     assertPathsEqual(path + "/m1", contentRoots.get(0).getPath());
56     assertPathsEqual(path + "/m2", contentRoots.get(1).getPath());
57   }
58
59   public void testUnbalanced() {
60     String path = getModuleMaximizationPath("unbalanced");
61     Project project = importProjectFrom(path, null, new ImportFromSourcesProvider()).getProject();
62     Module[] modules = ModuleManager.getInstance(project).getModules();
63     assertEquals(2, modules.length);
64     List<VirtualFile> contentRoots = getSingleContentRoots(modules);
65     assertPathsEqual(path + "/inner/m1", contentRoots.get(0).getPath());
66     assertPathsEqual(path + "/inner/m2", contentRoots.get(1).getPath());
67   }
68
69   public void testSingleModuleInProject() {
70     String path = getModuleMaximizationPath("single");
71     Project project = importProjectFrom(path, null, new ImportFromSourcesProvider()).getProject();
72     Module[] modules = ModuleManager.getInstance(project).getModules();
73     assertEquals(1, modules.length);
74     List<VirtualFile> contentRoots = getSingleContentRoots(modules);
75     assertPathsEqual(path, contentRoots.get(0).getPath());
76   }
77
78   private static void assertPathsEqual(String path1, String path2) {
79     assertEquals(FileUtil.normalize(path1), FileUtil.normalize(path2));
80   }
81
82   private static String getModuleMaximizationPath(String projectName) {
83     String basePath = "/ide/importAction/moduleMaximization";
84     return PathManagerEx.getTestDataPath(basePath + "/" + projectName);
85   }
86
87   private static List<VirtualFile> getSingleContentRoots(Module[] modules) {
88     List<VirtualFile> contentRoots = new ArrayList<>();
89     for (Module module : modules) {
90       VirtualFile[] moduleContentRoots = ModuleRootManager.getInstance(module).getContentRoots();
91       assertEquals(1, moduleContentRoots.length);
92       contentRoots.add(moduleContentRoots[0]);
93     }
94     return contentRoots;
95   }
96
97   public void testImportProjectFromSources() throws Exception {
98     File file = createTempFile("Foo.java", "class Foo {}");
99     Module module = importProjectFrom(file.getParent(), step -> {
100       if (step != null) {
101         assertEquals("Existing sources", myWizard.getSequence().getSelectedType());
102       }
103     }, new ImportFromSourcesProvider());
104
105     VirtualFile[] roots = ModuleRootManager.getInstance(module).getSourceRoots();
106     assertEquals(1, roots.length);
107   }
108
109   public void testImportProjectWithLibrary() throws Exception {
110     File tempDirectory = createTempDirectory();
111     FileUtil.copyDir(new File(PathManagerEx.getTestDataPath("/ide/importAction/project")), tempDirectory);
112     Module module = importProjectFrom(tempDirectory.getPath(), null, new ImportFromSourcesProvider());
113     LibraryTable table = LibraryTablesRegistrar.getInstance().getLibraryTable(module.getProject());
114     Library[] libraries = table.getLibraries();
115     assertEquals(1, libraries.length);
116     OrderEntry[] entries = ModuleRootManager.getInstance(module).getOrderEntries();
117     assertEquals(3, entries.length);
118     assertEquals("google-play-services", entries[2].getPresentableName());
119   }
120
121   public void testProvidersCompatibility() {
122     Set<Class<?>> project = ContainerUtil.map2Set(ImportModuleAction.getProviders(null), p -> p.getClass());
123     assertFalse(project.contains(ModuleImportProvider.class));
124     Set<Class<?>> modular = ContainerUtil.map2Set(ImportModuleAction.getProviders(getProject()), p -> p.getClass());
125     assertTrue(modular.contains(ModuleImportProvider.class));
126   }
127 }