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