1   package org.apache.maven.project;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.io.File;
23  import java.io.IOException;
24  import java.util.List;
25  import java.util.Map;
26  
27  import org.apache.maven.artifact.versioning.ManagedVersionMap;
28  import org.apache.maven.model.DependencyManagement;
29  import org.apache.maven.model.Model;
30  import org.apache.maven.model.Parent;
31  
32  public class MavenProjectTest
33      extends AbstractMavenProjectTestCase
34  {
35  
36      public void testShouldInterpretChildPathAdjustmentBasedOnModulePaths()
37          throws IOException
38      {
39          Model parentModel = new Model();
40          parentModel.addModule( "../child" );
41  
42          MavenProject parentProject = new MavenProject( parentModel );
43  
44          Model childModel = new Model();
45          childModel.setArtifactId( "artifact" );
46  
47          MavenProject childProject = new MavenProject( childModel );
48  
49          File childFile = new File( System.getProperty( "java.io.tmpdir" ), "maven-project-tests" + System.currentTimeMillis() + "/child/pom.xml" );
50  
51          childProject.setFile( childFile );
52  
53          String adjustment = parentProject.getModulePathAdjustment( childProject );
54  
55          assertNotNull( adjustment );
56  
57          assertEquals( "..", adjustment );
58      }
59  
60      public void testIdentityProtoInheritance()
61      {
62          Parent parent = new Parent();
63  
64          parent.setGroupId( "test-group" );
65          parent.setVersion( "1000" );
66          parent.setArtifactId( "test-artifact" );
67  
68          Model model = new Model();
69  
70          model.setParent( parent );
71          model.setArtifactId( "real-artifact" );
72  
73          MavenProject project = new MavenProject( model );
74  
75          assertEquals( "groupId proto-inheritance failed.", "test-group", project.getGroupId() );
76          assertEquals( "artifactId is masked.", "real-artifact", project.getArtifactId() );
77          assertEquals( "version proto-inheritance failed.", "1000", project.getVersion() );
78  
79          // draw the NPE.
80          project.getId();
81      }
82  
83      public void testEmptyConstructor()
84      {
85          MavenProject project = new MavenProject();
86  
87          assertEquals( MavenProject.EMPTY_PROJECT_GROUP_ID + ":" + MavenProject.EMPTY_PROJECT_ARTIFACT_ID + ":jar:"
88                          + MavenProject.EMPTY_PROJECT_VERSION, project.getId() );
89      }
90  
91      public void testClone()
92          throws Exception
93      {
94          File f = getFileForClasspathResource( "canonical-pom.xml" );
95          MavenProject projectToClone = getProject( f );
96  
97          MavenProject clonedProject = (MavenProject) projectToClone.clone();
98          assertEquals( "maven-core", clonedProject.getArtifactId() );
99          Map clonedMap = clonedProject.getManagedVersionMap();
100         assertNotNull("ManagedVersionMap not copied", clonedMap);
101         assertTrue("ManagedVersionMap is not empty", clonedMap.isEmpty());
102     }
103 
104     public void testCloneWithDependencyManagement()
105         throws Exception
106     {
107         File f = getFileForClasspathResource( "dependencyManagement-pom.xml" );
108         MavenProject projectToClone = getProjectWithDependencies( f );
109         DependencyManagement dep = projectToClone.getDependencyManagement();
110         assertNotNull("No dependencyManagement", dep);
111         List list = dep.getDependencies();
112         assertNotNull("No dependencies", list);
113         assertTrue("Empty dependency list", !list.isEmpty());
114 
115         Map map = projectToClone.getManagedVersionMap();
116         assertNotNull("No ManagedVersionMap", map);
117         assertTrue("ManagedVersionMap is empty", !map.isEmpty());
118 
119         MavenProject clonedProject = (MavenProject) projectToClone.clone();
120         assertEquals( "maven-core", clonedProject.getArtifactId() );
121         Map clonedMap = clonedProject.getManagedVersionMap();
122         assertNotNull("ManagedVersionMap not copied", clonedMap);
123         assertTrue("ManagedVersionMap is empty", !clonedMap.isEmpty());
124         assertTrue("Not a ManagedVersionMap", clonedMap instanceof ManagedVersionMap);
125         assertTrue("ManagedVersionMap does not contain test key", clonedMap.containsKey("maven-test:maven-test-b:jar"));
126     }
127 
128     public void testGetModulePathAdjustment()
129         throws IOException
130     {
131         Model moduleModel = new Model();
132 
133         MavenProject module = new MavenProject( moduleModel );
134         module.setFile( new File( "module-dir/pom.xml" ) );
135 
136         Model parentModel = new Model();
137         parentModel.addModule( "../module-dir" );
138 
139         MavenProject parent = new MavenProject( parentModel );
140         parent.setFile( new File( "parent-dir/pom.xml" ) );
141 
142         String pathAdjustment = parent.getModulePathAdjustment( module );
143 
144         assertEquals( "..", pathAdjustment );
145     }
146     
147     public void testCloneWithDistributionManagement() throws Exception
148     {
149         
150         File f = getFileForClasspathResource( "distributionManagement-pom.xml" );
151         MavenProject projectToClone = getProject( f );
152 
153         MavenProject clonedProject = (MavenProject) projectToClone.clone();
154         assertNotNull( "clonedProject - distributionManagement", clonedProject.getDistributionManagementArtifactRepository() );
155     }
156 }