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