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