You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ag...@apache.org on 2014/01/01 22:27:47 UTC
[3/3] git commit: SUREFIRE-1044 o Make runOrder work even when suite
names and test names are specified (order of suites determined by the 'first'
test in suite) o also fix ClassNotFound exception when using testNG with JDK
1.4 style javadoc annotations
SUREFIRE-1044 o Make runOrder work even when suite names and test names are specified (order of suites determined by the 'first' test in suite)
o also fix ClassNotFound exception when using testNG with JDK 1.4 style javadoc annotations
Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/741c094e
Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/741c094e
Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/741c094e
Branch: refs/heads/master
Commit: 741c094e6ac1f9dec67ab4025ee519aec7dda49d
Parents: be98de5
Author: Andreas Gudian <ag...@apache.org>
Authored: Wed Jan 1 22:26:55 2014 +0100
Committer: Andreas Gudian <ag...@apache.org>
Committed: Wed Jan 1 22:26:55 2014 +0100
----------------------------------------------------------------------
.../surefire/its/CheckTestNgVersionsIT.java | 16 ++-
.../maven/surefire/testng/TestNGExecutor.java | 116 +++++++++++++------
2 files changed, 92 insertions(+), 40 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/741c094e/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/CheckTestNgVersionsIT.java
----------------------------------------------------------------------
diff --git a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/CheckTestNgVersionsIT.java b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/CheckTestNgVersionsIT.java
index ab3cc6e..fb3a51e 100644
--- a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/CheckTestNgVersionsIT.java
+++ b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/CheckTestNgVersionsIT.java
@@ -137,7 +137,7 @@ public class CheckTestNgVersionsIT
@Test public void test514()
throws Exception
{
- runTestNgTest( "5.14", false ); // runOrder is not working
+ runTestNgTest( "5.14" );
}
@Test public void test5141()
@@ -155,22 +155,28 @@ public class CheckTestNgVersionsIT
@Test public void test60()
throws Exception
{
- runTestNgTest( "6.0" );
+ runTestNgTest( "6.0", false );
}
@Test public void test685()
throws Exception
{
- runTestNgTest( "6.8.5" );
+ runTestNgTestWithRunOrder( "6.8.5" );
}
- public void runTestNgTest( String version )
+ private void runTestNgTestWithRunOrder( String version )
throws Exception
{
runTestNgTest( version, true );
}
- public void runTestNgTest( String version, boolean validateRunOrder )
+ private void runTestNgTest( String version )
+ throws Exception
+ {
+ runTestNgTest( version, false );
+ }
+
+ private void runTestNgTest( String version, boolean validateRunOrder )
throws Exception
{
http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/741c094e/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGExecutor.java
----------------------------------------------------------------------
diff --git a/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGExecutor.java b/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGExecutor.java
index 35a339c..5655739 100644
--- a/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGExecutor.java
+++ b/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGExecutor.java
@@ -23,6 +23,7 @@ import org.apache.maven.surefire.booter.ProviderParameterNames;
import org.apache.maven.surefire.report.RunListener;
import org.apache.maven.surefire.testng.conf.Configurator;
import org.apache.maven.surefire.testset.TestSetFailedException;
+import org.apache.maven.surefire.util.ReflectionUtils;
import org.apache.maven.surefire.util.internal.StringUtils;
import org.testng.TestNG;
import org.testng.annotations.Test;
@@ -32,6 +33,7 @@ import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;
import java.io.File;
+import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -54,6 +56,9 @@ public class TestNGExecutor
/** The default name for a test launched from the maven surefire plugin */
public static final String DEFAULT_SUREFIRE_TEST_NAME = "Surefire test";
+ private static final boolean HAS_TEST_ANNOTATION_ON_CLASSPATH =
+ null != ReflectionUtils.tryLoadClass( TestNGExecutor.class.getClassLoader(), "org.testng.annotations.Test" );
+
private TestNGExecutor()
{
// noop
@@ -71,56 +76,97 @@ public class TestNGExecutor
XmlMethodSelector groupMatchingSelector = getGroupMatchingSelector( options );
XmlMethodSelector methodNameFilteringSelector = getMethodNameFilteringSelector( methodNamePattern );
- Map<String, Map<String, List<XmlClass>>> suitesNames = new HashMap<String, Map<String, List<XmlClass>>>();
+ Map<String, SuiteAndNamedTests> suitesNames = new HashMap<String, SuiteAndNamedTests>();
- for (Class testClass : testClasses) {
- Test testAnnotation = (Test)testClass.getAnnotation(Test.class);
- String suiteName = DEFAULT_SUREFIRE_SUITE_NAME;
- String testName = DEFAULT_SUREFIRE_TEST_NAME;
- if (testAnnotation != null) {
+ List<XmlSuite> xmlSuites = new ArrayList<XmlSuite>();
+ for ( Class testClass : testClasses )
+ {
+ TestMetadata metadata = findTestMetadata( testClass );
- if (testAnnotation.suiteName() != null) {
- suiteName = testAnnotation.suiteName();
- }
+ SuiteAndNamedTests suiteAndNamedTests = suitesNames.get( metadata.suiteName );
+ if ( suiteAndNamedTests == null )
+ {
+ suiteAndNamedTests = new SuiteAndNamedTests();
+ suiteAndNamedTests.xmlSuite.setName( metadata.suiteName );
+ configurator.configure( suiteAndNamedTests.xmlSuite, options );
+ xmlSuites.add( suiteAndNamedTests.xmlSuite );
- if (testAnnotation.testName() != null) {
- testName = testAnnotation.testName();
- }
+ suitesNames.put( metadata.suiteName, suiteAndNamedTests );
}
- Map<String, List<XmlClass>> testNames = suitesNames.get(suiteName);
- if (testNames == null) {
- testNames = new HashMap<String, List<XmlClass>>();
- suitesNames.put(suiteName, testNames);
- }
- List<XmlClass> xmlTestClasses = testNames.get(testName);
- if (xmlTestClasses == null) {
- xmlTestClasses = new ArrayList<XmlClass>();
- testNames.put(testName, xmlTestClasses);
- }
- xmlTestClasses.add(new XmlClass(testClass.getName()));
- }
- List<XmlSuite> xmlSuites = new ArrayList<XmlSuite>(suitesNames.size());
- for (Map.Entry<String, Map<String, List<XmlClass>>> suit : suitesNames.entrySet()) {
- XmlSuite xmlSuite = new XmlSuite();
- xmlSuite.setName(suit.getKey());
- configurator.configure( xmlSuite, options );
- for (Map.Entry<String, List<XmlClass>> test : suit.getValue().entrySet()) {
- XmlTest xmlTest = new XmlTest(xmlSuite);
- xmlTest.setName(test.getKey());
+ XmlTest xmlTest = suiteAndNamedTests.testNameToTest.get( metadata.testName );
+ if ( xmlTest == null )
+ {
+ xmlTest = new XmlTest( suiteAndNamedTests.xmlSuite );
+ xmlTest.setName( metadata.testName );
addSelector( xmlTest, groupMatchingSelector );
addSelector( xmlTest, methodNameFilteringSelector );
- xmlTest.setXmlClasses(test.getValue());
+ xmlTest.setXmlClasses( new ArrayList<XmlClass>() );
+
+ suiteAndNamedTests.testNameToTest.put( metadata.testName, xmlTest );
}
- xmlSuites.add(xmlSuite);
+ xmlTest.getXmlClasses().add( new XmlClass( testClass.getName() ) );
}
- testng.setXmlSuites(xmlSuites);
+
+ testng.setXmlSuites( xmlSuites );
configurator.configure( testng, options );
postConfigure( testng, testSourceDirectory, reportManager, suite, reportsDirectory );
testng.run();
}
+ private static TestMetadata findTestMetadata( Class testClass )
+ {
+ TestMetadata result = new TestMetadata();
+ if ( HAS_TEST_ANNOTATION_ON_CLASSPATH )
+ {
+ Test testAnnotation = findAnnotation( testClass, Test.class );
+ if ( null != testAnnotation )
+ {
+ if ( !StringUtils.isBlank( testAnnotation.suiteName() ) )
+ {
+ result.suiteName = testAnnotation.suiteName();
+ }
+
+ if ( !StringUtils.isBlank( testAnnotation.testName() ) )
+ {
+ result.testName = testAnnotation.testName();
+ }
+ }
+ }
+ return result;
+ }
+
+ private static <T extends Annotation> T findAnnotation( Class<?> clazz, Class<T> annotationType )
+ {
+ if ( clazz == null )
+ {
+ return null;
+ }
+
+ T result = clazz.getAnnotation( annotationType );
+ if ( result != null )
+ {
+ return result;
+ }
+
+ return findAnnotation( clazz.getSuperclass(), annotationType );
+ }
+
+ private static class TestMetadata
+ {
+ private String testName = DEFAULT_SUREFIRE_TEST_NAME;
+
+ private String suiteName = DEFAULT_SUREFIRE_SUITE_NAME;
+ }
+
+ private static class SuiteAndNamedTests
+ {
+ private XmlSuite xmlSuite = new XmlSuite();
+
+ private Map<String, XmlTest> testNameToTest = new HashMap<String, XmlTest>();
+ }
+
private static void addSelector( XmlTest xmlTest, XmlMethodSelector selector )
{
if ( selector != null )