You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kr...@apache.org on 2011/11/22 22:43:28 UTC
svn commit: r1205186 [2/2] - in /maven/surefire/trunk: ./
maven-failsafe-plugin/src/main/java/org/apache/maven/plugin/failsafe/
maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/
maven-surefire-common/src/main/java/org/apache/maven/p...
Propchange: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/plugin/surefire/runorder/ThreadedExecutionScheduler.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/booter/BaseProviderFactory.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/booter/BaseProviderFactory.java?rev=1205186&r1=1205185&r2=1205186&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/booter/BaseProviderFactory.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/booter/BaseProviderFactory.java Tue Nov 22 21:43:19 2011
@@ -26,6 +26,7 @@ import org.apache.maven.surefire.report.
import org.apache.maven.surefire.report.ReporterConfiguration;
import org.apache.maven.surefire.report.ReporterFactory;
import org.apache.maven.surefire.testset.DirectoryScannerParameters;
+import org.apache.maven.surefire.testset.RunOrderParameters;
import org.apache.maven.surefire.testset.TestArtifactInfo;
import org.apache.maven.surefire.testset.TestRequest;
import org.apache.maven.surefire.util.DefaultDirectoryScanner;
@@ -38,7 +39,7 @@ import org.apache.maven.surefire.util.Ru
*/
public class BaseProviderFactory
implements DirectoryScannerParametersAware, ReporterConfigurationAware, SurefireClassLoadersAware, TestRequestAware,
- ProviderPropertiesAware, ProviderParameters, TestArtifactInfoAware
+ ProviderPropertiesAware, ProviderParameters, TestArtifactInfoAware, RunOrderParametersAware
{
private Properties providerProperties;
@@ -47,6 +48,8 @@ public class BaseProviderFactory
private ReporterConfiguration reporterConfiguration;
+ private RunOrderParameters runOrderParameters;
+
private ClassLoader testClassLoader;
private TestRequest testRequest;
@@ -60,6 +63,7 @@ public class BaseProviderFactory
private final boolean insideFork;
+
public BaseProviderFactory( ReporterFactory reporterFactory, Boolean insideFork )
{
this.reporterFactory = reporterFactory;
@@ -77,13 +81,19 @@ public class BaseProviderFactory
directoryScannerParameters.getExcludes() );
}
+ private int getThreadCount()
+ {
+ final String threadcount = (String) providerProperties.get( "threadcount" );
+ return threadcount == null ? 1 : Integer.parseInt( threadcount );
+ }
+
public RunOrderCalculator getRunOrderCalculator()
{
if ( directoryScannerParameters == null )
{
return null;
}
- return new DefaultRunOrderCalculator( directoryScannerParameters.getRunOrder() );
+ return new DefaultRunOrderCalculator( runOrderParameters, getThreadCount() );
}
public ReporterFactory getReporterFactory()
@@ -161,4 +171,9 @@ public class BaseProviderFactory
this.testArtifactInfo = testArtifactInfo;
}
+ public void setRunOrderParameters( RunOrderParameters runOrderParameters )
+ {
+ this.runOrderParameters = runOrderParameters;
+ }
+
}
Copied: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/booter/RunOrderParametersAware.java (from r1204953, maven/surefire/trunk/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/TestSetMockReporterFactory.java)
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/booter/RunOrderParametersAware.java?p2=maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/booter/RunOrderParametersAware.java&p1=maven/surefire/trunk/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/TestSetMockReporterFactory.java&r1=1204953&r2=1205186&rev=1205186&view=diff
==============================================================================
--- maven/surefire/trunk/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/TestSetMockReporterFactory.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/booter/RunOrderParametersAware.java Tue Nov 22 21:43:19 2011
@@ -1,4 +1,4 @@
-package org.apache.maven.plugin.surefire.booterclient;
+package org.apache.maven.surefire.booter;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -19,30 +19,13 @@ package org.apache.maven.plugin.surefire
* under the License.
*/
-import org.apache.maven.plugin.surefire.report.FileReporterFactory;
-import org.apache.maven.surefire.booter.StartupReportConfiguration;
-import org.apache.maven.surefire.report.DefaultConsoleReporter;
-import org.apache.maven.surefire.report.ConsoleLogger;
-import org.apache.maven.surefire.report.RunListener;
+import org.apache.maven.surefire.testset.RunOrderParameters;
/**
* @author Kristian Rosenvold
+ * @noinspection UnusedDeclaration
*/
-public class TestSetMockReporterFactory
- extends FileReporterFactory
+interface RunOrderParametersAware
{
- public TestSetMockReporterFactory()
- {
- super( StartupReportConfiguration.defaultValue() );
- }
-
- public ConsoleLogger createConsoleLogger()
- {
- return new DefaultConsoleReporter( System.out );
- }
-
- public RunListener createReporter()
- {
- return new MockReporter();
- }
+ void setRunOrderParameters( RunOrderParameters runOrderParameters );
}
Propchange: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/booter/RunOrderParametersAware.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/booter/SurefireReflector.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/booter/SurefireReflector.java?rev=1205186&r1=1205185&r2=1205186&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/booter/SurefireReflector.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/booter/SurefireReflector.java Tue Nov 22 21:43:19 2011
@@ -32,10 +32,12 @@ import org.apache.maven.surefire.report.
import org.apache.maven.surefire.report.ReporterFactory;
import org.apache.maven.surefire.suite.RunResult;
import org.apache.maven.surefire.testset.DirectoryScannerParameters;
+import org.apache.maven.surefire.testset.RunOrderParameters;
import org.apache.maven.surefire.testset.TestArtifactInfo;
import org.apache.maven.surefire.testset.TestRequest;
import org.apache.maven.surefire.util.NestedRuntimeException;
import org.apache.maven.surefire.util.ReflectionUtils;
+import org.apache.maven.surefire.util.RunOrder;
import org.apache.maven.surefire.util.SurefireReflectionException;
/**
@@ -59,6 +61,8 @@ public class SurefireReflector
private final Class directoryScannerParameters;
+ private final Class runOrderParameters;
+
private final Class directoryScannerParametersAware;
private final Class testSuiteDefinitionAware;
@@ -88,6 +92,7 @@ public class SurefireReflector
testArtifactInfo = surefireClassLoader.loadClass( TestArtifactInfo.class.getName() );
testArtifactInfoAware = surefireClassLoader.loadClass( TestArtifactInfoAware.class.getName() );
directoryScannerParameters = surefireClassLoader.loadClass( DirectoryScannerParameters.class.getName() );
+ runOrderParameters = surefireClassLoader.loadClass( RunOrderParameters.class.getName() );
directoryScannerParametersAware =
surefireClassLoader.loadClass( DirectoryScannerParametersAware.class.getName() );
testSuiteDefinitionAware = surefireClassLoader.loadClass( TestRequestAware.class.getName() );
@@ -176,7 +181,25 @@ public class SurefireReflector
directoryScannerParameters.getIncludes(),
directoryScannerParameters.getExcludes(),
directoryScannerParameters.isFailIfNoTests(),
- directoryScannerParameters.getRunOrder().name() } );
+ RunOrder.asString( directoryScannerParameters.getRunOrder() ) } );
+ }
+
+
+ Object createRunOrderParameters( RunOrderParameters runOrderParameters )
+ {
+ if ( runOrderParameters == null )
+ {
+ return null;
+ }
+ //Can't use the constructor with the RunOrder parameter. Using it causes some integration tests to fail.
+ Class[] arguments = { String.class, String.class };
+ Constructor constructor = ReflectionUtils.getConstructor( this.runOrderParameters, arguments );
+ final File runStatisticsFile = runOrderParameters.getRunStatisticsFile();
+ return ReflectionUtils.newInstance( constructor,
+ new Object[]{ RunOrder.asString( runOrderParameters.getRunOrder() ),
+ runStatisticsFile != null
+ ? runStatisticsFile.getAbsolutePath()
+ : null } );
}
Object createTestArtifactInfo( TestArtifactInfo testArtifactInfo )
@@ -236,6 +259,12 @@ public class SurefireReflector
ReflectionUtils.invokeSetter( o, "setDirectoryScannerParameters", this.directoryScannerParameters, param );
}
+ public void setRunOrderParameters( Object o, RunOrderParameters runOrderParameters )
+ {
+ final Object param = createRunOrderParameters( runOrderParameters );
+ ReflectionUtils.invokeSetter( o, "setRunOrderParameters", this.runOrderParameters, param );
+ }
+
public void setTestSuiteDefinitionAware( Object o, TestRequest testSuiteDefinition2 )
{
Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/DirectoryScannerParameters.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/DirectoryScannerParameters.java?rev=1205186&r1=1205185&r2=1205186&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/DirectoryScannerParameters.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/DirectoryScannerParameters.java Tue Nov 22 21:43:19 2011
@@ -21,7 +21,6 @@ package org.apache.maven.surefire.testse
import java.io.File;
import java.util.List;
-
import org.apache.maven.surefire.util.RunOrder;
/**
@@ -37,10 +36,10 @@ public class DirectoryScannerParameters
private final Boolean failIfNoTests;
- private final RunOrder runOrder;
+ private final RunOrder[] runOrder;
- public DirectoryScannerParameters( File testClassesDirectory, List includes, List excludes, Boolean failIfNoTests,
- RunOrder runOrder )
+ private DirectoryScannerParameters( File testClassesDirectory, List includes, List excludes, Boolean failIfNoTests,
+ RunOrder[] runOrder )
{
this.testClassesDirectory = testClassesDirectory;
this.includes = includes;
@@ -52,12 +51,13 @@ public class DirectoryScannerParameters
public DirectoryScannerParameters( File testClassesDirectory, List includes, List excludes, Boolean failIfNoTests,
String runOrder )
{
- this( testClassesDirectory, includes, excludes, failIfNoTests, runOrder == null ? RunOrder.FILESYSTEM : RunOrder.valueOf( runOrder ) );
+ this( testClassesDirectory, includes, excludes, failIfNoTests,
+ runOrder == null ? RunOrder.DEFAULT : RunOrder.valueOfMulti( runOrder ) );
}
/**
* Returns the directory of the compiled classes, normally ${project.build.testOutputDirectory}
- *
+ *
* @return A directory that can be scanned for .class files
*/
public File getTestClassesDirectory()
@@ -67,7 +67,7 @@ public class DirectoryScannerParameters
/**
* The includes pattern list, as specified on the plugin includes parameter.
- *
+ *
* @return A list of patterns. May contain both source file designators and .class extensions.
*/
public List getIncludes()
@@ -77,7 +77,7 @@ public class DirectoryScannerParameters
/**
* The excludes pattern list, as specified on the plugin includes parameter.
- *
+ *
* @return A list of patterns. May contain both source file designators and .class extensions.
*/
public List getExcludes()
@@ -87,7 +87,7 @@ public class DirectoryScannerParameters
/**
* Indicates if lack of runable tests should fail the entire build
- *
+ *
* @return true if no tests should fail the build
*/
public Boolean isFailIfNoTests()
@@ -95,7 +95,7 @@ public class DirectoryScannerParameters
return failIfNoTests;
}
- public RunOrder getRunOrder()
+ public RunOrder[] getRunOrder()
{
return runOrder;
}
Added: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/RunOrderParameters.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/RunOrderParameters.java?rev=1205186&view=auto
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/RunOrderParameters.java (added)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/RunOrderParameters.java Tue Nov 22 21:43:19 2011
@@ -0,0 +1,71 @@
+package org.apache.maven.surefire.testset;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import org.apache.maven.surefire.util.RunOrder;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class RunOrderParameters
+{
+ private final RunOrder[] runOrder;
+
+ private File runStatisticsFile;
+
+ public RunOrderParameters( RunOrder[] runOrder, File runStatisticsFile )
+ {
+ this.runOrder = runOrder;
+ this.runStatisticsFile = runStatisticsFile;
+ }
+
+ public RunOrderParameters( String runOrder, String runStatisticsFile )
+ {
+ this.runOrder = runOrder == null ? RunOrder.DEFAULT : RunOrder.valueOfMulti( runOrder );
+ this.runStatisticsFile = runStatisticsFile != null ? new File( runStatisticsFile ) : null;
+ }
+
+ public static RunOrderParameters DEFAULT()
+ {
+ return new RunOrderParameters( RunOrder.DEFAULT, null );
+ }
+
+ public static RunOrderParameters ALPHABETICAL()
+ {
+ return new RunOrderParameters( new RunOrder[]{ RunOrder.ALPHABETICAL }, null );
+ }
+
+ public RunOrder[] getRunOrder()
+ {
+ return runOrder;
+ }
+
+ public File getRunStatisticsFile()
+ {
+ return runStatisticsFile;
+ }
+
+ public String getRunStatisticsFileName()
+ {
+ return runStatisticsFile != null ? runStatisticsFile.getAbsolutePath() : null;
+ }
+
+}
Propchange: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/testset/RunOrderParameters.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/DefaultRunOrderCalculator.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/DefaultRunOrderCalculator.java?rev=1205186&r1=1205185&r2=1205186&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/DefaultRunOrderCalculator.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/DefaultRunOrderCalculator.java Tue Nov 22 21:43:19 2011
@@ -25,10 +25,12 @@ import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
+import org.apache.maven.plugin.surefire.runorder.RunEntryStatisticsMap;
+import org.apache.maven.surefire.testset.RunOrderParameters;
/**
- * Applies the final unorder of the tests
- *
+ * Applies the final runorder of the tests
+ *
* @author Kristian Rosenvold
*/
public class DefaultRunOrderCalculator
@@ -36,34 +38,59 @@ public class DefaultRunOrderCalculator
{
private final Comparator sortOrder;
- private final RunOrder runOrder;
+ private final RunOrder[] runOrder;
- public DefaultRunOrderCalculator( RunOrder runOrder )
+ private final RunOrderParameters runOrderParameters;
+
+ private final int threadCount;
+
+ public DefaultRunOrderCalculator( RunOrderParameters runOrderParameters, int threadCount )
{
- this.runOrder = runOrder;
- this.sortOrder = getSortOrderComparator();
+ this.runOrderParameters = runOrderParameters;
+ this.threadCount = threadCount;
+ this.runOrder = runOrderParameters.getRunOrder();
+ this.sortOrder = this.runOrder.length > 0 ? getSortOrderComparator( this.runOrder[0] ) : null;
}
- public TestsToRun orderTestClasses( TestsToRun scannedClasses ){
- List result = new ArrayList(Arrays.asList(scannedClasses.getLocatedClasses()));
- orderTestClasses(result);
- return new TestsToRun( result );
+ public TestsToRun orderTestClasses( TestsToRun scannedClasses )
+ {
+ List result = new ArrayList( Arrays.asList( scannedClasses.getLocatedClasses() ) );
- }
+ orderTestClasses( result, runOrder.length != 0 ? runOrder[0] : null );
+ return new TestsToRun( result );
+ }
- private void orderTestClasses( List testClasses )
+ private void orderTestClasses( List testClasses, RunOrder runOrder )
{
if ( RunOrder.RANDOM.equals( runOrder ) )
{
Collections.shuffle( testClasses );
}
+ else if ( RunOrder.FAILEDFIRST.equals( runOrder ) )
+ {
+ RunEntryStatisticsMap runEntryStatisticsMap =
+ RunEntryStatisticsMap.fromFile( runOrderParameters.getRunStatisticsFile() );
+ final List prioritized = runEntryStatisticsMap.getPrioritizedTestsByFailureFirst( testClasses );
+ testClasses.clear();
+ testClasses.addAll( prioritized );
+
+ }
+ else if ( RunOrder.BALANCED.equals( runOrder ) )
+ {
+ RunEntryStatisticsMap runEntryStatisticsMap =
+ RunEntryStatisticsMap.fromFile( runOrderParameters.getRunStatisticsFile() );
+ final List prioritized = runEntryStatisticsMap.getPrioritizedTestsClassRunTime( testClasses, threadCount );
+ testClasses.clear();
+ testClasses.addAll( prioritized );
+
+ }
else if ( sortOrder != null )
{
Collections.sort( testClasses, sortOrder );
}
}
- private Comparator getSortOrderComparator()
+ private Comparator getSortOrderComparator( RunOrder runOrder )
{
if ( RunOrder.ALPHABETICAL.equals( runOrder ) )
{
Modified: maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/RunOrder.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/RunOrder.java?rev=1205186&r1=1205185&r2=1205186&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/RunOrder.java (original)
+++ maven/surefire/trunk/surefire-api/src/main/java/org/apache/maven/surefire/util/RunOrder.java Tue Nov 22 21:43:19 2011
@@ -19,9 +19,13 @@ package org.apache.maven.surefire.util;
* under the License.
*/
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
+
/**
* A RunOrder specifies the order in which the tests will be run.
- *
+ *
* @author Stefan Birkner
*/
public class RunOrder
@@ -36,6 +40,32 @@ public class RunOrder
public static final RunOrder REVERSE_ALPHABETICAL = new RunOrder( "reversealphabetical" );
+ public static final RunOrder BALANCED = new RunOrder( "balanced" );
+
+ public static final RunOrder FAILEDFIRST = new RunOrder( "failedfirst" );
+
+ public static final RunOrder[] DEFAULT = new RunOrder[]{ FILESYSTEM };
+
+ /**
+ * Returns the specified RunOrder
+ *
+ * @param values The runorder string value
+ * @return An array of RunOrder objects, never null
+ */
+ public static RunOrder[] valueOfMulti( String values )
+ {
+ List result = new ArrayList();
+ if ( values != null )
+ {
+ StringTokenizer stringTokenizer = new StringTokenizer( values, "," );
+ while ( stringTokenizer.hasMoreTokens() )
+ {
+ result.add( valueOf( stringTokenizer.nextToken() ) );
+ }
+ }
+ return (RunOrder[]) result.toArray( new RunOrder[result.size()] );
+ }
+
public static RunOrder valueOf( String name )
{
if ( name == null )
@@ -79,7 +109,22 @@ public class RunOrder
private static RunOrder[] values()
{
- return new RunOrder[] { ALPHABETICAL, FILESYSTEM, HOURLY, RANDOM, REVERSE_ALPHABETICAL };
+ return new RunOrder[]{ ALPHABETICAL, FILESYSTEM, HOURLY, RANDOM, REVERSE_ALPHABETICAL, BALANCED, FAILEDFIRST };
+ }
+
+ public static String asString( RunOrder[] runOrder )
+ {
+ StringBuffer stringBuffer = new StringBuffer();
+ for ( int i = 0; i < runOrder.length; i++ )
+ {
+ stringBuffer.append( runOrder[i].name );
+ if ( i < ( runOrder.length - 1 ) )
+ {
+ stringBuffer.append( "," );
+ }
+ }
+ return stringBuffer.toString();
+
}
private final String name;
Added: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/plugin/surefire/runorder/ThreadedExecutionSchedulerTest.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/plugin/surefire/runorder/ThreadedExecutionSchedulerTest.java?rev=1205186&view=auto
==============================================================================
--- maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/plugin/surefire/runorder/ThreadedExecutionSchedulerTest.java (added)
+++ maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/plugin/surefire/runorder/ThreadedExecutionSchedulerTest.java Tue Nov 22 21:43:19 2011
@@ -0,0 +1,118 @@
+package org.apache.maven.plugin.surefire.runorder;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class ThreadedExecutionSchedulerTest
+ extends TestCase
+{
+
+ private final RunEntryStatistics a1 = RunEntryStatistics.fromValues( 200, 2, A.class, "at1" );
+
+ private final RunEntryStatistics a2 = RunEntryStatistics.fromValues( 300, 2, A.class, "at2" );
+
+ private final RunEntryStatistics b1 = RunEntryStatistics.fromValues( 400, 2, B.class, "bt1" );
+
+ private final RunEntryStatistics b2 = RunEntryStatistics.fromValues( 300, 2, B.class, "bt2" );
+
+ private final RunEntryStatistics c1 = RunEntryStatistics.fromValues( 400, 2, C.class, "ct1" );
+
+ private final RunEntryStatistics c2 = RunEntryStatistics.fromValues( 200, 2, C.class, "ct2" );
+
+ private final RunEntryStatistics d1 = RunEntryStatistics.fromValues( 401, 2, D.class, "ct2" );
+
+ private final RunEntryStatistics e1 = RunEntryStatistics.fromValues( 200, 2, E.class, "ct2" );
+
+ public void testAddTest()
+ throws Exception
+ {
+ ThreadedExecutionScheduler threadedExecutionScheduler = new ThreadedExecutionScheduler( 2 );
+ addPrioritizedTests( threadedExecutionScheduler );
+ final List result = threadedExecutionScheduler.getResult();
+ assertEquals( 5, result.size() );
+ assertEquals( B.class, result.get( 0 ) );
+ assertEquals( C.class, result.get( 1 ) );
+ assertEquals( D.class, result.get( 2 ) );
+ assertEquals( A.class, result.get( 3 ) );
+ assertEquals( E.class, result.get( 4 ) );
+
+ }
+
+ public void testAddTestJaggedResult()
+ throws Exception
+ {
+ ThreadedExecutionScheduler threadedExecutionScheduler = new ThreadedExecutionScheduler( 4 );
+ addPrioritizedTests( threadedExecutionScheduler );
+ final List result = threadedExecutionScheduler.getResult();
+ assertEquals( 5, result.size() );
+
+ }
+
+ private void addPrioritizedTests( ThreadedExecutionScheduler threadedExecutionScheduler )
+ {
+ threadedExecutionScheduler.addTest( new PrioritizedTest( B.class, createPriority( b1, b2 ) ) );
+ threadedExecutionScheduler.addTest( new PrioritizedTest( C.class, createPriority( c1, c2 ) ) );
+ threadedExecutionScheduler.addTest( new PrioritizedTest( A.class, createPriority( a1, a2 ) ) );
+ threadedExecutionScheduler.addTest( new PrioritizedTest( D.class, createPriority( d1 ) ) );
+ threadedExecutionScheduler.addTest( new PrioritizedTest( E.class, createPriority( e1 ) ) );
+ }
+
+ private Priority createPriority( RunEntryStatistics runEntryStatistics )
+ {
+ final Priority priority = new Priority( A.class.getName() );
+ priority.addItem( runEntryStatistics );
+ return priority;
+ }
+
+ private Priority createPriority( RunEntryStatistics runEntryStatistics, RunEntryStatistics runEntryStatistics2 )
+ {
+ final Priority priority = new Priority( A.class.getName() );
+ priority.addItem( runEntryStatistics );
+ priority.addItem( runEntryStatistics2 );
+ return priority;
+ }
+
+
+ class A
+ {
+ } // 500 total
+
+ class B
+ {
+ } // 700 total
+
+ class C
+ {
+ } // 600 total
+
+ class D
+ {
+ } // 400 total
+
+ class E
+ {
+ } // 200 total
+
+}
Propchange: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/plugin/surefire/runorder/ThreadedExecutionSchedulerTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/RunOrderCalculatorTest.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/RunOrderCalculatorTest.java?rev=1205186&r1=1205185&r2=1205186&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/RunOrderCalculatorTest.java (original)
+++ maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/RunOrderCalculatorTest.java Tue Nov 22 21:43:19 2011
@@ -1,38 +1,46 @@
package org.apache.maven.surefire.util;
-import junit.framework.TestCase;
-
import java.util.ArrayList;
import java.util.List;
+import org.apache.maven.surefire.testset.RunOrderParameters;
+
+import junit.framework.TestCase;
/**
* @author Kristian Rosenvold
*/
-public class RunOrderCalculatorTest extends TestCase {
-
- public void testOrderTestClasses() throws Exception {
- getClassesToRun();
- TestsToRun testsToRun = new TestsToRun(getClassesToRun());
- RunOrderCalculator runOrderCalculator = new DefaultRunOrderCalculator(RunOrder.ALPHABETICAL);
- final TestsToRun testsToRun1 = runOrderCalculator.orderTestClasses(testsToRun);
- assertEquals( A.class, testsToRun1.iterator().next());
-
- }
-
- private List getClassesToRun() {
- List classesToRun = new ArrayList();
- classesToRun.add( B.class);
- classesToRun.add( A.class);
- return classesToRun;
- }
-
- class A {
+public class RunOrderCalculatorTest
+ extends TestCase
+{
+
+ public void testOrderTestClasses()
+ throws Exception
+ {
+ getClassesToRun();
+ TestsToRun testsToRun = new TestsToRun( getClassesToRun() );
+ RunOrderCalculator runOrderCalculator = new DefaultRunOrderCalculator( RunOrderParameters.ALPHABETICAL(), 1 );
+ final TestsToRun testsToRun1 = runOrderCalculator.orderTestClasses( testsToRun );
+ assertEquals( A.class, testsToRun1.iterator().next() );
+
+ }
+
+ private List getClassesToRun()
+ {
+ List classesToRun = new ArrayList();
+ classesToRun.add( B.class );
+ classesToRun.add( A.class );
+ return classesToRun;
+ }
+
+ class A
+ {
- }
+ }
- class B {
+ class B
+ {
- }
+ }
}
Modified: maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/RunOrderTest.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/RunOrderTest.java?rev=1205186&r1=1205185&r2=1205186&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/RunOrderTest.java (original)
+++ maven/surefire/trunk/surefire-api/src/test/java/org/apache/maven/surefire/util/RunOrderTest.java Tue Nov 22 21:43:19 2011
@@ -26,24 +26,37 @@ public class RunOrderTest
{
public void testShouldReturnRunOrderForLowerCaseName()
{
- assertEquals( RunOrder.HOURLY, RunOrder.valueOf( "hourly" ) );
+ assertEquals( RunOrder.HOURLY, RunOrder.valueOfMulti( "hourly" )[0] );
+ }
+
+ public void testMultiValue()
+ {
+ final RunOrder[] hourlies = RunOrder.valueOfMulti( "failedfirst,balanced" );
+ assertEquals( RunOrder.FAILEDFIRST, hourlies[0] );
+ assertEquals( RunOrder.BALANCED, hourlies[1] );
+ }
+
+ public void testAsString()
+ {
+ RunOrder[] orders = new RunOrder[]{ RunOrder.FAILEDFIRST, RunOrder.ALPHABETICAL };
+ assertEquals( "failedfirst,alphabetical", RunOrder.asString( orders ) );
}
public void testShouldReturnRunOrderForUpperCaseName()
{
- assertEquals( RunOrder.HOURLY, RunOrder.valueOf( "HOURLY" ) );
+ assertEquals( RunOrder.HOURLY, RunOrder.valueOfMulti( "HOURLY" )[0] );
}
public void testShouldReturnNullForNullName()
{
- assertNull( RunOrder.valueOf( null ) );
+ assertTrue( RunOrder.valueOfMulti( null ).length == 0 );
}
public void testShouldThrowExceptionForInvalidName()
{
try
{
- RunOrder.valueOf( "arbitraryName" );
+ RunOrder.valueOfMulti( "arbitraryName" );
fail( "IllegalArgumentException not thrown." );
}
catch ( IllegalArgumentException expected )
Modified: maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterConstants.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterConstants.java?rev=1205186&r1=1205185&r2=1205186&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterConstants.java (original)
+++ maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterConstants.java Tue Nov 22 21:43:19 2011
@@ -42,6 +42,7 @@ public interface BooterConstants
String SOURCE_DIRECTORY = "testSuiteDefinitionTestSourceDirectory";
String TEST_CLASSES_DIRECTORY = "testClassesDirectory";
String RUN_ORDER = "runOrder";
+ String RUN_STATISTICS_FILE = "runStatisticsFile";
String TEST_SUITE_XML_FILES = "testSuiteXmlFiles";
String PROVIDER_CONFIGURATION = "providerConfiguration";
String FORKTESTSET = "forkTestSet";
Modified: maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterDeserializer.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterDeserializer.java?rev=1205186&r1=1205185&r2=1205186&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterDeserializer.java (original)
+++ maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterDeserializer.java Tue Nov 22 21:43:19 2011
@@ -25,6 +25,7 @@ import java.io.InputStream;
import java.util.List;
import org.apache.maven.surefire.report.ReporterConfiguration;
import org.apache.maven.surefire.testset.DirectoryScannerParameters;
+import org.apache.maven.surefire.testset.RunOrderParameters;
import org.apache.maven.surefire.testset.TestArtifactInfo;
import org.apache.maven.surefire.testset.TestRequest;
@@ -71,11 +72,14 @@ public class BooterDeserializer
final List testSuiteXmlFiles = properties.getStringList( TEST_SUITE_XML_FILES );
final File testClassesDirectory = properties.getFileProperty( TEST_CLASSES_DIRECTORY );
final String runOrder = properties.getProperty( RUN_ORDER );
+ final String runStatisticsFile = properties.getProperty( RUN_STATISTICS_FILE );
DirectoryScannerParameters dirScannerParams =
new DirectoryScannerParameters( testClassesDirectory, includesList, excludesList,
properties.getBooleanObjectProperty( FAILIFNOTESTS ), runOrder );
+ RunOrderParameters runOrderParameters = new RunOrderParameters( runOrder, runStatisticsFile );
+
TestArtifactInfo testNg = new TestArtifactInfo( testNgVersion, testArtifactClassifier );
TestRequest testSuiteDefinition =
new TestRequest( testSuiteXmlFiles, sourceDirectory, requestedTest, requestedTestMethod );
@@ -83,9 +87,9 @@ public class BooterDeserializer
ReporterConfiguration reporterConfiguration =
new ReporterConfiguration( reportsDirectory, properties.getBooleanObjectProperty( ISTRIMSTACKTRACE ) );
- return new ProviderConfiguration( dirScannerParams, properties.getBooleanProperty( FAILIFNOTESTS ),
- reporterConfiguration, testNg, testSuiteDefinition,
- properties.getProperties(), typeEncodedTestForFork );
+ return new ProviderConfiguration( dirScannerParams, runOrderParameters,
+ properties.getBooleanProperty( FAILIFNOTESTS ), reporterConfiguration, testNg,
+ testSuiteDefinition, properties.getProperties(), typeEncodedTestForFork );
}
public StartupConfiguration getProviderConfiguration()
Modified: maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderConfiguration.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderConfiguration.java?rev=1205186&r1=1205185&r2=1205186&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderConfiguration.java (original)
+++ maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderConfiguration.java Tue Nov 22 21:43:19 2011
@@ -24,6 +24,7 @@ import java.util.List;
import java.util.Properties;
import org.apache.maven.surefire.report.ReporterConfiguration;
import org.apache.maven.surefire.testset.DirectoryScannerParameters;
+import org.apache.maven.surefire.testset.RunOrderParameters;
import org.apache.maven.surefire.testset.TestArtifactInfo;
import org.apache.maven.surefire.testset.TestRequest;
@@ -56,17 +57,21 @@ public class ProviderConfiguration
private final TestRequest testSuiteDefinition;
+ private final RunOrderParameters runOrderParameters;
+
private final Properties providerProperties;
private final boolean failIfNoTests;
private final TypeEncodedValue forkTestSet;
- public ProviderConfiguration( DirectoryScannerParameters directoryScannerParameters, boolean failIfNoTests,
+ public ProviderConfiguration( DirectoryScannerParameters directoryScannerParameters,
+ RunOrderParameters runOrderParameters, boolean failIfNoTests,
ReporterConfiguration reporterConfiguration, TestArtifactInfo testArtifact,
TestRequest testSuiteDefinition, Properties providerProperties,
TypeEncodedValue typeEncodedTestSet )
{
+ this.runOrderParameters = runOrderParameters;
this.providerProperties = providerProperties;
this.reporterConfiguration = reporterConfiguration;
this.testArtifact = testArtifact;
@@ -129,5 +134,8 @@ public class ProviderConfiguration
return forkTestSet;
}
-
+ public RunOrderParameters getRunOrderParameters()
+ {
+ return runOrderParameters;
+ }
}
Modified: maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderFactory.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderFactory.java?rev=1205186&r1=1205185&r2=1205186&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderFactory.java (original)
+++ maven/surefire/trunk/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProviderFactory.java Tue Nov 22 21:43:19 2011
@@ -63,20 +63,21 @@ public class ProviderFactory
this.reporterManagerFactory = reporterManagerFactory;
}
- public SurefireProvider createProvider(boolean isInsideFork)
+ public SurefireProvider createProvider( boolean isInsideFork )
{
ClassLoader context = java.lang.Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader( surefireClassLoader );
StartupConfiguration starterConfiguration = startupConfiguration;
- final Object o = surefireReflector.createBooterConfiguration( surefireClassLoader, reporterManagerFactory,
- isInsideFork );
+ final Object o =
+ surefireReflector.createBooterConfiguration( surefireClassLoader, reporterManagerFactory, isInsideFork );
surefireReflector.setTestSuiteDefinitionAware( o, providerConfiguration.getTestSuiteDefinition() );
surefireReflector.setProviderPropertiesAware( o, providerConfiguration.getProviderProperties() );
surefireReflector.setReporterConfigurationAware( o, providerConfiguration.getReporterConfiguration() );
surefireReflector.setTestClassLoaderAware( o, surefireClassLoader, testsClassLoader );
surefireReflector.setTestArtifactInfoAware( o, providerConfiguration.getTestArtifact() );
+ surefireReflector.setRunOrderParameters( o, providerConfiguration.getRunOrderParameters() );
surefireReflector.setIfDirScannerAware( o, providerConfiguration.getDirScannerParams() );
Object provider = surefireReflector.instantiateProvider( starterConfiguration.getProviderClassName(), o );
Modified: maven/surefire/trunk/surefire-booter/src/test/java/org/apache/maven/surefire/booter/Foo.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/src/test/java/org/apache/maven/surefire/booter/Foo.java?rev=1205186&r1=1205185&r2=1205186&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-booter/src/test/java/org/apache/maven/surefire/booter/Foo.java (original)
+++ maven/surefire/trunk/surefire-booter/src/test/java/org/apache/maven/surefire/booter/Foo.java Tue Nov 22 21:43:19 2011
@@ -23,15 +23,16 @@ package org.apache.maven.surefire.booter
import java.util.Properties;
import org.apache.maven.surefire.report.ReporterConfiguration;
import org.apache.maven.surefire.testset.DirectoryScannerParameters;
+import org.apache.maven.surefire.testset.RunOrderParameters;
import org.apache.maven.surefire.testset.TestArtifactInfo;
import org.apache.maven.surefire.testset.TestRequest;
/**
-* @author Kristian Rosenvold
-*/
+ * @author Kristian Rosenvold
+ */
public class Foo
implements DirectoryScannerParametersAware, TestRequestAware, ProviderPropertiesAware, ReporterConfigurationAware,
- SurefireClassLoadersAware, TestArtifactInfoAware
+ SurefireClassLoadersAware, TestArtifactInfoAware, RunOrderParametersAware
{
DirectoryScannerParameters directoryScannerParameters;
@@ -49,6 +50,8 @@ public class Foo
TestArtifactInfo testArtifactInfo;
+ RunOrderParameters runOrderParameters;
+
boolean called = false;
public void setDirectoryScannerParameters( DirectoryScannerParameters directoryScanner )
@@ -58,11 +61,13 @@ public class Foo
}
- /** @noinspection UnusedDeclaration
- * @return true if it has been callsed */
+ /**
+ * @return true if it has been callsed
+ * @noinspection UnusedDeclaration
+ */
public Boolean isCalled()
{
- return Boolean.valueOf( called);
+ return Boolean.valueOf( called );
}
public void setProviderProperties( Properties providerProperties )
@@ -95,4 +100,10 @@ public class Foo
this.testArtifactInfo = testArtifactInfo;
this.called = true;
}
+
+ public void setRunOrderParameters( RunOrderParameters runOrderParameters )
+ {
+ this.runOrderParameters = runOrderParameters;
+ this.called = true;
+ }
}
Modified: maven/surefire/trunk/surefire-booter/src/test/java/org/apache/maven/surefire/booter/SurefireReflectorTest.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-booter/src/test/java/org/apache/maven/surefire/booter/SurefireReflectorTest.java?rev=1205186&r1=1205185&r2=1205186&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-booter/src/test/java/org/apache/maven/surefire/booter/SurefireReflectorTest.java (original)
+++ maven/surefire/trunk/surefire-booter/src/test/java/org/apache/maven/surefire/booter/SurefireReflectorTest.java Tue Nov 22 21:43:19 2011
@@ -28,9 +28,11 @@ import java.util.Arrays;
import java.util.Properties;
import org.apache.maven.surefire.report.ReporterConfiguration;
import org.apache.maven.surefire.testset.DirectoryScannerParameters;
+import org.apache.maven.surefire.testset.RunOrderParameters;
import org.apache.maven.surefire.testset.TestArtifactInfo;
import org.apache.maven.surefire.testset.TestRequest;
import org.apache.maven.surefire.util.NestedRuntimeException;
+import org.apache.maven.surefire.util.RunOrder;
import junit.framework.TestCase;
@@ -54,6 +56,18 @@ public class SurefireReflectorTest
}
+ public void testRunOrderParameters()
+ throws Exception
+ {
+ SurefireReflector surefireReflector = getReflector();
+ Object foo = getFoo();
+
+ RunOrderParameters runOrderParameters = new RunOrderParameters( RunOrder.DEFAULT, new File( "." ) );
+ surefireReflector.setRunOrderParameters( foo, runOrderParameters );
+ assertTrue( isCalled( foo ).booleanValue() );
+
+ }
+
public void testTestSuiteDefinition()
throws Exception
{
Modified: maven/surefire/trunk/surefire-integration-tests/pom.xml
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-integration-tests/pom.xml?rev=1205186&r1=1205185&r2=1205186&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-integration-tests/pom.xml (original)
+++ maven/surefire/trunk/surefire-integration-tests/pom.xml Tue Nov 22 21:43:19 2011
@@ -37,7 +37,7 @@
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<it.settings.showPasswords>false</it.settings.showPasswords>
<testng.version>5.7</testng.version>
- <surefire.threadcount>1s</surefire.threadcount>
+ <surefire.threadcount>1</surefire.threadcount>
<surefire.build.version>2.8</surefire.build.version>
</properties>
Added: maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/pom.xml
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/pom.xml?rev=1205186&view=auto
==============================================================================
--- maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/pom.xml (added)
+++ maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/pom.xml Tue Nov 22 21:43:19 2011
@@ -0,0 +1,49 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.plugins.surefire</groupId>
+ <artifactId>runorder-parallel</artifactId>
+ <packaging>jar</packaging>
+ <version>1.0-SNAPSHOT</version>
+ <name>runorder-parallel</name>
+ <url>http://maven.apache.org</url>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.8.1</version>
+ </dependency>
+ </dependencies>
+
+ <properties>
+ <runOrder>balanced</runOrder>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>${surefire.version}</version>
+ <configuration>
+ <forkMode>once</forkMode>
+ <parallel>classes</parallel>
+ <runOrder>${runOrder}</runOrder>
+ <threadCount>2</threadCount>
+ <perCoreThreadCount>false</perCoreThreadCount>
+ <includes>
+ <include>**/Test*.java</include>
+ </includes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
Propchange: maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Added: maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test1.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test1.java?rev=1205186&view=auto
==============================================================================
--- maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test1.java (added)
+++ maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test1.java Tue Nov 22 21:43:19 2011
@@ -0,0 +1,33 @@
+package runorder.parallel;
+
+import org.junit.Test;
+public class Test1
+{
+
+ static void sleep(int ms){
+ try {
+ Thread.sleep(ms);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Test
+ public void testSleep200() {
+ System.out.println("Test1.sleep200 started @ " + System.currentTimeMillis());
+ sleep(200);
+ }
+
+ @Test
+ public void testSleep400() {
+ System.out.println("Test1.sleep400 started @ " + System.currentTimeMillis());
+ sleep(400);
+ }
+
+ @Test
+ public void testSleep600() {
+ System.out.println("Test1.sleep600 started @ " + System.currentTimeMillis());
+ sleep(600);
+ }
+
+}
\ No newline at end of file
Propchange: maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test1.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test2.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test2.java?rev=1205186&view=auto
==============================================================================
--- maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test2.java (added)
+++ maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test2.java Tue Nov 22 21:43:19 2011
@@ -0,0 +1,27 @@
+package runorder.parallel;
+
+import org.junit.Test;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class Test2 {
+
+ @Test
+ public void testSleep100() {
+ System.out.println("Test2.sleep100 started @ " + System.currentTimeMillis());
+ Test1.sleep(100);
+ }
+
+ @Test
+ public void testSleep300() {
+ System.out.println("Test2.sleep300 started @ " + System.currentTimeMillis());
+ Test1.sleep(300);
+ }
+
+ @Test
+ public void testSleep500() {
+ System.out.println("Test2.sleep500 started @ " + System.currentTimeMillis());
+ Test1.sleep(500);
+ }
+}
\ No newline at end of file
Propchange: maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test2.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test3.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test3.java?rev=1205186&view=auto
==============================================================================
--- maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test3.java (added)
+++ maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test3.java Tue Nov 22 21:43:19 2011
@@ -0,0 +1,35 @@
+package runorder.parallel;
+
+import org.junit.Test;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class Test3 {
+
+ private void sleep(int ms) {
+ try {
+ Thread.sleep(ms);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Test
+ public void testSleep10() {
+ System.out.println("Test3.sleep10 started @ " + System.currentTimeMillis());
+ Test1.sleep(10);
+ }
+
+ @Test
+ public void testSleep30() {
+ System.out.println("Test3.sleep30 started @ " + System.currentTimeMillis());
+ Test1.sleep(30);
+ }
+
+ @Test
+ public void testSleep50() {
+ System.out.println("Test3.sleep50 started @ " + System.currentTimeMillis());
+ Test1.sleep(50);
+ }
+}
\ No newline at end of file
Propchange: maven/surefire/trunk/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test3.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/TestMethod.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/TestMethod.java?rev=1205186&r1=1205185&r2=1205186&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/TestMethod.java (original)
+++ maven/surefire/trunk/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/TestMethod.java Tue Nov 22 21:43:19 2011
@@ -19,6 +19,7 @@ package org.apache.maven.surefire.junitc
* under the License.
*/
+import org.apache.maven.surefire.report.CategorizedReportEntry;
import org.apache.maven.surefire.report.ConsoleOutputReceiver;
import org.apache.maven.surefire.report.ConsoleOutputReceiverForCurrentThread;
import org.apache.maven.surefire.report.ReportEntry;
@@ -120,7 +121,9 @@ class TestMethod
private ReportEntry createReportEntry()
{
- return this.description;
+ int elapsed = (int) ( endTime - startTime );
+ return new CategorizedReportEntry( description.getSourceName(), description.getName(), description.getGroup(),
+ description.getStackTraceWriter(), elapsed );
}
public void attachToThread()
Modified: maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java?rev=1205186&r1=1205185&r2=1205186&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java (original)
+++ maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java Tue Nov 22 21:43:19 2011
@@ -29,7 +29,6 @@ import java.util.Map;
import java.util.Properties;
import java.util.SortedMap;
import java.util.TreeMap;
-
import org.apache.maven.artifact.versioning.ArtifactVersion;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
import org.apache.maven.surefire.NonAbstractClassFilter;
@@ -42,9 +41,7 @@ import org.apache.maven.surefire.report.
import org.apache.maven.surefire.report.SimpleReportEntry;
import org.apache.maven.surefire.testset.TestSetFailedException;
import org.apache.maven.surefire.util.DefaultDirectoryScanner;
-import org.apache.maven.surefire.util.DefaultRunOrderCalculator;
import org.apache.maven.surefire.util.DirectoryScanner;
-import org.apache.maven.surefire.util.RunOrder;
import org.apache.maven.surefire.util.RunOrderCalculator;
import org.apache.maven.surefire.util.TestsToRun;
@@ -75,11 +72,11 @@ public class TestNGDirectoryTestSuite
public TestNGDirectoryTestSuite( File basedir, ArrayList includes, ArrayList excludes, String testSourceDirectory,
String artifactVersion, Properties confOptions, File reportsDirectory,
- String testMethodPattern )
+ String testMethodPattern, RunOrderCalculator runOrderCalculator )
{
this.surefireDirectoryScanner = new DefaultDirectoryScanner( basedir, includes, excludes );
- this.runOrderCalculator = new DefaultRunOrderCalculator( RunOrder.FILESYSTEM );
+ this.runOrderCalculator = runOrderCalculator;
this.options = confOptions;
@@ -180,7 +177,6 @@ public class TestNGDirectoryTestSuite
this, junitReportsDirectory, testMethodPattern );
}
-
finishTestSuite( reporterManager, this );
}
@@ -273,7 +269,7 @@ public class TestNGDirectoryTestSuite
final TestsToRun scanned =
surefireDirectoryScanner.locateTestClasses( classLoader, new NonAbstractClassFilter() );
- final TestsToRun testsToRun = runOrderCalculator.orderTestClasses( scanned );
+ final TestsToRun testsToRun = runOrderCalculator.orderTestClasses( scanned );
Class[] locatedClasses = testsToRun.getLocatedClasses();
for ( int i = 0; i < locatedClasses.length; i++ )
Modified: maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGProvider.java
URL: http://svn.apache.org/viewvc/maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGProvider.java?rev=1205186&r1=1205185&r2=1205186&view=diff
==============================================================================
--- maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGProvider.java (original)
+++ maven/surefire/trunk/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGProvider.java Tue Nov 22 21:43:19 2011
@@ -133,7 +133,7 @@ public class TestNGProvider
testRequest.getTestSourceDirectory().toString(),
testArtifactInfo.getVersion(), providerProperties,
reporterConfiguration.getReportsDirectory(),
- testRequest.getRequestedTestMethod() );
+ testRequest.getRequestedTestMethod(), runOrderCalculator );
}
private TestNGXmlTestSuite getXmlSuite()
@@ -167,7 +167,7 @@ public class TestNGProvider
private TestsToRun scanClassPath()
{
final TestsToRun scanned = directoryScanner.locateTestClasses( testClassLoader, null );
- return runOrderCalculator.orderTestClasses( scanned );
+ return runOrderCalculator.orderTestClasses( scanned );
}