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