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
;
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>" +
56 " <module>m1</module>" +
57 " <module>m2</module>" +
61 "<groupId>test</groupId>" +
62 "<artifactId>m1</artifactId>" +
63 "<version>1</version>");
66 "<groupId>test</groupId>" +
67 "<artifactId>m2</artifactId>" +
68 "<version>1</version>");
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");
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
) {
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>" +
181 " <module>m1</module>" +
182 " <module>m2</module>" +
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>");
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
) {
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);