View Javadoc

1   package org.apache.maven.plugin.assembly.utils;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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         // clear out for next call.
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         // clear out for next call.
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         // clear it out for the next call.
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 }