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