1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugins.dependency.utils;
20
21 import java.io.File;
22 import java.io.IOException;
23
24 import org.apache.maven.artifact.Artifact;
25 import org.apache.maven.artifact.DefaultArtifact;
26 import org.apache.maven.artifact.handler.ArtifactHandler;
27 import org.apache.maven.artifact.versioning.VersionRange;
28 import org.apache.maven.plugin.testing.stubs.DefaultArtifactHandlerStub;
29 import org.junit.jupiter.api.BeforeEach;
30 import org.junit.jupiter.api.Test;
31 import org.junit.jupiter.api.io.TempDir;
32
33 import static org.assertj.core.api.Assertions.assertThat;
34 import static org.junit.jupiter.api.Assertions.assertEquals;
35 import static org.junit.jupiter.api.Assertions.assertTrue;
36
37
38
39
40 class TestDependencyUtil {
41
42 private static final String TEST_CONTENT =
43 "Test line 1" + System.lineSeparator() + "Test line 2" + System.lineSeparator();
44
45 @TempDir
46 File temDir;
47
48 Artifact snap;
49
50 Artifact snapResolvedVersion;
51
52 Artifact release;
53
54 Artifact sources;
55
56 @BeforeEach
57 protected void setUp() {
58
59 ArtifactHandler ah = new DefaultArtifactHandlerStub("jar", null);
60 VersionRange vr = VersionRange.createFromVersion("1.1");
61 release = new DefaultArtifact("test", "one", vr, Artifact.SCOPE_COMPILE, "jar", "sources", ah, false);
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
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
72 ah = new DefaultArtifactHandlerStub("war", null);
73 vr = VersionRange.createFromVersion("1.1-SNAPSHOT");
74 sources = new DefaultArtifact("test", "two", vr, Artifact.SCOPE_PROVIDED, "sources", "sources", ah, false);
75 }
76
77 @Test
78 void testDirectoryName() {
79 File folder = new File("target/a");
80 final Artifact artifact = release;
81 File name =
82 DependencyUtil.getFormattedOutputDirectory(false, false, false, false, false, false, folder, artifact);
83
84 assertEquals(folder, name);
85
86 name = DependencyUtil.getFormattedOutputDirectory(false, false, false, true, false, false, folder, artifact);
87 String expectedResult = folder.getAbsolutePath() + File.separatorChar + "test" + File.separatorChar + "one"
88 + File.separatorChar + "1.1";
89 assertTrue(expectedResult.equalsIgnoreCase(name.getAbsolutePath()));
90
91 name = DependencyUtil.getFormattedOutputDirectory(false, true, false, false, false, false, folder, artifact);
92 expectedResult = folder.getAbsolutePath() + File.separatorChar + "jars";
93 assertTrue(expectedResult.equalsIgnoreCase(name.getAbsolutePath()));
94
95 name = DependencyUtil.getFormattedOutputDirectory(true, false, false, false, false, false, folder, artifact);
96 expectedResult = folder.getAbsolutePath() + File.separatorChar + "compile";
97 assertEquals(expectedResult, name.getAbsolutePath());
98 assertTrue(expectedResult.equalsIgnoreCase(name.getAbsolutePath()));
99
100 name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, false, false, folder, artifact);
101 expectedResult = folder.getAbsolutePath() + File.separatorChar + "one-1.1-sources-jar";
102 assertEquals(expectedResult, name.getAbsolutePath());
103
104 name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, true, false, folder, artifact);
105 expectedResult = folder.getAbsolutePath() + File.separatorChar + "one-sources-jar";
106 assertEquals(expectedResult, name.getAbsolutePath());
107
108 name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, false, true, folder, artifact);
109 expectedResult = folder.getAbsolutePath() + File.separatorChar + "one-1.1-sources";
110 assertEquals(expectedResult, name.getAbsolutePath());
111
112 name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, true, true, folder, artifact);
113 expectedResult = folder.getAbsolutePath() + File.separatorChar + "one-sources";
114 assertEquals(expectedResult, name.getAbsolutePath());
115
116 name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, false, false, folder, artifact);
117 expectedResult =
118 folder.getAbsolutePath() + File.separatorChar + "jars" + File.separatorChar + "one-1.1-sources-jar";
119 assertEquals(expectedResult, name.getAbsolutePath());
120
121 name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, true, false, folder, artifact);
122 expectedResult =
123 folder.getAbsolutePath() + File.separatorChar + "jars" + File.separatorChar + "one-sources-jar";
124 assertEquals(expectedResult, name.getAbsolutePath());
125
126 name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, false, true, folder, artifact);
127 expectedResult =
128 folder.getAbsolutePath() + File.separatorChar + "jars" + File.separatorChar + "one-1.1-sources";
129 assertEquals(expectedResult, name.getAbsolutePath());
130
131 name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, true, true, folder, artifact);
132 expectedResult = folder.getAbsolutePath() + File.separatorChar + "jars" + File.separatorChar + "one-sources";
133 assertEquals(expectedResult, name.getAbsolutePath());
134
135 name = DependencyUtil.getFormattedOutputDirectory(true, false, true, false, true, false, folder, artifact);
136 expectedResult =
137 folder.getAbsolutePath() + File.separatorChar + "compile" + File.separatorChar + "one-sources-jar";
138 assertEquals(expectedResult, name.getAbsolutePath());
139
140 name = DependencyUtil.getFormattedOutputDirectory(true, false, true, false, false, true, folder, artifact);
141 expectedResult =
142 folder.getAbsolutePath() + File.separatorChar + "compile" + File.separatorChar + "one-1.1-sources";
143 assertEquals(expectedResult, name.getAbsolutePath());
144
145 name = DependencyUtil.getFormattedOutputDirectory(true, false, true, false, true, true, folder, artifact);
146 expectedResult = folder.getAbsolutePath() + File.separatorChar + "compile" + File.separatorChar + "one-sources";
147 assertEquals(expectedResult, name.getAbsolutePath());
148 }
149
150 @Test
151 void testDirectoryName2() {
152 File folder = new File("target/a");
153 final Artifact artifact = snap;
154 File name =
155 DependencyUtil.getFormattedOutputDirectory(false, false, false, false, false, false, folder, artifact);
156
157 assertEquals(folder, name);
158
159 name = DependencyUtil.getFormattedOutputDirectory(false, true, false, false, false, false, folder, artifact);
160 String expectedResult = folder.getAbsolutePath() + File.separatorChar + "wars";
161 assertEquals(expectedResult, name.getAbsolutePath());
162
163 name = DependencyUtil.getFormattedOutputDirectory(false, false, false, true, false, false, folder, artifact);
164 expectedResult = folder.getAbsolutePath() + File.separatorChar + "test" + File.separatorChar + "two"
165 + File.separatorChar + "1.1-SNAPSHOT";
166 assertEquals(expectedResult, name.getAbsolutePath());
167
168 name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, false, false, folder, artifact);
169 expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-1.1-SNAPSHOT-war";
170 assertEquals(expectedResult, name.getAbsolutePath());
171
172 name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, false, false, folder, artifact);
173 expectedResult =
174 folder.getAbsolutePath() + File.separatorChar + "wars" + File.separatorChar + "two-1.1-SNAPSHOT-war";
175 assertEquals(expectedResult, name.getAbsolutePath());
176
177 name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, true, false, folder, artifact);
178 expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-war";
179 assertEquals(expectedResult, name.getAbsolutePath());
180
181 name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, false, true, folder, artifact);
182 expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-1.1-SNAPSHOT";
183 assertEquals(expectedResult, name.getAbsolutePath());
184
185 name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, true, true, folder, artifact);
186 expectedResult = folder.getAbsolutePath() + File.separatorChar + "two";
187 assertEquals(expectedResult, name.getAbsolutePath());
188
189 name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, true, false, folder, artifact);
190 expectedResult = folder.getAbsolutePath() + File.separatorChar + "wars" + File.separatorChar + "two-war";
191 assertEquals(expectedResult, name.getAbsolutePath());
192
193 name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, false, true, folder, artifact);
194 expectedResult =
195 folder.getAbsolutePath() + File.separatorChar + "wars" + File.separatorChar + "two-1.1-SNAPSHOT";
196 assertEquals(expectedResult, name.getAbsolutePath());
197
198 name = DependencyUtil.getFormattedOutputDirectory(false, true, true, false, true, true, folder, artifact);
199 expectedResult = folder.getAbsolutePath() + File.separatorChar + "wars" + File.separatorChar + "two";
200 assertEquals(expectedResult, name.getAbsolutePath());
201 }
202
203 @Test
204 void testDirectoryNameSources() {
205 File folder = new File("target/a");
206 File name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, true, false, folder, sources);
207 String expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-sources";
208 assertEquals(expectedResult, name.getAbsolutePath());
209
210 name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, true, true, folder, sources);
211 expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-sources";
212 assertEquals(expectedResult, name.getAbsolutePath());
213
214 name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, false, false, folder, sources);
215 expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-1.1-SNAPSHOT-sources";
216 assertEquals(expectedResult, name.getAbsolutePath());
217
218 name = DependencyUtil.getFormattedOutputDirectory(false, false, true, false, false, true, folder, sources);
219 expectedResult = folder.getAbsolutePath() + File.separatorChar + "two-1.1-SNAPSHOT-sources";
220 assertEquals(expectedResult, name.getAbsolutePath());
221 }
222
223 @Test
224 void testFileName() {
225 Artifact artifact = release;
226
227 String name = DependencyUtil.getFormattedFileName(artifact, false);
228 String expectedResult = "one-1.1-sources.jar";
229 assertEquals(expectedResult, name);
230 name = DependencyUtil.getFormattedFileName(artifact, true);
231 expectedResult = "one-sources.jar";
232 assertEquals(expectedResult, name);
233 }
234
235 @Test
236 void testFileNameUseBaseVersion() {
237 Artifact artifact = snapResolvedVersion;
238
239 String name = DependencyUtil.getFormattedFileName(artifact, false, false, true);
240 String expectedResult = "three-1.1-SNAPSHOT.war";
241 assertEquals(expectedResult, name);
242 name = DependencyUtil.getFormattedFileName(artifact, false, false, false);
243 expectedResult = "three-1.1-20121003.035531-117.war";
244 assertEquals(expectedResult, name);
245 }
246
247 @Test
248 void testTestJar() {
249 ArtifactHandler ah = new DefaultArtifactHandlerStub("test-jar", null);
250 VersionRange vr = VersionRange.createFromVersion("1.1-SNAPSHOT");
251 Artifact artifact =
252 new DefaultArtifact("test", "two", vr, Artifact.SCOPE_PROVIDED, "test-jar", null, ah, false);
253
254 String name = DependencyUtil.getFormattedFileName(artifact, false);
255 String expectedResult = "two-1.1-SNAPSHOT.jar";
256 assertEquals(expectedResult, name);
257 }
258
259 @Test
260 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 @Test
286 void testFileNameClassifierWithFile() {
287
288
289
290
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
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 @Test
324 void testTokenizer() {
325 String[] tokens = DependencyUtil.tokenizer(" alpha,bravo, charlie , delta kappa, theta");
326 String[] expected = new String[] {"alpha", "bravo", "charlie", "delta kappa", "theta"};
327
328 assertEquals(String.join(", ", expected), String.join(", ", tokens));
329 assertEquals(expected.length, tokens.length);
330
331 tokens = DependencyUtil.tokenizer(" \r\n a, \t \n \r b \t \n \r");
332 assertEquals(2, tokens.length);
333 assertEquals("a", tokens[0]);
334 assertEquals("b", tokens[1]);
335
336 tokens = DependencyUtil.tokenizer(null);
337 assertEquals(0, tokens.length);
338
339 tokens = DependencyUtil.tokenizer(" ");
340 assertEquals(0, tokens.length);
341 }
342
343 @Test
344 void outputFileShouldBeOverridden() throws IOException {
345 File file = new File(temDir, "file1.out");
346 assertThat(file).doesNotExist();
347
348 DependencyUtil.write(TEST_CONTENT, file, false, "UTF-8");
349 assertThat(file).hasContent(TEST_CONTENT);
350
351 DependencyUtil.write(TEST_CONTENT, file, false, "UTF-8");
352 assertThat(file).hasContent(TEST_CONTENT);
353 }
354
355 @Test
356 void outputFileShouldBeAppended() throws IOException {
357 File file = new File(temDir, "file2.out");
358 assertThat(file).doesNotExist();
359
360 DependencyUtil.write(TEST_CONTENT, file, true, "UTF-8");
361 assertThat(file).hasContent(TEST_CONTENT);
362
363 DependencyUtil.write(TEST_CONTENT, file, true, "UTF-8");
364 assertThat(file).hasContent(TEST_CONTENT + TEST_CONTENT);
365 }
366 }