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 java.io.File;
23 import java.util.Arrays;
24 import java.util.Collections;
25 import java.util.List;
26 import java.util.Map;
27 import org.apache.maven.artifact.Artifact;
28 import org.apache.maven.plugin.MojoExecutionException;
29 import org.apache.maven.plugin.MojoFailureException;
30 import org.apache.maven.plugins.annotations.LifecyclePhase;
31 import org.apache.maven.plugins.annotations.Mojo;
32 import org.apache.maven.plugins.annotations.Parameter;
33 import org.apache.maven.plugins.annotations.ResolutionScope;
34 import org.apache.maven.surefire.suite.RunResult;
35
36 import static org.apache.maven.plugin.surefire.SurefireHelper.reportExecution;
37
38
39
40
41
42
43 @Mojo( name = "test", defaultPhase = LifecyclePhase.TEST, threadSafe = true,
44 requiresDependencyResolution = ResolutionScope.TEST )
45 public class SurefirePlugin
46 extends AbstractSurefireMojo
47 implements SurefireReportParameters
48 {
49
50
51
52
53
54 @Parameter( defaultValue = "${project.build.outputDirectory}" )
55 private File classesDirectory;
56
57
58
59
60
61 @Parameter( property = "maven.test.failure.ignore", defaultValue = "false" )
62 private boolean testFailureIgnore;
63
64
65
66
67 @Parameter( defaultValue = "${project.build.directory}/surefire-reports" )
68 private File reportsDirectory;
69
70 @SuppressWarnings( "checkstyle:linelength" )
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 @Parameter( property = "test" )
94 private String test;
95
96
97
98
99 @Parameter( property = "surefire.printSummary", defaultValue = "true" )
100 private boolean printSummary;
101
102
103
104
105
106 @Parameter( property = "surefire.reportFormat", defaultValue = "brief" )
107 private String reportFormat;
108
109
110
111
112 @Parameter( property = "surefire.useFile", defaultValue = "true" )
113 private boolean useFile;
114
115
116
117
118
119
120
121 @Parameter( property = "surefire.failIfNoSpecifiedTests" )
122 private Boolean failIfNoSpecifiedTests;
123
124
125
126
127
128
129
130
131
132 @Parameter( property = "maven.surefire.debug" )
133 private String debugForkedProcess;
134
135
136
137
138
139
140
141 @Parameter( property = "surefire.timeout" )
142 private int forkedProcessTimeoutInSeconds;
143
144
145
146
147
148
149
150
151
152
153
154 @Parameter( property = "surefire.exitTimeout", defaultValue = "30" )
155 private int forkedProcessExitTimeoutInSeconds;
156
157
158
159
160
161
162
163
164
165
166
167 @Parameter( property = "surefire.parallel.timeout" )
168 private double parallelTestsTimeoutInSeconds;
169
170
171
172
173
174
175
176
177
178
179
180
181 @Parameter( property = "surefire.parallel.forcedTimeout" )
182 private double parallelTestsTimeoutForcedInSeconds;
183
184 @SuppressWarnings( "checkstyle:linelength" )
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212 @Parameter
213 private List<String> includes;
214
215
216
217
218
219
220
221
222 @Parameter( property = "surefire.useSystemClassLoader", defaultValue = "true" )
223 private boolean useSystemClassLoader;
224
225
226
227
228
229
230
231
232
233
234
235
236 @Parameter( property = "surefire.useManifestOnlyJar", defaultValue = "true" )
237 private boolean useManifestOnlyJar;
238
239
240
241
242
243
244
245
246 @Parameter( property = "surefire.encoding", defaultValue = "${project.reporting.outputEncoding}" )
247 private String encoding;
248
249
250
251
252
253
254
255 @Parameter( property = "surefire.rerunFailingTestsCount", defaultValue = "0" )
256 private int rerunFailingTestsCount;
257
258
259
260
261
262
263
264
265
266
267 @Parameter( property = "surefire.suiteXmlFiles" )
268 private File[] suiteXmlFiles;
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294 @Parameter( property = "surefire.runOrder", defaultValue = "filesystem" )
295 private String runOrder;
296
297
298
299
300
301
302
303
304
305
306 @Parameter( property = "surefire.includesFile" )
307 private File includesFile;
308
309
310
311
312
313
314
315
316
317
318 @Parameter( property = "surefire.excludesFile" )
319 private File excludesFile;
320
321
322
323
324
325
326
327
328
329
330
331
332 @Parameter( property = "surefire.skipAfterFailureCount", defaultValue = "0" )
333 private int skipAfterFailureCount;
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351 @Parameter( property = "surefire.shutdown", defaultValue = "testset" )
352 private String shutdown;
353
354 @Override
355 protected int getRerunFailingTestsCount()
356 {
357 return rerunFailingTestsCount;
358 }
359
360 @Override
361 protected void handleSummary( RunResult summary, Exception firstForkException )
362 throws MojoExecutionException, MojoFailureException
363 {
364 reportExecution( this, summary, getConsoleLogger(), firstForkException );
365 }
366
367 @Override
368 protected boolean isSkipExecution()
369 {
370 return isSkip() || isSkipTests() || isSkipExec();
371 }
372
373 @Override
374 protected String getPluginName()
375 {
376 return "surefire";
377 }
378
379 @Override
380 protected String[] getDefaultIncludes()
381 {
382 return new String[]{ "**/Test*.java", "**/*Test.java", "**/*Tests.java", "**/*TestCase.java" };
383 }
384
385 @Override
386 protected String getReportSchemaLocation()
387 {
388 return "https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd";
389 }
390
391 @Override
392 protected Artifact getMojoArtifact()
393 {
394 final Map<String, Artifact> pluginArtifactMap = getPluginArtifactMap();
395 return pluginArtifactMap.get( "org.apache.maven.plugins:maven-surefire-plugin" );
396 }
397
398
399
400 @Override
401 public boolean isSkipTests()
402 {
403 return skipTests;
404 }
405
406 @Override
407 public void setSkipTests( boolean skipTests )
408 {
409 this.skipTests = skipTests;
410 }
411
412 @Override
413 public boolean isSkipExec()
414 {
415 return skipExec;
416 }
417
418 @Override
419 public void setSkipExec( boolean skipExec )
420 {
421 this.skipExec = skipExec;
422 }
423
424 @Override
425 public boolean isSkip()
426 {
427 return skip;
428 }
429
430 @Override
431 public void setSkip( boolean skip )
432 {
433 this.skip = skip;
434 }
435
436 @Override
437 public boolean isTestFailureIgnore()
438 {
439 return testFailureIgnore;
440 }
441
442 @Override
443 public void setTestFailureIgnore( boolean testFailureIgnore )
444 {
445 this.testFailureIgnore = testFailureIgnore;
446 }
447
448 @Override
449 public File getBasedir()
450 {
451 return basedir;
452 }
453
454 @Override
455 public void setBasedir( File basedir )
456 {
457 this.basedir = basedir;
458 }
459
460 @Override
461 public File getTestClassesDirectory()
462 {
463 return testClassesDirectory;
464 }
465
466 @Override
467 public void setTestClassesDirectory( File testClassesDirectory )
468 {
469 this.testClassesDirectory = testClassesDirectory;
470 }
471
472 @Override
473 public File getClassesDirectory()
474 {
475 return classesDirectory;
476 }
477
478 @Override
479 public void setClassesDirectory( File classesDirectory )
480 {
481 this.classesDirectory = classesDirectory;
482 }
483
484 @Override
485 public File getReportsDirectory()
486 {
487 return reportsDirectory;
488 }
489
490 @Override
491 public void setReportsDirectory( File reportsDirectory )
492 {
493 this.reportsDirectory = reportsDirectory;
494 }
495
496 @Override
497 public String getTest()
498 {
499 return test;
500 }
501
502 @Override
503 public boolean isUseSystemClassLoader()
504 {
505 return useSystemClassLoader;
506 }
507
508 @Override
509 public void setUseSystemClassLoader( boolean useSystemClassLoader )
510 {
511 this.useSystemClassLoader = useSystemClassLoader;
512 }
513
514 @Override
515 public boolean isUseManifestOnlyJar()
516 {
517 return useManifestOnlyJar;
518 }
519
520 @Override
521 public void setUseManifestOnlyJar( boolean useManifestOnlyJar )
522 {
523 this.useManifestOnlyJar = useManifestOnlyJar;
524 }
525
526 @Override
527 public String getEncoding()
528 {
529 return encoding;
530 }
531
532 @Override
533 public void setEncoding( String encoding )
534 {
535 this.encoding = encoding;
536 }
537
538 @Override
539 public Boolean getFailIfNoSpecifiedTests()
540 {
541 return failIfNoSpecifiedTests;
542 }
543
544 @Override
545 public void setFailIfNoSpecifiedTests( boolean failIfNoSpecifiedTests )
546 {
547 this.failIfNoSpecifiedTests = failIfNoSpecifiedTests;
548 }
549
550 @Override
551 public int getSkipAfterFailureCount()
552 {
553 return skipAfterFailureCount;
554 }
555
556 @Override
557 public String getShutdown()
558 {
559 return shutdown;
560 }
561
562 @Override
563 public boolean isPrintSummary()
564 {
565 return printSummary;
566 }
567
568 @Override
569 public void setPrintSummary( boolean printSummary )
570 {
571 this.printSummary = printSummary;
572 }
573
574 @Override
575 public String getReportFormat()
576 {
577 return reportFormat;
578 }
579
580 @Override
581 public void setReportFormat( String reportFormat )
582 {
583 this.reportFormat = reportFormat;
584 }
585
586 @Override
587 public boolean isUseFile()
588 {
589 return useFile;
590 }
591
592 @Override
593 public void setUseFile( boolean useFile )
594 {
595 this.useFile = useFile;
596 }
597
598 @Override
599 public String getDebugForkedProcess()
600 {
601 return debugForkedProcess;
602 }
603
604 @Override
605 public void setDebugForkedProcess( String debugForkedProcess )
606 {
607 this.debugForkedProcess = debugForkedProcess;
608 }
609
610 @Override
611 public int getForkedProcessTimeoutInSeconds()
612 {
613 return forkedProcessTimeoutInSeconds;
614 }
615
616 @Override
617 public void setForkedProcessTimeoutInSeconds( int forkedProcessTimeoutInSeconds )
618 {
619 this.forkedProcessTimeoutInSeconds = forkedProcessTimeoutInSeconds;
620 }
621
622 @Override
623 public int getForkedProcessExitTimeoutInSeconds()
624 {
625 return forkedProcessExitTimeoutInSeconds;
626 }
627
628 @Override
629 public void setForkedProcessExitTimeoutInSeconds( int forkedProcessExitTimeoutInSeconds )
630 {
631 this.forkedProcessExitTimeoutInSeconds = forkedProcessExitTimeoutInSeconds;
632 }
633
634 @Override
635 public double getParallelTestsTimeoutInSeconds()
636 {
637 return parallelTestsTimeoutInSeconds;
638 }
639
640 @Override
641 public void setParallelTestsTimeoutInSeconds( double parallelTestsTimeoutInSeconds )
642 {
643 this.parallelTestsTimeoutInSeconds = parallelTestsTimeoutInSeconds;
644 }
645
646 @Override
647 public double getParallelTestsTimeoutForcedInSeconds()
648 {
649 return parallelTestsTimeoutForcedInSeconds;
650 }
651
652 @Override
653 public void setParallelTestsTimeoutForcedInSeconds( double parallelTestsTimeoutForcedInSeconds )
654 {
655 this.parallelTestsTimeoutForcedInSeconds = parallelTestsTimeoutForcedInSeconds;
656 }
657
658 @Override
659 public void setTest( String test )
660 {
661 this.test = test;
662 }
663
664 @Override
665 public List<String> getIncludes()
666 {
667 return includes;
668 }
669
670 @Override
671 public void setIncludes( List<String> includes )
672 {
673 this.includes = includes;
674 }
675
676 @Override
677 public File[] getSuiteXmlFiles()
678 {
679 return suiteXmlFiles.clone();
680 }
681
682 @Override
683 @SuppressWarnings( "UnusedDeclaration" )
684 public void setSuiteXmlFiles( File[] suiteXmlFiles )
685 {
686 this.suiteXmlFiles = suiteXmlFiles.clone();
687 }
688
689 @Override
690 public String getRunOrder()
691 {
692 return runOrder;
693 }
694
695 @Override
696 @SuppressWarnings( "UnusedDeclaration" )
697 public void setRunOrder( String runOrder )
698 {
699 this.runOrder = runOrder;
700 }
701
702 @Override
703 public File getIncludesFile()
704 {
705 return includesFile;
706 }
707
708 @Override
709 public File getExcludesFile()
710 {
711 return excludesFile;
712 }
713
714 @Override
715 protected final List<File> suiteXmlFiles()
716 {
717 return hasSuiteXmlFiles() ? Arrays.asList( suiteXmlFiles ) : Collections.<File>emptyList();
718 }
719
720 @Override
721 protected final boolean hasSuiteXmlFiles()
722 {
723 return suiteXmlFiles != null && suiteXmlFiles.length != 0;
724 }
725 }