View Javadoc
1   package org.apache.maven.plugin.assembly.archive.phase;
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.artifact.Artifact;
23  import org.apache.maven.model.Model;
24  import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException;
25  import org.apache.maven.plugin.assembly.archive.ArchiveCreationException;
26  import org.apache.maven.plugin.assembly.archive.task.testutils.ArtifactMock;
27  import org.apache.maven.plugin.assembly.archive.task.testutils.MockAndControlForAddDependencySetsTask;
28  import org.apache.maven.plugin.assembly.artifact.DependencyResolutionException;
29  import org.apache.maven.plugin.assembly.artifact.DependencyResolver;
30  import org.apache.maven.plugin.assembly.format.AssemblyFormattingException;
31  import org.apache.maven.plugin.assembly.model.Assembly;
32  import org.apache.maven.plugin.assembly.model.DependencySet;
33  import org.apache.maven.project.MavenProject;
34  import org.apache.maven.project.MavenProjectBuilder;
35  import org.codehaus.plexus.logging.Logger;
36  import org.codehaus.plexus.logging.console.ConsoleLogger;
37  
38  import java.io.File;
39  import java.io.IOException;
40  import java.util.Collections;
41  
42  import junit.framework.TestCase;
43  import org.easymock.classextension.EasyMockSupport;
44  
45  public class DependencySetAssemblyPhaseTest
46      extends TestCase
47  {
48  
49      final EasyMockSupport mm = new EasyMockSupport();
50  
51      public void testExecute_ShouldAddOneDependencyFromProject()
52          throws AssemblyFormattingException, ArchiveCreationException, IOException,
53          InvalidAssemblerConfigurationException, DependencyResolutionException
54      {
55          final String outputLocation = "/out";
56  
57          final MavenProject project = newMavenProject( "group", "project", "0" );
58  
59          final ArtifactMock projectArtifactMock = new ArtifactMock( mm, "group", "project", "0", "jar", false );
60  
61          project.setArtifact( projectArtifactMock.getArtifact() );
62  
63          final DependencySet ds = new DependencySet();
64          ds.setUseProjectArtifact( false );
65          ds.setOutputDirectory( outputLocation );
66          ds.setOutputFileNameMapping( "${artifact.artifactId}" );
67          ds.setUnpack( false );
68          ds.setScope( Artifact.SCOPE_COMPILE );
69          ds.setFileMode( Integer.toString( 10, 8 ) );
70  
71          final Assembly assembly = new Assembly();
72  
73          assembly.setId( "test" );
74          assembly.setIncludeBaseDirectory( false );
75          assembly.addDependencySet( ds );
76  
77          final MockAndControlForAddDependencySetsTask macTask =
78              new MockAndControlForAddDependencySetsTask( mm, project );
79  
80          final ArtifactMock artifactMock = new ArtifactMock( mm, "group", "dep", "1", "jar", false );
81  
82          System.out.println( "On test setup, hashcode for dependency artifact: " + artifactMock.getArtifact()
83                                                                                                .hashCode() );
84  
85          macTask.expectCSGetRepositories( null, null );
86  
87          macTask.expectGetDestFile( new File( "junk" ) );
88  //        macTask.expectAddFile( artifactFile, "out/dep", 10 );
89  
90          macTask.expectGetSession( null );
91  
92          project.setArtifacts( Collections.singleton( artifactMock.getArtifact() ) );
93  
94          macTask.expectCSGetFinalName( "final-name" );
95  
96          final Logger logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "test" );
97  
98          final MavenProject depProject = newMavenProject( "group", "dep", "1" );
99  
100         macTask.expectBuildFromRepository( depProject );
101 
102         macTask.expectResolveDependencySets();
103 
104         mm.replayAll();
105 
106         createPhase( macTask, logger, macTask.dependencyResolver ).execute( assembly, macTask.archiver, macTask.configSource );
107 
108         mm.verifyAll();
109     }
110 
111     private MavenProject newMavenProject( final String groupId, final String artifactId, final String version )
112     {
113         final Model model = new Model();
114         model.setGroupId( groupId );
115         model.setArtifactId( artifactId );
116         model.setVersion( version );
117 
118         return new MavenProject( model );
119     }
120 
121     public void testExecute_ShouldNotAddDependenciesWhenProjectHasNone()
122         throws AssemblyFormattingException, ArchiveCreationException, IOException,
123         InvalidAssemblerConfigurationException, DependencyResolutionException
124     {
125         final Assembly assembly = new Assembly();
126 
127         assembly.setId( "test" );
128         assembly.setIncludeBaseDirectory( false );
129 
130         final Logger logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "test" );
131 
132         final MockAndControlForAddDependencySetsTask macTask =
133             new MockAndControlForAddDependencySetsTask( mm, null );
134 
135         macTask.expectResolveDependencySets();
136 
137         mm.replayAll();
138 
139         createPhase( macTask, logger, macTask.dependencyResolver ).execute( assembly, null, macTask.configSource );
140 
141         mm.verifyAll();
142     }
143 
144     private DependencySetAssemblyPhase createPhase( final MockAndControlForAddDependencySetsTask macTask,
145                                                     final Logger logger, DependencyResolver dr )
146     {
147         MavenProjectBuilder projectBuilder = null;
148 
149         if ( macTask != null )
150         {
151             projectBuilder = macTask.projectBuilder;
152         }
153 
154         final DependencySetAssemblyPhase phase = new DependencySetAssemblyPhase( projectBuilder, dr, logger );
155 
156         phase.enableLogging( logger );
157 
158         return phase;
159     }
160 
161 }