1 package org.apache.maven.shared.runtime;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.io.FilenameFilter;
24 import java.io.IOException;
25 import java.net.MalformedURLException;
26 import java.net.URL;
27 import java.net.URLClassLoader;
28 import java.util.Arrays;
29 import java.util.List;
30 import java.util.Properties;
31
32 import org.apache.commons.io.filefilter.SuffixFileFilter;
33 import org.apache.maven.project.MavenProject;
34 import org.apache.maven.shared.invoker.InvocationRequest;
35 import org.apache.maven.shared.invoker.InvocationResult;
36 import org.apache.maven.shared.test.plugin.BuildTool;
37 import org.apache.maven.shared.test.plugin.TestToolsException;
38 import org.codehaus.plexus.PlexusTestCase;
39 import org.codehaus.plexus.util.StringUtils;
40
41
42
43
44
45
46
47
48 public class DefaultMavenRuntimeTest extends PlexusTestCase
49 {
50
51
52 private BuildTool buildTool;
53
54 private MavenRuntime mavenRuntime;
55
56 private static boolean initialized = false;
57
58
59
60
61
62
63 @Override
64 protected void setUp() throws Exception
65 {
66 super.setUp();
67
68 buildTool = (BuildTool) lookup( BuildTool.ROLE );
69
70 mavenRuntime = (MavenRuntime) lookup( MavenRuntime.ROLE );
71
72 if ( !initialized )
73 {
74 packageProject( "testSingleJar/pom.xml" );
75 packageProject( "testSingleJar2/pom.xml" );
76 packageProject( "testMultipleJars/project1/pom.xml" );
77 packageProject( "testMultipleJars/project2/pom.xml" );
78 packageProject( "testMultipleJars/project3/pom.xml" );
79 packageProject( "testDependentJars/pom.xml" );
80 packageProject( "testDependentJars2/pom.xml" );
81
82 initialized = true;
83 }
84 }
85
86
87
88 public void testGetProjectPropertiesWithFileUrl()
89 throws MavenRuntimeException, IOException
90 {
91 File jar = getPackage( "testSingleJar/pom.xml" );
92
93 URL url = jar.toURI().toURL();
94
95 MavenProjectProperties properties = mavenRuntime.getProjectProperties( url );
96
97 assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", properties );
98 }
99
100 public void testGetProjectPropertiesWithJarUrl()
101 throws MavenRuntimeException, IOException
102 {
103 File jar = getPackage( "testSingleJar/pom.xml" );
104
105 URL url = new URL( "jar:" + jar.toURI().toURL() + "!/" );
106
107 MavenProjectProperties properties = mavenRuntime.getProjectProperties( url );
108
109 assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", properties );
110 }
111
112 public void testGetProjectPropertiesWithJarEntryUrl()
113 throws MavenRuntimeException, IOException
114 {
115 File jar = getPackage( "testSingleJar/pom.xml" );
116
117 URL url = new URL( "jar:" + jar.toURI().toURL() + "!/a/PackagedClass.class" );
118
119 MavenProjectProperties properties = mavenRuntime.getProjectProperties( url );
120
121 assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", properties );
122 }
123
124 public void testGetProjectPropertiesWithDefaultPackageClass()
125 throws ClassNotFoundException, MavenRuntimeException, IOException
126 {
127 File jar = getPackage( "testSingleJar/pom.xml" );
128
129 URLClassLoader classLoader = newClassLoader( jar );
130
131 Class<?> klass = classLoader.loadClass( "DefaultPackageClass" );
132
133 MavenProjectProperties properties = mavenRuntime.getProjectProperties( klass );
134
135 assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", properties );
136 }
137
138 public void testGetProjectPropertiesWithPackagedClass()
139 throws ClassNotFoundException, MavenRuntimeException, IOException
140 {
141 File jar = getPackage( "testSingleJar/pom.xml" );
142
143 URLClassLoader classLoader = newClassLoader( jar );
144
145 Class<?> klass = classLoader.loadClass( "a.PackagedClass" );
146
147 MavenProjectProperties properties = mavenRuntime.getProjectProperties( klass );
148
149 assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", properties );
150 }
151
152 public void testGetProjectPropertiesWithSubPackagedClass()
153 throws ClassNotFoundException, MavenRuntimeException, IOException
154 {
155 File jar = getPackage( "testSingleJar/pom.xml" );
156
157 URLClassLoader classLoader = newClassLoader( jar );
158
159 Class<?> klass = classLoader.loadClass( "a.b.SubPackagedClass" );
160
161 MavenProjectProperties properties = mavenRuntime.getProjectProperties( klass );
162
163 assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", properties );
164 }
165
166 public void testGetProjectPropertiesWithMultipleVersions()
167 throws ClassNotFoundException, MavenRuntimeException, IOException
168 {
169 File jar1 = getPackage( "testSingleJar/pom.xml" );
170 File jar2 = getPackage( "testSingleJar2/pom.xml" );
171
172 URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2 } );
173
174 Class<?> klass = classLoader.loadClass( "DefaultPackageClass" );
175
176 MavenProjectProperties properties = mavenRuntime.getProjectProperties( klass );
177
178 assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", properties );
179 }
180
181 public void testGetProjectPropertiesWithMultipleVersionsReversed()
182 throws ClassNotFoundException, MavenRuntimeException, IOException
183 {
184 File jar1 = getPackage( "testSingleJar/pom.xml" );
185 File jar2 = getPackage( "testSingleJar2/pom.xml" );
186
187 URLClassLoader classLoader = newClassLoader( new File[] { jar2, jar1 } );
188
189 Class<?> klass = classLoader.loadClass( "DefaultPackageClass" );
190
191 MavenProjectProperties properties = mavenRuntime.getProjectProperties( klass );
192
193 assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", properties );
194 }
195
196 public void testGetProjectPropertiesWithParentDelegation()
197 throws ClassNotFoundException, MavenRuntimeException, IOException
198 {
199 File jar1 = getPackage( "testSingleJar/pom.xml" );
200 File jar2 = getPackage( "testSingleJar2/pom.xml" );
201
202 URLClassLoader classLoader1 = newClassLoader( jar1 );
203 URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1 );
204
205 Class<?> klass = classLoader2.loadClass( "DefaultPackageClass" );
206
207 MavenProjectProperties properties = mavenRuntime.getProjectProperties( klass );
208
209 assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", properties );
210 }
211
212 public void testGetProjectPropertiesWithChildDelegation()
213 throws ClassNotFoundException, MavenRuntimeException, IOException
214 {
215 File jar1 = getPackage( "testSingleJar/pom.xml" );
216 File jar2 = getPackage( "testSingleJar2/pom.xml" );
217
218 URLClassLoader classLoader1 = newClassLoader( jar1 );
219 URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1, true );
220
221 Class<?> klass = classLoader2.loadClass( "DefaultPackageClass" );
222
223 MavenProjectProperties properties = mavenRuntime.getProjectProperties( klass );
224
225 assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", properties );
226 }
227
228
229
230 public void testGetProjectsPropertiesWithSingleJar()
231 throws MavenRuntimeException, IOException
232 {
233 File jar = getPackage( "testSingleJar/pom.xml" );
234
235 URLClassLoader classLoader = newClassLoader( jar );
236
237 List<MavenProjectProperties> properties = mavenRuntime.getProjectsProperties( classLoader );
238
239 assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", properties );
240 }
241
242 public void testGetProjectsPropertiesWithMultipleJars()
243 throws MavenRuntimeException, IOException
244 {
245 File jar1 = getPackage( "testMultipleJars/project1/pom.xml" );
246 File jar2 = getPackage( "testMultipleJars/project2/pom.xml" );
247 File jar3 = getPackage( "testMultipleJars/project3/pom.xml" );
248
249 URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2, jar3 } );
250
251 List<MavenProjectProperties> properties = mavenRuntime.getProjectsProperties( classLoader );
252
253 assertMavenProjectProperties( new String[] {
254 "org.apache.maven.shared.runtime.tests:testMultipleJars1:1.0",
255 "org.apache.maven.shared.runtime.tests:testMultipleJars2:1.0",
256 "org.apache.maven.shared.runtime.tests:testMultipleJars3:1.0"
257 }, properties );
258 }
259
260 public void testGetProjectsPropertiesWithMultipleVersions()
261 throws MavenRuntimeException, IOException
262 {
263 File jar1 = getPackage( "testSingleJar/pom.xml" );
264 File jar2 = getPackage( "testSingleJar2/pom.xml" );
265
266 URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2 } );
267
268 List<MavenProjectProperties> properties = mavenRuntime.getProjectsProperties( classLoader );
269
270 assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", properties );
271 }
272
273 public void testGetProjectsPropertiesWithMultipleVersionsReversed()
274 throws MavenRuntimeException, IOException
275 {
276 File jar1 = getPackage( "testSingleJar/pom.xml" );
277 File jar2 = getPackage( "testSingleJar2/pom.xml" );
278
279 URLClassLoader classLoader = newClassLoader( new File[] { jar2, jar1 } );
280
281 List<MavenProjectProperties> properties = mavenRuntime.getProjectsProperties( classLoader );
282
283 assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", properties );
284 }
285
286 public void testGetProjectsPropertiesWithParentDelegation()
287 throws MavenRuntimeException, IOException
288 {
289 File jar1 = getPackage( "testSingleJar/pom.xml" );
290 File jar2 = getPackage( "testSingleJar2/pom.xml" );
291
292 URLClassLoader classLoader1 = newClassLoader( jar1 );
293 URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1 );
294
295 List<MavenProjectProperties> properties = mavenRuntime.getProjectsProperties( classLoader2 );
296
297 assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", properties );
298 }
299
300 public void testGetProjectsPropertiesWithChildDelegation()
301 throws MavenRuntimeException, IOException
302 {
303 File jar1 = getPackage( "testSingleJar/pom.xml" );
304 File jar2 = getPackage( "testSingleJar2/pom.xml" );
305
306 URLClassLoader classLoader1 = newClassLoader( jar1 );
307 URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1, true );
308
309 List<MavenProjectProperties> properties = mavenRuntime.getProjectsProperties( classLoader2 );
310
311 assertMavenProjectProperties( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", properties );
312 }
313
314
315
316 public void testGetProjectWithFileUrl()
317 throws MavenRuntimeException, IOException
318 {
319 File jar = getPackage( "testSingleJar/pom.xml" );
320
321 URL url = jar.toURI().toURL();
322
323 MavenProject project = mavenRuntime.getProject( url );
324
325 assertMavenProject( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", project );
326 }
327
328 public void testGetProjectWithJarUrl()
329 throws MavenRuntimeException, IOException
330 {
331 File jar = getPackage( "testSingleJar/pom.xml" );
332
333 URL url = new URL( "jar:" + jar.toURI().toURL() + "!/" );
334
335 MavenProject project = mavenRuntime.getProject( url );
336
337 assertMavenProject( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", project );
338 }
339
340 public void testGetProjectWithJarEntryUrl()
341 throws MavenRuntimeException, IOException
342 {
343 File jar = getPackage( "testSingleJar/pom.xml" );
344
345 URL url = new URL( "jar:" + jar.toURI().toURL() + "!/a/PackagedClass.class" );
346
347 MavenProject project = mavenRuntime.getProject( url );
348
349 assertMavenProject( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", project );
350 }
351
352 public void testGetProjectWithDefaultPackageClass()
353 throws ClassNotFoundException, MavenRuntimeException, IOException
354 {
355 File jar = getPackage( "testSingleJar/pom.xml" );
356
357 URLClassLoader classLoader = newClassLoader( jar );
358
359 Class<?> klass = classLoader.loadClass( "DefaultPackageClass" );
360
361 MavenProject project = mavenRuntime.getProject( klass );
362
363 assertMavenProject( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", project );
364 }
365
366 public void testGetProjectWithPackagedClass()
367 throws ClassNotFoundException, MavenRuntimeException, IOException
368 {
369 File jar = getPackage( "testSingleJar/pom.xml" );
370
371 URLClassLoader classLoader = newClassLoader( jar );
372
373 Class<?> klass = classLoader.loadClass( "a.PackagedClass" );
374
375 MavenProject project = mavenRuntime.getProject( klass );
376
377 assertMavenProject( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", project );
378 }
379
380 public void testGetProjectWithSubPackagedClass()
381 throws ClassNotFoundException, MavenRuntimeException, IOException
382 {
383 File jar = getPackage( "testSingleJar/pom.xml" );
384
385 URLClassLoader classLoader = newClassLoader( jar );
386
387 Class<?> klass = classLoader.loadClass( "a.b.SubPackagedClass" );
388
389 MavenProject project = mavenRuntime.getProject( klass );
390
391 assertMavenProject( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", project );
392 }
393
394 public void testGetProjectWithMultipleVersions()
395 throws ClassNotFoundException, MavenRuntimeException, IOException
396 {
397 File jar1 = getPackage( "testSingleJar/pom.xml" );
398 File jar2 = getPackage( "testSingleJar2/pom.xml" );
399
400 URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2 } );
401
402 Class<?> klass = classLoader.loadClass( "DefaultPackageClass" );
403
404 MavenProject project = mavenRuntime.getProject( klass );
405
406 assertMavenProject( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", project );
407 }
408
409 public void testGetProjectWithMultipleVersionsReversed()
410 throws ClassNotFoundException, MavenRuntimeException, IOException
411 {
412 File jar1 = getPackage( "testSingleJar/pom.xml" );
413 File jar2 = getPackage( "testSingleJar2/pom.xml" );
414
415 URLClassLoader classLoader = newClassLoader( new File[] { jar2, jar1 } );
416
417 Class<?> klass = classLoader.loadClass( "DefaultPackageClass" );
418
419 MavenProject project = mavenRuntime.getProject( klass );
420
421 assertMavenProject( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", project );
422 }
423
424 public void testGetProjectWithParentDelegation()
425 throws ClassNotFoundException, MavenRuntimeException, IOException
426 {
427 File jar1 = getPackage( "testSingleJar/pom.xml" );
428 File jar2 = getPackage( "testSingleJar2/pom.xml" );
429
430 URLClassLoader classLoader1 = newClassLoader( jar1 );
431 URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1 );
432
433 Class<?> klass = classLoader2.loadClass( "DefaultPackageClass" );
434
435 MavenProject project = mavenRuntime.getProject( klass );
436
437 assertMavenProject( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", project );
438 }
439
440 public void testGetProjectWithChildDelegation()
441 throws ClassNotFoundException, MavenRuntimeException, IOException
442 {
443 File jar1 = getPackage( "testSingleJar/pom.xml" );
444 File jar2 = getPackage( "testSingleJar2/pom.xml" );
445
446 URLClassLoader classLoader1 = newClassLoader( jar1 );
447 URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1, true );
448
449 Class<?> klass = classLoader2.loadClass( "DefaultPackageClass" );
450
451 MavenProject project = mavenRuntime.getProject( klass );
452
453 assertMavenProject( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", project );
454 }
455
456
457
458 public void testGetProjectsWithSingleJar()
459 throws MavenRuntimeException, IOException
460 {
461 File jar = getPackage( "testSingleJar/pom.xml" );
462
463 URLClassLoader classLoader = newClassLoader( jar );
464
465 List<MavenProject> projects = mavenRuntime.getProjects( classLoader );
466
467 assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", projects );
468 }
469
470 public void testGetProjectsWithMultipleJars()
471 throws MavenRuntimeException, IOException
472 {
473 File jar1 = getPackage( "testMultipleJars/project1/pom.xml" );
474 File jar2 = getPackage( "testMultipleJars/project2/pom.xml" );
475 File jar3 = getPackage( "testMultipleJars/project3/pom.xml" );
476
477 URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2, jar3 } );
478
479 List<MavenProject> projects = mavenRuntime.getProjects( classLoader );
480
481 assertMavenProjects( new String[] {
482 "org.apache.maven.shared.runtime.tests:testMultipleJars1:1.0",
483 "org.apache.maven.shared.runtime.tests:testMultipleJars2:1.0",
484 "org.apache.maven.shared.runtime.tests:testMultipleJars3:1.0"
485 }, projects );
486 }
487
488 public void testGetProjectsWithMultipleVersions()
489 throws MavenRuntimeException, IOException
490 {
491 File jar1 = getPackage( "testSingleJar/pom.xml" );
492 File jar2 = getPackage( "testSingleJar2/pom.xml" );
493
494 URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2 } );
495
496 List<MavenProject> projects = mavenRuntime.getProjects( classLoader );
497
498 assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", projects );
499 }
500
501 public void testGetProjectsWithMultipleVersionsReversed()
502 throws MavenRuntimeException, IOException
503 {
504 File jar1 = getPackage( "testSingleJar/pom.xml" );
505 File jar2 = getPackage( "testSingleJar2/pom.xml" );
506
507 URLClassLoader classLoader = newClassLoader( new File[] { jar2, jar1 } );
508
509 List<MavenProject> projects = mavenRuntime.getProjects( classLoader );
510
511 assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", projects );
512 }
513
514 public void testGetProjectsWithParentDelegation()
515 throws MavenRuntimeException, IOException
516 {
517 File jar1 = getPackage( "testSingleJar/pom.xml" );
518 File jar2 = getPackage( "testSingleJar2/pom.xml" );
519
520 URLClassLoader classLoader1 = newClassLoader( jar1 );
521 URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1 );
522
523 List<MavenProject> projects = mavenRuntime.getProjects( classLoader2 );
524
525 assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", projects );
526 }
527
528 public void testGetProjectsWithChildDelegation()
529 throws MavenRuntimeException, IOException
530 {
531 File jar1 = getPackage( "testSingleJar/pom.xml" );
532 File jar2 = getPackage( "testSingleJar2/pom.xml" );
533
534 URLClassLoader classLoader1 = newClassLoader( jar1 );
535 URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1, true );
536
537 List<MavenProject> projects = mavenRuntime.getProjects( classLoader2 );
538
539 assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", projects );
540 }
541
542
543
544 public void testGetSortedProjectsWithSingleJar()
545 throws MavenRuntimeException, IOException
546 {
547 File jar = getPackage( "testSingleJar/pom.xml" );
548
549 URLClassLoader classLoader = newClassLoader( jar );
550
551 List<MavenProject> projects = mavenRuntime.getSortedProjects( classLoader );
552
553 assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", projects );
554 }
555
556 public void testGetSortedProjectsWithMultipleJars()
557 throws MavenRuntimeException, IOException
558 {
559 File jar1 = getPackage( "testMultipleJars/project1/pom.xml" );
560 File jar2 = getPackage( "testMultipleJars/project2/pom.xml" );
561 File jar3 = getPackage( "testMultipleJars/project3/pom.xml" );
562
563 URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2, jar3 } );
564
565 List<MavenProject> projects = mavenRuntime.getSortedProjects( classLoader );
566
567 assertMavenProjects( new String[] {
568 "org.apache.maven.shared.runtime.tests:testMultipleJars1:1.0",
569 "org.apache.maven.shared.runtime.tests:testMultipleJars2:1.0",
570 "org.apache.maven.shared.runtime.tests:testMultipleJars3:1.0"
571 }, projects );
572 }
573
574 public void testGetSortedProjectsWithDependentJars()
575 throws MavenRuntimeException, IOException
576 {
577 File jar1 = getPackage( "testDependentJars/project1/pom.xml" );
578 File jar2 = getPackage( "testDependentJars/project2/pom.xml" );
579 File jar3 = getPackage( "testDependentJars/project3/pom.xml" );
580
581 URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2, jar3 } );
582
583 List<MavenProject> projects = mavenRuntime.getSortedProjects( classLoader );
584
585 assertMavenProjects( new String[] {
586 "org.apache.maven.shared.runtime.tests:testDependentJars3:1.0",
587 "org.apache.maven.shared.runtime.tests:testDependentJars1:1.0",
588 "org.apache.maven.shared.runtime.tests:testDependentJars2:1.0"
589 }, projects );
590 }
591
592
593 public void testGetSortedProjectsWithMediatedDependency()
594 throws MavenRuntimeException, IOException
595 {
596 File jar1 = getPackage( "testDependentJars2/project1/pom.xml" );
597 File jar2 = getPackage( "testDependentJars/project2/pom.xml" );
598 File jar3 = getPackage( "testDependentJars/project3/pom.xml" );
599
600 URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2, jar3 } );
601
602 List<MavenProject> projects = mavenRuntime.getSortedProjects( classLoader );
603
604 assertMavenProjects( new String[] {
605 "org.apache.maven.shared.runtime.tests:testDependentJars3:1.0",
606 "org.apache.maven.shared.runtime.tests:testDependentJars1:2.0",
607 "org.apache.maven.shared.runtime.tests:testDependentJars2:1.0"
608 }, projects );
609 }
610
611 public void testGetSortedProjectsWithMultipleVersions()
612 throws MavenRuntimeException, IOException
613 {
614 File jar1 = getPackage( "testSingleJar/pom.xml" );
615 File jar2 = getPackage( "testSingleJar2/pom.xml" );
616
617 URLClassLoader classLoader = newClassLoader( new File[] { jar1, jar2 } );
618
619 List<MavenProject> projects = mavenRuntime.getSortedProjects( classLoader );
620
621 assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", projects );
622 }
623
624 public void testGetSortedProjectsWithMultipleVersionsReversed()
625 throws MavenRuntimeException, IOException
626 {
627 File jar1 = getPackage( "testSingleJar/pom.xml" );
628 File jar2 = getPackage( "testSingleJar2/pom.xml" );
629
630 URLClassLoader classLoader = newClassLoader( new File[] { jar2, jar1 } );
631
632 List<MavenProject> projects = mavenRuntime.getSortedProjects( classLoader );
633
634 assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", projects );
635 }
636
637 public void testGetSortedProjectsWithParentDelegation()
638 throws MavenRuntimeException, IOException
639 {
640 File jar1 = getPackage( "testSingleJar/pom.xml" );
641 File jar2 = getPackage( "testSingleJar2/pom.xml" );
642
643 URLClassLoader classLoader1 = newClassLoader( jar1 );
644 URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1 );
645
646 List<MavenProject> projects = mavenRuntime.getSortedProjects( classLoader2 );
647
648 assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:1.0", projects );
649 }
650
651 public void testGetSortedProjectsWithChildDelegation()
652 throws MavenRuntimeException, IOException
653 {
654 File jar1 = getPackage( "testSingleJar/pom.xml" );
655 File jar2 = getPackage( "testSingleJar2/pom.xml" );
656
657 URLClassLoader classLoader1 = newClassLoader( jar1 );
658 URLClassLoader classLoader2 = newClassLoader( jar2, classLoader1, true );
659
660 List<MavenProject> projects = mavenRuntime.getSortedProjects( classLoader2 );
661
662 assertMavenProjects( "org.apache.maven.shared.runtime.tests:testSingleJar:2.0", projects );
663 }
664
665
666
667 private void packageProject( String pomPath ) throws TestToolsException
668 {
669 System.out.println("Building test project " + pomPath);
670
671 File pom = getTestFile( "target/test-classes/", pomPath );
672 Properties properties = new Properties();
673 List<String> goals = Arrays.asList( new String[] { "clean", "package" } );
674 File log = new File( pom.getParentFile(), "build.log" );
675
676 InvocationRequest request = buildTool.createBasicInvocationRequest( pom, properties, goals, log );
677 request.setLocalRepositoryDirectory( findLocalRepo() );
678 InvocationResult result = buildTool.executeMaven( request );
679 assertNull( "Error building test project", result.getExecutionException() );
680 assertEquals( "Error building test project", 0, result.getExitCode() );
681 }
682
683 private File findLocalRepo()
684 {
685 String basedir = System.getProperty( "maven.repo.local", "" );
686
687 if ( StringUtils.isNotEmpty( basedir ) )
688 {
689 return new File( basedir );
690 }
691
692 return null;
693 }
694
695 private File getPackage( String pomPath )
696 {
697 File pom = getTestFile( "target/test-classes/", pomPath );
698
699 File target = new File( pom.getParentFile(), "target" );
700 File[] jars = target.listFiles( (FilenameFilter) new SuffixFileFilter( "jar" ) );
701 assertEquals( "Cannot find jar", 1, jars.length );
702
703 File jar = jars[0];
704 assertTrue( "Cannot find jar", jar.exists() && jar.isFile() );
705
706 return jar;
707 }
708
709 private URLClassLoader newClassLoader( File file ) throws MalformedURLException
710 {
711 return newClassLoader( file, null );
712 }
713
714 private URLClassLoader newClassLoader( File file, ClassLoader parent ) throws MalformedURLException
715 {
716 return newClassLoader( file, parent, false );
717 }
718
719 private URLClassLoader newClassLoader( File file, ClassLoader parent, boolean childDelegation )
720 throws MalformedURLException
721 {
722 return newClassLoader( new File[] { file }, parent, childDelegation );
723 }
724
725 private URLClassLoader newClassLoader( File[] files ) throws MalformedURLException
726 {
727 return newClassLoader( files, null );
728 }
729
730 private URLClassLoader newClassLoader( File[] files, ClassLoader parent ) throws MalformedURLException
731 {
732 return newClassLoader( files, parent, false );
733 }
734
735 private URLClassLoader newClassLoader( File[] files, ClassLoader parent, boolean childDelegation )
736 throws MalformedURLException
737 {
738 URL[] urls = new URL[files.length];
739
740 for ( int i = 0; i < files.length; i++ )
741 {
742 urls[i] = files[i].toURI().toURL();
743 }
744
745 return new DelegatingClassLoader( urls, parent, childDelegation );
746 }
747
748 private void assertMavenProjectProperties( String id, List<MavenProjectProperties> propertiesList )
749 {
750 assertMavenProjectProperties( new String[] { id }, propertiesList );
751 }
752
753 private void assertMavenProjectProperties( String[] ids, List<MavenProjectProperties> propertiesList )
754 {
755 assertEquals( "Number of project properties", ids.length, propertiesList.size() );
756
757 for ( int i = 0; i < ids.length; i++ )
758 {
759 assertMavenProjectProperties( ids[i], propertiesList.get( i ) );
760 }
761 }
762
763 private void assertMavenProjectProperties( String id, MavenProjectProperties properties )
764 {
765 String[] tokens = id.split( ":" );
766
767 assertMavenProjectProperties( tokens[0], tokens[1], tokens[2], properties );
768 }
769
770 private void assertMavenProjectProperties( String groupId, String artifactId, String version,
771 MavenProjectProperties properties )
772 {
773 assertNotNull( "Project properties are null", properties );
774
775 assertEquals( "Group id", groupId, properties.getGroupId() );
776 assertEquals( "Artifact id", artifactId, properties.getArtifactId() );
777 assertEquals( "Version", version, properties.getVersion() );
778 }
779
780 private void assertMavenProjects( String id, List<MavenProject> projects )
781 {
782 assertMavenProjects( new String[] { id }, projects );
783 }
784
785 private void assertMavenProjects( String[] ids, List<MavenProject> projects )
786 {
787 assertEquals( "Number of projects", ids.length, projects.size() );
788
789 for ( int i = 0; i < ids.length; i++ )
790 {
791 assertMavenProject( ids[i], projects.get( i ) );
792 }
793 }
794
795 private void assertMavenProject( String id, MavenProject project )
796 {
797 String[] tokens = id.split( ":" );
798
799 assertMavenProject( tokens[0], tokens[1], tokens[2], project );
800 }
801
802 private void assertMavenProject( String groupId, String artifactId, String version, MavenProject project )
803 {
804 assertNotNull( "Project is null", project );
805
806 assertEquals( "Group id", groupId, project.getGroupId() );
807 assertEquals( "Artifact id", artifactId, project.getArtifactId() );
808 assertEquals( "Version", version, project.getVersion() );
809 }
810 }