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  
23  import org.apache.maven.artifact.Artifact;
24  import org.apache.maven.artifact.DefaultArtifact;
25  import org.apache.maven.artifact.handler.ArtifactHandler;
26  import org.apache.maven.artifact.versioning.VersionRange;
27  import org.apache.maven.plugin.testing.stubs.DefaultArtifactHandlerStub;
28  import org.junit.jupiter.api.BeforeEach;
29  import org.junit.jupiter.api.Test;
30  import org.junit.jupiter.api.io.TempDir;
31  
32  import static org.assertj.core.api.Assertions.assertThat;
33  import static org.junit.jupiter.api.Assertions.assertEquals;
34  import static org.junit.jupiter.api.Assertions.assertTrue;
35  
36  /**
37   * @author brianf
38   */
39  class TestDependencyUtil {
40  
41      private static final String TEST_CONTENT =
42              "Test line 1" + System.lineSeparator() + "Test line 2" + System.lineSeparator();
43  
44      @TempDir
45      File temDir;
46  
47      Artifact snap;
48  
49      Artifact snapResolvedVersion;
50  
51      Artifact release;
52  
53      Artifact sources;
54  
55      @BeforeEach
56      void 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  
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  
66          ah = new DefaultArtifactHandlerStub("war", null);
67          vr = VersionRange.createFromVersion("1.1-SNAPSHOT");
68          snapResolvedVersion = new DefaultArtifact("test", "three", vr, Artifact.SCOPE_PROVIDED, "war", null, ah, false);
69          snapResolvedVersion.setResolvedVersion("1.1-20121003.035531-117");
70  
71          ah = new DefaultArtifactHandlerStub("war", null);
72          vr = VersionRange.createFromVersion("1.1-SNAPSHOT");
73          sources = new DefaultArtifact("test", "two", vr, Artifact.SCOPE_PROVIDED, "sources", "sources", ah, false);
74      }
75  
76      @Test
77      void directoryName() {
78          File folder = new File("target/a");
79          final Artifact artifact = release;
80          File name =
81                  DependencyUtil.getFormattedOutputDirectory(false, false, false, false, false, false, folder, artifact);
82          // object is the same.
83          assertEquals(folder, name);
84  
85          name = DependencyUtil.getFormattedOutputDirectory(false, false, false, true, false, false, folder, artifact);
86          String expectedResult = folder.getAbsolutePath() + File.separatorChar + "test" + File.separatorChar + "one"
87                  + File.separatorChar + "1.1";
88          assertTrue(expectedResult.equalsIgnoreCase(name.getAbsolutePath()));
89  
90          name = DependencyUtil.getFormattedOutputDirectory(false, true, false, false, false, false, folder, artifact);
91          expectedResult = folder.getAbsolutePath() + File.separatorChar + "jars";
92          assertTrue(expectedResult.equalsIgnoreCase(name.getAbsolutePath()));
93  
94          name = DependencyUtil.getFormattedOutputDirectory(true, false, false, false, false, false, folder, artifact);
95          expectedResult = folder.getAbsolutePath() + File.separatorChar + "compile";
96          assertEquals(expectedResult, name.getAbsolutePath());
97          assertTrue(expectedResult.equalsIgnoreCase(name.getAbsolutePath()));
98  
99          name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, false, false, folder, artifact);
100         expectedResult = folder.getAbsolutePath() + File.separatorChar + "one-1.1-sources-jar";
101         assertEquals(expectedResult, name.getAbsolutePath());
102 
103         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, true, false, folder, artifact);
104         expectedResult = folder.getAbsolutePath() + File.separatorChar + "one-sources-jar";
105         assertEquals(expectedResult, name.getAbsolutePath());
106 
107         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, false, true, folder, artifact);
108         expectedResult = folder.getAbsolutePath() + File.separatorChar + "one-1.1-sources";
109         assertEquals(expectedResult, name.getAbsolutePath());
110 
111         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, true, true, folder, artifact);
112         expectedResult = folder.getAbsolutePath() + File.separatorChar + "one-sources";
113         assertEquals(expectedResult, name.getAbsolutePath());
114 
115         name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, false, false, folder, artifact);
116         expectedResult =
117                 folder.getAbsolutePath() + File.separatorChar + "jars" + File.separatorChar + "one-1.1-sources-jar";
118         assertEquals(expectedResult, name.getAbsolutePath());
119 
120         name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, true, false, folder, artifact);
121         expectedResult =
122                 folder.getAbsolutePath() + File.separatorChar + "jars" + File.separatorChar + "one-sources-jar";
123         assertEquals(expectedResult, name.getAbsolutePath());
124 
125         name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, false, true, folder, artifact);
126         expectedResult =
127                 folder.getAbsolutePath() + File.separatorChar + "jars" + File.separatorChar + "one-1.1-sources";
128         assertEquals(expectedResult, name.getAbsolutePath());
129 
130         name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, true, true, folder, artifact);
131         expectedResult = folder.getAbsolutePath() + File.separatorChar + "jars" + File.separatorChar + "one-sources";
132         assertEquals(expectedResult, name.getAbsolutePath());
133 
134         name = DependencyUtil.getFormattedOutputDirectory(true, false, true, false, true, false, folder, artifact);
135         expectedResult =
136                 folder.getAbsolutePath() + File.separatorChar + "compile" + File.separatorChar + "one-sources-jar";
137         assertEquals(expectedResult, name.getAbsolutePath());
138 
139         name = DependencyUtil.getFormattedOutputDirectory(true, false, true, false, false, true, folder, artifact);
140         expectedResult =
141                 folder.getAbsolutePath() + File.separatorChar + "compile" + File.separatorChar + "one-1.1-sources";
142         assertEquals(expectedResult, name.getAbsolutePath());
143 
144         name = DependencyUtil.getFormattedOutputDirectory(true, false, true, false, true, true, folder, artifact);
145         expectedResult = folder.getAbsolutePath() + File.separatorChar + "compile" + File.separatorChar + "one-sources";
146         assertEquals(expectedResult, name.getAbsolutePath());
147     }
148 
149     @Test
150     void directoryName2() {
151         File folder = new File("target/a");
152         final Artifact artifact = snap;
153         File name =
154                 DependencyUtil.getFormattedOutputDirectory(false, false, false, false, false, false, folder, artifact);
155         // object is the same.
156         assertEquals(folder, name);
157 
158         name = DependencyUtil.getFormattedOutputDirectory(false, true, false, false, false, false, folder, artifact);
159         String expectedResult = folder.getAbsolutePath() + File.separatorChar + "wars";
160         assertEquals(expectedResult, name.getAbsolutePath());
161 
162         name = DependencyUtil.getFormattedOutputDirectory(false, false, false, true, false, false, folder, artifact);
163         expectedResult = folder.getAbsolutePath() + File.separatorChar + "test" + File.separatorChar + "two"
164                 + File.separatorChar + "1.1-SNAPSHOT";
165         assertEquals(expectedResult, name.getAbsolutePath());
166 
167         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, false, false, folder, artifact);
168         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-1.1-SNAPSHOT-war";
169         assertEquals(expectedResult, name.getAbsolutePath());
170 
171         name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, false, false, folder, artifact);
172         expectedResult =
173                 folder.getAbsolutePath() + File.separatorChar + "wars" + File.separatorChar + "two-1.1-SNAPSHOT-war";
174         assertEquals(expectedResult, name.getAbsolutePath());
175 
176         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, true, false, folder, artifact);
177         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-war";
178         assertEquals(expectedResult, name.getAbsolutePath());
179 
180         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, false, true, folder, artifact);
181         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-1.1-SNAPSHOT";
182         assertEquals(expectedResult, name.getAbsolutePath());
183 
184         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, true, true, folder, artifact);
185         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two";
186         assertEquals(expectedResult, name.getAbsolutePath());
187 
188         name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, true, false, folder, artifact);
189         expectedResult = folder.getAbsolutePath() + File.separatorChar + "wars" + File.separatorChar + "two-war";
190         assertEquals(expectedResult, name.getAbsolutePath());
191 
192         name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, false, true, folder, artifact);
193         expectedResult =
194                 folder.getAbsolutePath() + File.separatorChar + "wars" + File.separatorChar + "two-1.1-SNAPSHOT";
195         assertEquals(expectedResult, name.getAbsolutePath());
196 
197         name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, true, true, folder, artifact);
198         expectedResult = folder.getAbsolutePath() + File.separatorChar + "wars" + File.separatorChar + "two";
199         assertEquals(expectedResult, name.getAbsolutePath());
200     }
201 
202     @Test
203     void directoryNameSources() {
204         File folder = new File("target/a");
205         File name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, true, false, folder, sources);
206         String expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-sources";
207         assertEquals(expectedResult, name.getAbsolutePath());
208 
209         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, true, true, folder, sources);
210         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-sources";
211         assertEquals(expectedResult, name.getAbsolutePath());
212 
213         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, false, false, folder, sources);
214         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-1.1-SNAPSHOT-sources";
215         assertEquals(expectedResult, name.getAbsolutePath());
216 
217         name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, false, true, folder, sources);
218         expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-1.1-SNAPSHOT-sources";
219         assertEquals(expectedResult, name.getAbsolutePath());
220     }
221 
222     @Test
223     void fileName() {
224         Artifact artifact = release;
225 
226         String name = DependencyUtil.getFormattedFileName(artifact, false);
227         String expectedResult = "one-1.1-sources.jar";
228         assertEquals(expectedResult, name);
229         name = DependencyUtil.getFormattedFileName(artifact, true);
230         expectedResult = "one-sources.jar";
231         assertEquals(expectedResult, name);
232     }
233 
234     @Test
235     void fileNameUseBaseVersion() {
236         Artifact artifact = snapResolvedVersion;
237 
238         String name = DependencyUtil.getFormattedFileName(artifact, false, false, true);
239         String expectedResult = "three-1.1-SNAPSHOT.war";
240         assertEquals(expectedResult, name);
241         name = DependencyUtil.getFormattedFileName(artifact, false, false, false);
242         expectedResult = "three-1.1-20121003.035531-117.war";
243         assertEquals(expectedResult, name);
244     }
245 
246     @Test
247     void testJar() {
248         ArtifactHandler ah = new DefaultArtifactHandlerStub("test-jar", null);
249         VersionRange vr = VersionRange.createFromVersion("1.1-SNAPSHOT");
250         Artifact artifact =
251                 new DefaultArtifact("test", "two", vr, Artifact.SCOPE_PROVIDED, "test-jar", null, ah, false);
252 
253         String name = DependencyUtil.getFormattedFileName(artifact, false);
254         String expectedResult = "two-1.1-SNAPSHOT.jar";
255         assertEquals(expectedResult, name);
256     }
257 
258     @Test
259     void fileNameClassifier() {
260         ArtifactHandler ah = new DefaultArtifactHandlerStub("jar", "sources");
261         VersionRange vr = VersionRange.createFromVersion("1.1-SNAPSHOT");
262         Artifact artifact =
263                 new DefaultArtifact("test", "two", vr, Artifact.SCOPE_PROVIDED, "jar", "sources", ah, false);
264 
265         String name = DependencyUtil.getFormattedFileName(artifact, false);
266         String expectedResult = "two-1.1-SNAPSHOT-sources.jar";
267         assertEquals(expectedResult, name);
268 
269         name = DependencyUtil.getFormattedFileName(artifact, true);
270         expectedResult = "two-sources.jar";
271         assertEquals(expectedResult, name);
272 
273         name = DependencyUtil.getFormattedFileName(artifact, false, false, false, true);
274         expectedResult = "two-1.1-SNAPSHOT.jar";
275         assertEquals(expectedResult, name);
276 
277         ah = new DefaultArtifactHandlerStub("war", null);
278         artifact = new DefaultArtifact("test", "two", vr, Artifact.SCOPE_PROVIDED, "war", "", ah, false);
279         name = DependencyUtil.getFormattedFileName(artifact, true);
280         expectedResult = "two.war";
281         assertEquals(expectedResult, name);
282     }
283 
284     @Test
285     void fileNameClassifierWithFile() {
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     @Test
323     void outputFileShouldBeOverridden() throws Exception {
324         File file = new File(temDir, "file1.out");
325         assertThat(file).doesNotExist();
326 
327         DependencyUtil.write(TEST_CONTENT, file, false, "UTF-8");
328         assertThat(file).hasContent(TEST_CONTENT);
329 
330         DependencyUtil.write(TEST_CONTENT, file, false, "UTF-8");
331         assertThat(file).hasContent(TEST_CONTENT);
332     }
333 
334     @Test
335     void outputFileShouldBeAppended() throws Exception {
336         File file = new File(temDir, "file2.out");
337         assertThat(file).doesNotExist();
338 
339         DependencyUtil.write(TEST_CONTENT, file, true, "UTF-8");
340         assertThat(file).hasContent(TEST_CONTENT);
341 
342         DependencyUtil.write(TEST_CONTENT, file, true, "UTF-8");
343         assertThat(file).hasContent(TEST_CONTENT + TEST_CONTENT);
344     }
345 }