View Javadoc

1   package org.apache.maven.plugin.surefire;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *     http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.apache.maven.artifact.factory.ArtifactFactory;
23  import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
24  import org.apache.maven.artifact.repository.ArtifactRepository;
25  import org.apache.maven.artifact.resolver.ArtifactResolver;
26  import org.apache.maven.execution.MavenSession;
27  import org.apache.maven.plugin.MojoExecutionException;
28  import org.apache.maven.plugin.MojoFailureException;
29  import org.apache.maven.plugin.surefire.booterclient.ChecksumCalculator;
30  import org.apache.maven.plugin.surefire.booterclient.ForkConfiguration;
31  import org.apache.maven.plugin.surefire.booterclient.ForkStarter;
32  import org.apache.maven.project.MavenProject;
33  import org.apache.maven.surefire.booter.ClassLoaderConfiguration;
34  import org.apache.maven.surefire.booter.SurefireBooterForkException;
35  import org.apache.maven.surefire.booter.SurefireExecutionException;
36  import org.apache.maven.toolchain.ToolchainManager;
37  
38  import java.io.File;
39  import java.util.HashMap;
40  import java.util.Iterator;
41  import java.util.List;
42  import java.util.Map;
43  import java.util.Properties;
44  
45  /**
46   * Run tests using Surefire.
47   *
48   * @author Jason van Zyl
49   * @version $Id: SurefirePlugin.java 1062201 2011-01-22 17:02:29Z krosenvold $
50   * @requiresDependencyResolution test
51   * @goal test
52   * @phase test
53   * @threadSafe
54   * @noinspection JavaDoc
55   */
56  public class SurefirePlugin
57      extends AbstractSurefireMojo
58      implements SurefireExecutionParameters, SurefireReportParameters
59  {
60  
61      /**
62       * Set this to "true" to skip running tests, but still compile them. Its use is NOT RECOMMENDED, but quite
63       * convenient on occasion.
64       *
65       * @parameter default-value="false" expression="${skipTests}"
66       * @since 2.4
67       */
68      private boolean skipTests;
69  
70      /**
71       * This old parameter is just like <code>skipTests</code>, but bound to the old property "maven.test.skip.exec".
72       *
73       * @parameter expression="${maven.test.skip.exec}"
74       * @since 2.3
75       * @deprecated Use skipTests instead.
76       */
77      private boolean skipExec;
78  
79      /**
80       * Set this to "true" to bypass unit tests entirely. Its use is NOT RECOMMENDED, especially if you
81       * enable it using the "maven.test.skip" property, because maven.test.skip disables both running the
82       * tests and compiling the tests.  Consider using the <code>skipTests</code> parameter instead.
83       *
84       * @parameter default-value="false" expression="${maven.test.skip}"
85       */
86      private boolean skip;
87  
88      /**
89       * Set this to "true" to ignore a failure during testing. Its use is NOT RECOMMENDED, but quite convenient on
90       * occasion.
91       *
92       * @parameter default-value="false" expression="${maven.test.failure.ignore}"
93       */
94      private boolean testFailureIgnore;
95  
96      /**
97       * The base directory of the project being tested. This can be obtained in your unit test via
98       * System.getProperty("basedir").
99       *
100      * @parameter default-value="${basedir}"
101      */
102     private File basedir;
103 
104     /**
105      * The directory containing generated test classes of the project being tested.
106      * This will be included at the beginning of the test classpath.                                                                                                                            *
107      *
108      * @parameter default-value="${project.build.testOutputDirectory}"
109      */
110     private File testClassesDirectory;
111 
112     /**
113      * The directory containing generated classes of the project being tested.
114      * This will be included after the test classes in the test classpath.
115      *
116      * @parameter default-value="${project.build.outputDirectory}"
117      */
118     private File classesDirectory;
119 
120     /**
121      * The Maven Project Object.
122      *
123      * @parameter default-value="${project}"
124      * @readonly
125      */
126     private MavenProject project;
127 
128     /**
129      * List of dependencies to exclude from the test classpath.
130      * Each dependency string must follow the format <i>groupId:artifactId</i>.
131      * For example: <i>org.acme:project-a</i>
132      *
133      * @parameter
134      * @since 2.6
135      */
136     private List classpathDependencyExcludes;
137 
138     /**
139      * A dependency scope to exclude from the test classpath.
140      * The scope can be one of the following scopes:
141      * <p/>
142      * <ul><li><i>compile</i> - system, provided, compile
143      * <li><i>runtime</i> - compile, runtime
144      * <li><i>test</i> - system, provided, compile, runtime, test</ul>
145      *
146      * @parameter default-value=""
147      * @since 2.6
148      */
149     private String classpathDependencyScopeExclude;
150 
151     /**
152      * Additional elements to be appended to the classpath.
153      *
154      * @parameter
155      * @since 2.4
156      */
157     private List additionalClasspathElements;
158 
159     /**
160      * Base directory where all reports are written to.
161      *
162      * @parameter default-value="${project.build.directory}/surefire-reports"
163      */
164     private File reportsDirectory;
165 
166     /**
167      * The test source directory containing test class sources.
168      *
169      * @parameter default-value="${project.build.testSourceDirectory}"
170      * @required
171      * @since 2.2
172      */
173     private File testSourceDirectory;
174 
175     /**
176      * Specify this parameter to run individual tests by file name, overriding the <code>includes/excludes</code>
177      * parameters.  Each pattern you specify here will be used to create an
178      * include pattern formatted like <code>**&#47;${test}.java</code>, so you can just type "-Dtest=MyTest"
179      * to run a single test called "foo/MyTest.java".<br/>
180      * This parameter overrides the <code>includes/excludes</code> parameters, and the TestNG
181      * <code>suiteXmlFiles</code> parameter.
182      *
183      * @parameter expression="${test}"
184      */
185     private String test;
186 
187     /**
188      * A list of &lt;include> elements specifying the tests (by pattern) that should be included in testing. When not
189      * specified and when the <code>test</code> parameter is not specified, the default includes will be
190      * <code><br/>
191      * &lt;includes><br/>
192      * &nbsp;&lt;include>**&#47;Test*.java&lt;/include><br/>
193      * &nbsp;&lt;include>**&#47;*Test.java&lt;/include><br/>
194      * &nbsp;&lt;include>**&#47;*TestCase.java&lt;/include><br/>
195      * &lt;/includes><br/>
196      * </code>
197      * This parameter is ignored if the TestNG <code>suiteXmlFiles</code> parameter is specified.
198      *
199      * @parameter
200      */
201     private List includes;
202 
203     /**
204      * A list of &lt;exclude> elements specifying the tests (by pattern) that should be excluded in testing. When not
205      * specified and when the <code>test</code> parameter is not specified, the default excludes will be
206      * <code><br/>
207      * &lt;excludes><br/>
208      * &nbsp;&lt;exclude>**&#47;*$*&lt;/exclude><br/>
209      * &lt;/excludes><br/>
210      * </code>
211      * (which excludes all inner classes).<br>
212      * This parameter is ignored if the TestNG <code>suiteXmlFiles</code> parameter is specified.
213      *
214      * @parameter
215      */
216     private List excludes;
217 
218     /**
219      * ArtifactRepository of the localRepository. To obtain the directory of localRepository in unit tests use
220      * System.getProperty("localRepository").
221      *
222      * @parameter expression="${localRepository}"
223      * @required
224      * @readonly
225      */
226     private ArtifactRepository localRepository;
227 
228     /**
229      * List of System properties to pass to the JUnit tests.
230      *
231      * @parameter
232      * @deprecated Use systemPropertyVariables instead.
233      */
234     private Properties systemProperties;
235 
236     /**
237      * List of System properties to pass to the JUnit tests.
238      *
239      * @parameter
240      * @since 2.5
241      */
242     private Map systemPropertyVariables;
243 
244     /**
245      * List of properties for configuring all TestNG related configurations. This is the new
246      * preferred method of configuring TestNG.
247      *
248      * @parameter
249      * @since 2.4
250      */
251     private Properties properties;
252 
253     /**
254      * Map of plugin artifacts.
255      *
256      * @parameter expression="${plugin.artifactMap}"
257      * @required
258      * @readonly
259      */
260     private Map pluginArtifactMap;
261 
262     /**
263      * Map of project artifacts.
264      *
265      * @parameter expression="${project.artifactMap}"
266      * @required
267      * @readonly
268      */
269     private Map projectArtifactMap;
270 
271     /**
272      * Option to print summary of test suites or just print the test cases that have errors.
273      *
274      * @parameter expression="${surefire.printSummary}" default-value="true"
275      */
276     private boolean printSummary;
277 
278     /**
279      * Selects the formatting for the test report to be generated. Can be set as "brief" or "plain".
280      *
281      * @parameter expression="${surefire.reportFormat}" default-value="brief"
282      */
283     private String reportFormat;
284 
285     /**
286      * Option to generate a file test report or just output the test report to the console.
287      *
288      * @parameter expression="${surefire.useFile}" default-value="true"
289      */
290     private boolean useFile;
291 
292     /**
293      * When forking, set this to "true" to redirect the unit test standard output to a file (found in
294      * reportsDirectory/testName-output.txt).
295      *
296      * @parameter expression="${maven.test.redirectTestOutputToFile}" default-value="false"
297      * @since 2.3
298      */
299     private boolean redirectTestOutputToFile;
300 
301     /**
302      * Set this to "true" to cause a failure if there are no tests to run. Defaults to "false".
303      *
304      * @parameter expression="${failIfNoTests}"
305      * @since 2.4
306      */
307     private Boolean failIfNoTests;
308 
309     /**
310      * Option to specify the forking mode. Can be "never", "once" or "always". "none" and "pertest" are also accepted
311      * for backwards compatibility. "always" forks for each test-class.
312      *
313      * @parameter expression="${forkMode}" default-value="once"
314      * @since 2.1
315      */
316     private String forkMode;
317 
318     /**
319      * Option to specify the jvm (or path to the java executable) to use with the forking options. For the default, the
320      * jvm will be a new instance of the same VM as the one used to run Maven. JVM settings are not inherited from
321      * MAVEN_OPTS.
322      *
323      * @parameter expression="${jvm}"
324      * @since 2.1
325      */
326     private String jvm;
327 
328     /**
329      * Arbitrary JVM options to set on the command line.
330      *
331      * @parameter expression="${argLine}"
332      * @since 2.1
333      */
334     private String argLine;
335 
336     /**
337      * Attach a debugger to the forked JVM.  If set to "true", the process will suspend and
338      * wait for a debugger to attach on port 5005.  If set to some other string, that
339      * string will be appended to the argLine, allowing you to configure arbitrary
340      * debuggability options (without overwriting the other options specified through the <code>argLine</code>
341      * parameter).
342      *
343      * @parameter expression="${maven.surefire.debug}"
344      * @since 2.4
345      */
346     private String debugForkedProcess;
347 
348     /**
349      * Kill the forked test process after a certain number of seconds.  If set to 0,
350      * wait forever for the process, never timing out.
351      *
352      * @parameter expression="${surefire.timeout}"
353      * @since 2.4
354      */
355     private int forkedProcessTimeoutInSeconds;
356 
357     /**
358      * Additional environment variables to set on the command line.
359      *
360      * @parameter
361      * @since 2.1.3
362      */
363     private Map environmentVariables = new HashMap();
364 
365     /**
366      * Command line working directory.
367      *
368      * @parameter expression="${basedir}"
369      * @since 2.1.3
370      */
371     private File workingDirectory;
372 
373     /**
374      * When false it makes tests run using the standard classloader delegation instead of the default Maven isolated
375      * classloader. Only used when forking (forkMode is not "none").<br/> Setting it to false helps with some problems
376      * caused by conflicts between xml parsers in the classpath and the Java 5 provider parser.
377      *
378      * @parameter expression="${childDelegation}" default-value="false"
379      * @since 2.1
380      */
381     private boolean childDelegation;
382 
383     /**
384      * (TestNG only) Groups for this test. Only classes/methods/etc decorated with one of the groups specified here will be included
385      * in test run, if specified.<br/>
386      * This parameter is ignored if the <code>suiteXmlFiles</code> parameter is specified.
387      *
388      * @parameter expression="${groups}"
389      * @since 2.2
390      */
391     private String groups;
392 
393     /**
394      * (TestNG only) Excluded groups. Any methods/classes/etc with one of the groups specified in this list will specifically not be
395      * run.<br/>
396      * This parameter is ignored if the <code>suiteXmlFiles</code> parameter is specified.
397      *
398      * @parameter expression="${excludedGroups}"
399      * @since 2.2
400      */
401     private String excludedGroups;
402 
403     /**
404      * (TestNG only) List of &lt;suiteXmlFile> elements specifying TestNG suite xml file locations. Note that <code>suiteXmlFiles</code> is incompatible
405      * with several other parameters of this plugin, like <code>includes/excludes</code>.<br/>
406      * This parameter is ignored if the <code>test</code> parameter is specified (allowing you to run a single
407      * test instead of an entire suite).
408      *
409      * @parameter
410      * @since 2.2
411      */
412     private File[] suiteXmlFiles;
413 
414     /**
415      * Allows you to specify the name of the JUnit artifact. If not set, <code>junit:junit</code> will be used.
416      *
417      * @parameter expression="${junitArtifactName}" default-value="junit:junit"
418      * @since 2.3.1
419      */
420     private String junitArtifactName;
421 
422     /**
423      * Allows you to specify the name of the TestNG artifact. If not set, <code>org.testng:testng</code> will be used.
424      *
425      * @parameter expression="${testNGArtifactName}" default-value="org.testng:testng"
426      * @since 2.3.1
427      */
428     private String testNGArtifactName;
429 
430     /**
431      * (TestNG/JUnit 4.7 provider only) The attribute thread-count allows you to specify how many threads should be allocated for this execution. Only
432      * makes sense to use in conjunction with the <code>parallel</code> parameter.
433      *
434      * @parameter expression="${threadCount}"
435      * @since 2.2
436      */
437     private int threadCount;
438 
439     /**
440      * (JUnit 4.7 provider) Indicates that threadCount is per cpu core.
441      *
442      * @parameter expression="${perCoreThreadCount}" default-value="true"
443      * @since 2.5
444      */
445     private boolean perCoreThreadCount;
446 
447     /**
448      * (JUnit 4.7 provider) Indicates that the thread pool will be unlimited. The <code>parallel</code> parameter and the actual number of classes/methods
449      * will decide. Setting this to "true" effectively disables <code>perCoreThreadCount</code> and <code>threadCount</code>. Defaults to "false".
450      *
451      * @parameter expression="${useUnlimitedThreads}" default-value="false"
452      * @since 2.5
453      */
454     private boolean useUnlimitedThreads;
455 
456     /**
457      * (TestNG only) When you use the <code>parallel</code> attribute, TestNG will try to run all your test methods in separate threads, except for
458      * methods that depend on each other, which will be run in the same thread in order to respect their order of
459      * execution.
460      * <p/>
461      * (JUnit 4.7 provider) Supports values "classes"/"methods"/"both" to run in separate threads, as controlled by <code>threadCount</code>.
462      *
463      * @parameter expression="${parallel}"
464      * @since 2.2
465      */
466     private String parallel;
467 
468     /**
469      * Whether to trim the stack trace in the reports to just the lines within the test, or show the full trace.
470      *
471      * @parameter expression="${trimStackTrace}" default-value="true"
472      * @since 2.2
473      */
474     private boolean trimStackTrace;
475 
476     /**
477      * Resolves the artifacts needed.
478      *
479      * @component
480      */
481     private ArtifactResolver artifactResolver;
482 
483     /**
484      * Creates the artifact.
485      *
486      * @component
487      */
488     private ArtifactFactory artifactFactory;
489 
490     /**
491      * The remote plugin repositories declared in the POM.
492      *
493      * @parameter expression="${project.pluginArtifactRepositories}"
494      * @since 2.2
495      */
496     private List remoteRepositories;
497 
498     /**
499      * For retrieval of artifact's metadata.
500      *
501      * @component
502      */
503     private ArtifactMetadataSource metadataSource;
504 
505     private Properties originalSystemProperties;
506 
507     /**
508      * systemPropertyVariables + systemProperties
509      */
510     private Properties internalSystemProperties = new Properties();
511 
512     /**
513      * Flag to disable the generation of report files in xml format.
514      *
515      * @parameter expression="${disableXmlReport}" default-value="false"
516      * @since 2.2
517      */
518     private boolean disableXmlReport;
519 
520     /**
521      * Option to pass dependencies to the system's classloader instead of using an isolated class loader when forking.
522      * Prevents problems with JDKs which implement the service provider lookup mechanism by using the system's
523      * classloader.
524      *
525      * @parameter expression="${surefire.useSystemClassLoader}" default-value="true"
526      * @since 2.3
527      */
528     private boolean useSystemClassLoader;
529 
530     /**
531      * By default, Surefire forks your tests using a manifest-only JAR; set this parameter
532      * to "false" to force it to launch your tests with a plain old Java classpath.
533      * (See http://maven.apache.org/plugins/maven-surefire-plugin/examples/class-loading.html
534      * for a more detailed explanation of manifest-only JARs and their benefits.)
535      * <p/>
536      * Beware, setting this to "false" may cause your tests to
537      * fail on Windows if your classpath is too long.
538      *
539      * @parameter expression="${surefire.useManifestOnlyJar}" default-value="true"
540      * @since 2.4.3
541      */
542     private boolean useManifestOnlyJar;
543 
544     /**
545      * By default, Surefire enables JVM assertions for the execution of your test cases. To disable the assertions, set
546      * this flag to "false".
547      *
548      * @parameter expression="${enableAssertions}" default-value="true"
549      * @since 2.3.1
550      */
551     private boolean enableAssertions;
552 
553     /**
554      * The current build session instance.
555      *
556      * @parameter expression="${session}"
557      * @required
558      * @readonly
559      */
560     private MavenSession session;
561 
562     /**
563      * (TestNG only) Define the factory class used to create all test instances.
564      *
565      * @parameter expression="${objectFactory}"
566      * @since 2.5
567      */
568     private String objectFactory;
569 
570 
571     /**
572      * @parameter default-value="${session.parallel}"
573      * @readonly
574      * @noinspection UnusedDeclaration
575      */
576     private Boolean parallelMavenExecution;
577 
578     /**
579      * Defines the order the tests will be run in. Supported values are "alphabetical", "reversealphabetical",
580      * "random", "hourly" (alphabetical on even hours, reverse alphabetical on odd hours) and "filesystem".<p/>
581      * <p/>
582      * Odd/Even for hourly is determined at the time the of scanning the classpath, meaning it could change during
583      * a multi-module build.
584      *
585      * @parameter default-value="filesystem"
586      * @since 2.7
587      */
588     private String runOrder;
589 
590     /**
591      * @component
592      */
593     private ToolchainManager toolchainManager;
594 
595     public void execute()
596         throws MojoExecutionException, MojoFailureException
597     {
598         if ( verifyParameters() )
599         {
600             if ( hasExecutedBefore() )
601             {
602                 return;
603             }
604             logReportsDirectory();
605 
606             final List providers = initialize();
607             Exception exception = null;
608             ForkConfiguration forkConfiguration = null;
609             int result = 0;
610             for ( Iterator iter = providers.iterator(); iter.hasNext(); )
611             {
612                 ProviderInfo provider = (ProviderInfo) iter.next();
613                 forkConfiguration = getForkConfiguration();
614                 ClassLoaderConfiguration classLoaderConfiguration = getClassLoaderConfiguration( forkConfiguration );
615                 ForkStarter forkStarter = createForkStarter( provider, forkConfiguration, classLoaderConfiguration );
616 
617                 try
618                 {
619                     result = forkStarter.run();
620                 }
621                 catch ( SurefireBooterForkException e )
622                 {
623                     exception = e;
624                 }
625                 catch ( SurefireExecutionException e )
626                 {
627                     exception = e;
628                 }
629             }
630 
631             if ( exception != null )
632             {
633                 throw new MojoExecutionException( exception.getMessage(), exception );
634             }
635 
636             if ( getOriginalSystemProperties() != null && forkConfiguration != null && !forkConfiguration.isForking() )
637             {
638                 // restore system properties, only makes sense when not forking..
639                 System.setProperties( getOriginalSystemProperties() );
640             }
641 
642             SurefireHelper.reportExecution( this, result, getLog() );
643         }
644     }
645 
646     protected boolean verifyParameters()
647         throws MojoFailureException
648     {
649         if ( isSkip() || isSkipTests() || isSkipExec() )
650         {
651             getLog().info( "Tests are skipped." );
652             return false;
653         }
654 
655         if ( !getTestClassesDirectory().exists() )
656         {
657             if ( getFailIfNoTests() != null && getFailIfNoTests().booleanValue() )
658             {
659                 throw new MojoFailureException( "No tests to run!" );
660             }
661             getLog().info( "No tests to run." );
662             return true;
663         }
664 
665         ensureWorkingDirectoryExists();
666 
667         ensureParallelRunningCompatibility();
668 
669         warnIfUselessUseSystemClassLoaderParameter();
670 
671         return true;
672     }
673 
674     protected String getPluginName()
675     {
676         return "surefire";
677     }
678 
679     protected String[] getDefaultIncludes()
680     {
681         return new String[]{ "**/Test*.java", "**/*Test.java", "**/*TestCase.java" };
682     }
683 
684     // now for the implementation of the field accessors
685 
686     public boolean isSkipTests()
687     {
688         return skipTests;
689     }
690 
691 
692     public void setSkipTests( boolean skipTests )
693     {
694         this.skipTests = skipTests;
695     }
696 
697     /**
698      * @noinspection deprecation
699      */
700     public boolean isSkipExec()
701     {
702         return skipExec;
703     }
704 
705     /**
706      * @noinspection deprecation
707      */
708     public void setSkipExec( boolean skipExec )
709     {
710         this.skipExec = skipExec;
711     }
712 
713     public boolean isSkip()
714     {
715         return skip;
716     }
717 
718     public void setSkip( boolean skip )
719     {
720         this.skip = skip;
721     }
722 
723     public boolean isTestFailureIgnore()
724     {
725         return testFailureIgnore;
726     }
727 
728     public void setTestFailureIgnore( boolean testFailureIgnore )
729     {
730         this.testFailureIgnore = testFailureIgnore;
731     }
732 
733     public File getBasedir()
734     {
735         return basedir;
736     }
737 
738     public void setBasedir( File basedir )
739     {
740         this.basedir = basedir;
741     }
742 
743     public File getTestClassesDirectory()
744     {
745         return testClassesDirectory;
746     }
747 
748     public void setTestClassesDirectory( File testClassesDirectory )
749     {
750         this.testClassesDirectory = testClassesDirectory;
751     }
752 
753     public File getClassesDirectory()
754     {
755         return classesDirectory;
756     }
757 
758     public void setClassesDirectory( File classesDirectory )
759     {
760         this.classesDirectory = classesDirectory;
761     }
762 
763     public MavenProject getProject()
764     {
765         return project;
766     }
767 
768     public void setProject( MavenProject project )
769     {
770         this.project = project;
771     }
772 
773     public List getClasspathDependencyExcludes()
774     {
775         return classpathDependencyExcludes;
776     }
777 
778     public void setClasspathDependencyExcludes( List classpathDependencyExcludes )
779     {
780         this.classpathDependencyExcludes = classpathDependencyExcludes;
781     }
782 
783     public String getClasspathDependencyScopeExclude()
784     {
785         return classpathDependencyScopeExclude;
786     }
787 
788     public void setClasspathDependencyScopeExclude( String classpathDependencyScopeExclude )
789     {
790         this.classpathDependencyScopeExclude = classpathDependencyScopeExclude;
791     }
792 
793     public List getAdditionalClasspathElements()
794     {
795         return additionalClasspathElements;
796     }
797 
798     public void setAdditionalClasspathElements( List additionalClasspathElements )
799     {
800         this.additionalClasspathElements = additionalClasspathElements;
801     }
802 
803     public File getReportsDirectory()
804     {
805         return reportsDirectory;
806     }
807 
808     public void setReportsDirectory( File reportsDirectory )
809     {
810         this.reportsDirectory = reportsDirectory;
811     }
812 
813     public File getTestSourceDirectory()
814     {
815         return testSourceDirectory;
816     }
817 
818     public void setTestSourceDirectory( File testSourceDirectory )
819     {
820         this.testSourceDirectory = testSourceDirectory;
821     }
822 
823     public String getTest()
824     {
825         return test;
826     }
827 
828     public void setTest( String test )
829     {
830         this.test = test;
831     }
832 
833     public List getIncludes()
834     {
835         return includes;
836     }
837 
838     public void setIncludes( List includes )
839     {
840         this.includes = includes;
841     }
842 
843     public List getExcludes()
844     {
845         return excludes;
846     }
847 
848     public void setExcludes( List excludes )
849     {
850         this.excludes = excludes;
851     }
852 
853     public ArtifactRepository getLocalRepository()
854     {
855         return localRepository;
856     }
857 
858     public void setLocalRepository( ArtifactRepository localRepository )
859     {
860         this.localRepository = localRepository;
861     }
862 
863     /**
864      * @noinspection deprecation
865      */
866     public Properties getSystemProperties()
867     {
868         return systemProperties;
869     }
870 
871     /**
872      * @noinspection deprecation
873      */
874     public void setSystemProperties( Properties systemProperties )
875     {
876         this.systemProperties = systemProperties;
877     }
878 
879     public Map getSystemPropertyVariables()
880     {
881         return systemPropertyVariables;
882     }
883 
884     public void setSystemPropertyVariables( Map systemPropertyVariables )
885     {
886         this.systemPropertyVariables = systemPropertyVariables;
887     }
888 
889     public Properties getProperties()
890     {
891         return properties;
892     }
893 
894     public void setProperties( Properties properties )
895     {
896         this.properties = properties;
897     }
898 
899     public Map getPluginArtifactMap()
900     {
901         return pluginArtifactMap;
902     }
903 
904     public void setPluginArtifactMap( Map pluginArtifactMap )
905     {
906         this.pluginArtifactMap = pluginArtifactMap;
907     }
908 
909     public Map getProjectArtifactMap()
910     {
911         return projectArtifactMap;
912     }
913 
914     public void setProjectArtifactMap( Map projectArtifactMap )
915     {
916         this.projectArtifactMap = projectArtifactMap;
917     }
918 
919     public boolean isPrintSummary()
920     {
921         return printSummary;
922     }
923 
924     public void setPrintSummary( boolean printSummary )
925     {
926         this.printSummary = printSummary;
927     }
928 
929     public String getReportFormat()
930     {
931         return reportFormat;
932     }
933 
934     public void setReportFormat( String reportFormat )
935     {
936         this.reportFormat = reportFormat;
937     }
938 
939     public boolean isUseFile()
940     {
941         return useFile;
942     }
943 
944     public void setUseFile( boolean useFile )
945     {
946         this.useFile = useFile;
947     }
948 
949     public boolean isRedirectTestOutputToFile()
950     {
951         return redirectTestOutputToFile;
952     }
953 
954     public void setRedirectTestOutputToFile( boolean redirectTestOutputToFile )
955     {
956         this.redirectTestOutputToFile = redirectTestOutputToFile;
957     }
958 
959     public Boolean getFailIfNoTests()
960     {
961         return failIfNoTests;
962     }
963 
964     public void setFailIfNoTests( Boolean failIfNoTests )
965     {
966         this.failIfNoTests = failIfNoTests;
967     }
968 
969     public String getForkMode()
970     {
971         return forkMode;
972     }
973 
974     public void setForkMode( String forkMode )
975     {
976         this.forkMode = forkMode;
977     }
978 
979     public String getJvm()
980     {
981         return jvm;
982     }
983 
984     public void setJvm( String jvm )
985     {
986         this.jvm = jvm;
987     }
988 
989     public String getArgLine()
990     {
991         return argLine;
992     }
993 
994     public void setArgLine( String argLine )
995     {
996         this.argLine = argLine;
997     }
998 
999     public String getDebugForkedProcess()
1000     {
1001         return debugForkedProcess;
1002     }
1003 
1004     public void setDebugForkedProcess( String debugForkedProcess )
1005     {
1006         this.debugForkedProcess = debugForkedProcess;
1007     }
1008 
1009     public int getForkedProcessTimeoutInSeconds()
1010     {
1011         return forkedProcessTimeoutInSeconds;
1012     }
1013 
1014     public void setForkedProcessTimeoutInSeconds( int forkedProcessTimeoutInSeconds )
1015     {
1016         this.forkedProcessTimeoutInSeconds = forkedProcessTimeoutInSeconds;
1017     }
1018 
1019     public Map getEnvironmentVariables()
1020     {
1021         return environmentVariables;
1022     }
1023 
1024     public void setEnvironmentVariables( Map environmentVariables )
1025     {
1026         this.environmentVariables = environmentVariables;
1027     }
1028 
1029     public File getWorkingDirectory()
1030     {
1031         return workingDirectory;
1032     }
1033 
1034     public void setWorkingDirectory( File workingDirectory )
1035     {
1036         this.workingDirectory = workingDirectory;
1037     }
1038 
1039     public boolean isChildDelegation()
1040     {
1041         return childDelegation;
1042     }
1043 
1044     public void setChildDelegation( boolean childDelegation )
1045     {
1046         this.childDelegation = childDelegation;
1047     }
1048 
1049     public String getGroups()
1050     {
1051         return groups;
1052     }
1053 
1054     public void setGroups( String groups )
1055     {
1056         this.groups = groups;
1057     }
1058 
1059     public String getExcludedGroups()
1060     {
1061         return excludedGroups;
1062     }
1063 
1064     public void setExcludedGroups( String excludedGroups )
1065     {
1066         this.excludedGroups = excludedGroups;
1067     }
1068 
1069     public File[] getSuiteXmlFiles()
1070     {
1071         return suiteXmlFiles;
1072     }
1073 
1074     public void setSuiteXmlFiles( File[] suiteXmlFiles )
1075     {
1076         this.suiteXmlFiles = suiteXmlFiles;
1077     }
1078 
1079     public String getJunitArtifactName()
1080     {
1081         return junitArtifactName;
1082     }
1083 
1084     public void setJunitArtifactName( String junitArtifactName )
1085     {
1086         this.junitArtifactName = junitArtifactName;
1087     }
1088 
1089     public String getTestNGArtifactName()
1090     {
1091         return testNGArtifactName;
1092     }
1093 
1094     public void setTestNGArtifactName( String testNGArtifactName )
1095     {
1096         this.testNGArtifactName = testNGArtifactName;
1097     }
1098 
1099     public int getThreadCount()
1100     {
1101         return threadCount;
1102     }
1103 
1104     public void setThreadCount( int threadCount )
1105     {
1106         this.threadCount = threadCount;
1107     }
1108 
1109     public boolean getPerCoreThreadCount()
1110     {
1111         return perCoreThreadCount;
1112     }
1113 
1114     public void setPerCoreThreadCount( boolean perCoreThreadCount )
1115     {
1116         this.perCoreThreadCount = perCoreThreadCount;
1117     }
1118 
1119     public boolean getUseUnlimitedThreads()
1120     {
1121         return useUnlimitedThreads;
1122     }
1123 
1124     public void setUseUnlimitedThreads( boolean useUnlimitedThreads )
1125     {
1126         this.useUnlimitedThreads = useUnlimitedThreads;
1127     }
1128 
1129     public String getParallel()
1130     {
1131         return parallel;
1132     }
1133 
1134     public void setParallel( String parallel )
1135     {
1136         this.parallel = parallel;
1137     }
1138 
1139     public boolean isTrimStackTrace()
1140     {
1141         return trimStackTrace;
1142     }
1143 
1144     public void setTrimStackTrace( boolean trimStackTrace )
1145     {
1146         this.trimStackTrace = trimStackTrace;
1147     }
1148 
1149     public ArtifactResolver getArtifactResolver()
1150     {
1151         return artifactResolver;
1152     }
1153 
1154     public void setArtifactResolver( ArtifactResolver artifactResolver )
1155     {
1156         this.artifactResolver = artifactResolver;
1157     }
1158 
1159     public ArtifactFactory getArtifactFactory()
1160     {
1161         return artifactFactory;
1162     }
1163 
1164     public void setArtifactFactory( ArtifactFactory artifactFactory )
1165     {
1166         this.artifactFactory = artifactFactory;
1167     }
1168 
1169     public List getRemoteRepositories()
1170     {
1171         return remoteRepositories;
1172     }
1173 
1174     public void setRemoteRepositories( List remoteRepositories )
1175     {
1176         this.remoteRepositories = remoteRepositories;
1177     }
1178 
1179     public ArtifactMetadataSource getMetadataSource()
1180     {
1181         return metadataSource;
1182     }
1183 
1184     public void setMetadataSource( ArtifactMetadataSource metadataSource )
1185     {
1186         this.metadataSource = metadataSource;
1187     }
1188 
1189     public Properties getOriginalSystemProperties()
1190     {
1191         return originalSystemProperties;
1192     }
1193 
1194     public void setOriginalSystemProperties( Properties originalSystemProperties )
1195     {
1196         this.originalSystemProperties = originalSystemProperties;
1197     }
1198 
1199     public Properties getInternalSystemProperties()
1200     {
1201         return internalSystemProperties;
1202     }
1203 
1204     public void setInternalSystemProperties( Properties internalSystemProperties )
1205     {
1206         this.internalSystemProperties = internalSystemProperties;
1207     }
1208 
1209     public boolean isDisableXmlReport()
1210     {
1211         return disableXmlReport;
1212     }
1213 
1214     public void setDisableXmlReport( boolean disableXmlReport )
1215     {
1216         this.disableXmlReport = disableXmlReport;
1217     }
1218 
1219     public boolean isUseSystemClassLoader()
1220     {
1221         return useSystemClassLoader;
1222     }
1223 
1224     public void setUseSystemClassLoader( boolean useSystemClassLoader )
1225     {
1226         this.useSystemClassLoader = useSystemClassLoader;
1227     }
1228 
1229     public boolean isUseManifestOnlyJar()
1230     {
1231         return useManifestOnlyJar;
1232     }
1233 
1234     public void setUseManifestOnlyJar( boolean useManifestOnlyJar )
1235     {
1236         this.useManifestOnlyJar = useManifestOnlyJar;
1237     }
1238 
1239     public boolean isEnableAssertions()
1240     {
1241         return enableAssertions;
1242     }
1243 
1244     public void setEnableAssertions( boolean enableAssertions )
1245     {
1246         this.enableAssertions = enableAssertions;
1247     }
1248 
1249     public MavenSession getSession()
1250     {
1251         return session;
1252     }
1253 
1254     public void setSession( MavenSession session )
1255     {
1256         this.session = session;
1257     }
1258 
1259     public String getObjectFactory()
1260     {
1261         return objectFactory;
1262     }
1263 
1264     public void setObjectFactory( String objectFactory )
1265     {
1266         this.objectFactory = objectFactory;
1267     }
1268 
1269     public ToolchainManager getToolchainManager()
1270     {
1271         return toolchainManager;
1272     }
1273 
1274     public void setToolchainManager( ToolchainManager toolchainManager )
1275     {
1276         this.toolchainManager = toolchainManager;
1277     }
1278 
1279     public boolean isMavenParallel()
1280     {
1281         return parallelMavenExecution != null && parallelMavenExecution.booleanValue();
1282     }
1283 
1284     public String getRunOrder()
1285     {
1286         return runOrder;
1287     }
1288 
1289     public void setRunOrder( String runOrder )
1290     {
1291         this.runOrder = runOrder;
1292     }
1293 
1294     protected void addPluginSpecificChecksumItems( ChecksumCalculator checksum )
1295     {
1296     }
1297 }