You are viewing a plain text version of this content. The canonical link for it is here.
Posted to surefire-commits@maven.apache.org by br...@apache.org on 2007/07/17 10:57:48 UTC
svn commit: r556854 - in /maven/surefire/trunk:
maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java
surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireBooter.java
Author: brett
Date: Tue Jul 17 01:57:45 2007
New Revision: 556854
URL: http://svn.apache.org/viewvc?view=rev&rev=556854
Log:
[SUREFIRE-338] ability to disable assertions
merged from 556850:556853 on surefire-2.3.x
Modified:
maven/surefire/trunk/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java
maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireBooter.java
Modified: maven/surefire/trunk/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java?view=diff&rev=556854&r1=556853&r2=556854
==============================================================================
--- maven/surefire/trunk/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java (original)
+++ maven/surefire/trunk/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java Tue Jul 17 01:57:45 2007
@@ -59,7 +59,7 @@
/**
* Run tests using Surefire.
- *
+ *
* @author Jason van Zyl
* @version $Id$
* @requiresDependencyResolution test
@@ -71,28 +71,31 @@
{
/**
* Set this to 'true' to bypass unit tests entirely. Its use is NOT RECOMMENDED, but quite convenient on occasion.
- *
+ *
* @parameter expression="${maven.test.skip}"
*/
private boolean skip;
/**
- * Set this to 'true' to bypass unit tests execution, but still compile them. Its use is NOT RECOMMENDED, but quite convenient on occasion.
- *
+ * Set this to 'true' to bypass unit tests execution, but still compile them. Its use is NOT RECOMMENDED, but quite
+ * convenient on occasion.
+ *
* @parameter expression="${maven.test.skip.exec}"
*/
private boolean skipExec;
/**
- * Set this to true to ignore a failure during testing. Its use is NOT RECOMMENDED, but quite convenient on occasion.
- *
+ * Set this to true to ignore a failure during testing. Its use is NOT RECOMMENDED, but quite convenient on
+ * occasion.
+ *
* @parameter expression="${maven.test.failure.ignore}"
*/
private boolean testFailureIgnore;
/**
- * The base directory of the project being tested. This can be obtained in your unit test by System.getProperty("basedir").
- *
+ * The base directory of the project being tested. This can be obtained in your unit test by
+ * System.getProperty("basedir").
+ *
* @parameter expression="${basedir}"
* @required
*/
@@ -100,7 +103,7 @@
/**
* The directory containing generated test classes of the project being tested.
- *
+ *
* @parameter expression="${project.build.testOutputDirectory}"
* @required
*/
@@ -108,7 +111,7 @@
/**
* The classpath elements of the project being tested.
- *
+ *
* @parameter expression="${project.testClasspathElements}"
* @required
* @readonly
@@ -117,49 +120,51 @@
/**
* Base directory where all reports are written to.
- *
+ *
* @parameter expression="${project.build.directory}/surefire-reports"
*/
private File reportsDirectory;
/**
* The test source directory containing test class sources.
- *
+ *
* @parameter expression="${project.build.testSourceDirectory}"
* @required
*/
private File testSourceDirectory;
/**
- * Specify this parameter(can be a comma separated list) if you want to use the test pattern matching notation, Ant pattern matching, to select tests to run.
- * The Ant pattern will be used to create an include pattern formatted like <code>**/${test}.java</code>
- * When used, the <code>includes</code> and <code>excludes</code> patterns parameters are ignored.
- *
+ * Specify this parameter(can be a comma separated list) if you want to use the test pattern matching notation, Ant
+ * pattern matching, to select tests to run. The Ant pattern will be used to create an include pattern formatted
+ * like <code>**/${test}.java</code> When used, the <code>includes</code> and <code>excludes</code>
+ * patterns parameters are ignored.
+ *
* @parameter expression="${test}"
*/
private String test;
/**
- * List of patterns (separated by commas) used to specify the tests that should be included in testing.
- * When not specified and when the <code>test</code> parameter is not specified, the default includes will be
+ * List of patterns (separated by commas) used to specify the tests that should be included in testing. When not
+ * specified and when the <code>test</code> parameter is not specified, the default includes will be
* <code>**/Test*.java **/*Test.java **/*TestCase.java</code>
- *
+ *
* @parameter
*/
private List includes;
/**
- * List of patterns (separated by commas) used to specify the tests that should be excluded in testing.
- * When not specified and when the <code>test</code> parameter is not specified, the default excludes will be
+ * List of patterns (separated by commas) used to specify the tests that should be excluded in testing. When not
+ * specified and when the <code>test</code> parameter is not specified, the default excludes will be
* <code>**/Abstract*Test.java **/Abstract*TestCase.java **/*$*</code>
- *
+ *
* @parameter
*/
private List excludes;
/**
- * ArtifactRepository of the localRepository. To obtain the directory of localRepository in unit tests use System.setProperty( "localRepository").
- *
+ * ArtifactRepository of the localRepository. To obtain the directory of localRepository in unit tests use
+ * System.setProperty( "localRepository").
+ *
* @parameter expression="${localRepository}"
* @required
* @readonly
@@ -168,7 +173,7 @@
/**
* List of System properties to pass to the JUnit tests.
- *
+ *
* @parameter
*/
private Properties systemProperties;
@@ -183,7 +188,7 @@
/**
* Map of of plugin artifacts.
- *
+ *
* @parameter expression="${plugin.artifactMap}"
* @required
* @readonly
@@ -192,7 +197,7 @@
/**
* Map of of project artifacts.
- *
+ *
* @parameter expression="${project.artifactMap}"
* @required
* @readonly
@@ -201,161 +206,152 @@
/**
* Option to print summary of test suites or just print the test cases that has errors.
- *
- * @parameter expression="${surefire.printSummary}"
- * default-value="true"
+ *
+ * @parameter expression="${surefire.printSummary}" default-value="true"
*/
private boolean printSummary;
/**
- * Selects the formatting for the test report to be generated. Can be set as brief or plain.
- *
- * @parameter expression="${surefire.reportFormat}"
- * default-value="brief"
+ * Selects the formatting for the test report to be generated. Can be set as brief or plain.
+ *
+ * @parameter expression="${surefire.reportFormat}" default-value="brief"
*/
private String reportFormat;
/**
* Option to generate a file test report or just output the test report to the console.
- *
- * @parameter expression="${surefire.useFile}"
- * default-value="true"
+ *
+ * @parameter expression="${surefire.useFile}" default-value="true"
*/
private boolean useFile;
/**
- * When forking, set this to true to redirect the unit test standard output to a file
- * (found in reportsDirectory/testName-output.txt).
- *
+ * When forking, set this to true to redirect the unit test standard output to a file (found in
+ * reportsDirectory/testName-output.txt).
+ *
* @parameter expression="${maven.test.redirectTestOutputToFile}" default-value="false"
*/
private boolean redirectTestOutputToFile;
/**
- * Option to specify the forking mode. Can be "never", "once" or "always".
- * "none" and "pertest" are also accepted for backwards compatibility.
- *
+ * Option to specify the forking mode. Can be "never", "once" or "always". "none" and "pertest" are also accepted
+ * for backwards compatibility.
+ *
* @parameter expression="${forkMode}" default-value="once"
*/
private String forkMode;
/**
- * Option to specify the jvm (or path to the java executable) to use with
- * the forking options. For the default, the jvm will be the same as the one
- * used to run Maven.
- *
+ * Option to specify the jvm (or path to the java executable) to use with the forking options. For the default, the
+ * jvm will be the same as the one used to run Maven.
+ *
* @parameter expression="${jvm}"
*/
private String jvm;
/**
* Arbitrary options to set on the command line.
- *
+ *
* @parameter expression="${argLine}"
*/
private String argLine;
/**
* Additional environments to set on the command line.
- *
+ *
* @parameter
*/
private Map environmentVariables = new HashMap();
/**
* Command line working directory.
- *
+ *
* @parameter
*/
private File workingDirectory;
/**
- * When false it makes tests run using the standard classloader delegation instead of the default
- * Maven isolated classloader. Only used when forking (forkMode is not "none").<br/>
- * Setting it to false helps with some problems caused by conflicts between
- * xml parsers in the classpath and the Java 5 provider parser.
- *
- * @parameter expression="${childDelegation}"
- * default-value="false"
+ * When false it makes tests run using the standard classloader delegation instead of the default Maven isolated
+ * classloader. Only used when forking (forkMode is not "none").<br/> Setting it to false helps with some problems
+ * caused by conflicts between xml parsers in the classpath and the Java 5 provider parser.
+ *
+ * @parameter expression="${childDelegation}" default-value="false"
*/
private boolean childDelegation;
/**
- * Groups for this test. Only classes/methods/etc decorated with one of the
- * groups specified here will be included in test run, if specified.
- *
+ * Groups for this test. Only classes/methods/etc decorated with one of the groups specified here will be included
+ * in test run, if specified.
+ *
* @parameter expression="${groups}"
*/
private String groups;
/**
- * Excluded groups. Any methods/classes/etc with one of the groups specified in this
- * list will specifically not be run.
- *
+ * Excluded groups. Any methods/classes/etc with one of the groups specified in this list will specifically not be
+ * run.
+ *
* @parameter expression="${excludedGroups}"
*/
private String excludedGroups;
/**
- * List of TestNG suite xml file locations, seperated by commas. It should be noted that
- * if suiteXmlFiles is specified, <b>no</b> other tests will be run, ignoring other parameters,
- * like includes and excludes.
- *
+ * List of TestNG suite xml file locations, seperated by commas. It should be noted that if suiteXmlFiles is
+ * specified, <b>no</b> other tests will be run, ignoring other parameters, like includes and excludes.
+ *
* @parameter
*/
private File[] suiteXmlFiles;
/**
- * The attribute thread-count allows you to specify how many threads should be allocated
- * for this execution. Only makes sense to use in conjunction with parallel.
- *
- * @parameter expression="${threadCount}"
- * default-value="5"
+ * The attribute thread-count allows you to specify how many threads should be allocated for this execution. Only
+ * makes sense to use in conjunction with parallel.
+ *
+ * @parameter expression="${threadCount}" default-value="5"
*/
private int threadCount;
/**
- * When you use the parallel attribute, TestNG will try to run all your test methods in
- * separate threads, except for methods that depend on each other, which will be run in
- * the same thread in order to respect their order of execution.
- *
- * @parameter expression="${parallel}"
- * default-value="false"
+ * When you use the parallel attribute, TestNG will try to run all your test methods in separate threads, except for
+ * methods that depend on each other, which will be run in the same thread in order to respect their order of
+ * execution.
+ *
+ * @parameter expression="${parallel}" default-value="false"
* @todo test how this works with forking, and console/file output parallelism
*/
private String parallel;
/**
* Whether to trim the stack trace in the reports to just the lines within the test, or show the full trace.
- *
+ *
* @parameter expression="${trimStackTrace}" default-value="true"
*/
private boolean trimStackTrace;
/**
* Resolves the artifacts needed.
- *
+ *
* @component
*/
private ArtifactResolver artifactResolver;
/**
* Creates the artifact
- *
+ *
* @component
*/
private ArtifactFactory artifactFactory;
/**
* The plugin remote repositories declared in the pom.
- *
+ *
* @parameter expression="${project.pluginArtifactRepositories}"
*/
private List remoteRepositories;
/**
* For retrieval of artifact's metadata.
- *
+ *
* @component
*/
private ArtifactMetadataSource metadataSource;
@@ -368,20 +364,28 @@
/**
* Flag to disable the generation of report files in xml format.
- *
+ *
* @parameter expression="${disableXmlReport}" default-value="false"
*/
private boolean disableXmlReport;
/**
- * Option to pass dependencies to the system's classloader instead of using an isolated class loader when
- * forking. Prevents problems with JDKs which implement the service provider lookup mechanism by using
- * the system's classloader.
- *
+ * Option to pass dependencies to the system's classloader instead of using an isolated class loader when forking.
+ * Prevents problems with JDKs which implement the service provider lookup mechanism by using the system's
+ * classloader.
+ *
* @parameter expression="${surefire.useSystemClassLoader}" default-value="false"
*/
private boolean useSystemClassLoader;
+ /**
+ * By default, Surefire enables JVM assertions for the execution of your test cases. To disable the assertions, set
+ * this flag to <code>false</code>.
+ *
+ * @parameter expression="${enableAssertions}" default-value="true"
+ */
+ private boolean enableAssertions;
+
public void execute()
throws MojoExecutionException, MojoFailureException
{
@@ -491,7 +495,8 @@
throw new MojoExecutionException( "Unable to locate surefire-booter in the list of plugin artifacts" );
}
- surefireArtifact.isSnapshot(); // TODO: this is ridiculous, but it fixes getBaseVersion to be -SNAPSHOT if needed
+ surefireArtifact.isSnapshot(); // TODO: this is ridiculous, but it fixes getBaseVersion to be -SNAPSHOT if
+ // needed
Artifact junitArtifact;
Artifact testNgArtifact;
@@ -510,8 +515,8 @@
if ( !range.containsVersion( testNgArtifact.getSelectedVersion() ) )
{
throw new MojoFailureException(
- "TestNG support requires version 4.7 or above. You have declared version " +
- testNgArtifact.getVersion() );
+ "TestNG support requires version 4.7 or above. You have declared version " +
+ testNgArtifact.getVersion() );
}
convertTestNGParameters();
@@ -540,8 +545,8 @@
}
catch ( ArtifactNotFoundException e )
{
- throw new MojoExecutionException(
- "Unable to locate required surefire provider dependency: " + e.getMessage(), e );
+ throw new MojoExecutionException( "Unable to locate required surefire provider dependency: " +
+ e.getMessage(), e );
}
catch ( InvalidVersionSpecificationException e )
{
@@ -596,19 +601,21 @@
// Have to wrap in an ArrayList as surefire expects an ArrayList instead of a List for some reason
if ( includes == null || includes.size() == 0 )
{
- includes = new ArrayList(
- Arrays.asList( new String[]{"**/Test*.java", "**/*Test.java", "**/*TestCase.java"} ) );
+ includes =
+ new ArrayList( Arrays.asList( new String[] { "**/Test*.java", "**/*Test.java",
+ "**/*TestCase.java" } ) );
}
if ( excludes == null || excludes.size() == 0 )
{
- excludes = new ArrayList(
- Arrays.asList( new String[]{"**/Abstract*Test.java", "**/Abstract*TestCase.java", "**/*$*"} ) );
+ excludes =
+ new ArrayList( Arrays.asList( new String[] { "**/Abstract*Test.java",
+ "**/Abstract*TestCase.java", "**/*$*" } ) );
}
}
if ( testNgArtifact != null )
{
- surefireBooter.addTestSuite( "org.apache.maven.surefire.testng.TestNGDirectoryTestSuite", new Object[]{
+ surefireBooter.addTestSuite( "org.apache.maven.surefire.testng.TestNGDirectoryTestSuite", new Object[] {
testClassesDirectory, includes, excludes, testSourceDirectory.getAbsolutePath(),
testNgArtifact.getVersion(), properties} );
}
@@ -627,8 +634,8 @@
// fall back to JUnit, which also contains POJO support. Also it can run
// classes compiled against JUnit since it has a dependency on JUnit itself.
- surefireBooter.addTestSuite( junitDirectoryTestSuite,
- new Object[]{testClassesDirectory, includes, excludes} );
+ surefireBooter.addTestSuite( junitDirectoryTestSuite, new Object[] { testClassesDirectory, includes,
+ excludes } );
}
}
@@ -698,6 +705,15 @@
fork.setDebug( true );
}
+
+ if ( argLine != null )
+ {
+ List args = Arrays.asList( argLine.split( " " ) );
+ if ( args.contains( "-da" ) || args.contains( "-disableassertions" ) )
+ {
+ enableAssertions = false;
+ }
+ }
}
surefireBooter.setRedirectTestOutputToFile( redirectTestOutputToFile );
@@ -706,6 +722,8 @@
surefireBooter.setChildDelegation( childDelegation );
+ surefireBooter.setEnableAssertions( enableAssertions );
+
surefireBooter.setReportsDirectory( reportsDirectory );
addReporters( surefireBooter, fork.isForking() );
@@ -723,13 +741,13 @@
}
}
- private void addProvider( SurefireBooter surefireBooter, String provider, String version,
- Artifact filteredArtifact )
+ private void addProvider( SurefireBooter surefireBooter, String provider, String version, Artifact filteredArtifact )
throws ArtifactNotFoundException, ArtifactResolutionException
{
- Artifact providerArtifact = artifactFactory.createDependencyArtifact( "org.apache.maven.surefire", provider,
- VersionRange.createFromVersion( version ),
- "jar", null, Artifact.SCOPE_TEST );
+ Artifact providerArtifact =
+ artifactFactory.createDependencyArtifact( "org.apache.maven.surefire", provider,
+ VersionRange.createFromVersion( version ), "jar", null,
+ Artifact.SCOPE_TEST );
ArtifactResolutionResult result = resolveArtifact( filteredArtifact, providerArtifact );
for ( Iterator i = result.getArtifacts().iterator(); i.hasNext(); )
@@ -748,8 +766,9 @@
ArtifactFilter filter = null;
if ( filteredArtifact != null )
{
- filter = new ExcludesArtifactFilter(
- Collections.singletonList( filteredArtifact.getGroupId() + ":" + filteredArtifact.getArtifactId() ) );
+ filter =
+ new ExcludesArtifactFilter( Collections.singletonList( filteredArtifact.getGroupId() + ":" +
+ filteredArtifact.getArtifactId() ) );
}
Artifact originatingArtifact = artifactFactory.createBuildArtifact( "dummy", "dummy", "1.0", "jar" );
@@ -803,10 +822,12 @@
}
/**
- * <p> Adds Reporters that will generate reports with different formatting.
- * <p> The Reporter that will be added will be based on the value of the parameter
- * useFile, reportFormat, and printSummary.
- *
+ * <p>
+ * Adds Reporters that will generate reports with different formatting.
+ * <p>
+ * The Reporter that will be added will be based on the value of the parameter useFile, reportFormat, and
+ * printSummary.
+ *
* @param surefireBooter The surefire booter that will run tests.
* @param forking
*/
@@ -819,40 +840,40 @@
{
if ( forking )
{
- surefireBooter.addReport( ForkingConsoleReporter.class.getName(), new Object[]{trimStackTrace} );
+ surefireBooter.addReport( ForkingConsoleReporter.class.getName(), new Object[] { trimStackTrace } );
}
else
{
- surefireBooter.addReport( ConsoleReporter.class.getName(), new Object[]{trimStackTrace} );
+ surefireBooter.addReport( ConsoleReporter.class.getName(), new Object[] { trimStackTrace } );
}
}
if ( BRIEF_REPORT_FORMAT.equals( reportFormat ) )
{
- surefireBooter.addReport( BriefFileReporter.class.getName(),
- new Object[]{reportsDirectory, trimStackTrace} );
+ surefireBooter.addReport( BriefFileReporter.class.getName(), new Object[] { reportsDirectory,
+ trimStackTrace } );
}
else if ( PLAIN_REPORT_FORMAT.equals( reportFormat ) )
{
surefireBooter.addReport( FileReporter.class.getName(),
- new Object[]{reportsDirectory, trimStackTrace} );
+ new Object[] { reportsDirectory, trimStackTrace } );
}
}
else
{
if ( BRIEF_REPORT_FORMAT.equals( reportFormat ) )
{
- surefireBooter.addReport( BriefConsoleReporter.class.getName(), new Object[]{trimStackTrace} );
+ surefireBooter.addReport( BriefConsoleReporter.class.getName(), new Object[] { trimStackTrace } );
}
else if ( PLAIN_REPORT_FORMAT.equals( reportFormat ) )
{
- surefireBooter.addReport( DetailedConsoleReporter.class.getName(), new Object[]{trimStackTrace} );
+ surefireBooter.addReport( DetailedConsoleReporter.class.getName(), new Object[] { trimStackTrace } );
}
}
if ( !disableXmlReport )
{
- surefireBooter.addReport( XMLReporter.class.getName(), new Object[]{reportsDirectory, trimStackTrace} );
+ surefireBooter.addReport( XMLReporter.class.getName(), new Object[] { reportsDirectory, trimStackTrace } );
}
}
Modified: maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireBooter.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireBooter.java?view=diff&rev=556854&r1=556853&r2=556854
==============================================================================
--- maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireBooter.java (original)
+++ maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SurefireBooter.java Tue Jul 17 01:57:45 2007
@@ -92,17 +92,22 @@
private File reportsDirectory;
/**
- * This field is set to true if it's running from main.
- * It's used to help decide what classloader to use.
+ * This field is set to true if it's running from main. It's used to help decide what classloader to use.
*/
private final boolean isForked;
+ /**
+ * Whether to enable assertions or not (can be affected by the fork arguments, and the ability to do so based on the
+ * JVM).
+ */
+ private boolean enableAssertions;
+
static
{
try
{
assertionStatusMethod =
- ClassLoader.class.getMethod( "setDefaultAssertionStatus", new Class[]{boolean.class} );
+ ClassLoader.class.getMethod( "setDefaultAssertionStatus", new Class[] { boolean.class } );
}
catch ( NoSuchMethodException e )
{
@@ -131,12 +136,12 @@
public void addReport( String report, Object[] constructorParams )
{
- reports.add( new Object[]{report, constructorParams} );
+ reports.add( new Object[] { report, constructorParams } );
}
public void addTestSuite( String suiteClassName, Object[] constructorParams )
{
- testSuites.add( new Object[]{suiteClassName, constructorParams} );
+ testSuites.add( new Object[] { suiteClassName, constructorParams } );
}
public void addClassPathUrl( String path )
@@ -163,11 +168,10 @@
}
}
-
/**
- * When forking, setting this to true will make the test output to be saved in a file
- * instead of showing it on the standard output
- *
+ * When forking, setting this to true will make the test output to be saved in a file instead of showing it on the
+ * standard output
+ *
* @param redirectTestOutputToFile
*/
public void setRedirectTestOutputToFile( boolean redirectTestOutputToFile )
@@ -177,7 +181,7 @@
/**
* Set the directory where reports will be saved
- *
+ *
* @param reportsDirectory the directory
*/
public void setReportsDirectory( File reportsDirectory )
@@ -232,27 +236,30 @@
// TODO: replace with plexus
- //noinspection CatchGenericClass,OverlyBroadCatchBlock
+ // noinspection CatchGenericClass,OverlyBroadCatchBlock
ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader();
try
{
- ClassLoader testsClassLoader = useSystemClassLoader() ? ClassLoader.getSystemClassLoader()
- : createClassLoader( classPathUrls, null, childDelegation, true );
+ ClassLoader testsClassLoader =
+ useSystemClassLoader() ? ClassLoader.getSystemClassLoader() : createClassLoader( classPathUrls, null,
+ childDelegation );
// TODO: assertions = true shouldn't be required for this CL if we had proper separation (see TestNG)
- ClassLoader surefireClassLoader = createClassLoader( surefireClassPathUrls, testsClassLoader, true );
+ ClassLoader surefireClassLoader = createClassLoader( surefireClassPathUrls, testsClassLoader );
Class surefireClass = surefireClassLoader.loadClass( Surefire.class.getName() );
Object surefire = surefireClass.newInstance();
- Method run = surefireClass.getMethod( "run", new Class[]{List.class, Object[].class, String.class,
- ClassLoader.class, ClassLoader.class, Properties.class} );
+ Method run =
+ surefireClass.getMethod( "run", new Class[] { List.class, Object[].class, String.class,
+ ClassLoader.class, ClassLoader.class, Properties.class } );
Thread.currentThread().setContextClassLoader( testsClassLoader );
- Boolean result = (Boolean) run.invoke( surefire, new Object[]{reports, testSuites.get( 0 ), testSet,
- surefireClassLoader, testsClassLoader, results} );
+ Boolean result =
+ (Boolean) run.invoke( surefire, new Object[] { reports, testSuites.get( 0 ), testSet,
+ surefireClassLoader, testsClassLoader, results } );
return result.booleanValue();
}
@@ -275,30 +282,31 @@
{
// TODO: replace with plexus
- //noinspection CatchGenericClass,OverlyBroadCatchBlock
+ // noinspection CatchGenericClass,OverlyBroadCatchBlock
ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader();
try
{
// The test classloader must be constructed first to avoid issues with commons-logging until we properly
// separate the TestNG classloader
- ClassLoader testsClassLoader =
- useSystemClassLoader() ? getClass().getClassLoader() // ClassLoader.getSystemClassLoader()
- : createClassLoader( classPathUrls, null, childDelegation, true );
+ ClassLoader testsClassLoader = useSystemClassLoader() ? getClass().getClassLoader() // ClassLoader.getSystemClassLoader()
+ : createClassLoader( classPathUrls, null, childDelegation );
- ClassLoader surefireClassLoader = createClassLoader( surefireClassPathUrls, testsClassLoader, true );
+ ClassLoader surefireClassLoader = createClassLoader( surefireClassPathUrls, testsClassLoader );
Class surefireClass = surefireClassLoader.loadClass( Surefire.class.getName() );
Object surefire = surefireClass.newInstance();
- Method run = surefireClass.getMethod( "run", new Class[]{List.class, List.class, ClassLoader.class,
- ClassLoader.class} );
+ Method run =
+ surefireClass.getMethod( "run", new Class[] { List.class, List.class, ClassLoader.class,
+ ClassLoader.class } );
Thread.currentThread().setContextClassLoader( testsClassLoader );
- Boolean result = (Boolean) run.invoke( surefire, new Object[]{reports, testSuites, surefireClassLoader,
- testsClassLoader} );
+ Boolean result =
+ (Boolean) run.invoke( surefire, new Object[] { reports, testSuites, surefireClassLoader,
+ testsClassLoader } );
return result.booleanValue();
}
@@ -329,9 +337,9 @@
ClassLoader surefireClassLoader;
try
{
- testsClassLoader = createClassLoader( classPathUrls, null, false, true );
+ testsClassLoader = createClassLoader( classPathUrls, null, false );
// TODO: assertions = true shouldn't be required if we had proper separation (see TestNG)
- surefireClassLoader = createClassLoader( surefireClassPathUrls, testsClassLoader, false, true );
+ surefireClassLoader = createClassLoader( surefireClassPathUrls, testsClassLoader, false );
}
catch ( MalformedURLException e )
{
@@ -386,16 +394,16 @@
}
catch ( NoSuchMethodException e )
{
- throw new SurefireBooterForkException(
- "Unable to find appropriate constructor for test suite '" + className + "': " + e.getMessage(), e );
+ throw new SurefireBooterForkException( "Unable to find appropriate constructor for test suite '" +
+ className + "': " + e.getMessage(), e );
}
Map testSets;
try
{
- Method m = suite.getClass().getMethod( "locateTestSets", new Class[]{ClassLoader.class} );
+ Method m = suite.getClass().getMethod( "locateTestSets", new Class[] { ClassLoader.class } );
- testSets = (Map) m.invoke( suite, new Object[]{testsClassLoader} );
+ testSets = (Map) m.invoke( suite, new Object[] { testsClassLoader } );
}
catch ( IllegalAccessException e )
{
@@ -451,6 +459,7 @@
}
properties.setProperty( "childDelegation", String.valueOf( childDelegation ) );
+ properties.setProperty( "enableAssertions", String.valueOf( enableAssertions ) );
properties.setProperty( "useSystemClassLoader", String.valueOf( useSystemClassLoader() ) );
}
@@ -535,8 +544,7 @@
private final boolean useSystemClassLoader()
{
- return forkConfiguration.isUseSystemClassLoader() &&
- ( isForked || forkConfiguration.isForking() );
+ return forkConfiguration.isUseSystemClassLoader() && ( isForked || forkConfiguration.isForking() );
}
private boolean fork( Properties properties, boolean showHeading, boolean showFooter )
@@ -621,14 +629,13 @@
return returnCode == 0;
}
- private static ClassLoader createClassLoader( List classPathUrls, ClassLoader parent, boolean assertionsEnabled )
+ private ClassLoader createClassLoader( List classPathUrls, ClassLoader parent )
throws MalformedURLException
{
- return createClassLoader( classPathUrls, parent, false, assertionsEnabled );
+ return createClassLoader( classPathUrls, parent, false );
}
- private static ClassLoader createClassLoader( List classPathUrls, ClassLoader parent, boolean childDelegation,
- boolean assertionsEnabled )
+ private ClassLoader createClassLoader( List classPathUrls, ClassLoader parent, boolean childDelegation )
throws MalformedURLException
{
List urls = new ArrayList();
@@ -649,7 +656,7 @@
{
try
{
- Object[] args = new Object[]{assertionsEnabled ? Boolean.TRUE : Boolean.FALSE};
+ Object[] args = new Object[] { enableAssertions ? Boolean.TRUE : Boolean.FALSE };
if ( parent != null )
{
assertionStatusMethod.invoke( parent, args );
@@ -733,10 +740,14 @@
if ( paramProperty != null )
{
// bit of a glitch that it need sto be done twice to do an odd number of vertical bars (eg |||, |||||).
- String[] params = StringUtils.split(
- StringUtils.replace( StringUtils.replace( paramProperty, "||", "| |" ), "||", "| |" ), "|" );
- String[] types = StringUtils.split(
- StringUtils.replace( StringUtils.replace( typeProperty, "||", "| |" ), "||", "| |" ), "|" );
+ String[] params =
+ StringUtils.split(
+ StringUtils.replace( StringUtils.replace( paramProperty, "||", "| |" ), "||", "| |" ),
+ "|" );
+ String[] types =
+ StringUtils.split(
+ StringUtils.replace( StringUtils.replace( typeProperty, "||", "| |" ), "||", "| |" ),
+ "|" );
paramObjects = new Object[params.length];
@@ -787,18 +798,15 @@
}
/**
- * This method is invoked when Surefire is forked - this method parses and
- * organizes the arguments passed to it and then calls the Surefire class'
- * run method.
- * <p/>
- * The system exit code will be 1 if an exception is thrown.
- *
+ * This method is invoked when Surefire is forked - this method parses and organizes the arguments passed to it and
+ * then calls the Surefire class' run method. <p/> The system exit code will be 1 if an exception is thrown.
+ *
* @param args
*/
public static void main( String[] args )
throws Throwable
{
- //noinspection CatchGenericClass,OverlyBroadCatchBlock
+ // noinspection CatchGenericClass,OverlyBroadCatchBlock
try
{
if ( args.length > 1 )
@@ -852,10 +860,15 @@
surefireBooter.childDelegation =
Boolean.valueOf( p.getProperty( "childDelegation" ) ).booleanValue();
}
+ else if ( "enableAssertions".equals( name ) )
+ {
+ surefireBooter.enableAssertions =
+ Boolean.valueOf( p.getProperty( "enableAssertions" ) ).booleanValue();
+ }
else if ( "useSystemClassLoader".equals( name ) )
{
- surefireBooter.forkConfiguration.setUseSystemClassLoader(
- Boolean.valueOf( p.getProperty( "useSystemClassLoader" ) ).booleanValue() );
+ surefireBooter.forkConfiguration.setUseSystemClassLoader( Boolean.valueOf(
+ p.getProperty( "useSystemClassLoader" ) ).booleanValue() );
}
}
@@ -872,15 +885,15 @@
surefireBooter.writePropertiesFile( surefirePropertiesFile, "surefire", p );
- //noinspection CallToSystemExit
+ // noinspection CallToSystemExit
System.exit( result ? TESTS_SUCCEEDED_EXIT_CODE : TESTS_FAILED_EXIT_CODE );
}
catch ( Throwable t )
{
// Just throwing does getMessage() and a local trace - we want to call printStackTrace for a full trace
- //noinspection UseOfSystemOutOrSystemErr
+ // noinspection UseOfSystemOutOrSystemErr
t.printStackTrace( System.err );
- //noinspection ProhibitedExceptionThrown,CallToSystemExit
+ // noinspection ProhibitedExceptionThrown,CallToSystemExit
System.exit( 1 );
}
}
@@ -911,5 +924,9 @@
return new ForkingStreamConsumer( outputConsumer );
}
-}
+ public void setEnableAssertions( boolean enableAssertions )
+ {
+ this.enableAssertions = enableAssertions;
+ }
+}