[SUREFIRE-1842] - NPE at end of successful test run
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/api/provider/ProviderParameters.java b/surefire-api/src/main/java/org/apache/maven/surefire/api/provider/ProviderParameters.java
index 048622f..6fc54ee 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/api/provider/ProviderParameters.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/api/provider/ProviderParameters.java
@@ -30,6 +30,7 @@
import org.apache.maven.surefire.api.util.RunOrderCalculator;
import org.apache.maven.surefire.api.util.ScanResult;
+import javax.annotation.Nullable;
import java.util.List;
import java.util.Map;
@@ -68,6 +69,7 @@
*
* @return A RunOrderCalculator
*/
+ @Nullable
RunOrderCalculator getRunOrderCalculator();
/**
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/api/util/TestsToRun.java b/surefire-api/src/main/java/org/apache/maven/surefire/api/util/TestsToRun.java
index 28736ef..bdf9e64 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/api/util/TestsToRun.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/api/util/TestsToRun.java
@@ -26,8 +26,6 @@
import java.util.List;
import java.util.Set;
-import org.apache.maven.surefire.api.testset.TestSetFailedException;
-
import static java.lang.Math.max;
/**
@@ -55,7 +53,6 @@
}
public static TestsToRun fromClass( Class<?> clazz )
- throws TestSetFailedException
{
return new TestsToRun( Collections.<Class<?>>singleton( clazz ) );
}
diff --git a/surefire-api/src/test/java/org/apache/maven/surefire/api/booter/BaseProviderFactoryTest.java b/surefire-api/src/test/java/org/apache/maven/surefire/api/booter/BaseProviderFactoryTest.java
new file mode 100644
index 0000000..018e7f0
--- /dev/null
+++ b/surefire-api/src/test/java/org/apache/maven/surefire/api/booter/BaseProviderFactoryTest.java
@@ -0,0 +1,55 @@
+package org.apache.maven.surefire.api.booter;
+
+/*
+ * 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 org.apache.maven.surefire.api.testset.DirectoryScannerParameters;
+import org.junit.Test;
+
+import java.io.File;
+import java.util.Collections;
+
+import static org.junit.Assert.assertNull;
+
+/**
+ * @author Michael Boyles
+ */
+public class BaseProviderFactoryTest
+{
+ @Test
+ public void runOrderCalculatorIsNullIfNotSet()
+ {
+ BaseProviderFactory factory = new BaseProviderFactory( true );
+ factory.setDirectoryScannerParameters ( getDirectoryScannerParameters() );
+
+ assertNull( factory.getRunOrderCalculator() );
+ }
+
+ private DirectoryScannerParameters getDirectoryScannerParameters()
+ {
+ return new DirectoryScannerParameters(
+ new File( "/fake/file" ),
+ Collections.<String>emptyList(),
+ Collections.<String>emptyList(),
+ Collections.<String>emptyList(),
+ false,
+ "ALPHABETICAL"
+ );
+ }
+}
diff --git a/surefire-providers/surefire-junit47/pom.xml b/surefire-providers/surefire-junit47/pom.xml
index ddac05f..86f428f 100644
--- a/surefire-providers/surefire-junit47/pom.xml
+++ b/surefire-providers/surefire-junit47/pom.xml
@@ -54,6 +54,11 @@
<version>1.0-1</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
diff --git a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java
index 6877b00..372351a 100644
--- a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java
+++ b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java
@@ -290,6 +290,7 @@
private TestsToRun scanClassPath()
{
TestsToRun scanned = scanResult.applyFilter( scannerFilter, testClassLoader );
- return runOrderCalculator.orderTestClasses( scanned );
+ return runOrderCalculator == null
+ ? scanned : runOrderCalculator.orderTestClasses( scanned );
}
}
diff --git a/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/JUnitCoreProviderTest.java b/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/JUnitCoreProviderTest.java
new file mode 100644
index 0000000..34cf112
--- /dev/null
+++ b/surefire-providers/surefire-junit47/src/test/java/org/apache/maven/surefire/junitcore/JUnitCoreProviderTest.java
@@ -0,0 +1,63 @@
+package org.apache.maven.surefire.junitcore;
+
+/*
+ * 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 org.apache.maven.surefire.api.provider.ProviderParameters;
+import org.apache.maven.surefire.api.util.ScanResult;
+import org.apache.maven.surefire.api.util.ScannerFilter;
+import org.apache.maven.surefire.api.util.TestsToRun;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import java.util.Iterator;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * @author Michael Boyles
+ */
+@RunWith( MockitoJUnitRunner.class )
+public class JUnitCoreProviderTest
+{
+ @Mock
+ private ProviderParameters providerParameters;
+ @Mock
+ private ScanResult scanResult;
+
+ @Test
+ public void doNotSortTestsIfNoRunOrderProvider()
+ {
+ Mockito.when( providerParameters.getScanResult() ).thenReturn( scanResult );
+ Mockito.when( scanResult.applyFilter( Mockito.any( ScannerFilter.class ), Mockito.any( ClassLoader.class ) ) )
+ .thenReturn( TestsToRun.fromClass( String.class ) );
+
+ JUnitCoreProvider provider = new JUnitCoreProvider( providerParameters );
+ Iterator<Class<?>> suites = provider.getSuites().iterator();
+
+ assertTrue( suites.hasNext() );
+ assertEquals( String.class, suites.next() );
+ assertFalse( suites.hasNext() );
+ }
+}