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.DefaultAssemblyContext;
25  import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException;
26  import org.apache.maven.plugin.assembly.archive.ArchiveCreationException;
27  import org.apache.maven.plugin.assembly.archive.task.testutils.ArtifactMock;
28  import org.apache.maven.plugin.assembly.archive.task.testutils.MockAndControlForAddDependencySetsTask;
29  import org.apache.maven.plugin.assembly.format.AssemblyFormattingException;
30  import org.apache.maven.plugin.assembly.model.Assembly;
31  import org.apache.maven.plugin.assembly.model.DependencySet;
32  import org.apache.maven.plugin.assembly.testutils.MockManager;
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  
44  public class DependencySetAssemblyPhaseTest
45      extends TestCase
46  {
47  
48      private final MockManager mockManager = new MockManager();
49  
50      public void testExecute_ShouldAddOneDependencyFromProject()
51          throws AssemblyFormattingException, ArchiveCreationException, IOException,
52          InvalidAssemblerConfigurationException
53      {
54          final String outputLocation = "/out";
55  
56          final MavenProject project = newMavenProject( "group", "project", "0" );
57  
58          final ArtifactMock projectArtifactMock = new ArtifactMock( mockManager, "group", "project", "0", "jar", false );
59  
60          project.setArtifact( projectArtifactMock.getArtifact() );
61  
62          final DependencySet ds = new DependencySet();
63          ds.setUseProjectArtifact( false );
64          ds.setOutputDirectory( outputLocation );
65          ds.setOutputFileNameMapping( "${artifact.artifactId}" );
66          ds.setUnpack( false );
67          ds.setScope( Artifact.SCOPE_COMPILE );
68          ds.setFileMode( Integer.toString( 10, 8 ) );
69  
70          final Assembly assembly = new Assembly();
71  
72          assembly.setId( "test" );
73          assembly.setIncludeBaseDirectory( false );
74          assembly.addDependencySet( ds );
75  
76          final MockAndControlForAddDependencySetsTask macTask =
77              new MockAndControlForAddDependencySetsTask( mockManager, project );
78  
79          final ArtifactMock artifactMock = new ArtifactMock( mockManager, "group", "dep", "1", "jar", false );
80          final File artifactFile = artifactMock.setNewFile();
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         mockManager.replayAll();
103 
104         final DefaultAssemblyContext context = new DefaultAssemblyContext();
105         context.setResolvedArtifacts( Collections.singleton( artifactMock.getArtifact() ) );
106 
107         createPhase( macTask, logger ).execute( assembly, macTask.archiver, macTask.configSource, context );
108 
109         mockManager.verifyAll();
110     }
111 
112     private MavenProject newMavenProject( final String groupId, final String artifactId, final String version )
113     {
114         final Model model = new Model();
115         model.setGroupId( groupId );
116         model.setArtifactId( artifactId );
117         model.setVersion( version );
118 
119         return new MavenProject( model );
120     }
121 
122     public void testExecute_ShouldNotAddDependenciesWhenProjectHasNone()
123         throws AssemblyFormattingException, ArchiveCreationException, IOException,
124         InvalidAssemblerConfigurationException
125     {
126         final Assembly assembly = new Assembly();
127 
128         assembly.setId( "test" );
129         assembly.setIncludeBaseDirectory( false );
130 
131         final Logger logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "test" );
132 
133         final MockAndControlForAddDependencySetsTask macTask =
134             new MockAndControlForAddDependencySetsTask( mockManager, null );
135 
136         mockManager.replayAll();
137 
138         createPhase( macTask, logger ).execute( assembly, null, macTask.configSource, new DefaultAssemblyContext() );
139 
140         mockManager.verifyAll();
141     }
142 
143     private DependencySetAssemblyPhase createPhase( final MockAndControlForAddDependencySetsTask macTask,
144                                                     final Logger logger )
145     {
146         MavenProjectBuilder projectBuilder = null;
147 
148         if ( macTask != null )
149         {
150             projectBuilder = macTask.projectBuilder;
151         }
152 
153         final DependencySetAssemblyPhase phase = new DependencySetAssemblyPhase( projectBuilder, logger );
154 
155         phase.enableLogging( logger );
156 
157         return phase;
158     }
159 
160 }