1 package org.apache.maven.it;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.it.Verifier;
23 import org.apache.maven.it.util.ResourceExtractor;
24
25 import java.io.File;
26 import java.util.Collection;
27 import java.util.Iterator;
28 import java.util.Properties;
29 import java.util.TreeSet;
30
31
32
33
34
35
36
37 public class MavenITmng3843PomInheritanceTest
38 extends AbstractMavenIntegrationTestCase
39 {
40
41 public MavenITmng3843PomInheritanceTest()
42 {
43 super( ALL_MAVEN_VERSIONS );
44 }
45
46
47
48
49 public void testitMNG3843()
50 throws Exception
51 {
52 File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-3843" );
53
54 testDir = testDir.getCanonicalFile();
55
56 Verifier verifier = newVerifier( testDir.getAbsolutePath() );
57 verifier.setAutoclean( false );
58 verifier.deleteDirectory( "test-1/target" );
59 verifier.deleteDirectory( "test-2/target" );
60 verifier.deleteDirectory( "test-2/child-1/target" );
61 verifier.deleteDirectory( "test-2/child-2/target" );
62 verifier.deleteDirectory( "test-3/sub-parent/child-a/target" );
63 verifier.getCliOptions().add( "--settings" );
64 verifier.getCliOptions().add( "settings.xml" );
65 verifier.executeGoal( "validate" );
66 verifier.verifyErrorFreeLog();
67 verifier.resetStreams();
68
69 Properties props;
70 File basedir;
71
72 basedir = new File( verifier.getBasedir(), "test-1" );
73 props = verifier.loadProperties( "test-1/target/pom.properties" );
74 assertEquals( "org.apache.maven.its.mng3843", props.getProperty( "project.groupId" ) );
75 assertEquals( "test-1", props.getProperty( "project.artifactId" ) );
76 assertEquals( "0.1", props.getProperty( "project.version" ) );
77 assertEquals( "jar", props.getProperty( "project.packaging" ) );
78 assertEquals( "test", props.getProperty( "project.name", "" ) );
79 assertEquals( "", props.getProperty( "project.description", "" ) );
80 assertEquals( "", props.getProperty( "project.url", "" ) );
81 assertEquals( "", props.getProperty( "project.inceptionYear", "" ) );
82 assertEquals( "", props.getProperty( "project.build.defaultGoal", "" ) );
83 assertMissing( props, "project.properties." );
84 assertMissing( props, "project.prerequisites." );
85 assertMissing( props, "project.modules." );
86 assertMissing( props, "project.licenses." );
87 assertMissing( props, "project.developers." );
88 assertMissing( props, "project.contributors." );
89 assertMissing( props, "project.mailingLists." );
90 assertMissing( props, "project.organization." );
91 assertMissing( props, "project.scm." );
92 assertMissing( props, "project.ciManagement." );
93 assertMissing( props, "project.issueManagement." );
94 assertMissing( props, "project.distributionManagement." );
95 assertMissing( props, "project.profiles." );
96 assertEquals( "test-1-0.1", props.getProperty( "project.build.finalName" ) );
97 assertPathEquals( basedir, "src/main/java", props.getProperty( "project.build.sourceDirectory" ) );
98 assertPathEquals( basedir, "src/test/java", props.getProperty( "project.build.testSourceDirectory" ) );
99 assertPathEquals( basedir, "src/main/scripts", props.getProperty( "project.build.scriptSourceDirectory" ) );
100 assertEquals( "1", props.getProperty( "project.build.resources" ) );
101 assertPathEquals( basedir, "src/main/resources", props.getProperty( "project.build.resources.0.directory" ) );
102 assertEquals( "1", props.getProperty( "project.build.testResources" ) );
103 assertPathEquals( basedir, "src/test/resources", props.getProperty( "project.build.testResources.0.directory" ) );
104 assertPathEquals( basedir, "target", props.getProperty( "project.build.directory" ) );
105 assertPathEquals( basedir, "target/classes", props.getProperty( "project.build.outputDirectory" ) );
106 assertPathEquals( basedir, "target/test-classes", props.getProperty( "project.build.testOutputDirectory" ) );
107 assertPathEquals( basedir, "target/site", props.getProperty( "project.reporting.outputDirectory" ) );
108 assertEquals( "false", props.getProperty( "project.reporting.excludeDefaults" ) );
109 assertTrue( Integer.parseInt( props.getProperty( "project.repositories" ) ) > 0 );
110 if ( matchesVersionRange( "(,3.0-alpha-3)" ) )
111 {
112
113 assertEquals( "1", props.getProperty( "project.build.plugins" ) );
114 }
115 assertMissing( props, "project.dependencies." );
116 assertMissing( props, "project.dependencyManagement." );
117
118 basedir = new File( verifier.getBasedir(), "test-2" );
119 props = verifier.loadProperties( "test-2/target/pom.properties" );
120
121 basedir = new File( verifier.getBasedir(), "test-2/child-1" );
122 props = verifier.loadProperties( "test-2/child-1/target/pom.properties" );
123 assertEquals( "org.apache.maven.its.mng3843", props.getProperty( "project.groupId" ) );
124 assertEquals( "child-1", props.getProperty( "project.artifactId" ) );
125 assertEquals( "0.1", props.getProperty( "project.version" ) );
126 assertEquals( "jar", props.getProperty( "project.packaging" ) );
127 assertFalse( "parent-name".equals( props.getProperty( "project.name" ) ) );
128 assertEquals( "parent-description", props.getProperty( "project.description", "" ) );
129 assertUrlCommon( "http://parent.url", props.getProperty( "project.url", "" ) );
130 assertEquals( "2008", props.getProperty( "project.inceptionYear", "" ) );
131 assertEquals( "initialize", props.getProperty( "project.build.defaultGoal" ) );
132 assertEquals( "parent-property", props.getProperty( "project.properties.parentProperty" ) );
133 assertMissing( props, "project.prerequisites." );
134 assertMissing( props, "project.modules." );
135 assertEquals( "1", props.getProperty( "project.licenses" ) );
136 assertEquals( "http://parent.url/license", props.getProperty( "project.licenses.0.url" ) );
137 assertEquals( "1", props.getProperty( "project.developers" ) );
138 assertEquals( "parent-developer", props.getProperty( "project.developers.0.name" ) );
139 assertEquals( "1", props.getProperty( "project.contributors" ) );
140 assertEquals( "parent-contributor", props.getProperty( "project.contributors.0.name" ) );
141 assertEquals( "1", props.getProperty( "project.mailingLists" ) );
142 assertEquals( "parent-mailing-list", props.getProperty( "project.mailingLists.0.name" ) );
143 assertEquals( "http://parent-org.url/", props.getProperty( "project.organization.url" ) );
144 assertUrlCommon( "http://parent.url/trunk", props.getProperty( "project.scm.url" ) );
145 assertUrlCommon( "http://parent.url/scm", props.getProperty( "project.scm.connection" ) );
146 assertUrlCommon( "https://parent.url/scm", props.getProperty( "project.scm.developerConnection" ) );
147 assertEquals( "http://parent.url/ci", props.getProperty( "project.ciManagement.url" ) );
148 assertEquals( "http://parent.url/issues", props.getProperty( "project.issueManagement.url" ) );
149 assertEquals( "http://parent.url/dist", props.getProperty( "project.distributionManagement.repository.url" ) );
150 assertEquals( "http://parent.url/snaps", props.getProperty( "project.distributionManagement.snapshotRepository.url" ) );
151 assertUrlCommon( "http://parent.url/site", props.getProperty( "project.distributionManagement.site.url" ) );
152 assertUrlCommon( "http://parent.url/download", props.getProperty( "project.distributionManagement.downloadUrl" ) );
153 if ( matchesVersionRange( "(2.0.2,)" ) )
154 {
155 assertMissing( props, "project.distributionManagement.relocation." );
156 }
157 assertMissing( props, "project.profiles." );
158 assertEquals( "child-1-0.1", props.getProperty( "project.build.finalName" ) );
159 assertPathEquals( basedir, "src/main", props.getProperty( "project.build.sourceDirectory" ) );
160 assertPathEquals( basedir, "src/test", props.getProperty( "project.build.testSourceDirectory" ) );
161 assertPathEquals( basedir, "src/scripts", props.getProperty( "project.build.scriptSourceDirectory" ) );
162 assertEquals( "1", props.getProperty( "project.build.resources" ) );
163 assertPathEquals( basedir, "res/main", props.getProperty( "project.build.resources.0.directory" ) );
164 assertEquals( "1", props.getProperty( "project.build.testResources" ) );
165 assertPathEquals( basedir, "res/test", props.getProperty( "project.build.testResources.0.directory" ) );
166 assertPathEquals( basedir, "out", props.getProperty( "project.build.directory" ) );
167 assertPathEquals( basedir, "out/main", props.getProperty( "project.build.outputDirectory" ) );
168 assertPathEquals( basedir, "out/test", props.getProperty( "project.build.testOutputDirectory" ) );
169 assertPathEquals( basedir, "site", props.getProperty( "project.reporting.outputDirectory" ) );
170 if ( matchesVersionRange( "(2.0.9,2.1.0-M1),(2.1.0-M1,)" ) )
171 {
172
173 assertEquals( "true", props.getProperty( "project.reporting.excludeDefaults" ) );
174 }
175 assertTrue( Integer.parseInt( props.getProperty( "project.repositories" ) ) > 1 );
176 if ( matchesVersionRange( "(,3.0-alpha-3)" ) )
177 {
178
179 assertEquals( "1", props.getProperty( "project.build.plugins" ) );
180 }
181 assertEquals( "1", props.getProperty( "project.dependencies" ) );
182 assertEquals( "parent-dep-b", props.getProperty( "project.dependencies.0.artifactId" ) );
183 assertEquals( "1", props.getProperty( "project.dependencyManagement.dependencies" ) );
184 assertEquals( "parent-dep-a", props.getProperty( "project.dependencyManagement.dependencies.0.artifactId" ) );
185
186 basedir = new File( verifier.getBasedir(), "test-2/child-2" );
187 props = verifier.loadProperties( "test-2/child-2/target/pom.properties" );
188 assertEquals( "org.apache.maven.its.mng3843.child", props.getProperty( "project.groupId" ) );
189 assertEquals( "child-2", props.getProperty( "project.artifactId" ) );
190 assertEquals( "0.2", props.getProperty( "project.version" ) );
191 assertEquals( "jar", props.getProperty( "project.packaging" ) );
192 assertEquals( "child-name", props.getProperty( "project.name" ) );
193 assertEquals( "child-description", props.getProperty( "project.description", "" ) );
194 assertUrlCommon( "http://child.url", props.getProperty( "project.url", "" ) );
195 assertEquals( "2009", props.getProperty( "project.inceptionYear", "" ) );
196 assertEquals( "validate", props.getProperty( "project.build.defaultGoal" ) );
197 assertEquals( "parent-property", props.getProperty( "project.properties.parentProperty" ) );
198 assertEquals( "child-property", props.getProperty( "project.properties.childProperty" ) );
199 assertEquals( "child-override", props.getProperty( "project.properties.overriddenProperty" ) );
200 assertEquals( "2.0.1", props.getProperty( "project.prerequisites.maven" ) );
201 assertMissing( props, "project.modules." );
202 assertEquals( "1", props.getProperty( "project.licenses" ) );
203 assertEquals( "http://child.url/license", props.getProperty( "project.licenses.0.url" ) );
204 assertEquals( "1", props.getProperty( "project.developers" ) );
205 assertEquals( "child-developer", props.getProperty( "project.developers.0.name" ) );
206 assertEquals( "1", props.getProperty( "project.contributors" ) );
207 assertEquals( "child-contributor", props.getProperty( "project.contributors.0.name" ) );
208 assertEquals( "1", props.getProperty( "project.mailingLists" ) );
209 assertEquals( "child-mailing-list", props.getProperty( "project.mailingLists.0.name" ) );
210 assertEquals( "http://child-org.url/", props.getProperty( "project.organization.url" ) );
211 assertUrlCommon( "http://child.url/trunk", props.getProperty( "project.scm.url" ) );
212 assertUrlCommon( "http://child.url/scm", props.getProperty( "project.scm.connection" ) );
213 assertUrlCommon( "https://child.url/scm", props.getProperty( "project.scm.developerConnection" ) );
214 assertEquals( "http://child.url/ci", props.getProperty( "project.ciManagement.url" ) );
215 assertEquals( "http://child.url/issues", props.getProperty( "project.issueManagement.url" ) );
216 assertEquals( "http://child.url/dist", props.getProperty( "project.distributionManagement.repository.url" ) );
217 assertEquals( "http://child.url/snaps", props.getProperty( "project.distributionManagement.snapshotRepository.url" ) );
218 assertUrlCommon( "http://child.url/site", props.getProperty( "project.distributionManagement.site.url" ) );
219 assertUrlCommon( "http://child.url/download", props.getProperty( "project.distributionManagement.downloadUrl" ) );
220 assertEquals( "child-reloc-msg", props.getProperty( "project.distributionManagement.relocation.message" ) );
221 assertMissing( props, "project.profiles." );
222 assertEquals( "coreit", props.getProperty( "project.build.finalName" ) );
223 assertPathEquals( basedir, "sources/main", props.getProperty( "project.build.sourceDirectory" ) );
224 assertPathEquals( basedir, "sources/test", props.getProperty( "project.build.testSourceDirectory" ) );
225 assertPathEquals( basedir, "sources/scripts", props.getProperty( "project.build.scriptSourceDirectory" ) );
226 assertEquals( "1", props.getProperty( "project.build.resources" ) );
227 assertPathEquals( basedir, "resources/main", props.getProperty( "project.build.resources.0.directory" ) );
228 assertEquals( "1", props.getProperty( "project.build.testResources" ) );
229 assertPathEquals( basedir, "resources/test", props.getProperty( "project.build.testResources.0.directory" ) );
230 assertPathEquals( basedir, "build", props.getProperty( "project.build.directory" ) );
231 assertPathEquals( basedir, "build/main", props.getProperty( "project.build.outputDirectory" ) );
232 assertPathEquals( basedir, "build/test", props.getProperty( "project.build.testOutputDirectory" ) );
233 assertPathEquals( basedir, "docs", props.getProperty( "project.reporting.outputDirectory" ) );
234 assertEquals( "false", props.getProperty( "project.reporting.excludeDefaults" ) );
235 assertTrue( Integer.parseInt( props.getProperty( "project.repositories" ) ) > 1 );
236 if ( matchesVersionRange( "(2.0.4,3.0-alpha-3)" ) )
237 {
238
239 assertEquals( "1", props.getProperty( "project.build.plugins" ) );
240 }
241 assertEquals( "4", props.getProperty( "project.dependencies" ) );
242 Collection actualDeps = new TreeSet();
243 actualDeps.add( props.getProperty( "project.dependencies.0.artifactId" ) );
244 actualDeps.add( props.getProperty( "project.dependencies.1.artifactId" ) );
245 actualDeps.add( props.getProperty( "project.dependencies.2.artifactId" ) );
246 actualDeps.add( props.getProperty( "project.dependencies.3.artifactId" ) );
247 Collection expectedDeps = new TreeSet();
248 expectedDeps.add( "parent-dep-b" );
249 expectedDeps.add( "child-dep-b" );
250 expectedDeps.add( "child-dep-c" );
251 expectedDeps.add( "child-dep-d" );
252 assertEquals( expectedDeps, actualDeps );
253 assertEquals( "2", props.getProperty( "project.dependencyManagement.dependencies" ) );
254 Collection actualMngtDeps = new TreeSet();
255 actualMngtDeps.add( props.getProperty( "project.dependencyManagement.dependencies.0.artifactId" ) );
256 actualMngtDeps.add( props.getProperty( "project.dependencyManagement.dependencies.1.artifactId" ) );
257 Collection expectedMngtDeps = new TreeSet();
258 expectedMngtDeps.add( "parent-dep-a" );
259 expectedMngtDeps.add( "child-dep-a" );
260 assertEquals( expectedMngtDeps, actualMngtDeps );
261
262 basedir = new File( verifier.getBasedir(), "test-3/sub-parent/child-a" );
263 props = verifier.loadProperties( "test-3/sub-parent/child-a/target/pom.properties" );
264 assertEquals( "../pom.xml", props.getProperty( "project.originalModel.parent.relativePath" ) );
265 }
266
267 private void assertPathEquals( File basedir, String expected, String actual )
268 {
269
270 File actualFile = new File( actual );
271 if ( actualFile.isAbsolute() )
272 {
273 assertEquals( new File( basedir, expected ), actualFile );
274 }
275 else
276 {
277 assertEquals( new File( expected ), actualFile );
278 }
279 }
280
281 private void assertUrlCommon( String expected, String actual )
282 {
283
284 assertTrue( "expected " + expected + " but was " + actual, actual.startsWith( expected ) );
285 }
286
287 private void assertMissing( Properties props, String prefix )
288 {
289 for ( Iterator it = props.keySet().iterator(); it.hasNext(); )
290 {
291 String key = it.next().toString();
292 assertFalse( "Found unexpected key: " + key, key.startsWith( prefix ) );
293 }
294 }
295
296 }