Author: jkuhnert
Date: Sun Apr 15 09:50:41 2007
New Revision: 529005
URL: http://svn.apache.org/viewvc?view=rev&rev=529005
Log:
-) Fixed new method failed errors encountered with TestNG 5.5
Parser(file).parse() return type of Collection when it used to be just a single
XmlSuite.
-) Updated plugin / logic to handle the new behavior of the parellel
configuration parameter which now takes true / methods / tests as valid string
paramteres and appropriately built in the backwards compatible method
invocation calls to make it all work.
-) Updated some of the surefire plugin integration tests to work properly /
pass when testing the parallel mode.
Modified:
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test4/pom.xml
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test6/pom.xml
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test6/src/test/java/TestNGTest.java
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test8/src/test/java/TestNGTest.java
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java
maven/sandbox/branches/surefire/surefire-collaboration/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java
maven/sandbox/branches/surefire/surefire-collaboration/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGExecutor.java
maven/sandbox/branches/surefire/surefire-collaboration/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGXmlTestSuite.java
Modified:
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test4/pom.xml
URL:
http://svn.apache.org/viewvc/maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test4/pom.xml?view=diff&rev=529005&r1=529004&r2=529005
==============================================================================
---
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test4/pom.xml
(original)
+++
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test4/pom.xml
Sun Apr 15 09:50:41 2007
@@ -21,45 +21,53 @@
<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>
+ <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.maven.plugins.surefire</groupId>
- <artifactId>test4</artifactId>
- <version>1.0-SNAPSHOT</version>
- <name>TestNG Suites</name>
- <description>Uses suite xml file definitions to invoke testng
tests</description>
+ <groupId>org.apache.maven.plugins.surefire</groupId>
+ <artifactId>test4</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <name>TestNG Suites</name>
+ <description>Uses suite xml file definitions to invoke testng
tests</description>
- <dependencies>
- <dependency>
- <groupId>org.testng</groupId>
- <artifactId>testng</artifactId>
- <version>5.1</version>
- <classifier>jdk15</classifier>
- <scope>test</scope>
- </dependency>
- </dependencies>
+ <dependencies>
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <version>5.5</version>
+ <classifier>jdk15</classifier>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <suiteXmlFiles>
- <file>src/test-data/testng.xml</file>
- </suiteXmlFiles>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.5</source>
- <target>1.5</target>
- </configuration>
- </plugin>
- </plugins>
- </build>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <suiteXmlFiles>
+ <file>src/test-data/testng.xml</file>
+ </suiteXmlFiles>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-clean-plugin</artifactId>
+ <version>2.2-SNAPSHOT</version>
+ <inherited>true</inherited>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
</project>
Modified:
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test6/pom.xml
URL:
http://svn.apache.org/viewvc/maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test6/pom.xml?view=diff&rev=529005&r1=529004&r2=529005
==============================================================================
---
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test6/pom.xml
(original)
+++
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test6/pom.xml
Sun Apr 15 09:50:41 2007
@@ -33,7 +33,7 @@
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
- <version>5.1</version>
+ <version>5.5</version>
<classifier>jdk15</classifier>
<scope>test</scope>
</dependency>
@@ -47,7 +47,7 @@
<configuration>
<groups>functional</groups>
<threadCount>3</threadCount>
- <parallel>true</parallel>
+ <parallel>methods</parallel>
</configuration>
</plugin>
<plugin>
Modified:
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test6/src/test/java/TestNGTest.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test6/src/test/java/TestNGTest.java?view=diff&rev=529005&r1=529004&r2=529005
==============================================================================
---
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test6/src/test/java/TestNGTest.java
(original)
+++
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test6/src/test/java/TestNGTest.java
Sun Apr 15 09:50:41 2007
@@ -1,7 +1,4 @@
-
-import static org.testng.Assert.*;
-
-import org.testng.annotations.AfterSuite;
+import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@@ -24,11 +21,9 @@
testObject = new Object();
}
- @AfterSuite(groups = "functional")
+ @AfterClass(groups = "functional")
public void check_Test_Count()
{
- System.out.println("check_Test_Count(): " + m_testCount);
-
assert m_testCount == 3 : "Expected 3 tests to be run but local
count was " + m_testCount;
}
@@ -37,10 +32,10 @@
/**
* Tests reporting an error
*/
- @Test(groups = {"functional", "notincluded"})
+ @Test(groups = {"functional", "notincluded"}, threadPoolSize = 3,
invocationCount = 3)
public void isTestObjectNull()
{
- m_testCount++;
+ m_testCount++;
assert testObject != null : "testObject is null";
}
Modified:
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test8/src/test/java/TestNGTest.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test8/src/test/java/TestNGTest.java?view=diff&rev=529005&r1=529004&r2=529005
==============================================================================
---
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test8/src/test/java/TestNGTest.java
(original)
+++
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/it/test8/src/test/java/TestNGTest.java
Sun Apr 15 09:50:41 2007
@@ -24,8 +24,6 @@
@AfterSuite(alwaysRun = true, groups = "functional")
public void check_Test_Count()
{
- System.out.println("check_Test_Count(): " + m_testCount);
-
assert m_testCount == 3 : "Expected 3 tests to be run but local
count was " + m_testCount;
}
@@ -34,7 +32,7 @@
/**
* Tests reporting an error
*/
- @Test(groups = {"functional", "notincluded"})
+ @Test(groups = {"functional", "notincluded"}, threadPoolSize = 3,
invocationCount = 3)
public void isTestObjectNull()
{
m_testCount++;
Modified:
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java?view=diff&rev=529005&r1=529004&r2=529005
==============================================================================
---
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java
(original)
+++
maven/sandbox/branches/surefire/surefire-collaboration/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java
Sun Apr 15 09:50:41 2007
@@ -38,24 +38,11 @@
import org.apache.maven.surefire.booter.SurefireBooter;
import org.apache.maven.surefire.booter.SurefireBooterForkException;
import org.apache.maven.surefire.booter.SurefireExecutionException;
-import org.apache.maven.surefire.report.BriefConsoleReporter;
-import org.apache.maven.surefire.report.BriefFileReporter;
-import org.apache.maven.surefire.report.ConsoleReporter;
-import org.apache.maven.surefire.report.DetailedConsoleReporter;
-import org.apache.maven.surefire.report.FileReporter;
-import org.apache.maven.surefire.report.ForkingConsoleReporter;
-import org.apache.maven.surefire.report.XMLReporter;
+import org.apache.maven.surefire.report.*;
import org.codehaus.plexus.util.StringUtils;
import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
+import java.util.*;
/**
* Run tests using Surefire.
@@ -322,9 +309,10 @@
*
* @parameter expression="${parallel}"
* default-value="false"
+ *
* @todo test how this works with forking, and console/file output
parallelism
*/
- private boolean parallel;
+ private String parallel;
/**
* Whether to trim the stack trace in the reports to just the lines within
the test, or show the full trace.
@@ -442,7 +430,7 @@
return false;
}
- if ( parallel )
+ if ( parallel != null)
{
if ( threadCount < 1 )
{
@@ -585,7 +573,7 @@
if ( testNgArtifact != null )
{
surefireBooter.addTestSuite(
"org.apache.maven.surefire.testng.TestNGDirectoryTestSuite", new Object[]{
- testClassesDirectory, includes, excludes, groups,
excludedGroups, Boolean.valueOf( parallel ),
+ testClassesDirectory, includes, excludes, groups,
excludedGroups, parallel,
new Integer( threadCount ),
testSourceDirectory.getAbsolutePath()} );
}
else
Modified:
maven/sandbox/branches/surefire/surefire-collaboration/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/branches/surefire/surefire-collaboration/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java?view=diff&rev=529005&r1=529004&r2=529005
==============================================================================
---
maven/sandbox/branches/surefire/surefire-collaboration/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java
(original)
+++
maven/sandbox/branches/surefire/surefire-collaboration/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGDirectoryTestSuite.java
Sun Apr 15 09:50:41 2007
@@ -32,11 +32,7 @@
import org.testng.xml.XmlTest;
import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.Map;
+import java.util.*;
/**
* Test suite for TestNG based on a directory of Java test classes. Can also
execute JUnit tests.
@@ -50,14 +46,14 @@
private String excludedGroups;
- private boolean parallel;
+ private String parallel;
private int threadCount;
private String testSourceDirectory;
public TestNGDirectoryTestSuite( File basedir, ArrayList includes,
ArrayList excludes, String groups,
- String excludedGroups, Boolean parallel,
Integer threadCount,
+ String excludedGroups, String parallel,
Integer threadCount,
String testSourceDirectory )
{
super( basedir, includes, excludes );
@@ -66,7 +62,7 @@
this.excludedGroups = excludedGroups;
- this.parallel = parallel.booleanValue();
+ this.parallel = parallel;
this.threadCount = threadCount.intValue();
@@ -110,7 +106,7 @@
try {
- TestNGExecutor.execute(suite, "setParallel",
Boolean.valueOf(parallel));
+ TestNGExecutor.execute(suite, "setParallel", parallel);
} catch (Throwable t) {
throw new RuntimeException("Failed to configure TestNG properly",
t);
@@ -137,9 +133,10 @@
try {
- TestNGExecutor.execute(suite, "setParallel",
Boolean.valueOf(parallel));
+ TestNGExecutor.execute(suite, "setParallel", parallel);
} catch (Throwable t) {
+
throw new RuntimeException("Failed to configure TestNG properly",
t);
}
Modified:
maven/sandbox/branches/surefire/surefire-collaboration/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGExecutor.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/branches/surefire/surefire-collaboration/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGExecutor.java?view=diff&rev=529005&r1=529004&r2=529005
==============================================================================
---
maven/sandbox/branches/surefire/surefire-collaboration/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGExecutor.java
(original)
+++
maven/sandbox/branches/surefire/surefire-collaboration/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGExecutor.java
Sun Apr 15 09:50:41 2007
@@ -42,18 +42,33 @@
{
}
- static void execute(Object target, String methodName, Object param)
+ static Object execute(Object target, String methodName, Object param)
throws Exception
{
- Method m = getMethod(target.getClass(), methodName, 1);
-
- if (m.getParameterTypes()[0] == boolean.class) {
-
- m.invoke(target, new Object[] { param });
+ Method m = getMethod(target.getClass(), methodName, param != null ? 1
: 0);
+ Object ret = null;
+
+ if (m == null)
+ throw new IllegalArgumentException("No method found with name <" +
methodName + "> on object " + target);
+
+ if (m.getParameterTypes().length <= 0) {
+
+ ret = m.invoke(target, new Object[0]);
+ } else if (m.getParameterTypes()[0] == boolean.class) {
+
+ Object[] args = { param };
+ if (!Boolean.class.isInstance(param))
+ {
+ args[0] = Boolean.valueOf(param.toString());
+ }
+
+ ret = m.invoke(target, args);
} else if (m.getParameterTypes()[0] == String.class) {
-
- m.invoke(target, new Object[] { param.toString() });
+
+ ret = m.invoke(target, new Object[] { param.toString() });
}
+
+ return ret;
}
static Method getMethod(Class clazz, String name, int argCount)
Modified:
maven/sandbox/branches/surefire/surefire-collaboration/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGXmlTestSuite.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/branches/surefire/surefire-collaboration/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGXmlTestSuite.java?view=diff&rev=529005&r1=529004&r2=529005
==============================================================================
---
maven/sandbox/branches/surefire/surefire-collaboration/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGXmlTestSuite.java
(original)
+++
maven/sandbox/branches/surefire/surefire-collaboration/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGXmlTestSuite.java
Sun Apr 15 09:50:41 2007
@@ -30,16 +30,11 @@
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.lang.reflect.Method;
+import java.util.*;
/**
* Handles suite xml file definitions for TestNG.
- *
- * @author jkuhnert
*/
public class TestNGXmlTestSuite
implements SurefireTestSuite
@@ -47,8 +42,8 @@
private File suiteFile;
private String testSourceDirectory;
-
- private XmlSuite suite;
+
+ private Collection suites;
private Map testSets;
@@ -75,7 +70,13 @@
throw new IllegalStateException( "You must call locateTestSets
before calling execute" );
}
- TestNGExecutor.executeTestNG( this, testSourceDirectory, suite,
reporterManager );
+ Iterator it = suites.iterator();
+ while (it.hasNext())
+ {
+ XmlSuite suite = (XmlSuite)it.next();
+
+ TestNGExecutor.executeTestNG( this, testSourceDirectory, suite,
reporterManager );
+ }
}
public void execute( String testSetName, ReporterManager reporterManager,
ClassLoader classLoader )
@@ -92,6 +93,27 @@
throw new TestSetFailedException( "Unable to find test set '" +
testSetName + "' in suite" );
}
+ Iterator it = suites.iterator();
+ while (it.hasNext())
+ {
+ XmlSuite suite = (XmlSuite)it.next();
+
+ List originalTests = new ArrayList( suite.getTests() );
+ for ( Iterator i = suite.getTests().iterator(); i.hasNext(); )
+ {
+ XmlTest test = (XmlTest) i.next();
+ if ( !test.getName().equals( testSetName ) )
+ {
+ i.remove();
+ }
+ }
+
+ TestNGExecutor.executeTestNG( this, testSourceDirectory, suite,
reporterManager );
+
+ suite.getTests().clear();
+ suite.getTests().addAll( originalTests );
+ }
+ /*
List originalTests = new ArrayList( suite.getTests() );
for ( Iterator i = suite.getTests().iterator(); i.hasNext(); )
{
@@ -106,6 +128,7 @@
suite.getTests().clear();
suite.getTests().addAll( originalTests );
+ */
}
public int getNumTests()
@@ -116,7 +139,17 @@
public int getNumTestSets()
{
- return suite.getTests().size();
+ int count = 0;
+ Iterator it = suites.iterator();
+
+ while (it.hasNext())
+ {
+ XmlSuite suite = (XmlSuite)it.next();
+
+ count += suite.getTests().size();
+ }
+
+ return count;
}
public Map locateTestSets( ClassLoader classLoader )
@@ -130,7 +163,24 @@
try
{
- suite = new Parser( suiteFile.getAbsolutePath() ).parse();
+ Parser p = new Parser( suiteFile.getAbsolutePath() );
+
+ Method m = TestNGExecutor.getMethod(p.getClass(), "parse", 0);
+
+ if (m == null)
+ throw new IllegalStateException("TestNG suite parser parse()
method could not be found.");
+
+ if (Collection.class.isAssignableFrom(m.getReturnType())) {
+
+ suites = (Collection) TestNGExecutor.execute(p, "parse", null);
+ } else {
+
+ List parsedSuites = new ArrayList();
+
+ parsedSuites.add(TestNGExecutor.execute(p, "parse", null));
+
+ suites = parsedSuites;
+ }
}
catch ( IOException e )
{
@@ -144,7 +194,30 @@
{
throw new TestSetFailedException( "Error reading test suite", e );
}
+ catch ( Exception e )
+ {
+ throw new TestSetFailedException( "Error parsing test suite", e );
+ }
+ Iterator it = suites.iterator();
+ while (it.hasNext())
+ {
+ XmlSuite suite = (XmlSuite)it.next();
+
+ for ( Iterator i = suite.getTests().iterator(); i.hasNext(); )
+ {
+ XmlTest xmlTest = (XmlTest) i.next();
+
+ if ( testSets.containsKey( xmlTest.getName() ) )
+ {
+ throw new TestSetFailedException( "Duplicate test set '" +
xmlTest.getName() + "'" );
+ }
+
+ // We don't need to put real test sets in here, the key is the
important part
+ testSets.put( xmlTest.getName(), xmlTest );
+ }
+ }
+ /*
for ( Iterator i = suite.getTests().iterator(); i.hasNext(); )
{
XmlTest xmlTest = (XmlTest) i.next();
@@ -156,7 +229,8 @@
// We don't need to put real test sets in here, the key is the
important part
testSets.put( xmlTest.getName(), xmlTest );
- }
+ }*/
+
return testSets;
}
}