View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.project;
20  
21  import java.io.File;
22  import java.io.IOException;
23  import java.util.List;
24  import java.util.Map;
25  
26  import org.apache.maven.model.DependencyManagement;
27  import org.apache.maven.model.Model;
28  import org.apache.maven.model.Parent;
29  import org.apache.maven.model.Profile;
30  
31  public class MavenProjectTest extends AbstractMavenProjectTestCase {
32  
33      public void testShouldInterpretChildPathAdjustmentBasedOnModulePaths() throws IOException {
34          Model parentModel = new Model();
35          parentModel.addModule("../child");
36  
37          MavenProject parentProject = new MavenProject(parentModel);
38  
39          Model childModel = new Model();
40          childModel.setArtifactId("artifact");
41  
42          MavenProject childProject = new MavenProject(childModel);
43  
44          File childFile = new File(
45                  System.getProperty("java.io.tmpdir"),
46                  "maven-project-tests" + System.currentTimeMillis() + "/child/pom.xml");
47  
48          childProject.setFile(childFile);
49  
50          String adjustment = parentProject.getModulePathAdjustment(childProject);
51  
52          assertNotNull(adjustment);
53  
54          assertEquals("..", adjustment);
55      }
56  
57      public void testIdentityProtoInheritance() {
58          Parent parent = new Parent();
59  
60          parent.setGroupId("test-group");
61          parent.setVersion("1000");
62          parent.setArtifactId("test-artifact");
63  
64          Model model = new Model();
65  
66          model.setParent(parent);
67          model.setArtifactId("real-artifact");
68  
69          MavenProject project = new MavenProject(model);
70  
71          assertEquals("groupId proto-inheritance failed.", "test-group", project.getGroupId());
72          assertEquals("artifactId is masked.", "real-artifact", project.getArtifactId());
73          assertEquals("version proto-inheritance failed.", "1000", project.getVersion());
74  
75          // draw the NPE.
76          project.getId();
77      }
78  
79      public void testEmptyConstructor() {
80          MavenProject project = new MavenProject();
81  
82          assertEquals(
83                  MavenProject.EMPTY_PROJECT_GROUP_ID + ":" + MavenProject.EMPTY_PROJECT_ARTIFACT_ID + ":jar:"
84                          + MavenProject.EMPTY_PROJECT_VERSION,
85                  project.getId());
86      }
87  
88      public void testClone() throws Exception {
89          File f = getFileForClasspathResource("canonical-pom.xml");
90          MavenProject projectToClone = getProject(f);
91  
92          MavenProject clonedProject = projectToClone.clone();
93          assertEquals("maven-core", clonedProject.getArtifactId());
94          Map<?, ?> clonedMap = clonedProject.getManagedVersionMap();
95          assertNotNull("ManagedVersionMap not copied", clonedMap);
96          assertTrue("ManagedVersionMap is not empty", clonedMap.isEmpty());
97      }
98  
99      public void testCloneWithDependencyManagement() throws Exception {
100         File f = getFileForClasspathResource("dependencyManagement-pom.xml");
101         MavenProject projectToClone = getProjectWithDependencies(f);
102         DependencyManagement dep = projectToClone.getDependencyManagement();
103         assertNotNull("No dependencyManagement", dep);
104         List<?> list = dep.getDependencies();
105         assertNotNull("No dependencies", list);
106         assertTrue("Empty dependency list", !list.isEmpty());
107 
108         Map<?, ?> map = projectToClone.getManagedVersionMap();
109         assertNotNull("No ManagedVersionMap", map);
110         assertTrue("ManagedVersionMap is empty", !map.isEmpty());
111 
112         MavenProject clonedProject = projectToClone.clone();
113         assertEquals("maven-core", clonedProject.getArtifactId());
114         Map<?, ?> clonedMap = clonedProject.getManagedVersionMap();
115         assertNotNull("ManagedVersionMap not copied", clonedMap);
116         assertTrue("ManagedVersionMap is empty", !clonedMap.isEmpty());
117         assertTrue("ManagedVersionMap does not contain test key", clonedMap.containsKey("maven-test:maven-test-b:jar"));
118     }
119 
120     public void testGetModulePathAdjustment() throws IOException {
121         Model moduleModel = new Model();
122 
123         MavenProject module = new MavenProject(moduleModel);
124         module.setFile(new File("module-dir/pom.xml"));
125 
126         Model parentModel = new Model();
127         parentModel.addModule("../module-dir");
128 
129         MavenProject parent = new MavenProject(parentModel);
130         parent.setFile(new File("parent-dir/pom.xml"));
131 
132         String pathAdjustment = parent.getModulePathAdjustment(module);
133 
134         assertEquals("..", pathAdjustment);
135     }
136 
137     public void testCloneWithDistributionManagement() throws Exception {
138 
139         File f = getFileForClasspathResource("distributionManagement-pom.xml");
140         MavenProject projectToClone = getProject(f);
141 
142         MavenProject clonedProject = projectToClone.clone();
143         assertNotNull(
144                 "clonedProject - distributionManagement", clonedProject.getDistributionManagementArtifactRepository());
145     }
146 
147     public void testCloneWithActiveProfile() throws Exception {
148 
149         File f = getFileForClasspathResource("withActiveByDefaultProfile-pom.xml");
150         MavenProject projectToClone = getProject(f);
151         List<Profile> activeProfilesOrig = projectToClone.getActiveProfiles();
152 
153         assertEquals("Expecting 1 active profile", 1, activeProfilesOrig.size());
154 
155         MavenProject clonedProject = projectToClone.clone();
156 
157         List<Profile> activeProfilesClone = clonedProject.getActiveProfiles();
158 
159         assertEquals("Expecting 1 active profile", 1, activeProfilesClone.size());
160 
161         assertNotSame(
162                 "The list of active profiles should have been cloned too but is same",
163                 activeProfilesOrig,
164                 activeProfilesClone);
165     }
166 
167     public void testCloneWithBaseDir() throws Exception {
168         File f = getFileForClasspathResource("canonical-pom.xml");
169         MavenProject projectToClone = getProject(f);
170         projectToClone.setPomFile(new File(new File(f.getParentFile(), "target"), "flattened.xml"));
171         MavenProject clonedProject = projectToClone.clone();
172         assertEquals("POM file is preserved across clone", projectToClone.getFile(), clonedProject.getFile());
173         assertEquals(
174                 "Base directory is preserved across clone", projectToClone.getBasedir(), clonedProject.getBasedir());
175     }
176 
177     public void testUndefinedOutputDirectory() throws Exception {
178         MavenProject p = new MavenProject();
179         assertNoNulls(p.getCompileClasspathElements());
180         assertNoNulls(p.getSystemClasspathElements());
181         assertNoNulls(p.getRuntimeClasspathElements());
182         assertNoNulls(p.getTestClasspathElements());
183     }
184 
185     public void testAddDotFile() {
186         MavenProject project = new MavenProject();
187 
188         File basedir = new File(System.getProperty("java.io.tmpdir"));
189         project.setFile(new File(basedir, "file"));
190 
191         project.addCompileSourceRoot(basedir.getAbsolutePath());
192         project.addCompileSourceRoot(".");
193 
194         assertEquals(1, project.getCompileSourceRoots().size());
195     }
196 
197     private void assertNoNulls(List<String> elements) {
198         assertFalse(elements.contains(null));
199     }
200 }