1 package org.apache.maven.plugins.enforcer;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.io.IOException;
24 import java.util.ArrayList;
25 import java.util.Collection;
26 import java.util.HashSet;
27 import java.util.List;
28 import java.util.Set;
29
30 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
31 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
32 import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
33 import org.apache.maven.model.Plugin;
34 import org.apache.maven.plugin.MojoExecutionException;
35 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
36 import org.apache.maven.plugins.enforcer.utils.EnforcerRuleUtils;
37 import org.apache.maven.plugins.enforcer.utils.PluginWrapper;
38 import org.codehaus.plexus.util.StringUtils;
39 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
40
41
42
43
44
45
46
47 public class TestRequirePluginVersions
48 extends AbstractMojoTestCase
49 {
50
51
52
53
54 public void testHasVersionSpecified()
55 {
56 Plugin source = new Plugin();
57 source.setArtifactId( "foo" );
58 source.setGroupId( "group" );
59
60
61
62
63
64
65
66 List<Plugin> plugins = new ArrayList<Plugin>();
67 plugins.add( EnforcerTestUtils.newPlugin( "group", "a-artifact", "1.0" ) );
68 plugins.add( EnforcerTestUtils.newPlugin( "group", "foo", null ) );
69 plugins.add( EnforcerTestUtils.newPlugin( "group", "foo", "" ) );
70 plugins.add( EnforcerTestUtils.newPlugin( "group", "b-artifact", "1.0" ) );
71 plugins.add( EnforcerTestUtils.newPlugin( "group", "foo", "1.0" ) );
72 plugins.add( EnforcerTestUtils.newPlugin( "group", "c-artifact", "LATEST" ) );
73 plugins.add( EnforcerTestUtils.newPlugin( "group", "c-artifact", "1.0" ) );
74 plugins.add( EnforcerTestUtils.newPlugin( "group", "d-artifact", "RELEASE" ) );
75 plugins.add( EnforcerTestUtils.newPlugin( "group", "d-artifact", "1.0" ) );
76 plugins.add( EnforcerTestUtils.newPlugin( "group", "e-artifact", "1.0" ) );
77 plugins.add( EnforcerTestUtils.newPlugin( "group", "e-artifact", "RELEASE" ) );
78 plugins.add( EnforcerTestUtils.newPlugin( "group", "f-artifact", "1.0" ) );
79 plugins.add( EnforcerTestUtils.newPlugin( "group", "f-artifact", "LATEST" ) );
80 plugins.add( EnforcerTestUtils.newPlugin( "group", "f-artifact", "1.0-SNAPSHOT" ) );
81 plugins.add( EnforcerTestUtils.newPlugin( "group", "g-artifact", "1.0-12345678.123456-1" ) );
82
83
84 List<PluginWrapper> pluginWrappers = PluginWrapper.addAll( plugins, "unit" );
85
86 RequirePluginVersions rule = new RequirePluginVersions();
87 rule.setBanLatest( false );
88 rule.setBanRelease( false );
89 rule.setBanSnapshots( false );
90
91 EnforcerRuleHelper helper = EnforcerTestUtils.getHelper();
92
93 assertTrue( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) );
94
95
96 source.setArtifactId( "c-artifact" );
97 assertTrue( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) );
98
99
100 rule.setBanLatest( true );
101 assertFalse( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) );
102
103
104 rule.setBanSnapshots( false );
105 source.setArtifactId( "f-artifact" );
106 assertFalse( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) );
107
108 rule.setBanLatest( false );
109 rule.setBanSnapshots( true );
110 assertFalse( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) );
111
112
113 rule.setBanTimestamps( false );
114 source.setArtifactId( "g-artifact" );
115 assertTrue( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) );
116
117
118 source.setArtifactId( "d-artifact" );
119 assertTrue( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) );
120
121
122 rule.setBanRelease( true );
123 assertFalse( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) );
124
125
126 source.setArtifactId( "e-artifact" );
127 assertFalse( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) );
128 }
129
130
131
132
133 public void testHasVersionSpecifiedWithProperties()
134 {
135 Plugin source = new Plugin();
136 source.setGroupId( "group" );
137
138
139 List<Plugin> plugins = new ArrayList<Plugin>();
140 plugins.add( EnforcerTestUtils.newPlugin( "group", "a-artifact", "1.0-${SNAPSHOT}" ) );
141 plugins.add( EnforcerTestUtils.newPlugin( "group", "b-artifact", "${1.0}" ) );
142 plugins.add( EnforcerTestUtils.newPlugin( "group", "c-artifact", "${LATEST}" ) );
143 plugins.add( EnforcerTestUtils.newPlugin( "group", "d-artifact", "${RELEASE}" ) );
144 plugins.add( EnforcerTestUtils.newPlugin( "group", "e-artifact", "${}" ) );
145 plugins.add( EnforcerTestUtils.newPlugin( "group", "f-artifact", "${ }" ) );
146
147 List<PluginWrapper> pluginWrappers = PluginWrapper.addAll( plugins, "unit" );
148
149 RequirePluginVersions rule = new RequirePluginVersions();
150 rule.setBanLatest( false );
151 rule.setBanRelease( false );
152 rule.setBanSnapshots( false );
153
154 EnforcerRuleHelper helper = EnforcerTestUtils.getHelper( true );
155
156 source.setArtifactId( "a-artifact" );
157 assertTrue( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) );
158
159 source.setArtifactId( "b-artifact" );
160 assertTrue( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) );
161
162 source.setArtifactId( "c-artifact" );
163 assertTrue( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) );
164
165 source.setArtifactId( "d-artifact" );
166 assertTrue( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) );
167
168
169 source.setArtifactId( "e-artifact" );
170 assertFalse( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) );
171
172
173 source.setArtifactId( "f-artifact" );
174 assertFalse( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) );
175
176 rule.setBanLatest( true );
177 source.setArtifactId( "c-artifact" );
178 assertFalse( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) );
179
180 rule.setBanRelease( true );
181 source.setArtifactId( "d-artifact" );
182 assertFalse( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) );
183
184 rule.setBanSnapshots( true );
185 source.setArtifactId( "a-artifact" );
186 assertFalse( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) );
187
188
189 source.setArtifactId( "b-artifact" );
190 assertTrue( rule.hasValidVersionSpecified( helper, source, pluginWrappers ) );
191 }
192
193
194
195
196
197
198
199
200
201 public void testGetAllPlugins()
202 throws ArtifactResolutionException, ArtifactNotFoundException, IOException, XmlPullParserException
203 {
204 RequirePluginVersions rule = new RequirePluginVersions();
205 String path = "target/test-classes/requirePluginVersions/getPomRecursively/b/c";
206
207 StringUtils.replace( path, "/", File.separator );
208
209 File projectDir = new File( getBasedir(), path );
210
211 MockProject project = new MockProject();
212 project.setArtifactId( "c" );
213 project.setGroupId( "group" );
214 project.setVersion( "1.0" );
215 project.setBaseDir( projectDir );
216
217 rule.setUtils( new EnforcerRuleUtils( EnforcerTestUtils.getHelper( project ) ) );
218 List<PluginWrapper> plugins = rule.getAllPluginEntries( project );
219
220
221 assertEquals( 3, plugins.size() );
222 }
223
224
225
226
227
228
229 public void testGetAdditionalPluginsNull()
230 throws MojoExecutionException
231 {
232 RequirePluginVersions rule = new RequirePluginVersions();
233 rule.addAdditionalPlugins( null, null );
234 }
235
236
237
238
239 public void testGetAdditionalPluginsInvalidFormat()
240 {
241 RequirePluginVersions rule = new RequirePluginVersions();
242
243 List<String> additional = new ArrayList<String>();
244
245
246 additional.add( "group" );
247
248 Set<Plugin> plugins = new HashSet<Plugin>();
249 try
250 {
251 rule.addAdditionalPlugins( plugins, additional );
252 fail( "Expected Exception because the format is invalid" );
253 }
254 catch ( MojoExecutionException e )
255 {
256 }
257
258
259 additional.clear();
260 additional.add( "group:i:i" );
261 try
262 {
263 rule.addAdditionalPlugins( plugins, additional );
264 fail( "Expected Exception because the format is invalid" );
265 }
266 catch ( MojoExecutionException e )
267 {
268 }
269
270 }
271
272
273
274
275
276
277 public void testGetAdditionalPluginsEmptySet()
278 throws MojoExecutionException
279 {
280 RequirePluginVersions rule = new RequirePluginVersions();
281
282 Set<Plugin> plugins = new HashSet<Plugin>();
283 plugins.add( EnforcerTestUtils.newPlugin( "group", "a-artifact", "1.0" ) );
284 plugins.add( EnforcerTestUtils.newPlugin( "group", "foo", null ) );
285 plugins.add( EnforcerTestUtils.newPlugin( "group", "foo2", "" ) );
286
287 List<String> additional = new ArrayList<String>();
288 additional.add( "group:a-artifact" );
289 additional.add( "group:another-artifact" );
290
291
292 Set<Plugin> results = rule.addAdditionalPlugins( null, additional );
293
294 assertNotNull( results );
295 assertContainsPlugin( "group", "a-artifact", results );
296 assertContainsPlugin( "group", "another-artifact", results );
297
298 }
299
300
301
302
303
304
305 public void testGetAdditionalPlugins()
306 throws MojoExecutionException
307 {
308 RequirePluginVersions rule = new RequirePluginVersions();
309
310 Set<Plugin> plugins = new HashSet<Plugin>();
311 plugins.add( EnforcerTestUtils.newPlugin( "group", "a-artifact", "1.0" ) );
312 plugins.add( EnforcerTestUtils.newPlugin( "group", "foo", null ) );
313 plugins.add( EnforcerTestUtils.newPlugin( "group", "foo2", "" ) );
314
315 List<String> additional = new ArrayList<String>();
316 additional.add( "group:a-artifact" );
317 additional.add( "group:another-artifact" );
318
319 Set<Plugin> results = rule.addAdditionalPlugins( plugins, additional );
320
321
322 assertNotNull( results );
323 assertEquals( 4, results.size() );
324 assertContainsPlugin( "group", "a-artifact", results );
325 assertContainsPlugin( "group", "another-artifact", results );
326
327 }
328
329
330
331
332
333
334 public void testGetUncheckedPlugins()
335 throws MojoExecutionException
336 {
337 RequirePluginVersions rule = new RequirePluginVersions();
338
339 Set <Plugin> plugins = new HashSet<Plugin>();
340 plugins.add( EnforcerTestUtils.newPlugin( "group", "a-artifact", "1.0" ) );
341 plugins.add( EnforcerTestUtils.newPlugin( "group", "foo", null ) );
342 plugins.add( EnforcerTestUtils.newPlugin( "group", "foo2", "" ) );
343
344 List<String> unchecked = new ArrayList<String>();
345
346 unchecked.add( "group : a-artifact" );
347
348 Collection<Plugin> results = rule.removeUncheckedPlugins( unchecked, plugins );
349
350
351
352 assertNotNull( results );
353 assertEquals( 2, results.size() );
354 assertContainsPlugin( "group", "foo", results );
355 assertContainsPlugin( "group", "foo2", results );
356 assertNotContainPlugin( "group", "a-artifact", results );
357
358 }
359
360
361
362
363 public void testCombinePlugins()
364 {
365 RequirePluginVersions rule = new RequirePluginVersions();
366
367 Set<String> plugins = new HashSet<String>();
368 plugins.add( "group:a-artifact" );
369 plugins.add( "group:foo" );
370 plugins.add( "group:foo2" );
371
372 Collection<String> results = rule.combineUncheckedPlugins( plugins, "group2:a,group3:b" );
373
374
375 assertNotNull( results );
376 assertEquals( 5, results.size() );
377 assertTrue( results.contains( "group:foo") );
378 assertTrue( results.contains( "group:foo2") );
379 assertTrue( results.contains( "group:a-artifact") );
380 assertTrue( results.contains( "group2:a") );
381 assertTrue( results.contains( "group3:b") );
382 }
383
384
385
386
387 public void testCombinePlugins1()
388 {
389 RequirePluginVersions rule = new RequirePluginVersions();
390
391 Set<String> plugins = new HashSet<String>();
392 Collection<String> results = rule.combineUncheckedPlugins( plugins, "group2:a,group3:b" );
393
394
395
396 assertNotNull( results );
397 assertEquals( 2, results.size() );
398 assertTrue( results.contains( "group2:a") );
399 assertTrue( results.contains( "group3:b") );
400 }
401
402
403
404
405 public void testCombinePlugins2()
406 {
407 RequirePluginVersions rule = new RequirePluginVersions();
408
409 Collection<String> results = rule.combineUncheckedPlugins( null, "group2:a,group3:b" );
410
411
412
413 assertNotNull( results );
414 assertEquals( 2, results.size() );
415 assertTrue( results.contains( "group2:a") );
416 assertTrue( results.contains( "group3:b") );
417 }
418
419
420
421
422 public void testCombinePlugins3()
423 {
424 RequirePluginVersions rule = new RequirePluginVersions();
425
426 Set<String> plugins = new HashSet<String>();
427 plugins.add( "group:a-artifact" );
428 plugins.add( "group:foo" );
429 plugins.add( "group:foo2" );
430
431 Collection<String> results = rule.combineUncheckedPlugins( plugins, "" );
432 assertNotNull( results );
433 assertEquals( 3, results.size() );
434 assertTrue( results.contains( "group:foo") );
435 assertTrue( results.contains( "group:foo2") );
436 assertTrue( results.contains( "group:a-artifact") );
437 }
438
439
440
441
442 public void testCombinePlugins4()
443 {
444 RequirePluginVersions rule = new RequirePluginVersions();
445
446 Set<String> plugins = new HashSet<String>();
447 plugins.add( "group:a-artifact" );
448 plugins.add( "group:foo" );
449 plugins.add( "group:foo2" );
450
451 Collection<String> results = rule.combineUncheckedPlugins( plugins, null );
452 assertNotNull( results );
453 assertEquals( 3, results.size() );
454 assertTrue( results.contains( "group:foo") );
455 assertTrue( results.contains( "group:foo2") );
456 assertTrue( results.contains( "group:a-artifact") );
457 }
458
459
460
461
462 public void testCombinePlugins5()
463 {
464 RequirePluginVersions rule = new RequirePluginVersions();
465
466 Set<String> plugins = new HashSet<String>();
467 plugins.add( "group:a-artifact" );
468 plugins.add( "group:foo" );
469 plugins.add( "group:foo2" );
470
471 Collection<String> results = rule.combineUncheckedPlugins( plugins, "a" );
472 assertNotNull( results );
473 assertEquals( 4, results.size() );
474 assertTrue( results.contains( "group:foo") );
475 assertTrue( results.contains( "group:foo2") );
476
477 assertTrue( results.contains( "a") );
478 }
479
480
481
482
483
484
485
486
487
488 private void assertContainsPlugin( String group, String artifact, Collection<Plugin> theSet )
489 {
490 Plugin p = new Plugin();
491 p.setGroupId( group );
492 p.setArtifactId( artifact );
493 assertTrue( theSet.contains( p ) );
494 }
495
496
497
498
499
500
501
502
503 private void assertNotContainPlugin( String group, String artifact, Collection<Plugin> theSet )
504 {
505 Plugin p = new Plugin();
506 p.setGroupId( group );
507 p.setArtifactId( artifact );
508 assertFalse( theSet.contains( p ) );
509 }
510
511
512
513
514 public void testId()
515 {
516 RequirePluginVersions rule = new RequirePluginVersions();
517 rule.getCacheId();
518 }
519 }