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 @Parameter( property = "surefire.rerunFailingTestsCount", defaultValue = "0" )
246 private int rerunFailingTestsCount;
247
248
249
250
251
252
253
254
255
256
257 @Parameter( property = "surefire.suiteXmlFiles" )
258 private File[] suiteXmlFiles;
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284 @Parameter( property = "surefire.runOrder", defaultValue = "filesystem" )
285 private String runOrder;
286
287
288
289
290
291
292
293
294
295
296 @Parameter( property = "surefire.includesFile" )
297 private File includesFile;
298
299
300
301
302
303
304
305
306
307
308 @Parameter( property = "surefire.excludesFile" )
309 private File excludesFile;
310
311
312
313
314
315
316
317
318
319
320
321
322 @Parameter( property = "surefire.skipAfterFailureCount", defaultValue = "0" )
323 private int skipAfterFailureCount;
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341 @Parameter( property = "surefire.shutdown", defaultValue = "testset" )
342 private String shutdown;
343
344 @Override
345 protected int getRerunFailingTestsCount()
346 {
347 return rerunFailingTestsCount;
348 }
349
350 @Override
351 protected void handleSummary( RunResult summary, Exception firstForkException )
352 throws MojoExecutionException, MojoFailureException
353 {
354 reportExecution( this, summary, getConsoleLogger(), firstForkException );
355 }
356
357 @Override
358 protected boolean isSkipExecution()
359 {
360 return isSkip() || isSkipTests() || isSkipExec();
361 }
362
363 @Override
364 protected String getPluginName()
365 {
366 return "surefire";
367 }
368
369 @Override
370 protected String[] getDefaultIncludes()
371 {
372 return new String[]{ "**/Test*.java", "**/*Test.java", "**/*Tests.java", "**/*TestCase.java" };
373 }
374
375 @Override
376 protected String getReportSchemaLocation()
377 {
378 return "https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd";
379 }
380
381 @Override
382 protected Artifact getMojoArtifact()
383 {
384 final Map<String, Artifact> pluginArtifactMap = getPluginArtifactMap();
385 return pluginArtifactMap.get( "org.apache.maven.plugins:maven-surefire-plugin" );
386 }
387
388
389
390 @Override
391 public boolean isSkipTests()
392 {
393 return skipTests;
394 }
395
396 @Override
397 public void setSkipTests( boolean skipTests )
398 {
399 this.skipTests = skipTests;
400 }
401
402 @Override
403 public boolean isSkipExec()
404 {
405 return skipExec;
406 }
407
408 @Override
409 public void setSkipExec( boolean skipExec )
410 {
411 this.skipExec = skipExec;
412 }
413
414 @Override
415 public boolean isSkip()
416 {
417 return skip;
418 }
419
420 @Override
421 public void setSkip( boolean skip )
422 {
423 this.skip = skip;
424 }
425
426 @Override
427 public boolean isTestFailureIgnore()
428 {
429 return testFailureIgnore;
430 }
431
432 @Override
433 public void setTestFailureIgnore( boolean testFailureIgnore )
434 {
435 this.testFailureIgnore = testFailureIgnore;
436 }
437
438 @Override
439 public File getBasedir()
440 {
441 return basedir;
442 }
443
444 @Override
445 public void setBasedir( File basedir )
446 {
447 this.basedir = basedir;
448 }
449
450 @Override
451 public File getTestClassesDirectory()
452 {
453 return testClassesDirectory;
454 }
455
456 @Override
457 public void setTestClassesDirectory( File testClassesDirectory )
458 {
459 this.testClassesDirectory = testClassesDirectory;
460 }
461
462 @Override
463 public File getClassesDirectory()
464 {
465 return classesDirectory;
466 }
467
468 @Override
469 public void setClassesDirectory( File classesDirectory )
470 {
471 this.classesDirectory = classesDirectory;
472 }
473
474 @Override
475 public File getReportsDirectory()
476 {
477 return reportsDirectory;
478 }
479
480 @Override
481 public void setReportsDirectory( File reportsDirectory )
482 {
483 this.reportsDirectory = reportsDirectory;
484 }
485
486 @Override
487 public String getTest()
488 {
489 return test;
490 }
491
492 @Override
493 public boolean isUseSystemClassLoader()
494 {
495 return useSystemClassLoader;
496 }
497
498 @Override
499 public void setUseSystemClassLoader( boolean useSystemClassLoader )
500 {
501 this.useSystemClassLoader = useSystemClassLoader;
502 }
503
504 @Override
505 public boolean isUseManifestOnlyJar()
506 {
507 return useManifestOnlyJar;
508 }
509
510 @Override
511 public void setUseManifestOnlyJar( boolean useManifestOnlyJar )
512 {
513 this.useManifestOnlyJar = useManifestOnlyJar;
514 }
515
516 @Override
517 public Boolean getFailIfNoSpecifiedTests()
518 {
519 return failIfNoSpecifiedTests;
520 }
521
522 @Override
523 public void setFailIfNoSpecifiedTests( boolean failIfNoSpecifiedTests )
524 {
525 this.failIfNoSpecifiedTests = failIfNoSpecifiedTests;
526 }
527
528 @Override
529 public int getSkipAfterFailureCount()
530 {
531 return skipAfterFailureCount;
532 }
533
534 @Override
535 public String getShutdown()
536 {
537 return shutdown;
538 }
539
540 @Override
541 public boolean isPrintSummary()
542 {
543 return printSummary;
544 }
545
546 @Override
547 public void setPrintSummary( boolean printSummary )
548 {
549 this.printSummary = printSummary;
550 }
551
552 @Override
553 public String getReportFormat()
554 {
555 return reportFormat;
556 }
557
558 @Override
559 public void setReportFormat( String reportFormat )
560 {
561 this.reportFormat = reportFormat;
562 }
563
564 @Override
565 public boolean isUseFile()
566 {
567 return useFile;
568 }
569
570 @Override
571 public void setUseFile( boolean useFile )
572 {
573 this.useFile = useFile;
574 }
575
576 @Override
577 public String getDebugForkedProcess()
578 {
579 return debugForkedProcess;
580 }
581
582 @Override
583 public void setDebugForkedProcess( String debugForkedProcess )
584 {
585 this.debugForkedProcess = debugForkedProcess;
586 }
587
588 @Override
589 public int getForkedProcessTimeoutInSeconds()
590 {
591 return forkedProcessTimeoutInSeconds;
592 }
593
594 @Override
595 public void setForkedProcessTimeoutInSeconds( int forkedProcessTimeoutInSeconds )
596 {
597 this.forkedProcessTimeoutInSeconds = forkedProcessTimeoutInSeconds;
598 }
599
600 @Override
601 public int getForkedProcessExitTimeoutInSeconds()
602 {
603 return forkedProcessExitTimeoutInSeconds;
604 }
605
606 @Override
607 public void setForkedProcessExitTimeoutInSeconds( int forkedProcessExitTimeoutInSeconds )
608 {
609 this.forkedProcessExitTimeoutInSeconds = forkedProcessExitTimeoutInSeconds;
610 }
611
612 @Override
613 public double getParallelTestsTimeoutInSeconds()
614 {
615 return parallelTestsTimeoutInSeconds;
616 }
617
618 @Override
619 public void setParallelTestsTimeoutInSeconds( double parallelTestsTimeoutInSeconds )
620 {
621 this.parallelTestsTimeoutInSeconds = parallelTestsTimeoutInSeconds;
622 }
623
624 @Override
625 public double getParallelTestsTimeoutForcedInSeconds()
626 {
627 return parallelTestsTimeoutForcedInSeconds;
628 }
629
630 @Override
631 public void setParallelTestsTimeoutForcedInSeconds( double parallelTestsTimeoutForcedInSeconds )
632 {
633 this.parallelTestsTimeoutForcedInSeconds = parallelTestsTimeoutForcedInSeconds;
634 }
635
636 @Override
637 public void setTest( String test )
638 {
639 this.test = test;
640 }
641
642 @Override
643 public List<String> getIncludes()
644 {
645 return includes;
646 }
647
648 @Override
649 public void setIncludes( List<String> includes )
650 {
651 this.includes = includes;
652 }
653
654 @Override
655 public File[] getSuiteXmlFiles()
656 {
657 return suiteXmlFiles.clone();
658 }
659
660 @Override
661 @SuppressWarnings( "UnusedDeclaration" )
662 public void setSuiteXmlFiles( File[] suiteXmlFiles )
663 {
664 this.suiteXmlFiles = suiteXmlFiles.clone();
665 }
666
667 @Override
668 public String getRunOrder()
669 {
670 return runOrder;
671 }
672
673 @Override
674 @SuppressWarnings( "UnusedDeclaration" )
675 public void setRunOrder( String runOrder )
676 {
677 this.runOrder = runOrder;
678 }
679
680 @Override
681 public File getIncludesFile()
682 {
683 return includesFile;
684 }
685
686 @Override
687 public File getExcludesFile()
688 {
689 return excludesFile;
690 }
691
692 @Override
693 protected final List<File> suiteXmlFiles()
694 {
695 return hasSuiteXmlFiles() ? Arrays.asList( suiteXmlFiles ) : Collections.<File>emptyList();
696 }
697
698 @Override
699 protected final boolean hasSuiteXmlFiles()
700 {
701 return suiteXmlFiles != null && suiteXmlFiles.length != 0;
702 }
703 }