Updated Branches: refs/heads/master 06801079f -> f35f1efb5
[SUREFIRE-934] remove getLocatedClasses() and size() from TestsToRun .., to avoid potential programming errors with forkMode=onceperthread Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/f35f1efb Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/f35f1efb Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/f35f1efb Branch: refs/heads/master Commit: f35f1efb55696b0202ff042d5d1058c5c5b3cc73 Parents: 0680107 Author: agudian <andreas.gud...@gmail.com> Authored: Sun Dec 9 23:17:53 2012 +0100 Committer: Kristian Rosenvold <krosenv...@apache.org> Committed: Mon Dec 10 19:41:09 2012 +0100 ---------------------------------------------------------------------- .../surefire/util/DefaultRunOrderCalculator.java | 9 ++++- .../apache/maven/surefire/util/LazyTestsToRun.java | 19 --------- .../org/apache/maven/surefire/util/TestsToRun.java | 10 ----- .../apache/maven/surefire/util/TestsToRunTest.java | 12 +++-- .../surefire/testng/TestNGDirectoryTestSuite.java | 30 ++++++++++---- 5 files changed, 36 insertions(+), 44 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/f35f1efb/surefire-api/src/main/java/org/apache/maven/surefire/util/DefaultRunOrderCalculator.java ---------------------------------------------------------------------- diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/util/DefaultRunOrderCalculator.java b/surefire-api/src/main/java/org/apache/maven/surefire/util/DefaultRunOrderCalculator.java index 52ad510..b1950c4 100644 --- a/surefire-api/src/main/java/org/apache/maven/surefire/util/DefaultRunOrderCalculator.java +++ b/surefire-api/src/main/java/org/apache/maven/surefire/util/DefaultRunOrderCalculator.java @@ -24,6 +24,7 @@ import java.util.Arrays; import java.util.Calendar; import java.util.Collections; import java.util.Comparator; +import java.util.Iterator; import java.util.List; import org.apache.maven.plugin.surefire.runorder.RunEntryStatisticsMap; import org.apache.maven.surefire.testset.RunOrderParameters; @@ -54,7 +55,13 @@ public class DefaultRunOrderCalculator public TestsToRun orderTestClasses( TestsToRun scannedClasses ) { - List result = new ArrayList( Arrays.asList( scannedClasses.getLocatedClasses() ) ); + + List result = new ArrayList( 500 ); + + for ( Iterator it = scannedClasses.iterator(); it.hasNext(); ) + { + result.add(it.next()); + } orderTestClasses( result, runOrder.length != 0 ? runOrder[0] : null ); return new TestsToRun( result ); http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/f35f1efb/surefire-api/src/main/java/org/apache/maven/surefire/util/LazyTestsToRun.java ---------------------------------------------------------------------- diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/util/LazyTestsToRun.java b/surefire-api/src/main/java/org/apache/maven/surefire/util/LazyTestsToRun.java index 874c971..3a6dba7 100644 --- a/surefire-api/src/main/java/org/apache/maven/surefire/util/LazyTestsToRun.java +++ b/surefire-api/src/main/java/org/apache/maven/surefire/util/LazyTestsToRun.java @@ -36,9 +36,6 @@ import org.apache.maven.surefire.booter.ForkingRunListener; * {@link #iterator()} returns an Iterator that blocks on calls to * {@link Iterator#hasNext()} until new classes are available, or no more * classes will be available. - * <p/> - * The methods {@link #getLocatedClasses()} and {@link #size()} will throw an - * {@link UnsupportedOperationException}. * * @author Andreas Gudian */ @@ -161,22 +158,6 @@ public class LazyTestsToRun return new BlockingIterator(); } - /** - * Unsupported. Use {@link #iterator()} instead. - */ - public int size() - { - throw new UnsupportedOperationException( "use method iterator()" ); - } - - /** - * Unsupported. Use {@link #iterator()} instead. - */ - public Class[] getLocatedClasses() - { - throw new UnsupportedOperationException( "use method iterator()" ); - } - /* (non-Javadoc) * @see org.apache.maven.surefire.util.TestsToRun#toString() */ http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/f35f1efb/surefire-api/src/main/java/org/apache/maven/surefire/util/TestsToRun.java ---------------------------------------------------------------------- diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/util/TestsToRun.java b/surefire-api/src/main/java/org/apache/maven/surefire/util/TestsToRun.java index 734783e..210aa5a 100644 --- a/surefire-api/src/main/java/org/apache/maven/surefire/util/TestsToRun.java +++ b/surefire-api/src/main/java/org/apache/maven/surefire/util/TestsToRun.java @@ -64,16 +64,6 @@ public class TestsToRun return new TestsToRun( Arrays.asList( new Class[]{ clazz } ) ); } - public int size() - { - return locatedClasses.size(); - } - - public Class[] getLocatedClasses() - { - return (Class[]) locatedClasses.toArray( new Class[locatedClasses.size()] ); - } - /** * Returns an iterator over the located java.lang.Class objects * http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/f35f1efb/surefire-api/src/test/java/org/apache/maven/surefire/util/TestsToRunTest.java ---------------------------------------------------------------------- diff --git a/surefire-api/src/test/java/org/apache/maven/surefire/util/TestsToRunTest.java b/surefire-api/src/test/java/org/apache/maven/surefire/util/TestsToRunTest.java index 8aacfb1..d0a0ca0 100644 --- a/surefire-api/src/test/java/org/apache/maven/surefire/util/TestsToRunTest.java +++ b/surefire-api/src/test/java/org/apache/maven/surefire/util/TestsToRunTest.java @@ -20,6 +20,7 @@ package org.apache.maven.surefire.util; */ import java.util.Arrays; +import java.util.Iterator; import junit.framework.TestCase; @@ -34,11 +35,12 @@ public class TestsToRunTest throws Exception { TestsToRun testsToRun = new TestsToRun( Arrays.asList( new Class[]{ T1.class, T2.class } ) ); - assertEquals( 2, testsToRun.size() ); - Class[] stringJUnitCoreTestSetMap = testsToRun.getLocatedClasses(); - assertEquals( stringJUnitCoreTestSetMap[0], T1.class ); - assertEquals( stringJUnitCoreTestSetMap[1], T2.class ); - assertEquals( 2, stringJUnitCoreTestSetMap.length ); + Iterator it = testsToRun.iterator(); + assertTrue( it.hasNext() ); + assertEquals( it.next(), T1.class ); + assertTrue( it.hasNext() ); + assertEquals( it.next(), T2.class ); + assertFalse( it.hasNext() ); } class T1 http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/f35f1efb/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java ---------------------------------------------------------------------- diff --git a/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java b/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java index 78b2e64..899cade 100644 --- a/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java +++ b/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java @@ -100,17 +100,32 @@ public class TestNGDirectoryTestSuite { executeLazy( testsToRun, reporterManagerFactory ); } - else if ( testsToRun.size() > 1 ) + else if ( containsAtLeast( testsToRun, 2 ) ) { executeMulti( testsToRun, reporterManagerFactory ); } - else if ( testsToRun.size() == 1 ) + else if ( containsAtLeast( testsToRun, 1 ) ) { Class testClass = (Class) testsToRun.iterator().next(); executeSingleClass( reporterManagerFactory, testClass ); } } + + private boolean containsAtLeast( TestsToRun testsToRun, int atLeast ) { + Iterator it = testsToRun.iterator(); + for ( int i = 0; i < atLeast; i++ ) + { + if ( !it.hasNext() ) + { + return false; + } + it.next(); + } + + return true; + } + private void executeSingleClass( ReporterFactory reporterManagerFactory, Class testClass ) throws TestSetFailedException { @@ -159,10 +174,9 @@ public class TestNGDirectoryTestSuite { List testNgTestClasses = new ArrayList(); List junitTestClasses = new ArrayList(); - Class[] allClasses = testsToRun.getLocatedClasses(); - for ( int i = 0; i < allClasses.length; i++ ) + for ( Iterator it = testsToRun.iterator(); it.hasNext(); ) { - Class c = allClasses[i]; + Class c = (Class) it.next(); if ( isJUnitTest( c ) ) { junitTestClasses.add( c ); @@ -181,7 +195,6 @@ public class TestNGDirectoryTestSuite junitReportsDirectory = new File( reportsDirectory, "testng-junit-results" ); } -// RunListener reporterManager = new SynchronizedReporterManager( reporterFactory.createReporter() ); RunListener reporterManager = reporterFactory.createReporter(); ConsoleOutputCapture.startCapture( (ConsoleOutputReceiver) reporterManager ); startTestSuite( reporterManager, this ); @@ -303,11 +316,10 @@ public class TestNGDirectoryTestSuite final TestsToRun scanned = scanResult.applyFilter( new NonAbstractClassFilter(), classLoader ); final TestsToRun testsToRun = runOrderCalculator.orderTestClasses( scanned ); - Class[] locatedClasses = testsToRun.getLocatedClasses(); - for ( int i = 0; i < locatedClasses.length; i++ ) + for ( Iterator it = testsToRun.iterator(); it.hasNext(); ) { - Class testClass = locatedClasses[i]; + Class testClass = (Class) it.next(); TestNGTestSet testSet = new TestNGTestSet( testClass ); if ( testSets.containsKey( testSet.getName() ) )