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 }