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.List;
24 import org.apache.maven.plugin.MojoExecutionException;
25 import org.apache.maven.plugin.MojoFailureException;
26 import org.apache.maven.plugins.annotations.LifecyclePhase;
27 import org.apache.maven.plugins.annotations.Mojo;
28 import org.apache.maven.plugins.annotations.Parameter;
29 import org.apache.maven.plugins.annotations.ResolutionScope;
30 import org.apache.maven.surefire.suite.RunResult;
31 import org.apache.maven.surefire.util.NestedCheckedException;
32 import org.apache.maven.surefire.util.internal.StringUtils;
33
34
35
36
37
38
39
40 @Mojo( name = "test", defaultPhase = LifecyclePhase.TEST, threadSafe = true,
41 requiresDependencyResolution = ResolutionScope.TEST )
42 public class SurefirePlugin
43 extends AbstractSurefireMojo
44 implements SurefireReportParameters
45 {
46
47
48
49
50
51 @Parameter( property = "maven.test.failure.ignore", defaultValue = "false" )
52 private boolean testFailureIgnore;
53
54
55
56
57 @Parameter( defaultValue = "${project.build.directory}/surefire-reports" )
58 private File reportsDirectory;
59
60
61
62
63
64
65
66
67
68
69
70
71 @Parameter( property = "test" )
72 private String test;
73
74
75
76
77 @Parameter( property = "surefire.printSummary", defaultValue = "true" )
78 private boolean printSummary;
79
80
81
82
83
84 @Parameter( property = "surefire.reportFormat", defaultValue = "brief" )
85 private String reportFormat;
86
87
88
89
90 @Parameter( property = "surefire.useFile", defaultValue = "true" )
91 private boolean useFile;
92
93
94
95
96
97
98
99
100 @Parameter( property = "surefire.failIfNoSpecifiedTests" )
101 private Boolean failIfNoSpecifiedTests;
102
103
104
105
106
107
108
109
110
111 @Parameter( property = "maven.surefire.debug" )
112 private String debugForkedProcess;
113
114
115
116
117
118
119
120 @Parameter( property = "surefire.timeout" )
121 private int forkedProcessTimeoutInSeconds;
122
123
124
125
126
127
128
129
130 @Parameter( property = "surefire.parallel.timeout" )
131 private int parallelTestsTimeoutInSeconds;
132
133
134
135
136
137
138
139
140
141 @Parameter( property = "surefire.parallel.forcedTimeout" )
142 private int parallelTestsTimeoutForcedInSeconds;
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159 @Parameter
160 private List<String> includes;
161
162
163
164
165
166
167
168
169 @Parameter( property = "surefire.useSystemClassLoader", defaultValue = "true" )
170 private boolean useSystemClassLoader;
171
172
173
174
175
176
177
178
179
180
181
182 @Parameter( property = "surefire.useManifestOnlyJar", defaultValue = "true" )
183 private boolean useManifestOnlyJar;
184
185 protected void handleSummary( RunResult summary, NestedCheckedException firstForkException )
186 throws MojoExecutionException, MojoFailureException
187 {
188 assertNoException( firstForkException );
189
190 SurefireHelper.reportExecution( this, summary, getLog() );
191 }
192
193 private void assertNoException( NestedCheckedException firstForkException )
194 throws MojoFailureException
195 {
196 if ( firstForkException != null )
197 {
198 throw new MojoFailureException( firstForkException.getMessage(), firstForkException );
199 }
200 }
201
202 private void assertNoFailureOrTimeout( NestedCheckedException summary )
203 throws MojoFailureException
204 {
205 if ( summary != null )
206 {
207 throw new MojoFailureException( "Failure or timeout" );
208 }
209 }
210
211 protected boolean isSkipExecution()
212 {
213 return isSkip() || isSkipTests() || isSkipExec();
214 }
215
216 protected String getPluginName()
217 {
218 return "surefire";
219 }
220
221 protected String[] getDefaultIncludes()
222 {
223 return new String[]{ "**/Test*.java", "**/*Test.java", "**/*TestCase.java" };
224 }
225
226
227
228 public boolean isSkipTests()
229 {
230 return skipTests;
231 }
232
233 public void setSkipTests( boolean skipTests )
234 {
235 this.skipTests = skipTests;
236 }
237
238
239
240
241 public boolean isSkipExec()
242 {
243 return skipExec;
244 }
245
246
247
248
249 public void setSkipExec( boolean skipExec )
250 {
251 this.skipExec = skipExec;
252 }
253
254 public boolean isSkip()
255 {
256 return skip;
257 }
258
259 public void setSkip( boolean skip )
260 {
261 this.skip = skip;
262 }
263
264 public boolean isTestFailureIgnore()
265 {
266 return testFailureIgnore;
267 }
268
269 public void setTestFailureIgnore( boolean testFailureIgnore )
270 {
271 this.testFailureIgnore = testFailureIgnore;
272 }
273
274 public File getBasedir()
275 {
276 return basedir;
277 }
278
279 public void setBasedir( File basedir )
280 {
281 this.basedir = basedir;
282 }
283
284 public File getTestClassesDirectory()
285 {
286 return testClassesDirectory;
287 }
288
289 public void setTestClassesDirectory( File testClassesDirectory )
290 {
291 this.testClassesDirectory = testClassesDirectory;
292 }
293
294 public File getClassesDirectory()
295 {
296 return classesDirectory;
297 }
298
299 public void setClassesDirectory( File classesDirectory )
300 {
301 this.classesDirectory = classesDirectory;
302 }
303
304 public File getReportsDirectory()
305 {
306 return reportsDirectory;
307 }
308
309 public void setReportsDirectory( File reportsDirectory )
310 {
311 this.reportsDirectory = reportsDirectory;
312 }
313
314 public String getTest()
315 {
316 if ( StringUtils.isBlank( test ) )
317 {
318 return null;
319 }
320 String[] testArray = StringUtils.split( test, "," );
321 StringBuilder tests = new StringBuilder();
322 for ( String aTestArray : testArray )
323 {
324 String singleTest = aTestArray;
325 int index = singleTest.indexOf( '#' );
326 if ( index >= 0 )
327 {
328 singleTest = singleTest.substring( 0, index );
329 }
330 tests.append( singleTest );
331 tests.append( "," );
332 }
333 return tests.toString();
334 }
335
336
337
338
339 public String getTestMethod()
340 {
341 if ( StringUtils.isBlank( test ) )
342 {
343 return null;
344 }
345
346 int index = this.test.indexOf( '#' );
347 int index2 = this.test.indexOf( "," );
348 if ( index >= 0 )
349 {
350 if ( index2 < 0 )
351 {
352 String testStrAfterFirstSharp = this.test.substring( index + 1, this.test.length() );
353 if ( !testStrAfterFirstSharp.contains( "+" ) )
354 {
355 return testStrAfterFirstSharp;
356 }
357 else
358 {
359 return this.test;
360 }
361 }
362 else
363 {
364 return this.test;
365 }
366 }
367 return null;
368 }
369
370 public boolean isUseSystemClassLoader()
371 {
372 return useSystemClassLoader;
373 }
374
375 public void setUseSystemClassLoader( boolean useSystemClassLoader )
376 {
377 this.useSystemClassLoader = useSystemClassLoader;
378 }
379
380 public boolean isUseManifestOnlyJar()
381 {
382 return useManifestOnlyJar;
383 }
384
385 public void setUseManifestOnlyJar( boolean useManifestOnlyJar )
386 {
387 this.useManifestOnlyJar = useManifestOnlyJar;
388 }
389
390 public Boolean getFailIfNoSpecifiedTests()
391 {
392 return failIfNoSpecifiedTests;
393 }
394
395 public void setFailIfNoSpecifiedTests( Boolean failIfNoSpecifiedTests )
396 {
397 this.failIfNoSpecifiedTests = failIfNoSpecifiedTests;
398 }
399
400 public boolean isPrintSummary()
401 {
402 return printSummary;
403 }
404
405 public void setPrintSummary( boolean printSummary )
406 {
407 this.printSummary = printSummary;
408 }
409
410 public String getReportFormat()
411 {
412 return reportFormat;
413 }
414
415 public void setReportFormat( String reportFormat )
416 {
417 this.reportFormat = reportFormat;
418 }
419
420 public boolean isUseFile()
421 {
422 return useFile;
423 }
424
425 public void setUseFile( boolean useFile )
426 {
427 this.useFile = useFile;
428 }
429
430 public String getDebugForkedProcess()
431 {
432 return debugForkedProcess;
433 }
434
435 public void setDebugForkedProcess( String debugForkedProcess )
436 {
437 this.debugForkedProcess = debugForkedProcess;
438 }
439
440 public int getForkedProcessTimeoutInSeconds()
441 {
442 return forkedProcessTimeoutInSeconds;
443 }
444
445 public void setForkedProcessTimeoutInSeconds( int forkedProcessTimeoutInSeconds )
446 {
447 this.forkedProcessTimeoutInSeconds = forkedProcessTimeoutInSeconds;
448 }
449
450 public int getParallelTestsTimeoutInSeconds() {
451 return parallelTestsTimeoutInSeconds;
452 }
453
454 public void setParallelTestsTimeoutInSeconds( int parallelTestsTimeoutInSeconds ) {
455 this.parallelTestsTimeoutInSeconds = parallelTestsTimeoutInSeconds;
456 }
457
458 public int getParallelTestsTimeoutForcedInSeconds() {
459 return parallelTestsTimeoutForcedInSeconds;
460 }
461
462 public void setParallelTestsTimeoutForcedInSeconds( int parallelTestsTimeoutForcedInSeconds ) {
463 this.parallelTestsTimeoutForcedInSeconds = parallelTestsTimeoutForcedInSeconds;
464 }
465
466 public void setTest( String test )
467 {
468 this.test = test;
469 }
470
471 @Override
472 public List<String> getIncludes()
473 {
474 return includes;
475 }
476
477 @Override
478 public void setIncludes( List<String> includes )
479 {
480 this.includes = includes;
481 }
482 }