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