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
.importing
;
18 import com
.intellij
.openapi
.roots
.CompilerModuleExtension
;
19 import com
.intellij
.openapi
.roots
.ModuleRootManager
;
20 import com
.intellij
.openapi
.vfs
.VirtualFile
;
21 import org
.jetbrains
.idea
.maven
.MavenImportingTestCase
;
22 import org
.jetbrains
.idea
.maven
.importing
.MavenDefaultModifiableModelsProvider
;
23 import org
.jetbrains
.idea
.maven
.importing
.MavenRootModelAdapter
;
24 import org
.jetbrains
.idea
.maven
.indices
.MavenCustomRepositoryHelper
;
25 import org
.jetbrains
.idea
.maven
.utils
.Path
;
29 public class FoldersImportingTest
extends MavenImportingTestCase
{
30 public void testSimpleProjectStructure() throws Exception
{
31 createStdProjectFolders();
33 importProject("<groupId>test</groupId>" +
34 "<artifactId>project</artifactId>" +
35 "<version>1</version>");
37 assertModules("project");
38 assertContentRoots("project", getProjectPath());
40 assertSources("project", "src/main/java", "src/main/resources");
41 assertTestSources("project", "src/test/java", "src/test/resources");
44 public void testInvalidProjectHasContentRoot() throws Exception
{
45 importProject("<groupId>test</groupId>" +
46 "<artifactId>project</artifactId>" +
49 assertModules("project");
50 assertContentRoots("project", getProjectPath());
53 public void testDoNotResetFoldersAfterResolveIfProjectIsInvalid() throws Exception
{
54 createStdProjectFolders();
56 importProject("<groupId>test</groupId>" +
57 "<artifactId>project</artifactId>" +
58 "<version>1</version>" +
63 " <groupId>xxx</groupId>" +
64 " <artifactId>xxx</artifactId>" +
65 " <version>xxx</version>" +
70 assertModules("project");
71 assertSources("project", "src/main/java", "src/main/resources");
72 assertTestSources("project", "src/test/java", "src/test/resources");
75 public void testDoesNotResetUserFolders() throws Exception
{
76 VirtualFile dir1
= createProjectSubDir("userSourceFolder");
77 VirtualFile dir2
= createProjectSubDir("userExcludedFolder");
79 importProject("<groupId>test</groupId>" +
80 "<artifactId>project</artifactId>" +
81 "<version>1</version>");
83 MavenRootModelAdapter adapter
= new MavenRootModelAdapter(myProjectsTree
.findProject(myProjectPom
),
85 new MavenDefaultModifiableModelsProvider(myProject
));
86 adapter
.addSourceFolder(dir1
.getPath(), false);
87 adapter
.addExcludedFolder(dir2
.getPath());
88 adapter
.getRootModel().commit();
90 assertSources("project", "userSourceFolder");
91 assertExcludes("project", "target", "userExcludedFolder");
95 assertSources("project", "userSourceFolder");
96 assertExcludes("project", "target", "userExcludedFolder");
98 resolveFoldersAndImport();
100 assertSources("project", "userSourceFolder");
101 assertExcludes("project", "target", "userExcludedFolder");
104 public void testCustomSourceFolders() throws Exception
{
105 createStdProjectFolders();
106 createProjectSubDirs("src", "test", "res1", "res2", "testRes1", "testRes2");
108 importProject("<groupId>test</groupId>" +
109 "<artifactId>project</artifactId>" +
110 "<version>1</version>" +
113 " <sourceDirectory>src</sourceDirectory>" +
114 " <testSourceDirectory>test</testSourceDirectory>" +
116 " <resource><directory>res1</directory></resource>" +
117 " <resource><directory>res2</directory></resource>" +
120 " <testResource><directory>testRes1</directory></testResource>" +
121 " <testResource><directory>testRes2</directory></testResource>" +
122 " </testResources>" +
125 assertModules("project");
126 assertContentRoots("project", getProjectPath());
128 assertSources("project", "src", "res1", "res2");
129 assertTestSources("project", "test", "testRes1", "testRes2");
132 public void testDoNotAddCustomSourceFoldersOutsideOfContentRoot() throws Exception
{
133 createStdProjectFolders();
134 createProjectSubDirs("m",
140 createProjectPom("<groupId>test</groupId>" +
141 "<artifactId>project</artifactId>" +
142 "<packaging>pom</packaging>" +
143 "<version>1</version>" +
146 " <module>m</module>" +
149 createModulePom("m", "<groupId>test</groupId>" +
150 "<artifactId>m</artifactId>" +
151 "<version>1</version>" +
154 " <sourceDirectory>../src</sourceDirectory>" +
155 " <testSourceDirectory>../test</testSourceDirectory>" +
157 " <resource><directory>../res</directory></resource>" +
160 " <testResource><directory>../testRes</directory></testResource>" +
161 " </testResources>" +
164 assertModules("project", "m");
165 assertContentRoots("m",
166 getProjectPath() + "/m");
167 //getProjectPath() + "/src",
168 //getProjectPath() + "/test",
169 //getProjectPath() + "/res",
170 //getProjectPath() + "/testRes");
173 public void testPluginSources() throws Exception
{
174 createStdProjectFolders();
175 createProjectSubDirs("src1", "src2");
177 importProject("<groupId>test</groupId>" +
178 "<artifactId>project</artifactId>" +
179 "<version>1</version>" +
184 " <groupId>org.codehaus.mojo</groupId>" +
185 " <artifactId>build-helper-maven-plugin</artifactId>" +
186 " <version>1.3</version>" +
190 " <phase>generate-sources</phase>" +
192 " <goal>add-source</goal>" +
196 " <source>${basedir}/src1</source>" +
197 " <source>${basedir}/src2</source>" +
199 " </configuration>" +
205 resolveFoldersAndImport();
206 assertModules("project");
208 assertSources("project", "src/main/java", "src/main/resources", "src1", "src2");
211 public void testPluginSourceDuringGenerateResourcesPhase() throws Exception
{
212 createStdProjectFolders();
213 createProjectSubDirs("extraResources");
215 importProject("<groupId>test</groupId>" +
216 "<artifactId>project</artifactId>" +
217 "<version>1</version>" +
222 " <groupId>org.codehaus.mojo</groupId>" +
223 " <artifactId>build-helper-maven-plugin</artifactId>" +
224 " <version>1.3</version>" +
228 " <phase>generate-resources</phase>" +
230 " <goal>add-source</goal>" +
234 " <source>${basedir}/extraResources</source>" +
236 " </configuration>" +
242 resolveFoldersAndImport();
243 assertModules("project");
245 assertSources("project", "extraResources", "src/main/java", "src/main/resources");
248 public void testPluginTestSourcesDuringGenerateTestResourcesPhase() throws Exception
{
249 createStdProjectFolders();
250 createProjectSubDirs("extraTestResources");
252 getMavenImporterSettings().setUpdateFoldersOnImportPhase("generate-test-resources");
254 importProject("<groupId>test</groupId>" +
255 "<artifactId>project</artifactId>" +
256 "<version>1</version>" +
261 " <groupId>org.codehaus.mojo</groupId>" +
262 " <artifactId>build-helper-maven-plugin</artifactId>" +
263 " <version>1.3</version>" +
267 " <phase>generate-test-resources</phase>" +
269 " <goal>add-test-source</goal>" +
273 " <source>${basedir}/extraTestResources</source>" +
275 " </configuration>" +
281 resolveFoldersAndImport();
282 assertModules("project");
284 assertTestSources("project", "extraTestResources", "src/test/java", "src/test/resources");
287 public void testPluginSourcesWithRelativePath() throws Exception
{
288 createStdProjectFolders();
289 createProjectSubDirs("relativePath");
291 importProject("<groupId>test</groupId>" +
292 "<artifactId>project</artifactId>" +
293 "<version>1</version>" +
298 " <groupId>org.codehaus.mojo</groupId>" +
299 " <artifactId>build-helper-maven-plugin</artifactId>" +
300 " <version>1.3</version>" +
304 " <phase>generate-sources</phase>" +
306 " <goal>add-source</goal>" +
310 " <source>relativePath</source>" +
312 " </configuration>" +
318 resolveFoldersAndImport();
319 assertModules("project");
321 assertSources("project", "src/main/java", "src/main/resources", "relativePath");
324 public void testPluginSourcesWithVariables() throws Exception
{
325 createStdProjectFolders();
326 createProjectSubDirs("target/src");
328 importProject("<groupId>test</groupId>" +
329 "<artifactId>project</artifactId>" +
330 "<version>1</version>" +
335 " <groupId>org.codehaus.mojo</groupId>" +
336 " <artifactId>build-helper-maven-plugin</artifactId>" +
337 " <version>1.3</version>" +
341 " <phase>generate-sources</phase>" +
343 " <goal>add-source</goal>" +
347 " <source>${project.build.directory}/src</source>" +
349 " </configuration>" +
355 resolveFoldersAndImport();
356 assertModules("project");
358 assertSources("project", "src/main/java", "src/main/resources", "target/src");
361 public void testPluginSourcesWithIntermoduleDependency() throws Exception
{
362 createProjectSubDirs("m1/src/main/java",
363 "m1/src/main/resources",
366 createProjectPom("<groupId>test</groupId>" +
367 "<artifactId>project</artifactId>" +
368 "<version>1</version>" +
371 " <module>m1</module>" +
372 " <module>m2</module>" +
375 createModulePom("m1",
376 "<groupId>test</groupId>" +
377 "<artifactId>m1</artifactId>" +
378 "<version>1</version>" +
382 " <groupId>test</groupId>" +
383 " <artifactId>m2</artifactId>" +
384 " <version>1</version>" +
391 " <groupId>org.codehaus.mojo</groupId>" +
392 " <artifactId>build-helper-maven-plugin</artifactId>" +
393 " <version>1.3</version>" +
397 " <phase>generate-sources</phase>" +
399 " <goal>add-source</goal>" +
403 " <source>src/foo</source>" +
405 " </configuration>" +
412 createModulePom("m2",
413 "<groupId>test</groupId>" +
414 "<artifactId>m2</artifactId>" +
415 "<version>1</version>");
417 assertModules("project", "m1", "m2");
419 resolveFoldersAndImport();
420 assertSources("m1", "src/main/java", "src/main/resources", "src/foo");
423 public void testDownloadingNecessaryPlugins() throws Exception
{
424 MavenCustomRepositoryHelper helper
= new MavenCustomRepositoryHelper(myDir
, "local1");
425 setRepositoryPath(helper
.getTestDataPath("local1"));
427 File pluginFile
= new File(getRepositoryPath(),
428 "org/codehaus/mojo/build-helper-maven-plugin/1.2/build-helper-maven-plugin-1.2.jar");
429 assertFalse(pluginFile
.exists());
431 importProject("<groupId>test</groupId>" +
432 "<artifactId>project</artifactId>" +
433 "<version>1</version>" +
438 " <groupId>org.codehaus.mojo</groupId>" +
439 " <artifactId>build-helper-maven-plugin</artifactId>" +
440 " <version>1.2</version>" +
444 " <phase>generate-sources</phase>" +
446 " <goal>add-source</goal>" +
450 " <source>src</source>" +
452 " </configuration>" +
458 resolveDependenciesAndImport();
459 resolveFoldersAndImport();
461 assertTrue(pluginFile
.exists());
464 public void testAddingExistingGeneratedSources() throws Exception
{
465 createStdProjectFolders();
466 createProjectSubDirs("target/generated-sources/src1",
467 "target/generated-sources/src2");
469 importProject("<groupId>test</groupId>" +
470 "<artifactId>project</artifactId>" +
471 "<version>1</version>");
473 assertSources("project",
475 "src/main/resources",
476 "target/generated-sources/src1",
477 "target/generated-sources/src2");
480 public void testAddingExistingGeneratedSourcesWithCustomTargetDir() throws Exception
{
481 createStdProjectFolders();
482 createProjectSubDirs("targetCustom/generated-sources/src1",
483 "targetCustom/generated-sources/src2");
485 importProject("<groupId>test</groupId>" +
486 "<artifactId>project</artifactId>" +
487 "<version>1</version>" +
490 " <directory>targetCustom</directory>" +
493 assertSources("project",
495 "src/main/resources",
496 "targetCustom/generated-sources/src1",
497 "targetCustom/generated-sources/src2");
500 public void testDoesNotAddAlreadyRegisteredSourcesUnderGeneratedDir() throws Exception
{
501 createStdProjectFolders();
502 createProjectSubDir("target/generated-sources/main/src");
504 importProject("<groupId>test</groupId>" +
505 "<artifactId>project</artifactId>" +
506 "<version>1</version>" +
511 " <groupId>org.codehaus.mojo</groupId>" +
512 " <artifactId>build-helper-maven-plugin</artifactId>" +
513 " <version>1.3</version>" +
517 " <phase>generate-sources</phase>" +
519 " <goal>add-source</goal>" +
523 " <source>target/generated-sources/main/src</source>" +
525 " </configuration>" +
531 resolveFoldersAndImport();
533 assertSources("project",
535 "src/main/resources",
536 "target/generated-sources/main/src");
539 public void testIgnoringFilesRightUnderGeneratedSources() throws Exception
{
540 createStdProjectFolders();
541 createProjectSubFile("target/generated-sources/f.txt");
543 importProject("<groupId>test</groupId>" +
544 "<artifactId>project</artifactId>" +
545 "<version>1</version>");
547 assertSources("project", "src/main/java", "src/main/resources");
550 public void testExcludingOutputDirectories() throws Exception
{
551 importProject("<groupId>test</groupId>" +
552 "<artifactId>project</artifactId>" +
553 "<version>1</version>");
554 assertModules("project");
556 assertExcludes("project", "target");
557 assertModuleOutput("project",
558 getProjectPath() + "/target/classes",
559 getProjectPath() + "/target/test-classes");
562 public void testExcludingOutputDirectoriesIfProjectOutputIsUsed() throws Exception
{
563 getMavenImporterSettings().setUseMavenOutput(false);
565 importProject("<groupId>test</groupId>" +
566 "<artifactId>project</artifactId>" +
567 "<version>1</version>" +
570 " <directory>foo</directory>" +
572 assertModules("project");
574 assertExcludes("project", "foo");
575 assertProjectOutput("project");
578 public void testExcludingCustomOutputDirectories() throws Exception
{
579 importProject("<groupId>test</groupId>" +
580 "<artifactId>project</artifactId>" +
581 "<version>1</version>" +
584 " <directory>targetCustom</directory>" +
585 " <outputDirectory>outputCustom</outputDirectory>" +
586 " <testOutputDirectory>testCustom</testOutputDirectory>" +
589 assertModules("project");
591 assertExcludes("project",
595 assertModuleOutput("project",
596 getProjectPath() + "/outputCustom",
597 getProjectPath() + "/testCustom");
600 public void testExcludingCustomOutputUnderTargetUsingStandardVariable() throws Exception
{
601 importProject("<groupId>test</groupId>" +
602 "<artifactId>project</artifactId>" +
603 "<version>1</version>" +
606 " <outputDirectory>${project.build.directory}/outputCustom</outputDirectory>" +
607 " <testOutputDirectory>${project.build.directory}/testCustom</testOutputDirectory>" +
610 assertModules("project");
612 assertExcludes("project", "target");
613 assertModuleOutput("project",
614 getProjectPath() + "/target/outputCustom",
615 getProjectPath() + "/target/testCustom");
618 public void testOutputDirsOutsideOfContentRoot() throws Exception
{
619 importProject("<groupId>test</groupId>" +
620 "<artifactId>project</artifactId>" +
621 "<version>1</version>" +
624 " <directory>../target</directory>" +
625 " <outputDirectory>../target/classes</outputDirectory>" +
626 " <testOutputDirectory>../target/test-classes</testOutputDirectory>" +
629 String targetPath
= getParentPath() + "/target";
630 String targetUrl
= new Path(targetPath
).toUrl().getUrl();
632 assertContentRoots("project", getProjectPath());
634 //ContentEntry targetEntry = null;
635 //for (ContentEntry each : getContentRoots("project")) {
636 // if (each.getUrl().equals(targetUrl)) {
637 // targetEntry = each;
641 //ExcludeFolder[] excludedFolders = targetEntry.getExcludeFolders();
642 //assertEquals(1, excludedFolders.length);
643 //assertEquals(targetUrl, excludedFolders[0].getUrl());
645 assertModuleOutput("project",
646 getParentPath() + "/target/classes",
647 getParentPath() + "/target/test-classes");
650 public void testDoesNotExcludeGeneratedSourcesUnderTargetDir() throws Exception
{
651 createStdProjectFolders();
652 createProjectSubDirs("target/foo",
654 "target/generated-sources/baz");
656 importProject("<groupId>test</groupId>" +
657 "<artifactId>project</artifactId>" +
658 "<version>1</version>");
660 assertExcludes("project", "target/foo", "target/bar");
662 assertSources("project",
664 "src/main/resources",
665 "target/generated-sources/baz");
668 public void testDoesNotExcludeSourcesUnderTargetDir() throws Exception
{
669 createStdProjectFolders();
670 createProjectSubDirs("target/src",
674 importProject("<groupId>test</groupId>" +
675 "<artifactId>project</artifactId>" +
676 "<version>1</version>" +
679 " <sourceDirectory>target/src</sourceDirectory>" +
680 " <testSourceDirectory>target/test</testSourceDirectory>" +
683 assertModules("project");
685 assertExcludes("project", "target/xxx");
688 public void testDoesNotExcludeSourcesUnderTargetDirWithProperties() throws Exception
{
689 createProjectSubDirs("target/src", "target/xxx");
691 importProject("<groupId>test</groupId>" +
692 "<artifactId>project</artifactId>" +
693 "<version>1</version>" +
696 " <sourceDirectory>${project.build.directory}/src</sourceDirectory>" +
699 assertModules("project");
701 assertSources("project", "target/src");
702 assertExcludes("project", "target/xxx");
705 public void testDoesNotExcludeFoldersWithSourcesUnderTargetDir() throws Exception
{
706 createStdProjectFolders();
707 createProjectSubDirs("target/src/main",
710 importProject("<groupId>test</groupId>" +
711 "<artifactId>project</artifactId>" +
712 "<version>1</version>" +
715 " <sourceDirectory>target/src/main</sourceDirectory>" +
718 assertModules("project");
720 assertExcludes("project", "target/foo");
722 assertSources("project",
724 "src/main/resources");
727 public void testUnexcludeNewSources() throws Exception
{
728 createProjectSubDirs("target/foo");
729 createProjectSubDirs("target/src");
730 createProjectSubDirs("target/test/subFolder");
732 importProject("<groupId>test</groupId>" +
733 "<artifactId>project</artifactId>" +
734 "<version>1</version>");
736 assertExcludes("project", "target");
738 createProjectPom("<groupId>test</groupId>" +
739 "<artifactId>project</artifactId>" +
740 "<version>1</version>" +
743 " <sourceDirectory>target/src</sourceDirectory>" +
744 " <testSourceDirectory>target/test/subFolder</testSourceDirectory>" +
748 assertSources("project", "target/src");
749 assertTestSources("project", "target/test/subFolder");
750 assertExcludes("project", "target/foo");
753 public void testUnexcludeNewSourcesUnderCompilerOutputDir() throws Exception
{
754 createProjectSubDirs("target/classes/src");
756 importProject("<groupId>test</groupId>" +
757 "<artifactId>project</artifactId>" +
758 "<version>1</version>");
760 assertExcludes("project", "target");
761 //assertTrue(getCompilerExtension("project").isExcludeOutput());
763 createProjectPom("<groupId>test</groupId>" +
764 "<artifactId>project</artifactId>" +
765 "<version>1</version>" +
768 " <sourceDirectory>target/classes/src</sourceDirectory>" +
772 assertSources("project", "target/classes/src");
773 assertExcludes("project");
775 //assertFalse(getCompilerExtension("project").isExcludeOutput());
778 private CompilerModuleExtension
getCompilerExtension(String moduleName
) {
779 return ModuleRootManager
.getInstance(getModule(moduleName
)).getModuleExtension(CompilerModuleExtension
.class);