Maven: correctly excluding output folders (IDEA-20803)
[fedora-idea.git] / plugins / maven / src / test / java / org / jetbrains / idea / maven / project / MavenFoldersImporterTest.java
blobd02596f9f1e14ebc7f7659352ca276448419522f
1 /*
2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org.jetbrains.idea.maven.project;
18 import com.intellij.ProjectTopics;
19 import com.intellij.openapi.roots.CompilerModuleExtension;
20 import com.intellij.openapi.roots.ModuleRootEvent;
21 import com.intellij.openapi.roots.ModuleRootListener;
22 import com.intellij.openapi.roots.ModuleRootManager;
23 import com.intellij.openapi.vfs.VirtualFile;
24 import org.jetbrains.idea.maven.MavenImportingTestCase;
25 import org.jetbrains.idea.maven.importing.MavenDefaultModifiableModelsProvider;
26 import org.jetbrains.idea.maven.importing.MavenFoldersImporter;
27 import org.jetbrains.idea.maven.importing.MavenRootModelAdapter;
29 import java.io.File;
31 public class MavenFoldersImporterTest extends MavenImportingTestCase {
32 public void testUpdatingExternallyCreatedFolders() throws Exception {
33 importProject("<groupId>test</groupId>" +
34 "<artifactId>project</artifactId>" +
35 "<version>1</version>");
37 myProjectRoot.getChildren(); // make sure fs is cached
39 new File(myProjectRoot.getPath(), "target/foo").mkdirs();
40 new File(myProjectRoot.getPath(), "target/generated-sources/xxx").mkdirs();
41 updateProjectFolders();
43 assertExcludes("project", "target/foo");
44 assertSources("project", "target/generated-sources/xxx");
46 assertNull(myProjectRoot.findChild("target"));
49 public void testUpdatingFoldersForAllTheProjects() throws Exception {
50 createProjectPom("<groupId>test</groupId>" +
51 "<artifactId>project</artifactId>" +
52 "<packaging>pom</packaging>" +
53 "<version>1</version>" +
55 "<modules>" +
56 " <module>m1</module>" +
57 " <module>m2</module>" +
58 "</modules>");
60 createModulePom("m1",
61 "<groupId>test</groupId>" +
62 "<artifactId>m1</artifactId>" +
63 "<version>1</version>");
65 createModulePom("m2",
66 "<groupId>test</groupId>" +
67 "<artifactId>m2</artifactId>" +
68 "<version>1</version>");
70 importProject();
72 assertExcludes("m1", "target");
73 assertExcludes("m2", "target");
75 new File(myProjectRoot.getPath(), "m1/target/foo").mkdirs();
76 new File(myProjectRoot.getPath(), "m1/target/generated-sources/xxx").mkdirs();
77 new File(myProjectRoot.getPath(), "m2/target/bar").mkdirs();
78 new File(myProjectRoot.getPath(), "m2/target/generated-sources/yyy").mkdirs();
80 updateProjectFolders();
82 assertExcludes("m1", "target/foo");
83 assertSources("m1", "target/generated-sources/xxx");
85 assertExcludes("m2", "target/bar");
86 assertSources("m2", "target/generated-sources/yyy");
89 public void testDoesNotTouchSourceFolders() throws Exception {
90 createStdProjectFolders();
91 importProject("<groupId>test</groupId>" +
92 "<artifactId>project</artifactId>" +
93 "<version>1</version>");
95 assertSources("project", "src/main/java", "src/main/resources");
96 assertTestSources("project", "src/test/java", "src/test/resources");
98 updateProjectFolders();
100 assertSources("project", "src/main/java", "src/main/resources");
101 assertTestSources("project", "src/test/java", "src/test/resources");
104 public void testDoesNotExcludeRegisteredSources() throws Exception {
105 importProject("<groupId>test</groupId>" +
106 "<artifactId>project</artifactId>" +
107 "<version>1</version>");
109 new File(myProjectRoot.getPath(), "target/foo").mkdirs();
110 File sourceDir = new File(myProjectRoot.getPath(), "target/src");
111 sourceDir.mkdirs();
113 MavenRootModelAdapter adapter = new MavenRootModelAdapter(myProjectsTree.findProject(myProjectPom),
114 getModule("project"),
115 new MavenDefaultModifiableModelsProvider(myProject));
116 adapter.addSourceFolder(sourceDir.getPath(), false);
117 adapter.getRootModel().commit();
119 updateProjectFolders();
121 assertSources("project", "target/src");
122 assertExcludes("project", "target/foo");
125 public void testDoesNothingWithNonMavenModules() throws Exception {
126 importProject("<groupId>test</groupId>" +
127 "<artifactId>project</artifactId>" +
128 "<version>1</version>");
130 createModule("userModule");
131 updateProjectFolders(); // shouldn't throw exceptions
134 public void testDoNotUpdateOutputFoldersWhenUpdatingExcludedFolders() throws Exception {
135 importProject("<groupId>test</groupId>" +
136 "<artifactId>project</artifactId>" +
137 "<version>1</version>");
139 MavenRootModelAdapter adapter = new MavenRootModelAdapter(myProjectsTree.findProject(myProjectPom),
140 getModule("project"),
141 new MavenDefaultModifiableModelsProvider(myProject));
142 adapter.useModuleOutput(new File(myProjectRoot.getPath(), "target/my-classes").getPath(),
143 new File(myProjectRoot.getPath(), "target/my-test-classes").getPath());
144 adapter.getRootModel().commit();
146 MavenFoldersImporter.updateProjectFolders(myProject, true);
148 ModuleRootManager rootManager = ModuleRootManager.getInstance(getModule("project"));
149 CompilerModuleExtension compiler = rootManager.getModuleExtension(CompilerModuleExtension.class);
150 assertTrue(compiler.getCompilerOutputUrl(), compiler.getCompilerOutputUrl().endsWith("my-classes"));
151 assertTrue(compiler.getCompilerOutputUrlForTests(), compiler.getCompilerOutputUrlForTests().endsWith("my-test-classes"));
154 public void testDoNotCommitIfFoldersWasNotChanged() throws Exception {
155 importProject("<groupId>test</groupId>" +
156 "<artifactId>project</artifactId>" +
157 "<version>1</version>");
159 final int[] count = new int[]{0};
160 myProject.getMessageBus().connect().subscribe(ProjectTopics.PROJECT_ROOTS, new ModuleRootListener() {
161 public void beforeRootsChange(ModuleRootEvent event) {
164 public void rootsChanged(ModuleRootEvent event) {
165 count[0]++;
169 updateProjectFolders();
171 assertEquals(0, count[0]);
174 public void testCommitOnlyOnceForAllModules() throws Exception {
175 createProjectPom("<groupId>test</groupId>" +
176 "<artifactId>project</artifactId>" +
177 "<packaging>pom</packaging>" +
178 "<version>1</version>" +
180 "<modules>" +
181 " <module>m1</module>" +
182 " <module>m2</module>" +
183 "</modules>");
185 VirtualFile m1 = createModulePom("m1",
186 "<groupId>test</groupId>" +
187 "<artifactId>m1</artifactId>" +
188 "<version>1</version>");
190 VirtualFile m2 = createModulePom("m2",
191 "<groupId>test</groupId>" +
192 "<artifactId>m2</artifactId>" +
193 "<version>1</version>");
195 importProject();
197 final int[] count = new int[]{0};
198 myProject.getMessageBus().connect().subscribe(ProjectTopics.PROJECT_ROOTS, new ModuleRootListener() {
199 public void beforeRootsChange(ModuleRootEvent event) {
202 public void rootsChanged(ModuleRootEvent event) {
203 count[0]++;
207 new File(myProjectRoot.getPath(), "target/generated-sources/foo").mkdirs();
208 new File(m1.getPath(), "target/generated-sources/bar").mkdirs();
209 new File(m2.getPath(), "target/generated-sources/baz").mkdirs();
211 updateProjectFolders();
213 assertEquals(1, count[0]);
216 private void updateProjectFolders() {
217 MavenFoldersImporter.updateProjectFolders(myProject, false);