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