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_ShouldNotAppendDashClassifierWhenClassifierEmpty()
462         throws AssemblyFormattingException
463     {
464         verifyEvalFileNameMapping( "filename${dashClassifier?}", "", null, "filename", null );
465     }
466 
467     public void testEvalFileNameMapping_ShouldResolveGroupId()
468         throws AssemblyFormattingException
469     {
470         verifyEvalFileNameMappingUsingMainProject( "${groupId}", null, "group", null, null, null, "group", null );
471     }
472 
473     public void testEvalFileNameMapping_ShouldResolveArtifactId()
474         throws AssemblyFormattingException
475     {
476         verifyEvalFileNameMappingUsingMainProject( "${artifactId}", null, null, "artifact", null, null, "artifact",
477                                                    null );
478     }
479 
480     public void testEvalFileNameMapping_ShouldResolveVersion()
481         throws AssemblyFormattingException
482     {
483         verifyEvalFileNameMappingUsingMainProject( "${version}", null, null, null, "version", null, "version", null );
484     }
485 
486     public void testEvalFileNameMapping_ShouldResolveExtension()
487         throws AssemblyFormattingException
488     {
489         verifyEvalFileNameMapping( "file.${artifact.extension}", null, "ext", "file.ext", null );
490     }
491 
492     public void testEvalFileNameMapping_ShouldResolveProjectProperty()
493         throws AssemblyFormattingException
494     {
495         final Properties props = new Properties();
496         props.setProperty( "myProperty", "value" );
497 
498         verifyEvalFileNameMapping( "file.${myProperty}", null, null, "file.value", props );
499     }
500 
501     public void testEvalFileNameMapping_ShouldResolveProjectPropertyAltExpr()
502         throws AssemblyFormattingException
503     {
504         final Properties props = new Properties();
505         props.setProperty( "myProperty", "value" );
506 
507         verifyEvalFileNameMapping( "file.${pom.properties.myProperty}", null, null, "file.value", props );
508     }
509 
510     public void testEvalFileNameMapping_ShouldResolveSystemPropertyWithoutMainProjectPresent()
511         throws AssemblyFormattingException
512     {
513         verifyEvalFileNameMapping( "file.${java.version}", null, null, "file." + System.getProperty( "java.version" ),
514                                    null );
515     }
516 
517     private void verifyEvalFileNameMapping( final String expression, final String classifier, final String extension,
518                                             final String checkValue, final Properties projectProperties )
519         throws AssemblyFormattingException
520     {
521         verifyEvalFileNameMappingUsingMainProject( expression, classifier, null, null, null, extension, checkValue,
522                                                    projectProperties );
523     }
524 
525     private void verifyEvalFileNameMappingUsingMainProject( final String expression, final String classifier,
526                                                             final String groupId, final String artifactId,
527                                                             final String version, final String extension,
528                                                             final String checkValue, final Properties projectProperties )
529         throws AssemblyFormattingException
530     {
531         final MavenProject mainProject = createProject( groupId, artifactId, version, projectProperties );
532 
533         final MavenProject artifactProject = createProject( "unknown", "unknown", "unknown", null );
534         final MavenProject moduleProject = createProject( "unknown", "unknown", "unknown", null );
535 
536         verifyEvalFileNameMapping( expression, classifier, extension, mainProject, moduleProject, artifactProject,
537                                    checkValue );
538     }
539 
540     private void verifyEvalFileNameMappingUsingArtifactProject( final String expression, final String classifier,
541                                                                 final String groupId, final String artifactId,
542                                                                 final String version, final String extension,
543                                                                 final String checkValue,
544                                                                 final Properties projectProperties )
545         throws AssemblyFormattingException
546     {
547         final MavenProject artifactProject = createProject( groupId, artifactId, version, projectProperties );
548 
549         final MavenProject mainProject = createProject( "unknown", "unknown", "unknown", null );
550         final MavenProject moduleProject = createProject( "unknown", "unknown", "unknown", null );
551 
552         verifyEvalFileNameMapping( expression, classifier, extension, mainProject, moduleProject, artifactProject,
553                                    checkValue );
554     }
555 
556     private void verifyEvalFileNameMappingUsingModuleProject( final String expression, final String classifier,
557                                                               final String groupId, final String artifactId,
558                                                               final String version, final String extension,
559                                                               final String checkValue,
560                                                               final Properties projectProperties )
561         throws AssemblyFormattingException
562     {
563         final MavenProject moduleProject = createProject( groupId, artifactId, version, projectProperties );
564 
565         final MavenProject mainProject = createProject( "unknown", "unknown", "unknown", null );
566         final MavenProject artifactProject = createProject( "unknown", "unknown", "unknown", null );
567 
568         verifyEvalFileNameMapping( expression, classifier, extension, mainProject, moduleProject, artifactProject,
569                                    checkValue );
570     }
571 
572     private MavenProject createProject( String groupId, String artifactId, String version,
573                                         final Properties projectProperties )
574     {
575         if ( artifactId == null )
576         {
577             artifactId = "artifact";
578         }
579 
580         if ( groupId == null )
581         {
582             groupId = "group";
583         }
584 
585         if ( version == null )
586         {
587             version = "version";
588         }
589 
590         final Model model = new Model();
591         model.setGroupId( groupId );
592         model.setArtifactId( artifactId );
593         model.setVersion( version );
594 
595         model.setProperties( projectProperties );
596 
597         return new MavenProject( model );
598     }
599 
600     private void verifyEvalFileNameMapping( final String expression, final String classifier, final String extension,
601                                             final MavenProject mainProject, final MavenProject moduleProject,
602                                             final MavenProject artifactProject, final String checkValue )
603         throws AssemblyFormattingException
604     {
605         final ArtifactMock artifactMock =
606             new ArtifactMock( mockManager, artifactProject.getGroupId(), artifactProject.getArtifactId(),
607                               artifactProject.getVersion(), extension, classifier, false, null );
608 
609         final ArtifactMock moduleArtifactMock =
610             new ArtifactMock( mockManager, moduleProject.getGroupId(), moduleProject.getArtifactId(),
611                               moduleProject.getVersion(), "jar", false, null );
612 
613         final MockControl sessionCtl = MockClassControl.createControl( MavenSession.class );
614         mockManager.add( sessionCtl );
615 
616         final MavenSession session = (MavenSession) sessionCtl.getMock();
617         session.getExecutionProperties();
618         sessionCtl.setReturnValue( System.getProperties(), MockControl.ZERO_OR_MORE );
619 
620         session.getUserProperties();
621         sessionCtl.setReturnValue( new Properties(), MockControl.ZERO_OR_MORE );
622 
623         final MockControl csCtl = MockControl.createControl( AssemblerConfigurationSource.class );
624         mockManager.add( csCtl );
625 
626         final AssemblerConfigurationSource cs = (AssemblerConfigurationSource) csCtl.getMock();
627         cs.getMavenSession();
628         csCtl.setReturnValue( session, MockControl.ZERO_OR_MORE );
629 
630         mockManager.replayAll();
631 
632         final String result =
633             AssemblyFormatUtils.evaluateFileNameMapping( expression, artifactMock.getArtifact(), mainProject,
634                                                          moduleProject, moduleArtifactMock.getArtifact(),
635                                                          artifactProject, cs );
636 
637         assertEquals( checkValue, result );
638 
639         mockManager.verifyAll();
640 
641         // clear out for next call.
642         mockManager.clear();
643     }
644 
645     private void verifyOutputDir( final String outDir, final String finalName, final String projectFinalName,
646                                   final String checkValue )
647         throws AssemblyFormattingException
648     {
649         verifyOutputDirUsingMainProject( outDir, finalName, null, null, null, projectFinalName, null, checkValue );
650     }
651 
652     private void verifyOutputDirUsingMainProject( final String outDir, final String finalName, final String groupId,
653                                                   final String artifactId, final String version,
654                                                   final String projectFinalName, final Properties properties,
655                                                   final String checkValue )
656         throws AssemblyFormattingException
657     {
658         final MavenProject project = createProject( groupId, artifactId, version, properties );
659 
660         if ( projectFinalName != null )
661         {
662             final Build build = new Build();
663             build.setFinalName( projectFinalName );
664 
665             project.getModel().setBuild( build );
666         }
667 
668         final MavenProject mainProject = project;
669         final MavenProject moduleProject = createProject( "unknown", "unknown", "unknown", null );
670         final MavenProject artifactProject = createProject( "unknown", "unknown", "unknown", null );
671 
672         verifyOutputDir( outDir, finalName, mainProject, moduleProject, artifactProject, checkValue );
673     }
674 
675     private void verifyOutputDirUsingModuleProject( final String outDir, final String finalName, final String groupId,
676                                                     final String artifactId, final String version,
677                                                     final String projectFinalName, final Properties properties,
678                                                     final String checkValue )
679         throws AssemblyFormattingException
680     {
681         final MavenProject project = createProject( groupId, artifactId, version, properties );
682 
683         if ( projectFinalName != null )
684         {
685             final Build build = new Build();
686             build.setFinalName( projectFinalName );
687 
688             project.getModel().setBuild( build );
689         }
690 
691         final MavenProject moduleProject = project;
692         final MavenProject mainProject = createProject( "unknown", "unknown", "unknown", null );
693         final MavenProject artifactProject = createProject( "unknown", "unknown", "unknown", null );
694 
695         verifyOutputDir( outDir, finalName, mainProject, moduleProject, artifactProject, checkValue );
696     }
697 
698     private void verifyOutputDirUsingArtifactProject( final String outDir, final String finalName,
699                                                       final String groupId, final String artifactId,
700                                                       final String version, final String projectFinalName,
701                                                       final Properties properties, final String checkValue )
702         throws AssemblyFormattingException
703     {
704         final MavenProject project = createProject( groupId, artifactId, version, properties );
705 
706         if ( projectFinalName != null )
707         {
708             final Build build = new Build();
709             build.setFinalName( projectFinalName );
710 
711             project.getModel().setBuild( build );
712         }
713 
714         final MavenProject artifactProject = project;
715         final MavenProject moduleProject = createProject( "unknown", "unknown", "unknown", null );
716         final MavenProject mainProject = createProject( "unknown", "unknown", "unknown", null );
717 
718         verifyOutputDir( outDir, finalName, mainProject, moduleProject, artifactProject, checkValue );
719     }
720 
721     private void verifyOutputDir( final String outDir, final String finalName, final MavenProject mainProject,
722                                   final MavenProject moduleProject, final MavenProject artifactProject,
723                                   final String checkValue )
724         throws AssemblyFormattingException
725     {
726         final MockControl sessionCtl = MockClassControl.createControl( MavenSession.class );
727         mockManager.add( sessionCtl );
728 
729         final MavenSession session = (MavenSession) sessionCtl.getMock();
730         session.getExecutionProperties();
731         sessionCtl.setReturnValue( System.getProperties(), MockControl.ZERO_OR_MORE );
732 
733         session.getUserProperties();
734         sessionCtl.setReturnValue( new Properties(), MockControl.ZERO_OR_MORE );
735 
736         final MockControl csCtl = MockControl.createControl( AssemblerConfigurationSource.class );
737         mockManager.add( csCtl );
738 
739         final AssemblerConfigurationSource cs = (AssemblerConfigurationSource) csCtl.getMock();
740         cs.getMavenSession();
741         csCtl.setReturnValue( session, MockControl.ZERO_OR_MORE );
742 
743         String result;
744 
745         mockManager.replayAll();
746         result =
747             AssemblyFormatUtils.getOutputDirectory( outDir, mainProject, moduleProject, artifactProject, finalName, cs );
748 
749         assertEquals( checkValue, result );
750 
751         mockManager.verifyAll();
752 
753         mockManager.clear();
754     }
755 
756     private void verifyDistroName( final String assemblyId, final String classifier, final String finalName,
757                                    final boolean appendAssemblyId, final String checkValue )
758     {
759         final MockAndControlForGetDistroName mac =
760             new MockAndControlForGetDistroName( finalName, appendAssemblyId, classifier );
761 
762         mockManager.replayAll();
763 
764         final Assembly assembly = new Assembly();
765         assembly.setId( assemblyId );
766 
767         final String result = AssemblyFormatUtils.getDistributionName( assembly, mac.configSource );
768 
769         assertEquals( checkValue, result );
770 
771         mockManager.verifyAll();
772 
773         // clear it out for the next call.
774         mockManager.clear();
775     }
776 
777     private final class MockAndControlForGetDistroName
778     {
779         MockControl control;
780 
781         AssemblerConfigurationSource configSource;
782 
783         private final String classifier;
784 
785         private final boolean isAssemblyIdAppended;
786 
787         private final String finalName;
788 
789         public MockAndControlForGetDistroName( final String finalName, final boolean isAssemblyIdAppended,
790                                                final String classifier )
791         {
792             this.finalName = finalName;
793             this.isAssemblyIdAppended = isAssemblyIdAppended;
794             this.classifier = classifier;
795 
796             control = MockControl.createControl( AssemblerConfigurationSource.class );
797             mockManager.add( control );
798 
799             configSource = (AssemblerConfigurationSource) control.getMock();
800 
801             enableExpectations();
802         }
803 
804         private void enableExpectations()
805         {
806             configSource.getClassifier();
807             control.setReturnValue( classifier, MockControl.ONE_OR_MORE );
808 
809             configSource.isAssemblyIdAppended();
810             control.setReturnValue( isAssemblyIdAppended, MockControl.ONE_OR_MORE );
811 
812             configSource.getFinalName();
813             control.setReturnValue( finalName, MockControl.ONE_OR_MORE );
814         }
815 
816     }
817 
818 }