1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 import org.junit.jupiter.api.Test;
31
32 import static org.junit.jupiter.api.Assertions.assertEquals;
33 import static org.junit.jupiter.api.Assertions.assertFalse;
34 import static org.junit.jupiter.api.Assertions.assertNotNull;
35 import static org.junit.jupiter.api.Assertions.assertNotSame;
36 import static org.junit.jupiter.api.Assertions.assertTrue;
37
38 class MavenProjectTest extends AbstractMavenProjectTestCase {
39
40 @Test
41 void testShouldInterpretChildPathAdjustmentBasedOnModulePaths() throws IOException {
42 Model parentModel = new Model();
43 parentModel.addModule("../child");
44
45 MavenProject parentProject = new MavenProject(parentModel);
46
47 Model childModel = new Model();
48 childModel.setArtifactId("artifact");
49
50 MavenProject childProject = new MavenProject(childModel);
51
52 File childFile = new File(
53 System.getProperty("java.io.tmpdir"),
54 "maven-project-tests" + System.currentTimeMillis() + "/child/pom.xml");
55
56 childProject.setFile(childFile);
57
58 String adjustment = parentProject.getModulePathAdjustment(childProject);
59
60 assertNotNull(adjustment);
61
62 assertEquals("..", adjustment);
63 }
64
65 @Test
66 void testIdentityProtoInheritance() {
67 Parent parent = new Parent();
68
69 parent.setGroupId("test-group");
70 parent.setVersion("1000");
71 parent.setArtifactId("test-artifact");
72
73 Model model = new Model();
74
75 model.setParent(parent);
76 model.setArtifactId("real-artifact");
77
78 MavenProject project = new MavenProject(model);
79
80 assertEquals("test-group", project.getGroupId(), "groupId proto-inheritance failed.");
81 assertEquals("real-artifact", project.getArtifactId(), "artifactId is masked.");
82 assertEquals("1000", project.getVersion(), "version proto-inheritance failed.");
83
84
85 project.getId();
86 }
87
88 @Test
89 void testEmptyConstructor() {
90 MavenProject project = new MavenProject();
91
92 assertEquals(
93 MavenProject.EMPTY_PROJECT_GROUP_ID + ":" + MavenProject.EMPTY_PROJECT_ARTIFACT_ID + ":jar:"
94 + MavenProject.EMPTY_PROJECT_VERSION,
95 project.getId());
96 }
97
98 @Test
99 void testClone() throws Exception {
100 File f = getFileForClasspathResource("canonical-pom.xml");
101 MavenProject projectToClone = getProject(f);
102
103 MavenProject clonedProject = projectToClone.clone();
104 assertEquals("maven-core", clonedProject.getArtifactId());
105 Map<?, ?> clonedMap = clonedProject.getManagedVersionMap();
106 assertNotNull(clonedMap, "ManagedVersionMap not copied");
107 assertTrue(clonedMap.isEmpty(), "ManagedVersionMap is not empty");
108 }
109
110 @Test
111 void testCloneWithDependencyManagement() throws Exception {
112 File f = getFileForClasspathResource("dependencyManagement-pom.xml");
113 MavenProject projectToClone = getProjectWithDependencies(f);
114 DependencyManagement dep = projectToClone.getDependencyManagement();
115 assertNotNull(dep, "No dependencyManagement");
116 List<?> list = dep.getDependencies();
117 assertNotNull(list, "No dependencies");
118 assertTrue(!list.isEmpty(), "Empty dependency list");
119
120 Map<?, ?> map = projectToClone.getManagedVersionMap();
121 assertNotNull(map, "No ManagedVersionMap");
122 assertTrue(!map.isEmpty(), "ManagedVersionMap is empty");
123
124 MavenProject clonedProject = projectToClone.clone();
125 assertEquals("maven-core", clonedProject.getArtifactId());
126 Map<?, ?> clonedMap = clonedProject.getManagedVersionMap();
127 assertNotNull(clonedMap, "ManagedVersionMap not copied");
128 assertTrue(!clonedMap.isEmpty(), "ManagedVersionMap is empty");
129 assertTrue(clonedMap.containsKey("maven-test:maven-test-b:jar"), "ManagedVersionMap does not contain test key");
130 }
131
132 @Test
133 void testGetModulePathAdjustment() throws IOException {
134 Model moduleModel = new Model();
135
136 MavenProject module = new MavenProject(moduleModel);
137 module.setFile(new File("module-dir/pom.xml"));
138
139 Model parentModel = new Model();
140 parentModel.addModule("../module-dir");
141
142 MavenProject parent = new MavenProject(parentModel);
143 parent.setFile(new File("parent-dir/pom.xml"));
144
145 String pathAdjustment = parent.getModulePathAdjustment(module);
146
147 assertEquals("..", pathAdjustment);
148 }
149
150 @Test
151 void testCloneWithDistributionManagement() throws Exception {
152
153 File f = getFileForClasspathResource("distributionManagement-pom.xml");
154 MavenProject projectToClone = getProject(f);
155
156 MavenProject clonedProject = projectToClone.clone();
157 assertNotNull(
158 clonedProject.getDistributionManagementArtifactRepository(), "clonedProject - distributionManagement");
159 }
160
161 @Test
162 void testCloneWithActiveProfile() throws Exception {
163
164 File f = getFileForClasspathResource("withActiveByDefaultProfile-pom.xml");
165 MavenProject projectToClone = getProject(f);
166 List<Profile> activeProfilesOrig = projectToClone.getActiveProfiles();
167
168 assertEquals(1, activeProfilesOrig.size(), "Expecting 1 active profile");
169
170 MavenProject clonedProject = projectToClone.clone();
171
172 List<Profile> activeProfilesClone = clonedProject.getActiveProfiles();
173
174 assertEquals(1, activeProfilesClone.size(), "Expecting 1 active profile");
175
176 assertNotSame(
177 activeProfilesOrig,
178 activeProfilesClone,
179 "The list of active profiles should have been cloned too but is same");
180 }
181
182 @Test
183 void testCloneWithBaseDir() throws Exception {
184 File f = getFileForClasspathResource("canonical-pom.xml");
185 MavenProject projectToClone = getProject(f);
186 projectToClone.setPomFile(new File(new File(f.getParentFile(), "target"), "flattened.xml"));
187 MavenProject clonedProject = projectToClone.clone();
188 assertEquals(projectToClone.getFile(), clonedProject.getFile(), "POM file is preserved across clone");
189 assertEquals(
190 projectToClone.getBasedir(), clonedProject.getBasedir(), "Base directory is preserved across clone");
191 }
192
193 @Test
194 void testUndefinedOutputDirectory() throws Exception {
195 MavenProject p = new MavenProject();
196 assertNoNulls(p.getCompileClasspathElements());
197 assertNoNulls(p.getSystemClasspathElements());
198 assertNoNulls(p.getRuntimeClasspathElements());
199 assertNoNulls(p.getTestClasspathElements());
200 }
201
202 @Test
203 void testAddDotFile() {
204 MavenProject project = new MavenProject();
205
206 File basedir = new File(System.getProperty("java.io.tmpdir"));
207 project.setFile(new File(basedir, "file"));
208
209 project.addCompileSourceRoot(basedir.getAbsolutePath());
210 project.addCompileSourceRoot(".");
211
212 assertEquals(1, project.getCompileSourceRoots().size());
213 }
214
215 private void assertNoNulls(List<String> elements) {
216 assertFalse(elements.contains(null));
217 }
218 }