1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugins.assembly.utils;
20
21 import java.io.File;
22 import java.util.Properties;
23
24 import org.apache.maven.artifact.Artifact;
25 import org.apache.maven.artifact.handler.ArtifactHandler;
26 import org.apache.maven.execution.MavenSession;
27 import org.apache.maven.model.Build;
28 import org.apache.maven.model.Model;
29 import org.apache.maven.plugins.assembly.AssemblerConfigurationSource;
30 import org.apache.maven.plugins.assembly.archive.DefaultAssemblyArchiverTest;
31 import org.apache.maven.plugins.assembly.format.AssemblyFormattingException;
32 import org.apache.maven.plugins.assembly.model.Assembly;
33 import org.apache.maven.project.MavenProject;
34 import org.codehaus.plexus.interpolation.fixed.FixedStringSearchInterpolator;
35 import org.junit.Test;
36 import org.junit.runner.RunWith;
37 import org.mockito.junit.MockitoJUnitRunner;
38
39 import static org.junit.Assert.assertEquals;
40 import static org.junit.Assert.assertTrue;
41 import static org.mockito.Mockito.atLeast;
42 import static org.mockito.Mockito.mock;
43 import static org.mockito.Mockito.verify;
44 import static org.mockito.Mockito.when;
45
46 @RunWith(MockitoJUnitRunner.class)
47 public class AssemblyFormatUtilsTest {
48 @Test
49 public void testFixRelativePathRefs_ShouldRemoveRelativeRefToCurrentDir() {
50 assertEquals("path/", AssemblyFormatUtils.fixRelativeRefs("./path/"));
51 }
52
53 @Test
54 public void testFixRelativePathRefs_ShouldRemoveEmbeddedSameDirRef() {
55 assertEquals("some/path/", AssemblyFormatUtils.fixRelativeRefs("some/./path/"));
56 assertEquals("some\\path\\", AssemblyFormatUtils.fixRelativeRefs("some\\.\\path\\"));
57 }
58
59 @Test
60 public void testFixRelativePathRefs_ShouldRemoveEmbeddedParentDirRef() {
61 assertEquals("path/", AssemblyFormatUtils.fixRelativeRefs("some/../path/"));
62 }
63
64 @Test
65 public void testFixRelativePathRefs_ShouldTruncateRelativeRefToParentDir() {
66 assertEquals("path/", AssemblyFormatUtils.fixRelativeRefs("../path/"));
67 }
68
69 @Test
70 public void testGetDistroName_ShouldUseJustFinalNameWithNoAppendAssemblyIdOrClassifier() {
71 verifyDistroName("assembly", "finalName", false, "finalName");
72 }
73
74 @Test
75 public void testGetDistroName_ShouldUseFinalNamePlusAssemblyIdIsNull() {
76 verifyDistroName("assembly", "finalName", true, "finalName-assembly");
77 }
78
79 @Test
80 public void testGetOutputDir_ShouldResolveGroupIdInOutDir_UseArtifactInfo() throws Exception {
81 verifyOutputDirUsingArtifactProject("${artifact.groupId}", null, "group", null, null, null, null, "group/");
82 }
83
84 @Test
85 public void testGetOutputDir_ShouldResolveArtifactIdInOutDir_UseArtifactInfo() throws Exception {
86 verifyOutputDirUsingArtifactProject(
87 "${artifact.artifactId}", null, null, "artifact", null, null, null, "artifact/");
88 }
89
90 @Test
91 public void testGetOutputDir_ShouldResolveVersionInOutDir_UseArtifactInfo() throws Exception {
92 verifyOutputDirUsingArtifactProject("${artifact.version}", null, null, null, "version", null, null, "version/");
93 }
94
95 @Test
96 public void testGetOutputDir_ShouldResolveBuildFinalNameInOutDir_UseArtifactInfo() throws Exception {
97 verifyOutputDirUsingArtifactProject(
98 "${artifact.build.finalName}", null, null, null, null, "finalName", null, "finalName/");
99 }
100
101 @Test
102 public void testGetOutputDir_ShouldResolveGroupIdInOutDir_UseModuleInfo() throws Exception {
103 verifyOutputDirUsingModuleProject("${module.groupId}", null, "group", null, null, null, null, "group/");
104 }
105
106 @Test
107 public void testGetOutputDir_ShouldResolveArtifactIdInOutDir_UseModuleInfo() throws Exception {
108 verifyOutputDirUsingModuleProject(
109 "${module.artifactId}", null, null, "artifact", null, null, null, "artifact/");
110 }
111
112 @Test
113 public void testGetOutputDir_ShouldResolveVersionInOutDir_UseModuleInfo() throws Exception {
114 verifyOutputDirUsingModuleProject("${module.version}", null, null, null, "version", null, null, "version/");
115 }
116
117 @Test
118 public void testGetOutputDir_ShouldResolveBuildFinalNameInOutDir_UseModuleInfo() throws Exception {
119 verifyOutputDirUsingModuleProject(
120 "${module.build.finalName}", null, null, null, null, "finalName", null, "finalName/");
121 }
122
123 @Test
124 public void testGetOutputDir_ShouldResolveGroupIdInOutDir_UseExplicitMainProject() throws Exception {
125 verifyOutputDirUsingMainProject("${pom.groupId}", null, "group", null, null, null, null, "group/");
126 }
127
128 @Test
129 public void testGetOutputDir_ShouldResolveArtifactIdInOutDir_UseExplicitMainProject() throws Exception {
130 verifyOutputDirUsingMainProject("${pom.artifactId}", null, null, "artifact", null, null, null, "artifact/");
131 }
132
133 @Test
134 public void testGetOutputDir_ShouldResolveVersionInOutDir_UseExplicitMainProject() throws Exception {
135 verifyOutputDirUsingMainProject("${pom.version}", null, null, null, "version", null, null, "version/");
136 }
137
138 @Test
139 public void testGetOutputDir_ShouldResolveBuildFinalNameInOutDir_UseExplicitMainProject() throws Exception {
140 verifyOutputDirUsingMainProject(
141 "${pom.build.finalName}", null, null, null, null, "finalName", null, "finalName/");
142 }
143
144 @Test
145 public void testGetOutputDir_ShouldResolveGroupIdInOutDir_UseExplicitMainProject_projectRef() throws Exception {
146 verifyOutputDirUsingMainProject("${project.groupId}", null, "group", null, null, null, null, "group/");
147 }
148
149 @Test
150 public void testGetOutputDir_ShouldResolveArtifactIdInOutDir_UseExplicitMainProject_projectRef() throws Exception {
151 verifyOutputDirUsingMainProject("${project.artifactId}", null, null, "artifact", null, null, null, "artifact/");
152 }
153
154 @Test
155 public void testGetOutputDir_ShouldResolveVersionInOutDir_UseExplicitMainProject_projectRef() throws Exception {
156 verifyOutputDirUsingMainProject("${project.version}", null, null, null, "version", null, null, "version/");
157 }
158
159 @Test
160 public void testGetOutputDir_ShouldResolveBuildFinalNameInOutDir_UseExplicitMainProject_projectRef()
161 throws Exception {
162 verifyOutputDir("${project.build.finalName}", null, "finalName", "finalName/");
163 }
164
165 @Test
166 public void testGetOutputDir_ShouldNotAlterOutDirWhenIncludeBaseFalseAndNoExpressions() throws Exception {
167 verifyOutputDir("dir/", "finalName", null, "dir/");
168 }
169
170 @Test
171 public void testGetOutputDir_ShouldNotAlterOutDirWhenIncludeBaseFalseAndNoExpressions_CheckWithBackslash()
172 throws Exception {
173 verifyOutputDir("dir\\", "finalName", null, "dir\\");
174 }
175
176 @Test
177 public void testGetOutputDir_ShouldAppendSlashToOutDirWhenMissingAndIncludeBaseFalseAndNoExpressions()
178 throws Exception {
179 verifyOutputDir("dir", "finalName", null, "dir/");
180 }
181
182 @Test
183 public void testGetOutputDir_ShouldResolveGroupIdInOutDir() throws Exception {
184 verifyOutputDirUsingMainProject("${groupId}", "finalName", "group", null, null, null, null, "group/");
185 }
186
187 @Test
188 public void testGetOutputDir_ShouldResolveArtifactIdInOutDir() throws Exception {
189 verifyOutputDirUsingMainProject("${artifactId}", "finalName", null, "artifact", null, null, null, "artifact/");
190 }
191
192 @Test
193 public void testGetOutputDir_ShouldResolveVersionInOutDir() throws Exception {
194 verifyOutputDirUsingMainProject("${version}", "finalName", null, null, "version", null, null, "version/");
195 }
196
197 @Test
198 public void testGetOutputDir_ShouldResolveVersionInLargerOutDirExpr() throws Exception {
199 verifyOutputDirUsingMainProject(
200 "my-special-${version}", "finalName", null, null, "99", null, null, "my-special-99/");
201 }
202
203 @Test
204 public void testGetOutputDir_ShouldResolveFinalNameInOutDir() throws Exception {
205 verifyOutputDir("${finalName}", "finalName", null, "finalName/");
206 }
207
208 @Test
209 public void testGetOutputDir_ShouldResolveBuildFinalNameInOutDir() throws Exception {
210 verifyOutputDir("${build.finalName}", "finalName", null, "finalName/");
211 }
212
213 @Test
214 public void testGetOutputDir_ShouldReturnEmptyPathWhenAllInputIsEmptyAndIncludeBaseFalse() throws Exception {
215 verifyOutputDir(null, null, null, "");
216 }
217
218 @Test
219 public void testGetOutputDir_ShouldRemoveRelativeRefToCurrentDir() throws Exception {
220 verifyOutputDir("./path/", null, null, "path/");
221 }
222
223 @Test
224 public void testGetOutputDir_ShouldRemoveEmbeddedSameDirRef() throws Exception {
225 verifyOutputDir("some/./path/", null, null, "some/path/");
226 }
227
228 @Test
229 public void testGetOutputDir_ShouldRemoveEmbeddedParentDirRef() throws Exception {
230 verifyOutputDir("some/../path/", null, null, "path/");
231 }
232
233 @Test
234 public void testGetOutputDir_ShouldTruncateRelativeRefToParentDir() throws Exception {
235 verifyOutputDir("../path/", null, null, "path/");
236 }
237
238 @Test
239 public void testGetOutputDir_ShouldResolveProjectProperty() throws Exception {
240 final Properties props = new Properties();
241 props.setProperty("myProperty", "value");
242
243 verifyOutputDirUsingMainProject("file.${myProperty}", null, null, null, null, null, props, "file.value/");
244 }
245
246 @Test
247 public void testGetOutputDir_ShouldResolveProjectPropertyAltExpr() throws Exception {
248 final Properties props = new Properties();
249 props.setProperty("myProperty", "value");
250
251 verifyOutputDirUsingMainProject(
252 "file.${pom.properties.myProperty}", null, null, null, null, null, props, "file.value/");
253 }
254
255 @Test
256 public void
257 testEvalFileNameMapping_ShouldResolveArtifactIdAndBaseVersionInOutDir_UseArtifactInfo_WithValidMainProject() {
258 final MavenProject mainProject = createProject("group", "main", "1", null);
259
260 final String artifactVersion = "2-20070807.112233-1";
261 final String artifactBaseVersion = "2-SNAPSHOT";
262 final MavenProject artifactProject = createProject("group", "artifact", artifactVersion, null);
263
264 Artifact artifact = mock(Artifact.class);
265 when(artifact.getGroupId()).thenReturn("group");
266 when(artifact.getBaseVersion()).thenReturn(artifactBaseVersion);
267
268 artifactProject.setArtifact(artifact);
269
270 final MavenSession session = mock(MavenSession.class);
271
272 final AssemblerConfigurationSource cs = mock(AssemblerConfigurationSource.class);
273 when(cs.getMavenSession()).thenReturn(session);
274 DefaultAssemblyArchiverTest.setupInterpolators(cs, mainProject);
275
276 final String result = AssemblyFormatUtils.evaluateFileNameMapping(
277 "${artifact.artifactId}-${artifact.baseVersion}",
278 artifact,
279 mainProject,
280 null,
281 cs,
282 AssemblyFormatUtils.moduleProjectInterpolator(null),
283 AssemblyFormatUtils.artifactProjectInterpolator(artifactProject));
284
285 assertEquals("artifact-2-SNAPSHOT", result);
286
287
288 verify(cs).getMavenSession();
289 }
290
291 @Test
292 public void testEvalFileNameMapping_ShouldResolveGroupIdInOutDir_UseArtifactInfo() {
293 verifyEvalFileNameMappingUsingArtifactProject(
294 "${artifact.groupId}", null, "group", null, null, null, "group", null);
295 }
296
297 @Test
298 public void testEvalFileNameMapping_ShouldResolveArtifactIdInOutDir_UseArtifactInfo() {
299 verifyEvalFileNameMappingUsingArtifactProject(
300 "${artifact.artifactId}", null, null, "artifact", null, null, "artifact", null);
301 }
302
303 @Test
304 public void testEvalFileNameMapping_ShouldResolveVersionInOutDir_UseArtifactInfo() {
305 verifyEvalFileNameMappingUsingArtifactProject(
306 "${artifact.version}", null, null, null, "version", null, "version", null);
307 }
308
309 @Test
310 public void testEvalFileNameMapping_ShouldResolveGroupIdInOutDir_UseArtifactInfoAndModulePrefix() {
311 verifyEvalFileNameMappingUsingModuleProject(
312 "${module.groupId}", null, "group", null, null, null, "group", null);
313 }
314
315 @Test
316 public void testEvalFileNameMapping_ShouldResolveArtifactIdInOutDir_UseArtifactInfoAndModulePrefix() {
317 verifyEvalFileNameMappingUsingModuleProject(
318 "${module.artifactId}", null, null, "artifact", null, null, "artifact", null);
319 }
320
321 @Test
322 public void testEvalFileNameMapping_ShouldResolveVersionInOutDir_UseArtifactInfoAndModulePrefix() {
323 verifyEvalFileNameMappingUsingModuleProject(
324 "${module.version}", null, null, null, "version", null, "version", null);
325 }
326
327 @Test
328 public void testEvalFileNameMapping_ShouldResolveGroupIdInOutDir_UseExplicitMainProject() throws Exception {
329 verifyEvalFileNameMappingUsingMainProject("${pom.groupId}", null, "group", null, null, null, "group", null);
330 }
331
332 @Test
333 public void testEvalFileNameMapping_ShouldResolveArtifactIdInOutDir_UseExplicitMainProject() throws Exception {
334 verifyEvalFileNameMappingUsingMainProject(
335 "${pom.artifactId}", null, null, "artifact", null, null, "artifact", null);
336 }
337
338 @Test
339 public void testEvalFileNameMapping_ShouldResolveVersionInOutDir_UseExplicitMainProject() throws Exception {
340 verifyEvalFileNameMappingUsingMainProject("${pom.version}", null, null, null, "version", null, "version", null);
341 }
342
343 @Test
344 public void testEvalFileNameMapping_ShouldResolveGroupIdInOutDir_UseExplicitMainProject_projectRef()
345 throws Exception {
346 verifyEvalFileNameMappingUsingMainProject("${project.groupId}", null, "group", null, null, null, "group", null);
347 }
348
349 @Test
350 public void testEvalFileNameMapping_ShouldResolveArtifactIdInOutDir_UseExplicitMainProject_projectRef()
351 throws Exception {
352 verifyEvalFileNameMappingUsingMainProject(
353 "${project.artifactId}", null, null, "artifact", null, null, "artifact", null);
354 }
355
356 @Test
357 public void testEvalFileNameMapping_ShouldResolveVersionInOutDir_UseExplicitMainProject_projectRef()
358 throws Exception {
359 verifyEvalFileNameMappingUsingMainProject(
360 "${project.version}", null, null, null, "version", null, "version", null);
361 }
362
363 @Test
364 public void testEvalFileNameMapping_ShouldRemoveRelativeRefToCurrentDir() throws Exception {
365 verifyEvalFileNameMappingUsingMainProject("./path/", null, null, null, null, null, "path/", null);
366 }
367
368 @Test
369 public void testEvalFileNameMapping_ShouldRemoveEmbeddedSameDirRef() throws Exception {
370 verifyEvalFileNameMappingUsingMainProject("some/./path/", null, null, null, null, null, "some/path/", null);
371 }
372
373 @Test
374 public void testEvalFileNameMapping_ShouldRemoveEmbeddedParentDirRef() throws Exception {
375 verifyEvalFileNameMappingUsingMainProject("some/../path/", null, null, null, null, null, "path/", null);
376 }
377
378 @Test
379 public void testEvalFileNameMapping_ShouldTruncateRelativeRefToParentDir() throws Exception {
380 verifyEvalFileNameMappingUsingMainProject("../path/", null, null, null, null, null, "path/", null);
381 }
382
383 @Test
384 public void testEvalFileNameMapping_ShouldPassExpressionThroughUnchanged() throws Exception {
385 verifyEvalFileNameMapping("filename", null, null, "filename", null);
386 }
387
388 @Test
389 public void testEvalFileNameMapping_ShouldInsertClassifierAheadOfExtension() throws Exception {
390 verifyEvalFileNameMapping(
391 "filename-${artifact.classifier}.ext", "classifier", null, "filename-classifier.ext", null);
392 }
393
394 @Test
395 public void testEvalFileNameMapping_ShouldAppendDashClassifierWhenClassifierPresent() throws Exception {
396 verifyEvalFileNameMapping("filename${dashClassifier?}", "classifier", null, "filename-classifier", null);
397 }
398
399 @Test
400 public void testEvalFileNameMapping_ShouldNotAppendDashClassifierWhenClassifierMissing() throws Exception {
401 verifyEvalFileNameMapping("filename${dashClassifier?}", null, null, "filename", null);
402 }
403
404 @Test
405 public void testEvalFileNameMapping_ShouldNotAppendDashClassifierWhenClassifierEmpty() throws Exception {
406 verifyEvalFileNameMapping("filename${dashClassifier?}", "", null, "filename", null);
407 }
408
409 @Test
410 public void testEvalFileNameMapping_ShouldResolveGroupId() throws Exception {
411 verifyEvalFileNameMappingUsingMainProject("${groupId}", null, "group", null, null, null, "group", null);
412 }
413
414 @Test
415 public void testEvalFileNameMapping_ShouldResolveArtifactId() throws Exception {
416 verifyEvalFileNameMappingUsingMainProject(
417 "${artifactId}", null, null, "artifact", null, null, "artifact", null);
418 }
419
420 @Test
421 public void testEvalFileNameMapping_ShouldResolveVersion() throws Exception {
422 verifyEvalFileNameMappingUsingMainProject("${version}", null, null, null, "version", null, "version", null);
423 }
424
425 @Test
426 public void testEvalFileNameMapping_ShouldResolveExtension() throws Exception {
427 verifyEvalFileNameMapping("file.${artifact.extension}", null, "ext", "file.ext", null);
428 }
429
430 @Test
431 public void testEvalFileNameMapping_ShouldResolveProjectProperty() throws Exception {
432 final Properties props = new Properties();
433 props.setProperty("myProperty", "value");
434
435 verifyEvalFileNameMapping("file.${myProperty}", null, null, "file.value", props);
436 }
437
438 @Test
439 public void testEvalFileNameMapping_ShouldResolveProjectPropertyAltExpr() throws Exception {
440 final Properties props = new Properties();
441 props.setProperty("myProperty", "value");
442
443 verifyEvalFileNameMapping("file.${pom.properties.myProperty}", null, null, "file.value", props);
444 }
445
446 @Test
447 public void testEvalFileNameMapping_ShouldResolveSystemPropertyWithoutMainProjectPresent() throws Exception {
448 verifyEvalFileNameMapping(
449 "file.${java.version}", null, null, "file." + System.getProperty("java.version"), null);
450 }
451
452 private void verifyEvalFileNameMapping(
453 final String expression,
454 final String classifier,
455 final String extension,
456 final String checkValue,
457 final Properties projectProperties)
458 throws AssemblyFormattingException {
459 verifyEvalFileNameMappingUsingMainProject(
460 expression, classifier, null, null, null, extension, checkValue, projectProperties);
461 }
462
463 private void verifyEvalFileNameMappingUsingMainProject(
464 final String expression,
465 final String classifier,
466 final String groupId,
467 final String artifactId,
468 final String version,
469 final String extension,
470 final String checkValue,
471 final Properties projectProperties) {
472 final MavenProject mainProject = createProject(groupId, artifactId, version, projectProperties);
473
474 final MavenProject artifactProject = createProject("unknown", "unknown", "unknown", null);
475 final MavenProject moduleProject = createProject("unknown", "unknown", "unknown", null);
476
477 verifyEvalFileNameMapping(
478 expression, classifier, extension, mainProject, moduleProject, artifactProject, checkValue);
479 }
480
481 private void verifyEvalFileNameMappingUsingArtifactProject(
482 final String expression,
483 final String classifier,
484 final String groupId,
485 final String artifactId,
486 final String version,
487 final String extension,
488 final String checkValue,
489 final Properties projectProperties) {
490 final MavenProject artifactProject = createProject(groupId, artifactId, version, projectProperties);
491
492 final MavenProject mainProject = createProject("unknown", "unknown", "unknown", null);
493 final MavenProject moduleProject = createProject("unknown", "unknown", "unknown", null);
494
495 verifyEvalFileNameMapping(
496 expression, classifier, extension, mainProject, moduleProject, artifactProject, checkValue);
497 }
498
499 private void verifyEvalFileNameMappingUsingModuleProject(
500 final String expression,
501 final String classifier,
502 final String groupId,
503 final String artifactId,
504 final String version,
505 final String extension,
506 final String checkValue,
507 final Properties projectProperties) {
508 final MavenProject moduleProject = createProject(groupId, artifactId, version, projectProperties);
509
510 final MavenProject mainProject = createProject("unknown", "unknown", "unknown", null);
511 final MavenProject artifactProject = createProject("unknown", "unknown", "unknown", null);
512
513 verifyEvalFileNameMapping(
514 expression, classifier, extension, mainProject, moduleProject, artifactProject, checkValue);
515 }
516
517 private MavenProject createProject(
518 String groupId, String artifactId, String version, final Properties projectProperties) {
519 if (artifactId == null) {
520 artifactId = "artifact";
521 }
522
523 if (groupId == null) {
524 groupId = "group";
525 }
526
527 if (version == null) {
528 version = "version";
529 }
530
531 final Model model = new Model();
532 model.setGroupId(groupId);
533 model.setArtifactId(artifactId);
534 model.setVersion(version);
535
536 model.setProperties(projectProperties);
537
538 return new MavenProject(model);
539 }
540
541 private void verifyEvalFileNameMapping(
542 final String expression,
543 final String classifier,
544 final String extension,
545 final MavenProject mainProject,
546 final MavenProject moduleProject,
547 final MavenProject artifactProject,
548 final String checkValue) {
549
550 Artifact artifactMock = mock(Artifact.class);
551 when(artifactMock.getGroupId()).thenReturn(artifactProject.getGroupId());
552 when(artifactMock.getClassifier()).thenReturn(classifier);
553 ArtifactHandler artifactHandler = mock(ArtifactHandler.class);
554 when(artifactHandler.getExtension()).thenReturn(extension);
555 when(artifactMock.getArtifactHandler()).thenReturn(artifactHandler);
556
557 Artifact moduleArtifactMock = mock(Artifact.class);
558 when(moduleArtifactMock.getGroupId()).thenReturn(moduleProject.getGroupId());
559
560 final MavenSession session = mock(MavenSession.class);
561 when(session.getUserProperties()).thenReturn(new Properties());
562 when(session.getSystemProperties()).thenReturn(System.getProperties());
563
564 final AssemblerConfigurationSource cs = mock(AssemblerConfigurationSource.class);
565 when(cs.getMavenSession()).thenReturn(session);
566
567 DefaultAssemblyArchiverTest.setupInterpolators(cs, mainProject);
568
569 final String result = AssemblyFormatUtils.evaluateFileNameMapping(
570 expression,
571 artifactMock,
572 mainProject,
573 moduleArtifactMock,
574 cs,
575 AssemblyFormatUtils.moduleProjectInterpolator(moduleProject),
576 AssemblyFormatUtils.artifactProjectInterpolator(artifactProject));
577
578 assertEquals(checkValue, result);
579
580
581 verify(cs).getMavenSession();
582 }
583
584 private void verifyOutputDir(
585 final String outDir, final String finalName, final String projectFinalName, final String checkValue)
586 throws AssemblyFormattingException {
587 verifyOutputDirUsingMainProject(outDir, finalName, null, null, null, projectFinalName, null, checkValue);
588 }
589
590 private void verifyOutputDirUsingMainProject(
591 final String outDir,
592 final String finalName,
593 final String groupId,
594 final String artifactId,
595 final String version,
596 final String projectFinalName,
597 final Properties properties,
598 final String checkValue)
599 throws AssemblyFormattingException {
600 final MavenProject project = createProject(groupId, artifactId, version, properties);
601
602 if (projectFinalName != null) {
603 final Build build = new Build();
604 build.setFinalName(projectFinalName);
605
606 project.getModel().setBuild(build);
607 }
608
609 final MavenProject moduleProject = createProject("unknown", "unknown", "unknown", null);
610 final MavenProject artifactProject = createProject("unknown", "unknown", "unknown", null);
611
612 verifyOutputDir(outDir, finalName, project, moduleProject, artifactProject, checkValue);
613 }
614
615 private void verifyOutputDirUsingModuleProject(
616 final String outDir,
617 final String finalName,
618 final String groupId,
619 final String artifactId,
620 final String version,
621 final String projectFinalName,
622 final Properties properties,
623 final String checkValue)
624 throws AssemblyFormattingException {
625 final MavenProject project = createProject(groupId, artifactId, version, properties);
626
627 if (projectFinalName != null) {
628 final Build build = new Build();
629 build.setFinalName(projectFinalName);
630
631 project.getModel().setBuild(build);
632 }
633
634 final MavenProject mainProject = createProject("unknown", "unknown", "unknown", null);
635 final MavenProject artifactProject = createProject("unknown", "unknown", "unknown", null);
636
637 verifyOutputDir(outDir, finalName, mainProject, project, artifactProject, checkValue);
638 }
639
640 private void verifyOutputDirUsingArtifactProject(
641 final String outDir,
642 final String finalName,
643 final String groupId,
644 final String artifactId,
645 final String version,
646 final String projectFinalName,
647 final Properties properties,
648 final String checkValue)
649 throws AssemblyFormattingException {
650 final MavenProject project = createProject(groupId, artifactId, version, properties);
651
652 if (projectFinalName != null) {
653 final Build build = new Build();
654 build.setFinalName(projectFinalName);
655
656 project.getModel().setBuild(build);
657 }
658
659 final MavenProject moduleProject = createProject("unknown", "unknown", "unknown", null);
660 final MavenProject mainProject = createProject("unknown", "unknown", "unknown", null);
661
662 verifyOutputDir(outDir, finalName, mainProject, moduleProject, project, checkValue);
663 }
664
665 private void verifyOutputDir(
666 final String outDir,
667 final String finalName,
668 final MavenProject mainProject,
669 final MavenProject moduleProject,
670 final MavenProject artifactProject,
671 final String checkValue)
672 throws AssemblyFormattingException {
673
674 final MavenSession session = mock(MavenSession.class);
675 when(session.getUserProperties()).thenReturn(new Properties());
676 when(session.getSystemProperties()).thenReturn(System.getProperties());
677
678 final AssemblerConfigurationSource cs = mock(AssemblerConfigurationSource.class);
679 when(cs.getMavenSession()).thenReturn(session);
680
681 DefaultAssemblyArchiverTest.setupInterpolators(cs, mainProject);
682
683 String result = AssemblyFormatUtils.getOutputDirectory(
684 outDir,
685 finalName,
686 cs,
687 AssemblyFormatUtils.moduleProjectInterpolator(moduleProject),
688 AssemblyFormatUtils.artifactProjectInterpolator(artifactProject));
689
690 assertEquals(checkValue, result);
691
692
693 verify(cs).getMavenSession();
694 }
695
696 private void verifyDistroName(
697 final String assemblyId, final String finalName, final boolean appendAssemblyId, final String checkValue) {
698 final AssemblerConfigurationSource configSource = mock(AssemblerConfigurationSource.class);
699 when(configSource.isAssemblyIdAppended()).thenReturn(appendAssemblyId);
700 when(configSource.getFinalName()).thenReturn(finalName);
701
702 final Assembly assembly = new Assembly();
703 assembly.setId(assemblyId);
704
705 final String result = AssemblyFormatUtils.getDistributionName(assembly, configSource);
706
707 assertEquals(checkValue, result);
708
709 verify(configSource, atLeast(1)).isAssemblyIdAppended();
710 verify(configSource, atLeast(1)).getFinalName();
711 }
712
713 @Test
714 public void testWindowsPath() {
715 assertTrue(AssemblyFormatUtils.isWindowsPath("C:\foobar"));
716 }
717
718 @Test
719 public void testLinuxRootReferencePath() {
720 assertTrue(AssemblyFormatUtils.isUnixRootReference("/etc/home"));
721 }
722
723 @Test
724 public void groupIdPath_artifactProjectInterpolator() {
725 Artifact artifact = mock(Artifact.class);
726 when(artifact.getFile()).thenReturn(new File("dir", "artifactId.jar"));
727
728 MavenProject project = mock(MavenProject.class);
729 when(project.getGroupId()).thenReturn("a.b.c");
730 when(project.getArtifact()).thenReturn(artifact);
731
732 FixedStringSearchInterpolator interpolator = AssemblyFormatUtils.artifactProjectInterpolator(project);
733 assertEquals("a/b/c", interpolator.interpolate("${artifact.groupIdPath}"));
734 assertEquals("a/b/c/artifactId.jar", interpolator.interpolate("${artifact.groupIdPath}/${artifact.file.name}"));
735 }
736
737 @Test
738 public void groupIdPath_artifactInterpolator() {
739 Artifact artifact = mock(Artifact.class);
740 when(artifact.getGroupId()).thenReturn("a.b.c");
741 when(artifact.getFile()).thenReturn(new File("dir", "artifactId.jar"));
742
743 FixedStringSearchInterpolator interpolator = AssemblyFormatUtils.artifactInterpolator(artifact);
744 assertEquals("a/b/c", interpolator.interpolate("${artifact.groupIdPath}"));
745 assertEquals("a/b/c/artifactId.jar", interpolator.interpolate("${artifact.groupIdPath}/${artifact.file.name}"));
746 }
747 }