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.model.DependencyManagement;
28  import org.apache.maven.model.Model;
29  import org.apache.maven.model.Parent;
30  
31  public class MavenProjectTest
32      extends AbstractMavenProjectTestCase
33  {
34  
35      public void testShouldInterpretChildPathAdjustmentBasedOnModulePaths()
36          throws IOException
37      {
38          Model parentModel = new Model();
39          parentModel.addModule( "../child" );
40  
41          MavenProject parentProject = new MavenProject( parentModel );
42  
43          Model childModel = new Model();
44          childModel.setArtifactId( "artifact" );
45  
46          MavenProject childProject = new MavenProject( childModel );
47          
48          File childFile = new File( System.getProperty( "java.io.tmpdir" ), "maven-project-tests" + System.currentTimeMillis() + "/child/pom.xml" );
49  
50          childProject.setFile( childFile );
51  
52          String adjustment = parentProject.getModulePathAdjustment( childProject );
53  
54          assertNotNull( adjustment );
55          
56          assertEquals( "..", adjustment );
57      }
58  
59      public void testIdentityProtoInheritance()
60      {
61          Parent parent = new Parent();
62  
63          parent.setGroupId( "test-group" );
64          parent.setVersion( "1000" );
65          parent.setArtifactId( "test-artifact" );
66  
67          Model model = new Model();
68  
69          model.setParent( parent );
70          model.setArtifactId( "real-artifact" );
71  
72          MavenProject project = new MavenProject( model );
73  
74          assertEquals( "groupId proto-inheritance failed.", "test-group", project.getGroupId() );
75          assertEquals( "artifactId is masked.", "real-artifact", project.getArtifactId() );
76          assertEquals( "version proto-inheritance failed.", "1000", project.getVersion() );
77  
78          // draw the NPE.
79          project.getId();
80      }
81  
82      public void testEmptyConstructor()
83      {
84          MavenProject project = new MavenProject();
85  
86          assertEquals( MavenProject.EMPTY_PROJECT_GROUP_ID + ":" + MavenProject.EMPTY_PROJECT_ARTIFACT_ID + ":jar:"
87                          + MavenProject.EMPTY_PROJECT_VERSION, project.getId() );
88      }
89  
90      public void testClone()
91          throws Exception
92      {
93          File f = getFileForClasspathResource( "canonical-pom.xml" );
94          MavenProject projectToClone = getProject( f );
95  
96          MavenProject clonedProject = (MavenProject) projectToClone.clone();
97          assertEquals( "maven-core", clonedProject.getArtifactId() );
98          Map clonedMap = clonedProject.getManagedVersionMap();
99          assertNotNull( "ManagedVersionMap not copied", clonedMap );
100         assertTrue( "ManagedVersionMap is not empty", clonedMap.isEmpty() );
101     }
102 
103     public void testCloneWithDependencyManagement()
104         throws Exception
105     {
106         File f = getFileForClasspathResource( "dependencyManagement-pom.xml" );
107         MavenProject projectToClone = getProjectWithDependencies( f );
108         DependencyManagement dep = projectToClone.getDependencyManagement();
109         assertNotNull( "No dependencyManagement", dep );
110         List list = dep.getDependencies();
111         assertNotNull( "No dependencies", list );
112         assertTrue( "Empty dependency list", !list.isEmpty() );
113 
114         Map map = projectToClone.getManagedVersionMap();
115         assertNotNull( "No ManagedVersionMap", map );
116         assertTrue( "ManagedVersionMap is empty", !map.isEmpty() );
117 
118         MavenProject clonedProject = (MavenProject) projectToClone.clone();
119         assertEquals( "maven-core", clonedProject.getArtifactId() );
120         Map clonedMap = clonedProject.getManagedVersionMap();
121         assertNotNull( "ManagedVersionMap not copied", clonedMap );
122         assertTrue( "ManagedVersionMap is empty", !clonedMap.isEmpty() );
123         assertTrue( "ManagedVersionMap does not contain test key",
124                     clonedMap.containsKey( "maven-test:maven-test-b:jar" ) );
125     }
126 
127     public void testGetModulePathAdjustment()
128         throws IOException
129     {
130         Model moduleModel = new Model();
131 
132         MavenProject module = new MavenProject( moduleModel );
133         module.setFile( new File( "module-dir/pom.xml" ) );
134 
135         Model parentModel = new Model();
136         parentModel.addModule( "../module-dir" );
137 
138         MavenProject parent = new MavenProject( parentModel );
139         parent.setFile( new File( "parent-dir/pom.xml" ) );
140 
141         String pathAdjustment = parent.getModulePathAdjustment( module );
142 
143         assertEquals( "..", pathAdjustment );
144     }
145     
146     public void testCloneWithDistributionManagement() throws Exception
147     {
148         
149         File f = getFileForClasspathResource( "distributionManagement-pom.xml" );
150         MavenProject projectToClone = getProject( f );
151 
152         MavenProject clonedProject = (MavenProject) projectToClone.clone();
153         assertNotNull( "clonedProject - distributionManagement", clonedProject.getDistributionManagementArtifactRepository() );
154     }
155 }