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


Reply via email to