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