1   package org.apache.maven.plugin.dependency.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   * 
23   */
24  
25  import java.io.File;
26  import java.util.ArrayList;
27  import java.util.List;
28  import java.util.Random;
29  
30  import junit.framework.TestCase;
31  
32  import org.apache.maven.artifact.Artifact;
33  import org.apache.maven.artifact.DefaultArtifact;
34  import org.apache.maven.artifact.handler.ArtifactHandler;
35  import org.apache.maven.artifact.versioning.VersionRange;
36  import org.apache.maven.plugin.MojoExecutionException;
37  import org.apache.maven.plugin.logging.Log;
38  import org.apache.maven.plugin.testing.SilentLog;
39  import org.apache.maven.plugin.testing.stubs.DefaultArtifactHandlerStub;
40  
41  /**
42   * @author brianf
43   * 
44   */
45  public class TestDependencyUtil
46      extends TestCase
47  {
48      List artifacts = new ArrayList();
49  
50      Log log = new SilentLog();
51  
52      File outputFolder;
53  
54      Artifact snap;
55  
56      Artifact release;
57  
58      Artifact sources;
59  
60      protected void setUp()
61          throws Exception
62      {
63          super.setUp();
64  
65          ArtifactHandler ah = new DefaultArtifactHandlerStub( "jar", null );
66          VersionRange vr = VersionRange.createFromVersion( "1.1" );
67          release = new DefaultArtifact( "test", "one", vr, Artifact.SCOPE_COMPILE, "jar", "sources", ah, false );
68          artifacts.add( release );
69  
70          ah = new DefaultArtifactHandlerStub( "war", null );
71          vr = VersionRange.createFromVersion( "1.1-SNAPSHOT" );
72          snap = new DefaultArtifact( "test", "two", vr, Artifact.SCOPE_PROVIDED, "war", null, ah, false );
73          artifacts.add( snap );
74  
75          ah = new DefaultArtifactHandlerStub( "war", null );
76          vr = VersionRange.createFromVersion( "1.1-SNAPSHOT" );
77          sources = new DefaultArtifact( "test", "two", vr, Artifact.SCOPE_PROVIDED, "sources", "sources", ah, false );
78  
79          // pick random output location
80          Random a = new Random();
81          outputFolder = new File( "target/copy" + a.nextLong() + "/" );
82          outputFolder.delete();
83          assertFalse( outputFolder.exists() );
84      }
85  
86      protected void tearDown()
87      {
88  
89      }
90  
91      public void testDirectoryName()
92          throws MojoExecutionException
93      {
94          File folder = new File( "target/a" );
95          final Artifact artifact = (Artifact) artifacts.get( 0 );
96          File name = DependencyUtil.getFormattedOutputDirectory( false, false, false, false, folder, artifact );
97          // object is the same.
98          assertEquals( folder, name );
99  
100         name = DependencyUtil.getFormattedOutputDirectory( false, false, true, false, folder, artifact );
101         String expectedResult = folder.getAbsolutePath() + File.separatorChar + "test" + File.separatorChar + "one"
102             + File.separatorChar + "1.1";
103         assertTrue( expectedResult.equalsIgnoreCase( name.getAbsolutePath() ) );
104 
105         name = DependencyUtil.getFormattedOutputDirectory( true, false, false, false, folder, artifact );
106         expectedResult = folder.getAbsolutePath() + File.separatorChar + "jars";
107         assertTrue( expectedResult.equalsIgnoreCase( name.getAbsolutePath() ) );
108 
109         name = DependencyUtil.getFormattedOutputDirectory( false, true, false, false, folder, artifact );
110         expectedResult = folder.getAbsolutePath() + File.separatorChar + "one-sources-1.1-jar";
111         assertEquals( expectedResult, name.getAbsolutePath() );
112 
113         name = DependencyUtil.getFormattedOutputDirectory( false, true, false, true, folder, artifact );
114         expectedResult = folder.getAbsolutePath() + File.separatorChar + "one-sources-jar";
115         assertEquals( expectedResult, name.getAbsolutePath() );
116 
117         name = DependencyUtil.getFormattedOutputDirectory( true, true, false, false, folder, artifact );
118         expectedResult = folder.getAbsolutePath() + File.separatorChar + "jars" + File.separatorChar
119             + "one-sources-1.1-jar";
120         assertEquals( expectedResult, name.getAbsolutePath() );
121 
122         name = DependencyUtil.getFormattedOutputDirectory( true, true, false, true, folder, artifact );
123         expectedResult = folder.getAbsolutePath() + File.separatorChar + "jars" + File.separatorChar
124             + "one-sources-jar";
125         assertEquals( expectedResult, name.getAbsolutePath() );
126     }
127 
128     public void testDirectoryName2()
129         throws MojoExecutionException
130     {
131         File folder = new File( "target/a" );
132         final Artifact artifact = (Artifact) artifacts.get( 1 );
133         File name = DependencyUtil.getFormattedOutputDirectory( false, false, false, false, folder, artifact );
134         // object is the same.
135         assertEquals( folder, name );
136 
137         name = DependencyUtil.getFormattedOutputDirectory( true, false, false, false, folder, artifact );
138         String expectedResult = folder.getAbsolutePath() + File.separatorChar + "wars";
139         assertEquals( expectedResult, name.getAbsolutePath() );
140 
141         name = DependencyUtil.getFormattedOutputDirectory( false, false, true, false, folder, artifact );
142         expectedResult = folder.getAbsolutePath() + File.separatorChar + "test" + File.separatorChar + "two"
143             + File.separatorChar + "1.1-SNAPSHOT";
144         assertEquals( expectedResult, name.getAbsolutePath() );
145 
146         name = DependencyUtil.getFormattedOutputDirectory( false, true, false, false, folder, artifact );
147         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-1.1-SNAPSHOT-war";
148         assertEquals( expectedResult, name.getAbsolutePath() );
149 
150         name = DependencyUtil.getFormattedOutputDirectory( true, true, false, false, folder, artifact );
151         expectedResult = folder.getAbsolutePath() + File.separatorChar + "wars" + File.separatorChar
152             + "two-1.1-SNAPSHOT-war";
153         assertEquals( expectedResult, name.getAbsolutePath() );
154 
155         name = DependencyUtil.getFormattedOutputDirectory( false, true, false, true, folder, artifact );
156         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-war";
157         assertEquals( expectedResult, name.getAbsolutePath() );
158 
159         name = DependencyUtil.getFormattedOutputDirectory( true, true, false, true, folder, artifact );
160         expectedResult = folder.getAbsolutePath() + File.separatorChar + "wars" + File.separatorChar + "two-war";
161         assertEquals( expectedResult, name.getAbsolutePath() );
162     }
163 
164     public void testDirectoryNameSources()
165         throws MojoExecutionException
166     {
167         File folder = new File( "target/a" );
168         File name = DependencyUtil.getFormattedOutputDirectory( false, true, false, true, folder, sources );
169         String expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-sources";
170         assertEquals( expectedResult, name.getAbsolutePath() );
171 
172         name = DependencyUtil.getFormattedOutputDirectory( false, true, false, false, folder, sources );
173         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-sources-1.1-SNAPSHOT-sources";
174         assertEquals( expectedResult, name.getAbsolutePath() );
175     }
176 
177     public void testFileName()
178         throws MojoExecutionException
179     {
180         Artifact artifact = (Artifact) artifacts.get( 0 );
181 
182         String name = DependencyUtil.getFormattedFileName( artifact, false );
183         String expectedResult = "one-1.1-sources.jar";
184         assertEquals( expectedResult, name );
185         name = DependencyUtil.getFormattedFileName( artifact, true );
186         expectedResult = "one-sources.jar";
187         assertEquals( expectedResult, name );
188     }
189 
190     public void testTestJar()
191     {
192         ArtifactHandler ah = new DefaultArtifactHandlerStub( "test-jar", null );
193         VersionRange vr = VersionRange.createFromVersion( "1.1-SNAPSHOT" );
194         Artifact artifact = new DefaultArtifact( "test", "two", vr, Artifact.SCOPE_PROVIDED, "test-jar", null, ah,
195                                                  false );
196 
197         String name = DependencyUtil.getFormattedFileName( artifact, false );
198         String expectedResult = "two-1.1-SNAPSHOT.jar";
199         assertEquals( expectedResult, name );
200 
201     }
202 
203     public void testFileNameClassifier()
204         throws MojoExecutionException
205     {
206         ArtifactHandler ah = new DefaultArtifactHandlerStub( "jar", "sources" );
207         VersionRange vr = VersionRange.createFromVersion( "1.1-SNAPSHOT" );
208         Artifact artifact = new DefaultArtifact( "test", "two", vr, Artifact.SCOPE_PROVIDED, "jar", "sources", ah,
209                                                  false );
210 
211         String name = DependencyUtil.getFormattedFileName( artifact, false );
212         String expectedResult = "two-1.1-SNAPSHOT-sources.jar";
213         assertEquals( expectedResult, name );
214 
215         name = DependencyUtil.getFormattedFileName( artifact, true );
216         expectedResult = "two-sources.jar";
217         assertEquals( expectedResult, name );
218 
219         ah = new DefaultArtifactHandlerStub( "war", null );
220         artifact = new DefaultArtifact( "test", "two", vr, Artifact.SCOPE_PROVIDED, "war", "", ah, false );
221         name = DependencyUtil.getFormattedFileName( artifact, true );
222         expectedResult = "two.war";
223         assertEquals( expectedResult, name );
224 
225     }
226 
227     public void testFileNameClassifierWithFile()
228         throws MojoExecutionException
229     {
230         // specifically testing the default operation that getFormattedFileName
231         // returns
232         // the actual name of the file if available unless remove version is
233         // set.
234         ArtifactHandler ah = new DefaultArtifactHandlerStub( "war", "sources" );
235         VersionRange vr = VersionRange.createFromVersion( "1.1-SNAPSHOT" );
236         Artifact artifact = new DefaultArtifact( "test", "two", vr, Artifact.SCOPE_PROVIDED, "war", "sources", ah,
237                                                  false );
238         File file = new File( "/target", "test-file-name.jar" );
239         artifact.setFile( file );
240 
241         String name = DependencyUtil.getFormattedFileName( artifact, false );
242         String expectedResult = "test-file-name.jar";
243         assertEquals( expectedResult, name );
244 
245         name = DependencyUtil.getFormattedFileName( artifact, true );
246         expectedResult = "two-sources.war";
247         assertEquals( expectedResult, name );
248 
249         artifact = new DefaultArtifact( "test", "two", vr, Artifact.SCOPE_PROVIDED, "war", "", ah, false );
250         name = DependencyUtil.getFormattedFileName( artifact, true );
251         expectedResult = "two.war";
252         assertEquals( expectedResult, name );
253 
254         // test that we pickup the correct extension in the file name if set.
255         ah = new DefaultArtifactHandlerStub( "jar", null );
256         artifact = new DefaultArtifact( "test", "two", vr, Artifact.SCOPE_PROVIDED, "war", "", ah, false );
257         name = DependencyUtil.getFormattedFileName( artifact, true );
258         expectedResult = "two.jar";
259         assertEquals( expectedResult, name );
260 
261     }
262 }