Author: apopescu
Date: Mon May 14 12:49:38 2007
New Revision: 537962
URL: http://svn.apache.org/viewvc?view=rev&rev=537962
Log:
support for configuring versions 4.7 upto 5.2
Added:
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/AbstractDirectConfigurator.java
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/IConfigurator.java
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNG4751Configurator.java
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNG52Configurator.java
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNGMapConfigurator.java
Modified:
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGExecutor.java
Modified:
maven/sandbox/branches/surefire/surefire-collab2/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-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGExecutor.java?view=diff&rev=537962&r1=537961&r2=537962
==============================================================================
---
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGExecutor.java
(original)
+++
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGExecutor.java
Mon May 14 12:49:38 2007
@@ -19,12 +19,17 @@
* under the License.
*/
-import java.io.File;
-import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.maven.artifact.versioning.ArtifactVersion;
+import
org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.surefire.testng.conf.IConfigurator;
+import org.apache.maven.surefire.testng.conf.TestNG4751Configurator;
+import org.apache.maven.surefire.testng.conf.TestNG52Configurator;
+import org.apache.maven.surefire.testng.conf.TestNGMapConfigurator;
+import org.apache.maven.surefire.util.NestedRuntimeException;
import org.testng.TestNG;
/**
@@ -36,7 +41,6 @@
public class TestNGExecutor
{
public static final String SOURCE_DIRS_OPTION = "maven.testng.src.dir";
- public static final String PARALLEL_MODE_OPTION = "parallel";
private TestNGExecutor()
{
@@ -58,13 +62,28 @@
testng.run();
}
- private static interface IConfigurator {
- void configure(TestNG testng, Map options);
- }
-
private static IConfigurator getConfigurator(ArtifactVersion version) {
- return null;
+ try {
+ VersionRange range =
VersionRange.createFromVersionSpec("[4.7,5.1]");
+ if(range.containsVersion(version)) {
+ return new TestNG4751Configurator();
+ }
+ range = VersionRange.createFromVersion("5.2");
+ if(range.containsVersion(version)) {
+ return new TestNG52Configurator();
+ }
+ range = VersionRange.createFromVersionSpec( "[5.3,)" );
+ if(range.containsVersion(version)) {
+ return new TestNGMapConfigurator();
+ }
+
+ throw new NestedRuntimeException("Unknown TestNG
version " + version);
+ }
+ catch(InvalidVersionSpecificationException invsex) {
+ throw new NestedRuntimeException("", invsex);
+ }
}
+
private static TestNG initialize(ExecEnv env, String sourcePath) {
TestNG testNG = new TestNG( false );
@@ -72,10 +91,9 @@
// turn off all TestNG output
testNG.setVerbose( 0 );
- testNG.setListenerClasses( new ArrayList() );
-
TestNGReporter reporter = new TestNGReporter( env.getReportManager(),
env.getSuite() );
testNG.addListener( (Object) reporter );
+ // TODO: we should have the Profile so that we can decide if this is
needed or not
if(sourcePath != null) {
testNG.setSourcePath(sourcePath);
}
@@ -84,5 +102,5 @@
testNG.setOutputDirectory( System.getProperty( "java.io.tmpdir" ) );
return testNG;
- }
+ }
}
Added:
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/AbstractDirectConfigurator.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/AbstractDirectConfigurator.java?view=auto&rev=537962
==============================================================================
---
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/AbstractDirectConfigurator.java
(added)
+++
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/AbstractDirectConfigurator.java
Mon May 14 12:49:38 2007
@@ -0,0 +1,71 @@
+package org.apache.maven.surefire.testng.conf;
+
+import java.lang.reflect.Method;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.maven.surefire.util.NestedRuntimeException;
+import org.testng.TestNG;
+
+abstract public class AbstractDirectConfigurator implements IConfigurator {
+
+ public void configure(TestNG testng, Map options) {
+ setOptions(testng, options);
+ }
+
+ protected void setOptions(TestNG testng, Map options) throws
NestedRuntimeException {
+ Map setters = getSetters();
+
+ for(Iterator it = options.keySet().iterator(); it.hasNext(); ) {
+ Map.Entry entry = (Map.Entry) it.next();
+ String key = (String) entry.getKey();
+ Object val = entry.getValue();
+
+ Setter setter = (Setter) setters.get(key);
+ if(setter != null) {
+ try {
+ setter.invoke(testng, val);
+ }
+ catch (Exception ex) {
+ throw new
NestedRuntimeException("Cannot set option " + key + " with value " + val, ex);
+ }
+
+ }
+ }
+ }
+
+ protected abstract Map getSetters();
+
+ public static final class Setter {
+ private final String setterName;
+ private final Class paramClass;
+
+ public Setter(String name, Class clazz) {
+ this.setterName = name;
+ this.paramClass = clazz;
+ }
+
+ public void invoke(Object target, Object value) throws
Exception {
+ Method setter =
target.getClass().getMethod(this.setterName, new Class[] {this.paramClass});
+ if(setter != null) {
+ setter.invoke(target, new Object[]
{convertValue(value)});
+ }
+ }
+
+ protected Object convertValue(Object value) {
+ if(value == null) return value;
+ if(this.paramClass.isAssignableFrom(value.getClass())) {
+ return value;
+ }
+
+ if(Boolean.class.equals(this.paramClass) ||
boolean.class.equals(this.paramClass)) {
+ return Boolean.valueOf(value.toString());
+ }
+ if(Integer.class.equals(this.paramClass) ||
int.class.equals(this.paramClass)) {
+ return new Integer(value.toString());
+ }
+
+ return value;
+ }
+ }
+}
Added:
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/IConfigurator.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/IConfigurator.java?view=auto&rev=537962
==============================================================================
---
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/IConfigurator.java
(added)
+++
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/IConfigurator.java
Mon May 14 12:49:38 2007
@@ -0,0 +1,12 @@
+/**
+ *
+ */
+package org.apache.maven.surefire.testng.conf;
+
+import java.util.Map;
+
+import org.testng.TestNG;
+
+public interface IConfigurator {
+ void configure(TestNG testng, Map options);
+}
\ No newline at end of file
Added:
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNG4751Configurator.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNG4751Configurator.java?view=auto&rev=537962
==============================================================================
---
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNG4751Configurator.java
(added)
+++
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNG4751Configurator.java
Mon May 14 12:49:38 2007
@@ -0,0 +1,34 @@
+package org.apache.maven.surefire.testng.conf;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * TestNG 4.7 and 5.1 configurator.
+ *
+ * Allowed options:
+ * -groups
+ * -excludedgroups
+ * -junit (boolean)
+ * -threadcount (int)
+ * -parallel (boolean)
+ *
+ * Not supported yet:
+ * -setListenerClasses(List<Class>) or setListeners(List<Object>)
+ */
+public class TestNG4751Configurator extends AbstractDirectConfigurator {
+ private static final Map ALLOWED_OPTS = new HashMap() {
+ {
+ put("groups", new Setter("setGroups", String.class));
+ put("excludedgroups", new Setter("setExcludedGroups",
String.class));
+ put("parallel", new Setter("setParallel",
boolean.class));
+ put("junit", new Setter("setJUnit", Boolean.class));
+ put("threadcount", new Setter("setThreadCount",
int.class));
+ }
+ };
+
+ protected Map getSetters() {
+ return ALLOWED_OPTS;
+ }
+
+}
\ No newline at end of file
Added:
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNG52Configurator.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNG52Configurator.java?view=auto&rev=537962
==============================================================================
---
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNG52Configurator.java
(added)
+++
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNG52Configurator.java
Mon May 14 12:49:38 2007
@@ -0,0 +1,33 @@
+package org.apache.maven.surefire.testng.conf;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * TestNG 5.2 configurator.
+ *
+ * Allowed options:
+ * -groups
+ * -excludedgroups
+ * -junit (boolean)
+ * -threadcount (int)
+ * -parallel (String)
+ *
+ * Not supported yet:
+ * -setListenerClasses(List<Class>) or setListeners(List<Object>)
+ */
+public class TestNG52Configurator extends AbstractDirectConfigurator {
+ private static final Map ALLOWED_OPTS = new HashMap() {
+ {
+ put("groups", new Setter("setGroups", String.class));
+ put("excludedgroups", new Setter("setExcludedGroups",
String.class));
+ put("parallel", new Setter("setParallel",
String.class));
+ put("junit", new Setter("setJUnit", Boolean.class));
+ put("threadcount", new Setter("setThreadCount",
int.class));
+ }
+ };
+
+ protected Map getSetters() {
+ return ALLOWED_OPTS;
+ }
+}
\ No newline at end of file
Added:
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNGMapConfigurator.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNGMapConfigurator.java?view=auto&rev=537962
==============================================================================
---
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNGMapConfigurator.java
(added)
+++
maven/sandbox/branches/surefire/surefire-collab2/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNGMapConfigurator.java
Mon May 14 12:49:38 2007
@@ -0,0 +1,22 @@
+package org.apache.maven.surefire.testng.conf;
+
+import java.util.Map;
+
+import org.testng.TestNG;
+
+/**
+ * TestNG configurator for 5.3+ versions. TestNG exposes
+ * a [EMAIL PROTECTED] org.testng.TestNG#configure(java.util.Map)} method.
+ * All suppported TestNG options are passed in String format, except
+ * <code>TestNGCommandLineArgs.LISTENER_COMMAND_OPT</code> which is
<code>List<Class></code>.
+ * <p/>
+ * Test classes and/or suite files are not passed along as options parameters,
but
+ * configured separately.
+ */
+public class TestNGMapConfigurator implements IConfigurator {
+
+ public void configure(TestNG testng, Map options) {
+
+ }
+
+}
\ No newline at end of file