View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.plugins.dependency.utils;
20  
21  import java.io.File;
22  import java.util.ArrayList;
23  import java.util.List;
24  import java.util.Random;
25  
26  import junit.framework.TestCase;
27  import org.apache.maven.artifact.Artifact;
28  import org.apache.maven.artifact.DefaultArtifact;
29  import org.apache.maven.artifact.handler.ArtifactHandler;
30  import org.apache.maven.artifact.versioning.VersionRange;
31  import org.apache.maven.plugin.logging.Log;
32  import org.apache.maven.plugin.testing.SilentLog;
33  import org.apache.maven.plugin.testing.stubs.DefaultArtifactHandlerStub;
34  
35  /**
36   * @author brianf
37   */
38  public class TestDependencyUtil extends TestCase {
39      List<Artifact> artifacts = new ArrayList<>();
40  
41      Log log = new SilentLog();
42  
43      File outputFolder;
44  
45      Artifact snap;
46  
47      Artifact snapResolvedVersion;
48  
49      Artifact release;
50  
51      Artifact sources;
52  
53      @Override
54      protected void setUp() throws Exception {
55          super.setUp();
56  
57          ArtifactHandler ah = new DefaultArtifactHandlerStub("jar", null);
58          VersionRange vr = VersionRange.createFromVersion("1.1");
59          release = new DefaultArtifact("test", "one", vr, Artifact.SCOPE_COMPILE, "jar", "sources", ah, false);
60          artifacts.add(release);
61  
62          ah = new DefaultArtifactHandlerStub("war", null);
63          vr = VersionRange.createFromVersion("1.1-SNAPSHOT");
64          snap = new DefaultArtifact("test", "two", vr, Artifact.SCOPE_PROVIDED, "war", null, ah, false);
65          artifacts.add(snap);
66  
67          ah = new DefaultArtifactHandlerStub("war", null);
68          vr = VersionRange.createFromVersion("1.1-SNAPSHOT");
69          snapResolvedVersion = new DefaultArtifact("test", "three", vr, Artifact.SCOPE_PROVIDED, "war", null, ah, false);
70          snapResolvedVersion.setResolvedVersion("1.1-20121003.035531-117");
71          artifacts.add(snapResolvedVersion);
72  
73          ah = new DefaultArtifactHandlerStub("war", null);
74          vr = VersionRange.createFromVersion("1.1-SNAPSHOT");
75          sources = new DefaultArtifact("test", "two", vr, Artifact.SCOPE_PROVIDED, "sources", "sources", ah, false);
76  
77          // pick random output location
78          Random a = new Random();
79          outputFolder = new File("target/copy" + a.nextLong() + "/");
80          outputFolder.delete();
81          assertFalse(outputFolder.exists());
82      }
83  
84      public void testDirectoryName() {
85          File folder = new File("target/a");
86          final Artifact artifact = artifacts.get(0);
87          File name =
88                  DependencyUtil.getFormattedOutputDirectory(false, false, false, false, false, false, folder, artifact);
89          // object is the same.
90          assertEquals(folder, name);
91  
92          name = DependencyUtil.getFormattedOutputDirectory(false, false, false, true, false, false, folder, artifact);
93          String expectedResult = folder.getAbsolutePath() + File.separatorChar + "test" + File.separatorChar + "one"
94                  + File.separatorChar + "1.1";
95          assertTrue(expectedResult.equalsIgnoreCase(name.getAbsolutePath()));
96  
97          name = DependencyUtil.getFormattedOutputDirectory(false, true, false, false, false, false, folder, artifact);
98          expectedResult = folder.getAbsolutePath() + File.separatorChar + "jars";
99          assertTrue(expectedResult.equalsIgnoreCase(name.getAbsolutePath()));
100 
101         name = DependencyUtil.getFormattedOutputDirectory(true, false, false, false, false, false, folder, artifact);
102         expectedResult = folder.getAbsolutePath() + File.separatorChar + "compile";
103         assertEquals(expectedResult, name.getAbsolutePath());
104         assertTrue(expectedResult.equalsIgnoreCase(name.getAbsolutePath()));
105 
106         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, false, false, folder, artifact);
107         expectedResult = folder.getAbsolutePath() + File.separatorChar + "one-1.1-sources-jar";
108         assertEquals(expectedResult, name.getAbsolutePath());
109 
110         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, true, false, folder, artifact);
111         expectedResult = folder.getAbsolutePath() + File.separatorChar + "one-sources-jar";
112         assertEquals(expectedResult, name.getAbsolutePath());
113 
114         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, false, true, folder, artifact);
115         expectedResult = folder.getAbsolutePath() + File.separatorChar + "one-1.1-sources";
116         assertEquals(expectedResult, name.getAbsolutePath());
117 
118         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, true, true, folder, artifact);
119         expectedResult = folder.getAbsolutePath() + File.separatorChar + "one-sources";
120         assertEquals(expectedResult, name.getAbsolutePath());
121 
122         name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, 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, false, 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(false, true, true, false, false, true, folder, artifact);
133         expectedResult =
134                 folder.getAbsolutePath() + File.separatorChar + "jars" + File.separatorChar + "one-1.1-sources";
135         assertEquals(expectedResult, name.getAbsolutePath());
136 
137         name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, true, true, folder, artifact);
138         expectedResult = folder.getAbsolutePath() + File.separatorChar + "jars" + File.separatorChar + "one-sources";
139         assertEquals(expectedResult, name.getAbsolutePath());
140 
141         name = DependencyUtil.getFormattedOutputDirectory(true, false, true, false, true, false, folder, artifact);
142         expectedResult =
143                 folder.getAbsolutePath() + File.separatorChar + "compile" + File.separatorChar + "one-sources-jar";
144         assertEquals(expectedResult, name.getAbsolutePath());
145 
146         name = DependencyUtil.getFormattedOutputDirectory(true, false, true, false, false, true, folder, artifact);
147         expectedResult =
148                 folder.getAbsolutePath() + File.separatorChar + "compile" + File.separatorChar + "one-1.1-sources";
149         assertEquals(expectedResult, name.getAbsolutePath());
150 
151         name = DependencyUtil.getFormattedOutputDirectory(true, false, true, false, true, true, folder, artifact);
152         expectedResult = folder.getAbsolutePath() + File.separatorChar + "compile" + File.separatorChar + "one-sources";
153         assertEquals(expectedResult, name.getAbsolutePath());
154     }
155 
156     public void testDirectoryName2() {
157         File folder = new File("target/a");
158         final Artifact artifact = artifacts.get(1);
159         File name =
160                 DependencyUtil.getFormattedOutputDirectory(false, false, false, false, false, false, folder, artifact);
161         // object is the same.
162         assertEquals(folder, name);
163 
164         name = DependencyUtil.getFormattedOutputDirectory(false, true, false, false, false, false, folder, artifact);
165         String expectedResult = folder.getAbsolutePath() + File.separatorChar + "wars";
166         assertEquals(expectedResult, name.getAbsolutePath());
167 
168         name = DependencyUtil.getFormattedOutputDirectory(false, false, false, true, false, false, folder, artifact);
169         expectedResult = folder.getAbsolutePath() + File.separatorChar + "test" + File.separatorChar + "two"
170                 + File.separatorChar + "1.1-SNAPSHOT";
171         assertEquals(expectedResult, name.getAbsolutePath());
172 
173         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, false, false, folder, artifact);
174         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-1.1-SNAPSHOT-war";
175         assertEquals(expectedResult, name.getAbsolutePath());
176 
177         name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, false, false, folder, artifact);
178         expectedResult =
179                 folder.getAbsolutePath() + File.separatorChar + "wars" + File.separatorChar + "two-1.1-SNAPSHOT-war";
180         assertEquals(expectedResult, name.getAbsolutePath());
181 
182         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, true, false, folder, artifact);
183         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-war";
184         assertEquals(expectedResult, name.getAbsolutePath());
185 
186         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, false, true, folder, artifact);
187         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-1.1-SNAPSHOT";
188         assertEquals(expectedResult, name.getAbsolutePath());
189 
190         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, true, true, folder, artifact);
191         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two";
192         assertEquals(expectedResult, name.getAbsolutePath());
193 
194         name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, true, false, folder, artifact);
195         expectedResult = folder.getAbsolutePath() + File.separatorChar + "wars" + File.separatorChar + "two-war";
196         assertEquals(expectedResult, name.getAbsolutePath());
197 
198         name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, false, true, folder, artifact);
199         expectedResult =
200                 folder.getAbsolutePath() + File.separatorChar + "wars" + File.separatorChar + "two-1.1-SNAPSHOT";
201         assertEquals(expectedResult, name.getAbsolutePath());
202 
203         name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, true, true, folder, artifact);
204         expectedResult = folder.getAbsolutePath() + File.separatorChar + "wars" + File.separatorChar + "two";
205         assertEquals(expectedResult, name.getAbsolutePath());
206     }
207 
208     public void testDirectoryNameSources() {
209         File folder = new File("target/a");
210         File name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, true, false, folder, sources);
211         String expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-sources";
212         assertEquals(expectedResult, name.getAbsolutePath());
213 
214         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, true, true, folder, sources);
215         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-sources";
216         assertEquals(expectedResult, name.getAbsolutePath());
217 
218         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, false, false, folder, sources);
219         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-1.1-SNAPSHOT-sources";
220         assertEquals(expectedResult, name.getAbsolutePath());
221 
222         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, false, true, folder, sources);
223         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-1.1-SNAPSHOT-sources";
224         assertEquals(expectedResult, name.getAbsolutePath());
225     }
226 
227     public void testFileName() {
228         Artifact artifact = artifacts.get(0);
229 
230         String name = DependencyUtil.getFormattedFileName(artifact, false);
231         String expectedResult = "one-1.1-sources.jar";
232         assertEquals(expectedResult, name);
233         name = DependencyUtil.getFormattedFileName(artifact, true);
234         expectedResult = "one-sources.jar";
235         assertEquals(expectedResult, name);
236     }
237 
238     public void testFileNameUseBaseVersion() {
239         Artifact artifact = snapResolvedVersion;
240 
241         String name = DependencyUtil.getFormattedFileName(artifact, false, false, true);
242         String expectedResult = "three-1.1-SNAPSHOT.war";
243         assertEquals(expectedResult, name);
244         name = DependencyUtil.getFormattedFileName(artifact, false, false, false);
245         expectedResult = "three-1.1-20121003.035531-117.war";
246         assertEquals(expectedResult, name);
247     }
248 
249     public void testTestJar() {
250         ArtifactHandler ah = new DefaultArtifactHandlerStub("test-jar", null);
251         VersionRange vr = VersionRange.createFromVersion("1.1-SNAPSHOT");
252         Artifact artifact =
253                 new DefaultArtifact("test", "two", vr, Artifact.SCOPE_PROVIDED, "test-jar", null, ah, false);
254 
255         String name = DependencyUtil.getFormattedFileName(artifact, false);
256         String expectedResult = "two-1.1-SNAPSHOT.jar";
257         assertEquals(expectedResult, name);
258     }
259 
260     public void testFileNameClassifier() {
261         ArtifactHandler ah = new DefaultArtifactHandlerStub("jar", "sources");
262         VersionRange vr = VersionRange.createFromVersion("1.1-SNAPSHOT");
263         Artifact artifact =
264                 new DefaultArtifact("test", "two", vr, Artifact.SCOPE_PROVIDED, "jar", "sources", ah, false);
265 
266         String name = DependencyUtil.getFormattedFileName(artifact, false);
267         String expectedResult = "two-1.1-SNAPSHOT-sources.jar";
268         assertEquals(expectedResult, name);
269 
270         name = DependencyUtil.getFormattedFileName(artifact, true);
271         expectedResult = "two-sources.jar";
272         assertEquals(expectedResult, name);
273 
274         name = DependencyUtil.getFormattedFileName(artifact, false, false, false, true);
275         expectedResult = "two-1.1-SNAPSHOT.jar";
276         assertEquals(expectedResult, name);
277 
278         ah = new DefaultArtifactHandlerStub("war", null);
279         artifact = new DefaultArtifact("test", "two", vr, Artifact.SCOPE_PROVIDED, "war", "", ah, false);
280         name = DependencyUtil.getFormattedFileName(artifact, true);
281         expectedResult = "two.war";
282         assertEquals(expectedResult, name);
283     }
284 
285     public void testFileNameClassifierWithFile() {
286         // specifically testing the default operation that getFormattedFileName
287         // returns
288         // the actual name of the file if available unless remove version is
289         // set.
290         ArtifactHandler ah = new DefaultArtifactHandlerStub("war", "sources");
291         VersionRange vr = VersionRange.createFromVersion("1.1-SNAPSHOT");
292         Artifact artifact =
293                 new DefaultArtifact("test", "two", vr, Artifact.SCOPE_PROVIDED, "war", "sources", ah, false);
294         File file = new File("/target", "test-file-name.jar");
295         artifact.setFile(file);
296 
297         String name = DependencyUtil.getFormattedFileName(artifact, false);
298         String expectedResult = "two-1.1-SNAPSHOT-sources.war";
299         assertEquals(expectedResult, name);
300 
301         name = DependencyUtil.getFormattedFileName(artifact, false, false, false, true);
302         expectedResult = "two-1.1-SNAPSHOT.war";
303         assertEquals(expectedResult, name);
304 
305         name = DependencyUtil.getFormattedFileName(artifact, true);
306         expectedResult = "two-sources.war";
307         assertEquals(expectedResult, name);
308 
309         artifact = new DefaultArtifact("test", "two", vr, Artifact.SCOPE_PROVIDED, "war", "", ah, false);
310         name = DependencyUtil.getFormattedFileName(artifact, true);
311         expectedResult = "two.war";
312         assertEquals(expectedResult, name);
313 
314         // test that we pickup the correct extension in the file name if set.
315         ah = new DefaultArtifactHandlerStub("jar", null);
316         artifact = new DefaultArtifact("test", "two", vr, Artifact.SCOPE_PROVIDED, "war", "", ah, false);
317         name = DependencyUtil.getFormattedFileName(artifact, true);
318         expectedResult = "two.jar";
319         assertEquals(expectedResult, name);
320     }
321 
322     public void testTokenizer() {
323         String[] tokens = DependencyUtil.tokenizer(" alpha,bravo, charlie , delta kappa, theta");
324         String[] expected = new String[] {"alpha", "bravo", "charlie", "delta kappa", "theta"};
325         // easier to see in the JUnit reports
326         assertEquals(String.join(", ", expected), String.join(", ", tokens));
327         assertEquals(expected.length, tokens.length);
328 
329         tokens = DependencyUtil.tokenizer(" \r\n a, \t \n \r b \t \n \r");
330         assertEquals(2, tokens.length);
331         assertEquals("a", tokens[0]);
332         assertEquals("b", tokens[1]);
333 
334         tokens = DependencyUtil.tokenizer(null);
335         assertEquals(0, tokens.length);
336 
337         tokens = DependencyUtil.tokenizer("  ");
338         assertEquals(0, tokens.length);
339     }
340 }