1 package org.apache.maven.archetype.generator;
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.FileInputStream;
24 import java.io.FileNotFoundException;
25 import java.io.IOException;
26 import java.io.InputStream;
27 import java.io.Reader;
28 import java.util.Properties;
29
30 import org.apache.maven.archetype.ArchetypeGenerationRequest;
31 import org.apache.maven.archetype.ArchetypeGenerationResult;
32 import org.apache.maven.artifact.repository.ArtifactRepository;
33 import org.apache.maven.artifact.repository.DefaultArtifactRepository;
34 import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
35 import org.apache.maven.model.Model;
36 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
37 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
38 import org.apache.maven.project.DefaultProjectBuildingRequest;
39 import org.apache.maven.project.ProjectBuildingRequest;
40 import org.apache.maven.repository.internal.MavenRepositorySystemSession;
41 import org.codehaus.plexus.util.FileUtils;
42 import org.codehaus.plexus.util.ReaderFactory;
43 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
44 import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager;
45
46 public class DefaultArchetypeGeneratorTest
47 extends AbstractMojoTestCase
48 {
49
50 private final static Archetype ARCHETYPE_BASIC = new Archetype( "archetypes", "basic", "1.0" );
51
52 private final static Archetype ARCHETYPE_PARTIAL = new Archetype( "archetypes", "partial", "1.0" );
53
54 private final static Archetype ARCHETYPE_SITE = new Archetype( "archetypes", "site", "1.0" );
55
56 private final static Archetype ARCHETYPE_FILESET = new Archetype( "archetypes", "fileset", "1.0" );
57
58 private final static Archetype ARCHETYPE_OLD = new Archetype( "archetypes", "old", "1.0" );
59
60 private final static Archetype ARCHETYPE_FILESET_WITH_POSTCREATE_SCRIPT =
61 new Archetype( "archetypes", "fileset_with_postscript", "1.0" );
62
63 private final static Properties ADDITIONAL_PROPERTIES = new Properties();
64 static
65 {
66 ADDITIONAL_PROPERTIES.setProperty( "property-without-default-1", "file-value" );
67 ADDITIONAL_PROPERTIES.setProperty( "property-without-default-2", "file-value" );
68 ADDITIONAL_PROPERTIES.setProperty( "property-without-default-3", "file-value" );
69 ADDITIONAL_PROPERTIES.setProperty( "property-without-default-4", "file-value" );
70 ADDITIONAL_PROPERTIES.setProperty( "property-with-default-1", "file-value" );
71 ADDITIONAL_PROPERTIES.setProperty( "property-with-default-2", "file-value" );
72 ADDITIONAL_PROPERTIES.setProperty( "property-with-default-3", "file-value" );
73 ADDITIONAL_PROPERTIES.setProperty( "property-with-default-4", "file-value" );
74 ADDITIONAL_PROPERTIES.setProperty( "property_underscored_1", "prop1" );
75 ADDITIONAL_PROPERTIES.setProperty( "property_underscored-2", "prop2" );
76 }
77
78 ArtifactRepository localRepository;
79
80 String remoteRepository;
81
82 ArchetypeGenerator generator;
83
84 String outputDirectory;
85
86 File projectDirectory;
87
88 private void generateProjectFromArchetype( ArchetypeGenerationRequest request )
89 throws Exception
90 {
91 ArchetypeGenerationResult result = new ArchetypeGenerationResult();
92
93 generator.generateArchetype( request, result );
94
95 if ( result.getCause() != null )
96 {
97 throw result.getCause();
98 }
99 }
100
101 private ArchetypeGenerationResult generateProjectFromArchetypeWithFailure( ArchetypeGenerationRequest request )
102 throws Exception
103 {
104 ArchetypeGenerationResult result = new ArchetypeGenerationResult();
105
106 generator.generateArchetype( request, result );
107
108 if ( result.getCause() == null )
109 {
110 fail( "Exception must be thrown." );
111 }
112
113 return result;
114 }
115
116 public void testArchetypeNotDefined()
117 throws Exception
118 {
119 System.out.println( "testArchetypeNotDefined" );
120
121 Archetype archetype = new Archetype( "archetypes", null, "1.0" );
122
123 ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-2", archetype );
124
125 ArchetypeGenerationResult result = generateProjectFromArchetypeWithFailure( request );
126
127 assertEquals( "Exception not correct", "The archetype is not defined", result.getCause().getMessage() );
128 }
129
130 public void testGenerateArchetypeCompleteWithoutParent()
131 throws Exception
132 {
133 System.out.println( "testGenerateArchetypeCompleteWithoutParent" );
134
135 ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-4", ARCHETYPE_BASIC );
136
137 FileUtils.forceDelete( projectDirectory );
138
139 generateProjectFromArchetype( request );
140
141 assertTemplateContent( "src/main/java/file/value/package/App.java" );
142 assertTemplateContent( "src/main/java/file/value/package/inner/package/App2.java" );
143 assertTemplateContent( "src/main/c/file/value/package/App.c" );
144 assertTemplateContent( "src/test/java/file/value/package/AppTest.java" );
145 assertTemplateContent( "src/test/c/file/value/package/AppTest.c" );
146 assertTemplateContent( "src/main/resources/App.properties" );
147 assertTemplateContent( "src/main/resources/inner/dir/App2.properties" );
148 assertTemplateContent( "src/main/mdo/App.mdo" );
149 assertTemplateContent( "src/test/resources/AppTest.properties" );
150 assertTemplateContent( "src/test/mdo/AppTest.mdo" );
151
152 Model model = readPom( new File( projectDirectory, "pom.xml" ) );
153 assertNull( model.getParent() );
154 assertEquals( "file-value", model.getGroupId() );
155 assertEquals( "file-value", model.getArtifactId() );
156 assertEquals( "file-value", model.getVersion() );
157 }
158
159 public void testGenerateArchetypeCompleteWithParent()
160 throws Exception
161 {
162 System.out.println( "testGenerateArchetypeCompleteWithParent" );
163
164 ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-5", ARCHETYPE_BASIC );
165
166 File projectFile = getProjectFile();
167 File projectFileSample = getProjectSampleFile();
168 copy( projectFileSample, projectFile );
169
170 FileUtils.forceDelete( projectDirectory );
171
172 generateProjectFromArchetype( request );
173
174 Model model = readPom( new File( projectDirectory, "pom.xml" ) );
175 assertEquals( "org.apache.maven.archetype", model.getParent().getGroupId() );
176 assertEquals( "test-generate-5-parent", model.getParent().getArtifactId() );
177 assertEquals( "1.0-SNAPSHOT", model.getParent().getVersion() );
178 assertEquals( "file-value", model.getGroupId() );
179 assertEquals( "file-value", model.getArtifactId() );
180 assertEquals( "file-value", model.getVersion() );
181
182 Model parentModel = readPom( projectFile );
183 assertTrue( parentModel.getModules().contains( "file-value" ) );
184 }
185
186 public void testGenerateArchetypePartialOnChild()
187 throws Exception
188 {
189 System.out.println( "testGenerateArchetypePartialOnChild" );
190
191 ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-8", ARCHETYPE_PARTIAL );
192
193 File parentProjectFile = getProjectFile();
194 File parentProjectFileSample = getProjectSampleFile();
195 copy( parentProjectFileSample, parentProjectFile );
196
197 File projectFile = new File( projectDirectory, "pom.xml" );
198 File projectFileSample = new File( projectDirectory, "pom.xml.sample" );
199 copy( projectFileSample, projectFile );
200
201 FileUtils.forceDelete( new File( projectDirectory, "src" ) );
202
203 generateProjectFromArchetype( request );
204
205 Model model = readPom( projectFile );
206 assertNotNull( model.getParent() );
207 assertEquals( "org.apache.maven.archetype", model.getGroupId() );
208 assertEquals( "file-value", model.getArtifactId() );
209 assertEquals( "1.0-SNAPSHOT", model.getVersion() );
210 assertTrue( model.getModules().isEmpty() );
211 assertFalse( model.getDependencies().isEmpty() );
212 assertFalse( model.getBuild().getPlugins().isEmpty() );
213 assertFalse( model.getReporting().getPlugins().isEmpty() );
214 }
215
216 public void testGenerateArchetypePartialOnChildDontOverride()
217 throws Exception
218 {
219 System.out.println( "testGenerateArchetypePartialOnChildDontOverride" );
220
221 ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-9", ARCHETYPE_PARTIAL );
222
223 File projectFile = new File( projectDirectory, "pom.xml" );
224 File projectFileSample = new File( projectDirectory, "pom.xml.sample" );
225 copy( projectFileSample, projectFile );
226
227 FileUtils.forceDelete( new File( projectDirectory, "src" ) );
228
229 generateProjectFromArchetype( request );
230
231 Model model = readPom( projectFile );
232 assertNotNull( model.getParent() );
233 assertEquals( "org.apache.maven.archetype", model.getGroupId() );
234 assertEquals( "file-value", model.getArtifactId() );
235 assertEquals( "1.0-SNAPSHOT", model.getVersion() );
236 assertTrue( model.getModules().isEmpty() );
237 assertFalse( model.getDependencies().isEmpty() );
238 assertEquals( "1.0", model.getDependencies().get( 0 ).getVersion() );
239 assertFalse( model.getBuild().getPlugins().isEmpty() );
240 assertEquals( "1.0", model.getBuild().getPlugins().get( 0 ).getVersion() );
241 assertFalse( model.getReporting().getPlugins().isEmpty() );
242 assertEquals( "1.0", model.getReporting().getPlugins().get( 0 ).getVersion() );
243 }
244
245 public void testGenerateArchetypePartialOnParent()
246 throws Exception
247 {
248 System.out.println( "testGenerateArchetypePartialOnParent" );
249
250 ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-7", ARCHETYPE_PARTIAL );
251
252 File projectFile = new File( outputDirectory, "pom.xml" );
253 File projectFileSample = new File( outputDirectory, "pom.xml.sample" );
254 copy( projectFileSample, projectFile );
255
256 FileUtils.forceDelete( new File( outputDirectory, "src" ) );
257
258 generateProjectFromArchetype( request );
259
260 Model model = readPom( getProjectFile() );
261 assertNull( model.getParent() );
262 assertEquals( "org.apache.maven.archetype", model.getGroupId() );
263 assertEquals( "test-generate-7", model.getArtifactId() );
264 assertEquals( "1.0-SNAPSHOT", model.getVersion() );
265 assertTrue( model.getModules().isEmpty() );
266 assertFalse( model.getBuild().getPlugins().isEmpty() );
267 }
268
269 public void testGenerateArchetypePartialWithoutPoms()
270 throws Exception
271 {
272 System.out.println( "testGenerateArchetypePartialWithoutPoms" );
273
274 ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-6", ARCHETYPE_PARTIAL );
275
276 File projectFile = new File( projectDirectory, "pom.xml" );
277
278 FileUtils.forceDelete( projectDirectory );
279
280 generateProjectFromArchetype( request );
281
282 Model model = readPom( projectFile );
283 assertNull( model.getParent() );
284 assertEquals( "file-value", model.getGroupId() );
285 assertEquals( "file-value", model.getArtifactId() );
286 assertEquals( "file-value", model.getVersion() );
287 }
288
289 public void testGenerateArchetypeSite()
290 throws Exception
291 {
292 System.out.println( "testGenerateArchetypeSite" );
293
294 ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-10", ARCHETYPE_SITE );
295
296 File projectFile = new File( projectDirectory, "pom.xml" );
297
298 FileUtils.forceDelete( projectDirectory );
299
300 generateProjectFromArchetype( request );
301
302 assertTemplateContent( "src/site/site.xml" );
303 assertTemplateContent( "src/site/apt/test.apt" );
304
305 Model model = readPom( projectFile );
306 assertNull( model.getParent() );
307 assertEquals( "file-value", model.getGroupId() );
308 assertEquals( "file-value", model.getArtifactId() );
309 assertEquals( "file-value", model.getVersion() );
310 }
311
312 public void testGenerateFileSetArchetype()
313 throws Exception
314 {
315 System.out.println( "testGenerateFileSetArchetype" );
316
317 ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-12", ARCHETYPE_FILESET );
318
319 File projectFile = new File( projectDirectory, "pom.xml" );
320
321 FileUtils.forceDelete( projectDirectory );
322
323 generateProjectFromArchetype( request );
324
325 assertTemplateContentGeneratedWithFileSetArchetype( "src/main/java/file/value/package/App.java", "file-value" );
326 assertTemplateContentGeneratedWithFileSetArchetype( "src/main/java/file/value/package/inner/package/App2.java",
327 "file-value" );
328
329 assertTemplateCopiedWithFileSetArchetype( "src/main/java/file/value/package/App.ogg" );
330
331 assertTemplateContentGeneratedWithFileSetArchetype( "src/main/resources/App.properties",
332 "file-value" );
333 assertTemplateContentGeneratedWithFileSetArchetype( "src/main/resources/file-value/touch.txt", "file-value" );
334 assertTemplateContentGeneratedWithFileSetArchetype( "src/main/resources/file-value/touch_root.txt",
335 "file-value" );
336
337 assertTemplateCopiedWithFileSetArchetype( "src/main/resources/some-dir/App.png" );
338
339 assertTemplateContentGeneratedWithFileSetArchetype( "src/site/site.xml", "file-value" );
340 assertTemplateContentGeneratedWithFileSetArchetype( "src/site/apt/usage.apt", "file-value" );
341 assertTemplateContentGeneratedWithFileSetArchetype( ".classpath", "file-value" );
342 assertTemplateContentGeneratedWithFileSetArchetype( "profiles.xml", "file-value" );
343
344 Model model = readPom( projectFile );
345 assertNull( model.getParent() );
346 assertEquals( "file-value", model.getGroupId() );
347 assertEquals( "file-value", model.getArtifactId() );
348 assertEquals( "file-value", model.getVersion() );
349
350 assertTemplateContentGeneratedWithFileSetArchetype( "subproject/src/main/java/file/value/package/App.java",
351 "subproject" );
352
353 model = readPom( new File( projectDirectory, "subproject/pom.xml" ) );
354 assertNotNull( model.getParent() );
355 assertEquals( "file-value", model.getParent().getGroupId() );
356 assertEquals( "file-value", model.getParent().getArtifactId() );
357 assertEquals( "file-value", model.getParent().getVersion() );
358 assertEquals( "file-value", model.getGroupId() );
359 assertEquals( "subproject", model.getArtifactId() );
360 assertEquals( "file-value", model.getVersion() );
361
362 assertTemplateContentGeneratedWithFileSetArchetype( "subproject/subsubproject/src/main/java/file/value/package/App.java",
363 "subsubproject" );
364
365 assertTemplateContentGeneratedWithFileSetArchetype( "subproject/subsubproject/src/main/java/file/value/package/"
366 + "file-value/inner/subsubproject/innest/Somefile-valueClasssubsubproject.java",
367 "subsubproject" );
368
369 assertTemplateContentGeneratedWithFileSetArchetype( "subproject/subsubproject/src/main/java/file/value/package/"
370
371 + "ArbitraryProperty-file-value.java", "subsubproject" );
372
373 assertTemplateContentGeneratedWithFileSetArchetype( "subproject/subsubproject/src/main/java/file/value/package/"
374
375 + "M_subsubproject_prop1Testprop2file-value.java", "subsubproject" );
376
377
378 assertTemplateContentGeneratedWithFileSetArchetype( "subproject/subsubproject/src/main/java/file/value/package/"
379
380 + "SkipsUndefinedProperty-__undefined-property__-file-value.java",
381 "subsubproject" );
382
383 model = readPom( new File( projectDirectory, "subproject/subsubproject/pom.xml" ) );
384 assertNotNull( model.getParent() );
385 assertEquals( "file-value", model.getParent().getGroupId() );
386 assertEquals( "subproject", model.getParent().getArtifactId() );
387 assertEquals( "file-value", model.getParent().getVersion() );
388 assertEquals( "file-value", model.getGroupId() );
389 assertEquals( "subsubproject", model.getArtifactId() );
390 assertEquals( "file-value", model.getVersion() );
391 }
392
393 public void testGenerateOldArchetype()
394 throws Exception
395 {
396 System.out.println( "testGenerateOldArchetype" );
397
398 ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-11", ARCHETYPE_OLD );
399
400 File projectFile = new File( projectDirectory, "pom.xml" );
401
402 FileUtils.forceDelete( projectDirectory );
403
404 generateProjectFromArchetype( request );
405
406 assertTemplateContentGeneratedWithOldArchetype( "src/main/java/file/value/package/App.java" );
407 assertTemplateContentGeneratedWithOldArchetype( "src/main/resources/App.properties" );
408 assertTemplateContentGeneratedWithOldArchetype( "src/site/site.xml" );
409
410 Model model = readPom( projectFile );
411 assertNull( model.getParent() );
412 assertEquals( "file-value", model.getGroupId() );
413 assertEquals( "file-value", model.getArtifactId() );
414 assertEquals( "file-value", model.getVersion() );
415 }
416
417 public void testPropertiesNotDefined()
418 throws Exception
419 {
420 System.out.println( "testPropertiesNotDefined" );
421
422 ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-3", ARCHETYPE_BASIC );
423
424 request.setProperties( new Properties() );
425
426 ArchetypeGenerationResult result = generateProjectFromArchetypeWithFailure( request );
427
428 assertTrue( "Exception not correct",
429 result.getCause().getMessage().startsWith( "Archetype archetypes:basic:1.0 is not configured" )
430 && result.getCause().getMessage().endsWith( "Property property-without-default-4 is missing." ) );
431 }
432
433 public void testGenerateArchetypeWithPostScriptIncluded()
434 throws Exception
435 {
436 System.out.println( "testGenerateArchetypeWithPostScriptIncluded" );
437
438 ArchetypeGenerationRequest request =
439 createArchetypeGenerationRequest( "generate-13", ARCHETYPE_FILESET_WITH_POSTCREATE_SCRIPT );
440
441 File projectFile = new File( projectDirectory, "pom.xml" );
442
443 FileUtils.forceDelete( projectDirectory );
444
445 generateProjectFromArchetype( request );
446
447 assertTemplateContentGeneratedWithFileSetArchetype( "src/main/java/file/value/package/App.java", "file-value" );
448 assertTemplateContentGeneratedWithFileSetArchetype( "src/main/java/file/value/package/inner/package/App2.java",
449 "file-value" );
450
451 assertTemplateCopiedWithFileSetArchetype( "src/main/java/file/value/package/App.ogg" );
452
453 File templateFile = new File( projectDirectory, "src/main/java/file/value/package/ToDelete.java" );
454 assertFalse( templateFile + " should have been removed (by post-generate.groovy script", templateFile.exists() );
455
456 assertTemplateContentGeneratedWithFileSetArchetype( "src/main/resources/App.properties", "file-value" );
457 assertTemplateContentGeneratedWithFileSetArchetype( "src/main/resources/file-value/touch.txt", "file-value" );
458 assertTemplateContentGeneratedWithFileSetArchetype( "src/main/resources/file-value/touch_root.txt",
459 "file-value" );
460
461 assertTemplateCopiedWithFileSetArchetype( "src/main/resources/some-dir/App.png" );
462
463 assertTemplateContentGeneratedWithFileSetArchetype( "src/site/site.xml", "file-value" );
464 assertTemplateContentGeneratedWithFileSetArchetype( "src/site/apt/usage.apt", "file-value" );
465 assertTemplateContentGeneratedWithFileSetArchetype( ".classpath", "file-value" );
466 assertTemplateContentGeneratedWithFileSetArchetype( "profiles.xml", "file-value" );
467
468 Model model = readPom( projectFile );
469 assertNull( model.getParent() );
470 assertEquals( "file-value", model.getGroupId() );
471 assertEquals( "file-value", model.getArtifactId() );
472 assertEquals( "file-value", model.getVersion() );
473
474 assertTemplateContentGeneratedWithFileSetArchetype( "subproject/src/main/java/file/value/package/App.java",
475 "subproject" );
476
477 model = readPom( new File( projectDirectory, "subproject/pom.xml" ) );
478 assertNotNull( model.getParent() );
479 assertEquals( "file-value", model.getParent().getGroupId() );
480 assertEquals( "file-value", model.getParent().getArtifactId() );
481 assertEquals( "file-value", model.getParent().getVersion() );
482 assertEquals( "file-value", model.getGroupId() );
483 assertEquals( "subproject", model.getArtifactId() );
484 assertEquals( "file-value", model.getVersion() );
485
486 assertTemplateContentGeneratedWithFileSetArchetype(
487 "subproject/subsubproject/src/main/java/file/value/package/App.java", "subsubproject" );
488
489 assertTemplateContentGeneratedWithFileSetArchetype( "subproject/subsubproject/src/main/java/file/value/package/"
490 + "file-value/inner/subsubproject/innest/Somefile-valueClasssubsubproject.java",
491 "subsubproject" );
492
493 assertTemplateContentGeneratedWithFileSetArchetype( "subproject/subsubproject/src/main/java/file/value/package/"
494
495 + "ArbitraryProperty-file-value.java",
496 "subsubproject" );
497
498
499 assertTemplateContentGeneratedWithFileSetArchetype( "subproject/subsubproject/src/main/java/file/value/package/"
500
501 + "SkipsUndefinedProperty-__undefined-property__-file-value.java",
502 "subsubproject" );
503
504 model = readPom( new File( projectDirectory, "subproject/subsubproject/pom.xml" ) );
505 assertNotNull( model.getParent() );
506 assertEquals( "file-value", model.getParent().getGroupId() );
507 assertEquals( "subproject", model.getParent().getArtifactId() );
508 assertEquals( "file-value", model.getParent().getVersion() );
509 assertEquals( "file-value", model.getGroupId() );
510 assertEquals( "subsubproject", model.getArtifactId() );
511 assertEquals( "file-value", model.getVersion() );
512
513 }
514
515 @Override
516 protected void tearDown()
517 throws Exception
518 {
519 super.tearDown();
520
521 outputDirectory = null;
522 }
523
524 @Override
525 protected void setUp()
526 throws Exception
527 {
528 super.setUp();
529
530 String repositories = new File( getBasedir(), "target/test-classes/repositories" ).toURI().toString();
531
532 localRepository =
533 new DefaultArtifactRepository( "local", repositories + "/local", new DefaultRepositoryLayout() );
534
535 remoteRepository = repositories + "/central";
536
537 generator = (ArchetypeGenerator) lookup( ArchetypeGenerator.ROLE );
538 assertNotNull( generator );
539 assertNotNull( getVariableValueFromObject( generator, "archetypeArtifactManager" ) );
540 assertNotNull( getVariableValueFromObject( generator, "oldArchetype" ) );
541 assertNotNull( getVariableValueFromObject( generator, "filesetGenerator" ) );
542 }
543
544 private ArchetypeGenerationRequest createArchetypeGenerationRequest( String project, Archetype archetype )
545 {
546 outputDirectory = getBasedir() + "/target/test-classes/projects/" + project;
547
548 projectDirectory = new File( outputDirectory, "file-value" );
549
550 ArchetypeGenerationRequest request = new ArchetypeGenerationRequest();
551 request.setLocalRepository( localRepository );
552 request.setArchetypeRepository( remoteRepository );
553 request.setOutputDirectory( outputDirectory );
554
555 request.setArchetypeGroupId( archetype.groupId );
556 request.setArchetypeArtifactId( archetype.artifactId );
557 request.setArchetypeVersion( archetype.version );
558
559 request.setGroupId( "file-value" );
560 request.setArtifactId( "file-value" );
561 request.setVersion( "file-value" );
562 request.setPackage( "file.value.package" );
563
564 request.setProperties( ADDITIONAL_PROPERTIES );
565
566 ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest();
567 MavenRepositorySystemSession repositorySession = new MavenRepositorySystemSession();
568 repositorySession.setLocalRepositoryManager( new SimpleLocalRepositoryManager( localRepository.getBasedir() ) );
569 buildingRequest.setRepositorySession( repositorySession );
570 request.setProjectBuildingRequest( buildingRequest );
571
572 return request;
573 }
574
575 private void assertTemplateContent( final String template )
576 throws IOException
577 {
578 Properties properties = loadProperties( template );
579 assertEquals( "file-value", properties.getProperty( "groupId" ) );
580 assertEquals( "file-value", properties.getProperty( "artifactId" ) );
581 assertEquals( "file-value", properties.getProperty( "version" ) );
582 assertEquals( "file.value.package", properties.getProperty( "package" ) );
583 assertEquals( "file-value", properties.getProperty( "property-with-default-1" ) );
584 assertEquals( "file-value", properties.getProperty( "property-with-default-2" ) );
585 assertEquals( "file-value", properties.getProperty( "property-with-default-3" ) );
586 assertEquals( "file-value", properties.getProperty( "property-with-default-4" ) );
587 assertEquals( "file-value", properties.getProperty( "property-without-default-1" ) );
588 assertEquals( "file-value", properties.getProperty( "property-without-default-2" ) );
589 assertEquals( "file-value", properties.getProperty( "property-without-default-3" ) );
590 assertEquals( "file-value", properties.getProperty( "property-without-default-4" ) );
591 }
592
593 private void assertTemplateContentGeneratedWithFileSetArchetype( String template, String artifactId )
594 throws IOException
595 {
596 Properties properties = loadProperties( template );
597 assertEquals( "file-value", properties.getProperty( "groupId" ) );
598 assertEquals( artifactId, properties.getProperty( "artifactId" ) );
599 assertEquals( "file-value", properties.getProperty( "version" ) );
600 assertEquals( "file.value.package", properties.getProperty( "package" ) );
601 assertEquals( "file/value/package", properties.getProperty( "packageInPathFormat" ) );
602 }
603
604 private void assertTemplateContentGeneratedWithOldArchetype( final String template )
605 throws IOException
606 {
607 Properties properties = loadProperties( template );
608 assertEquals( "file-value", properties.getProperty( "groupId" ) );
609 assertEquals( "file-value", properties.getProperty( "artifactId" ) );
610 assertEquals( "file-value", properties.getProperty( "version" ) );
611 assertEquals( "file.value.package", properties.getProperty( "package" ) );
612 }
613
614 private void assertTemplateCopiedWithFileSetArchetype( String template )
615 throws IOException
616 {
617 Properties properties = loadProperties( template );
618 assertEquals( "${groupId}", properties.getProperty( "groupId" ) );
619 assertEquals( "${artifactId}", properties.getProperty( "artifactId" ) );
620 assertEquals( "${version}", properties.getProperty( "version" ) );
621 assertEquals( "${package}", properties.getProperty( "package" ) );
622 assertEquals( "${packageInPathFormat}", properties.getProperty( "packageInPathFormat" ) );
623 }
624
625 private void copy( final File in, final File out )
626 throws IOException, FileNotFoundException
627 {
628 assertTrue( !out.exists() || out.delete() );
629 assertFalse( out.exists() );
630
631 FileUtils.copyFile( in, out );
632
633 assertTrue( out.exists() );
634 assertTrue( in.exists() );
635 }
636
637 private Properties loadProperties( File propertyFile )
638 throws IOException, FileNotFoundException
639 {
640 Properties properties = new Properties();
641 try ( InputStream in = new FileInputStream( propertyFile ) )
642 {
643 properties.load( in );
644 return properties;
645 }
646 }
647
648 private Properties loadProperties( final String template )
649 throws IOException
650 {
651 File templateFile = new File( projectDirectory, template );
652 if ( !templateFile.exists() )
653 {
654 fail( "Missing File: " + templateFile );
655 }
656
657 Properties properties = loadProperties( templateFile );
658 return properties;
659 }
660
661 private File getProjectFile()
662 {
663 return new File( outputDirectory, "/pom.xml" );
664 }
665
666 private File getProjectSampleFile()
667 {
668 return new File( outputDirectory, "/pom.xml.sample" );
669 }
670
671 private Model readPom( final File pomFile )
672 throws IOException, XmlPullParserException
673 {
674 try ( Reader pomReader = ReaderFactory.newXmlReader( pomFile ) )
675 {
676 MavenXpp3Reader reader = new MavenXpp3Reader();
677
678 return reader.read( pomReader );
679 }
680 }
681
682 private static class Archetype
683 {
684 public final String groupId;
685 public final String artifactId;
686 public final String version;
687
688 public Archetype( String groupId, String artifactId, String version )
689 {
690 this.groupId = groupId;
691 this.artifactId = artifactId;
692 this.version = version;
693 }
694 }
695 }