1 package org.apache.maven.plugin.surefire;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.artifact.Artifact;
23 import org.apache.maven.artifact.DefaultArtifact;
24 import org.apache.maven.artifact.handler.ArtifactHandler;
25 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
26 import org.apache.maven.artifact.versioning.VersionRange;
27 import org.apache.maven.plugin.MojoFailureException;
28 import org.apache.maven.surefire.suite.RunResult;
29 import org.apache.maven.surefire.util.DefaultScanResult;
30 import org.junit.Test;
31
32 import java.io.File;
33 import java.io.FileOutputStream;
34 import java.util.List;
35 import java.util.zip.ZipEntry;
36 import java.util.zip.ZipOutputStream;
37
38 import static java.util.Arrays.asList;
39 import static java.util.Collections.singletonList;
40 import static org.fest.assertions.Assertions.assertThat;
41
42 public class MojoMocklessTest
43 {
44 @Test
45 public void scanDependenciesShouldReturnNull()
46 throws MojoFailureException
47 {
48 Mojo mojo = new Mojo( null, null );
49 DefaultScanResult result = mojo.scanDependencies();
50 assertThat( result )
51 .isNull();
52 }
53
54 @Test
55 public void scanDependenciesShouldReturnNullAfterMissingBuildArtifact()
56 throws MojoFailureException
57 {
58 VersionRange version = VersionRange.createFromVersion( "1.0" );
59 ArtifactHandler handler = new DefaultArtifactHandler();
60 Artifact testDeps = new DefaultArtifact( "g", "a", version, "compile", "jar", null, handler );
61 List<Artifact> projectTestArtifacts = singletonList( testDeps );
62 String[] dependenciesToScan = { "g:a" };
63 Mojo mojo = new Mojo( projectTestArtifacts, dependenciesToScan );
64 DefaultScanResult result = mojo.scanDependencies();
65 assertThat( result )
66 .isNull();
67 }
68
69 @Test
70 public void scanDependenciesShouldReturnNullWithWAR()
71 throws MojoFailureException
72 {
73 VersionRange version = VersionRange.createFromVersion( "1.0" );
74 ArtifactHandler handler = new DefaultArtifactHandler();
75 Artifact testDeps = new DefaultArtifact( "g", "a", version, "compile", "war", null, handler );
76 testDeps.setFile( new File( new File( "target" ), "a-1.0.war" ) );
77 List<Artifact> projectTestArtifacts = singletonList( testDeps );
78 String[] dependenciesToScan = { "g:a" };
79 Mojo mojo = new Mojo( projectTestArtifacts, dependenciesToScan );
80 DefaultScanResult result = mojo.scanDependencies();
81 assertThat( result )
82 .isNull();
83 }
84
85 @Test
86 public void scanDependenciesShouldReturnNullWithExistingWAR()
87 throws Exception
88 {
89 VersionRange version = VersionRange.createFromVersion( "1.0" );
90 ArtifactHandler handler = new DefaultArtifactHandler();
91 Artifact testDeps = new DefaultArtifact( "g", "a", version, "compile", "war", null, handler );
92 File artifactFile = File.createTempFile( "surefire", ".war" );
93 testDeps.setFile( artifactFile );
94 List<Artifact> projectTestArtifacts = singletonList( testDeps );
95 String[] dependenciesToScan = { "g:a" };
96 Mojo mojo = new Mojo( projectTestArtifacts, dependenciesToScan );
97 DefaultScanResult result = mojo.scanDependencies();
98 assertThat( result )
99 .isNull();
100 }
101
102 @Test
103 public void scanDependenciesShouldReturnClassWithExistingTestJAR()
104 throws Exception
105 {
106 VersionRange version = VersionRange.createFromVersion( "1.0" );
107 ArtifactHandler handler = new DefaultArtifactHandler();
108 Artifact testDeps = new DefaultArtifact( "g", "a", version, "compile", "test-jar", null, handler );
109
110 File artifactFile = File.createTempFile( "surefire", ".jar" );
111 testDeps.setFile( artifactFile );
112 try ( ZipOutputStream os = new ZipOutputStream( new FileOutputStream( artifactFile ) ) )
113 {
114 os.putNextEntry( new ZipEntry( "pkg/" ) );
115 os.closeEntry();
116 os.putNextEntry( new ZipEntry( "pkg/MyTest.class" ) );
117 os.closeEntry();
118 os.finish();
119 }
120
121 List<Artifact> projectTestArtifacts = singletonList( testDeps );
122 String[] dependenciesToScan = { "g:a" };
123 Mojo mojo = new Mojo( projectTestArtifacts, dependenciesToScan );
124 DefaultScanResult result = mojo.scanDependencies();
125
126 assertThat( result )
127 .isNotNull();
128
129 assertThat( result.isEmpty() )
130 .isFalse();
131
132 assertThat( result.getClasses() )
133 .contains( "pkg.MyTest" );
134 }
135
136 @Test
137 public void scanDependenciesShouldReturnNullWithEmptyTestJAR()
138 throws Exception
139 {
140 VersionRange version = VersionRange.createFromVersion( "1.0" );
141 ArtifactHandler handler = new DefaultArtifactHandler();
142 Artifact testDeps = new DefaultArtifact( "g", "a", version, "compile", "jar", null, handler );
143
144 File artifactFile = File.createTempFile( "surefire", ".jar" );
145 testDeps.setFile( artifactFile );
146 try ( ZipOutputStream os = new ZipOutputStream( new FileOutputStream( artifactFile ) ) )
147 {
148 os.putNextEntry( new ZipEntry( "pkg/" ) );
149 os.closeEntry();
150 os.finish();
151 }
152
153 List<Artifact> projectTestArtifacts = singletonList( testDeps );
154 String[] dependenciesToScan = { "g:a" };
155 Mojo mojo = new Mojo( projectTestArtifacts, dependenciesToScan );
156 DefaultScanResult result = mojo.scanDependencies();
157
158 assertThat( result )
159 .isNotNull();
160
161 assertThat( result.isEmpty() )
162 .isTrue();
163 }
164
165 @Test
166 public void scanDependenciesShouldReturnClassWithDirectory()
167 throws Exception
168 {
169 VersionRange version = VersionRange.createFromVersion( "1.0" );
170 ArtifactHandler handler = new DefaultArtifactHandler();
171 Artifact testDeps = new DefaultArtifact( "g", "a", version, "compile", "test-jar", null, handler );
172
173 File artifactFile = File.createTempFile( "surefire", "-classes" );
174 String classDir = artifactFile.getCanonicalPath();
175 assertThat( artifactFile.delete() ).isTrue();
176 File classes = new File( classDir );
177 assertThat( classes.mkdir() ).isTrue();
178
179 testDeps.setFile( classes );
180
181 assertThat( new File( classes, "AnotherTest.class" ).createNewFile() )
182 .isTrue();
183
184 List<Artifact> projectTestArtifacts = singletonList( testDeps );
185 String[] dependenciesToScan = { "g:a" };
186 Mojo mojo = new Mojo( projectTestArtifacts, dependenciesToScan );
187 DefaultScanResult result = mojo.scanDependencies();
188
189 assertThat( result )
190 .isNotNull();
191
192 assertThat( result.isEmpty() )
193 .isFalse();
194
195 assertThat( result.getClasses() )
196 .contains( "AnotherTest" );
197 }
198
199 @Test
200 public void scanMultipleDependencies()
201 throws Exception
202 {
203 VersionRange version = VersionRange.createFromVersion( "1.0" );
204 ArtifactHandler handler = new DefaultArtifactHandler();
205 Artifact testDep1 = new DefaultArtifact( "g", "x", version, "compile", "jar", null, handler );
206
207 File artifactFile1 = File.createTempFile( "surefire", "-classes" );
208 String classDir = artifactFile1.getCanonicalPath();
209 assertThat( artifactFile1.delete() ).isTrue();
210 File classes = new File( classDir );
211 assertThat( classes.mkdir() ).isTrue();
212
213 testDep1.setFile( classes );
214
215 assertThat( new File( classes, "AnotherTest.class" ).createNewFile() )
216 .isTrue();
217
218 Artifact testDep2 = new DefaultArtifact( "g", "a", version, "test", "jar", null, handler );
219 File artifactFile2 = File.createTempFile( "surefire", ".jar" );
220 testDep2.setFile( artifactFile2 );
221 try ( ZipOutputStream os = new ZipOutputStream( new FileOutputStream( artifactFile2 ) ) )
222 {
223 os.putNextEntry( new ZipEntry( "pkg/" ) );
224 os.closeEntry();
225 os.putNextEntry( new ZipEntry( "pkg/MyTest.class" ) );
226 os.closeEntry();
227 os.finish();
228 }
229
230 List<Artifact> projectTestArtifacts = asList( testDep1, testDep2 );
231 String[] dependenciesToScan = { "g:a" };
232 Mojo mojo = new Mojo( projectTestArtifacts, dependenciesToScan );
233 DefaultScanResult result = mojo.scanDependencies();
234
235 assertThat( result )
236 .isNotNull();
237
238 assertThat( result.isEmpty() )
239 .isFalse();
240
241 assertThat( result.getClasses() )
242 .hasSize( 1 );
243
244 assertThat( result.getClasses() )
245 .contains( "pkg.MyTest" );
246 }
247
248 private final static class Mojo
249 extends AbstractSurefireMojo
250 {
251 private final List<Artifact> projectTestArtifacts;
252 private final String[] dependenciesToScan;
253
254 Mojo( List<Artifact> projectTestArtifacts, String[] dependenciesToScan )
255 {
256 this.projectTestArtifacts = projectTestArtifacts;
257 this.dependenciesToScan = dependenciesToScan;
258 }
259
260 @Override
261 protected String getPluginName()
262 {
263 return null;
264 }
265
266 @Override
267 protected int getRerunFailingTestsCount()
268 {
269 return 0;
270 }
271
272 @Override
273 public boolean isSkipTests()
274 {
275 return false;
276 }
277
278 @Override
279 public void setSkipTests( boolean skipTests )
280 {
281
282 }
283
284 @Override
285 public boolean isSkipExec()
286 {
287 return false;
288 }
289
290 @Override
291 public void setSkipExec( boolean skipExec )
292 {
293
294 }
295
296 @Override
297 public boolean isSkip()
298 {
299 return false;
300 }
301
302 @Override
303 public void setSkip( boolean skip )
304 {
305
306 }
307
308 @Override
309 public File getBasedir()
310 {
311 return null;
312 }
313
314 @Override
315 public void setBasedir( File basedir )
316 {
317
318 }
319
320 @Override
321 public File getTestClassesDirectory()
322 {
323 return null;
324 }
325
326 @Override
327 public void setTestClassesDirectory( File testClassesDirectory )
328 {
329
330 }
331
332 @Override
333 public File getClassesDirectory()
334 {
335 return null;
336 }
337
338 @Override
339 public void setClassesDirectory( File classesDirectory )
340 {
341
342 }
343
344 @Override
345 public File getReportsDirectory()
346 {
347 return null;
348 }
349
350 @Override
351 public void setReportsDirectory( File reportsDirectory )
352 {
353
354 }
355
356 @Override
357 public String getTest()
358 {
359 return null;
360 }
361
362 @Override
363 public void setTest( String test )
364 {
365
366 }
367
368 @Override
369 public List<String> getIncludes()
370 {
371 return null;
372 }
373
374 @Override
375 public File getIncludesFile()
376 {
377 return null;
378 }
379
380 @Override
381 public void setIncludes( List<String> includes )
382 {
383
384 }
385
386 @Override
387 public boolean isPrintSummary()
388 {
389 return false;
390 }
391
392 @Override
393 public void setPrintSummary( boolean printSummary )
394 {
395
396 }
397
398 @Override
399 public String getReportFormat()
400 {
401 return null;
402 }
403
404 @Override
405 public void setReportFormat( String reportFormat )
406 {
407
408 }
409
410 @Override
411 public boolean isUseFile()
412 {
413 return false;
414 }
415
416 @Override
417 public void setUseFile( boolean useFile )
418 {
419
420 }
421
422 @Override
423 public String getDebugForkedProcess()
424 {
425 return null;
426 }
427
428 @Override
429 public void setDebugForkedProcess( String debugForkedProcess )
430 {
431
432 }
433
434 @Override
435 public int getForkedProcessTimeoutInSeconds()
436 {
437 return 0;
438 }
439
440 @Override
441 public void setForkedProcessTimeoutInSeconds( int forkedProcessTimeoutInSeconds )
442 {
443
444 }
445
446 @Override
447 public int getForkedProcessExitTimeoutInSeconds()
448 {
449 return 0;
450 }
451
452 @Override
453 public void setForkedProcessExitTimeoutInSeconds( int forkedProcessTerminationTimeoutInSeconds )
454 {
455
456 }
457
458 @Override
459 public double getParallelTestsTimeoutInSeconds()
460 {
461 return 0;
462 }
463
464 @Override
465 public void setParallelTestsTimeoutInSeconds( double parallelTestsTimeoutInSeconds )
466 {
467
468 }
469
470 @Override
471 public double getParallelTestsTimeoutForcedInSeconds()
472 {
473 return 0;
474 }
475
476 @Override
477 public void setParallelTestsTimeoutForcedInSeconds( double parallelTestsTimeoutForcedInSeconds )
478 {
479
480 }
481
482 @Override
483 public boolean isUseSystemClassLoader()
484 {
485 return false;
486 }
487
488 @Override
489 public void setUseSystemClassLoader( boolean useSystemClassLoader )
490 {
491
492 }
493
494 @Override
495 public boolean isUseManifestOnlyJar()
496 {
497 return false;
498 }
499
500 @Override
501 public void setUseManifestOnlyJar( boolean useManifestOnlyJar )
502 {
503
504 }
505
506 @Override
507 public String getEncoding()
508 {
509 return null;
510 }
511
512 @Override
513 public void setEncoding( String encoding )
514 {
515
516 }
517
518 @Override
519 public Boolean getFailIfNoSpecifiedTests()
520 {
521 return null;
522 }
523
524 @Override
525 public void setFailIfNoSpecifiedTests( boolean failIfNoSpecifiedTests )
526 {
527
528 }
529
530 @Override
531 public int getSkipAfterFailureCount()
532 {
533 return 0;
534 }
535
536 @Override
537 public String getShutdown()
538 {
539 return null;
540 }
541
542 @Override
543 public File getExcludesFile()
544 {
545 return null;
546 }
547
548 @Override
549 protected List<File> suiteXmlFiles()
550 {
551 return null;
552 }
553
554 @Override
555 protected boolean hasSuiteXmlFiles()
556 {
557 return false;
558 }
559
560 @Override
561 public File[] getSuiteXmlFiles()
562 {
563 return new File[0];
564 }
565
566 @Override
567 public void setSuiteXmlFiles( File[] suiteXmlFiles )
568 {
569
570 }
571
572 @Override
573 public String getRunOrder()
574 {
575 return null;
576 }
577
578 @Override
579 public void setRunOrder( String runOrder )
580 {
581
582 }
583
584 @Override
585 public String[] getDependenciesToScan()
586 {
587 return dependenciesToScan;
588 }
589
590 @Override
591 protected void handleSummary( RunResult summary, Exception firstForkException )
592 {
593
594 }
595
596 @Override
597 protected boolean isSkipExecution()
598 {
599 return false;
600 }
601
602 @Override
603 protected String[] getDefaultIncludes()
604 {
605 return new String[0];
606 }
607
608 @Override
609 protected String getReportSchemaLocation()
610 {
611 return null;
612 }
613
614 @Override
615 protected boolean useModulePath()
616 {
617 return false;
618 }
619
620 @Override
621 protected void setUseModulePath( boolean useModulePath )
622 {
623
624 }
625
626 @Override
627 protected Artifact getMojoArtifact()
628 {
629 return null;
630 }
631
632 @Override
633 List<Artifact> getProjectTestArtifacts()
634 {
635 return projectTestArtifacts;
636 }
637 }
638 }