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