001    package org.apache.maven.project;
002    
003    /*
004     * Licensed to the Apache Software Foundation (ASF) under one
005     * or more contributor license agreements.  See the NOTICE file
006     * distributed with this work for additional information
007     * regarding copyright ownership.  The ASF licenses this file
008     * to you under the Apache License, Version 2.0 (the
009     * "License"); you may not use this file except in compliance
010     * with the License.  You may obtain a copy of the License at
011     *
012     *  http://www.apache.org/licenses/LICENSE-2.0
013     *
014     * Unless required by applicable law or agreed to in writing,
015     * software distributed under the License is distributed on an
016     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017     * KIND, either express or implied.  See the License for the
018     * specific language governing permissions and limitations
019     * under the License.
020     */
021    
022    import java.io.File;
023    import java.io.IOException;
024    import java.util.List;
025    import java.util.Map;
026    
027    import org.apache.maven.model.DependencyManagement;
028    import org.apache.maven.model.Model;
029    import org.apache.maven.model.Parent;
030    import org.apache.maven.model.Profile;
031    
032    public class MavenProjectTest
033        extends AbstractMavenProjectTestCase
034    {
035    
036        public void testShouldInterpretChildPathAdjustmentBasedOnModulePaths()
037            throws IOException
038        {
039            Model parentModel = new Model();
040            parentModel.addModule( "../child" );
041    
042            MavenProject parentProject = new MavenProject( parentModel );
043    
044            Model childModel = new Model();
045            childModel.setArtifactId( "artifact" );
046    
047            MavenProject childProject = new MavenProject( childModel );
048            
049            File childFile =
050                new File( System.getProperty( "java.io.tmpdir" ), "maven-project-tests" + System.currentTimeMillis()
051                    + "/child/pom.xml" );
052    
053            childProject.setFile( childFile );
054    
055            String adjustment = parentProject.getModulePathAdjustment( childProject );
056    
057            assertNotNull( adjustment );
058            
059            assertEquals( "..", adjustment );
060        }
061    
062        public void testIdentityProtoInheritance()
063        {
064            Parent parent = new Parent();
065    
066            parent.setGroupId( "test-group" );
067            parent.setVersion( "1000" );
068            parent.setArtifactId( "test-artifact" );
069    
070            Model model = new Model();
071    
072            model.setParent( parent );
073            model.setArtifactId( "real-artifact" );
074    
075            MavenProject project = new MavenProject( model );
076    
077            assertEquals( "groupId proto-inheritance failed.", "test-group", project.getGroupId() );
078            assertEquals( "artifactId is masked.", "real-artifact", project.getArtifactId() );
079            assertEquals( "version proto-inheritance failed.", "1000", project.getVersion() );
080    
081            // draw the NPE.
082            project.getId();
083        }
084    
085        public void testEmptyConstructor()
086        {
087            MavenProject project = new MavenProject();
088    
089            assertEquals( MavenProject.EMPTY_PROJECT_GROUP_ID + ":" + MavenProject.EMPTY_PROJECT_ARTIFACT_ID + ":jar:"
090                            + MavenProject.EMPTY_PROJECT_VERSION, project.getId() );
091        }
092    
093        public void testClone()
094            throws Exception
095        {
096            File f = getFileForClasspathResource( "canonical-pom.xml" );
097            MavenProject projectToClone = getProject( f );
098    
099            MavenProject clonedProject = (MavenProject) projectToClone.clone();
100            assertEquals( "maven-core", clonedProject.getArtifactId() );
101            Map<?, ?> clonedMap = clonedProject.getManagedVersionMap();
102            assertNotNull( "ManagedVersionMap not copied", clonedMap );
103            assertTrue( "ManagedVersionMap is not empty", clonedMap.isEmpty() );
104        }
105    
106        public void testCloneWithDependencyManagement()
107            throws Exception
108        {
109            File f = getFileForClasspathResource( "dependencyManagement-pom.xml" );
110            MavenProject projectToClone = getProjectWithDependencies( f );
111            DependencyManagement dep = projectToClone.getDependencyManagement();
112            assertNotNull( "No dependencyManagement", dep );
113            List<?> list = dep.getDependencies();
114            assertNotNull( "No dependencies", list );
115            assertTrue( "Empty dependency list", !list.isEmpty() );
116    
117            Map<?, ?> map = projectToClone.getManagedVersionMap();
118            assertNotNull( "No ManagedVersionMap", map );
119            assertTrue( "ManagedVersionMap is empty", !map.isEmpty() );
120    
121            MavenProject clonedProject = (MavenProject) projectToClone.clone();
122            assertEquals( "maven-core", clonedProject.getArtifactId() );
123            Map<?, ?> clonedMap = clonedProject.getManagedVersionMap();
124            assertNotNull( "ManagedVersionMap not copied", clonedMap );
125            assertTrue( "ManagedVersionMap is empty", !clonedMap.isEmpty() );
126            assertTrue( "ManagedVersionMap does not contain test key",
127                        clonedMap.containsKey( "maven-test:maven-test-b:jar" ) );
128        }
129    
130        public void testGetModulePathAdjustment()
131            throws IOException
132        {
133            Model moduleModel = new Model();
134    
135            MavenProject module = new MavenProject( moduleModel );
136            module.setFile( new File( "module-dir/pom.xml" ) );
137    
138            Model parentModel = new Model();
139            parentModel.addModule( "../module-dir" );
140    
141            MavenProject parent = new MavenProject( parentModel );
142            parent.setFile( new File( "parent-dir/pom.xml" ) );
143    
144            String pathAdjustment = parent.getModulePathAdjustment( module );
145    
146            assertEquals( "..", pathAdjustment );
147        }
148        
149        public void testCloneWithDistributionManagement() throws Exception
150        {
151            
152            File f = getFileForClasspathResource( "distributionManagement-pom.xml" );
153            MavenProject projectToClone = getProject( f );
154    
155            MavenProject clonedProject = (MavenProject) projectToClone.clone();
156            assertNotNull( "clonedProject - distributionManagement", clonedProject.getDistributionManagementArtifactRepository() );
157        }
158    
159        public void testCloneWithActiveProfile() throws Exception
160        {
161    
162            File f = getFileForClasspathResource( "withActiveByDefaultProfile-pom.xml" );
163            MavenProject projectToClone = getProject( f );
164            List<Profile> activeProfilesOrig = projectToClone.getActiveProfiles();
165    
166            assertEquals( "Expecting 1 active profile", 1, activeProfilesOrig.size() );
167    
168            MavenProject clonedProject = (MavenProject) projectToClone.clone();
169    
170            List<Profile> activeProfilesClone = clonedProject.getActiveProfiles();
171    
172            assertEquals( "Expecting 1 active profile", 1, activeProfilesClone.size() );
173    
174            assertNotSame( "The list of active profiles should have been cloned too but is same", activeProfilesOrig,
175                           activeProfilesClone );
176        }
177    }