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