- Added Guice
- Better build


diff --git a/3rdparty/guice-2.0.jar b/3rdparty/guice-2.0.jar
new file mode 100644
index 0000000..204c4c2
--- /dev/null
+++ b/3rdparty/guice-2.0.jar
Binary files differ
diff --git a/build.properties b/build.properties
index f8950f6..25b6d59 100644
--- a/build.properties
+++ b/build.properties
@@ -1,7 +1,7 @@
 root.dir=${basedir}
 
 build.dir=${root.dir}/build
-build.3rdparty.dir=${build.dir}/3rdparty
+build.3rdparty.dir=${root.dir}/build3rdparty
 build.maven-bundle.dir=${build.dir}/maven-bundle
 
 #classes=${build.dir}
@@ -14,6 +14,7 @@
 # Jar files
 #
 beanshell.jar=bsh-2.0b4.jar
+guice.jar=guice-2.0.jar
 
 #
 # Names of distributions
diff --git a/build.xml b/build.xml
index 07982a6..29f863d 100644
--- a/build.xml
+++ b/build.xml
@@ -87,6 +87,7 @@
       <fileset dir="${lib.dir}">

         <include name="junit.jar" />

         <include name="${beanshell.jar}" />

+        <include name="${guice.jar}" />

       </fileset>

     </path>

 

@@ -124,7 +125,7 @@
 

   <target name="javadocs">

     <javadoc additionalparam="-quiet" destdir="javadocs" source="1.5" windowtitle="TestNG"

-        classpath="${testng.jar}:${lib.dir}/ant.jar">

+        classpath="${testng.jar}:${lib.dir}/ant.jar:${guice.jar}">

       <fileset dir="${src.dir}" defaultexcludes="yes">

         <include name="org/testng/*.java" />

       </fileset>

@@ -154,9 +155,13 @@
            overwrite="true" />

   </target>

 

-  <target name="dist-bsh">

-    <antcall target="clean-unjar" />

-    <antcall target="extract-beanshell-jar" />

+  <target name="extract-guice-jar">

+    <unjar src="3rdparty/${guice.jar}"

+           dest="${build.3rdparty.dir}"

+           overwrite="true" />

+  </target>

+

+  <target name="dist-bsh" depends="clean-unjar,extract-beanshell-jar,extract-guice-jar" >

     <delete file="${testng.jar}" />

     <jar destfile="${testng.jar}">

       <manifest>

@@ -169,9 +174,9 @@
     </jar>

   </target>

   

-  <target name="dist-nobsh">

-    <antcall target="clean-unjar" />

-    <jar destfile="${other.jars.dir}/${testng.nobsh.jar}" update="true">

+  <target name="dist-nobsh"  depends="clean-unjar,extract-guice-jar" >

+    <delete file="${other.jars.dir}/${testng.nobsh.jar}" />

+    <jar destfile="${other.jars.dir}/${testng.nobsh.jar}">

       <manifest>

         <attribute name="Main-Class" value="org.testng.TestNG" />

       	<attribute name="Implementation-Version" value="${testng.version}-${DSTAMP}${TSTAMP}" />

@@ -203,7 +208,7 @@
                   excludes="test-output/**,report/**" />

       <zipfileset dir="3rdparty"

                   prefix="${zip.dir}/3rdparty"

-                  includes="${beanshell.jar},${concurrent.jar}" />

+                  includes="${beanshell.jar},${concurrent.jar},${guice.jar}" />

     </zip>

   </target>

   

@@ -304,9 +309,9 @@
   </target>

 

   <target name="clean">

+    <delete dir="${build.dir}" />

+    <delete dir="${build.maven-bundle.dir}" />

     <delete failonerror="false">

-      <fileset dir="${build.dir}" includes="**/*" />

-      <fileset dir="${build.maven-bundle.dir}" includes="**/*" />

       <fileset dir="." includes="*.jar,*.zip" />

     </delete>

     <ant antfile="test/build.xml" target="clean" />

diff --git a/src/org/testng/TestNG.java b/src/org/testng/TestNG.java
index e5be214..33c8682 100644
--- a/src/org/testng/TestNG.java
+++ b/src/org/testng/TestNG.java
@@ -1,6 +1,10 @@
 package org.testng;
 
 
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Module;
+
 import javax.xml.parsers.ParserConfigurationException;
 
 import org.testng.annotations.ITestAnnotation;
@@ -10,6 +14,7 @@
 import org.testng.internal.ClassHelper;
 import org.testng.internal.IResultListener;
 import org.testng.internal.PoolService;
+import org.testng.internal.TestNGGuiceModule;
 import org.testng.internal.Utils;
 import org.testng.internal.annotations.DefaultAnnotationTransformer;
 import org.testng.internal.annotations.IAnnotationFinder;
@@ -688,6 +693,8 @@
 
   private IMethodInterceptor m_methodInterceptor = null;
 
+  private Module m_module;
+
   /**
    * Sets the level of verbosity. This value will override the value specified 
    * in the test suites.
@@ -751,9 +758,9 @@
   }
   
   private void initializeAnnotationFinders() {
-    if (!VersionInfo.IS_JDK14) {
-      m_jdkAnnotationFinder= ClassHelper.createJdkAnnotationFinder(getAnnotationTransformer());
-    }
+    m_module = new TestNGGuiceModule(getAnnotationTransformer(), m_objectFactory);
+    Injector injector = Guice.createInjector(m_module);
+    m_jdkAnnotationFinder = injector.getInstance(IAnnotationFinder.class);
   }
   
   /**
diff --git a/src/org/testng/internal/DefaultGuiceModule.java b/src/org/testng/internal/DefaultGuiceModule.java
new file mode 100644
index 0000000..4967a26
--- /dev/null
+++ b/src/org/testng/internal/DefaultGuiceModule.java
@@ -0,0 +1,19 @@
+package org.testng.internal;
+
+import com.google.inject.Binder;
+import com.google.inject.Module;
+import com.google.inject.Singleton;
+
+import org.testng.IAnnotationTransformer;
+import org.testng.internal.annotations.DefaultAnnotationTransformer;
+import org.testng.internal.annotations.IAnnotationFinder;
+import org.testng.internal.annotations.JDK15AnnotationFinder;
+
+public class DefaultGuiceModule implements Module {
+
+  public void configure(Binder binder) {
+    binder.bind(IAnnotationFinder.class).to(JDK15AnnotationFinder.class).in(Singleton.class);
+    binder.bind(IAnnotationTransformer.class).to(DefaultAnnotationTransformer.class)
+        .in(Singleton.class);
+  }
+}
diff --git a/src/org/testng/internal/TestNGGuiceModule.java b/src/org/testng/internal/TestNGGuiceModule.java
new file mode 100644
index 0000000..1c3b8e5
--- /dev/null
+++ b/src/org/testng/internal/TestNGGuiceModule.java
@@ -0,0 +1,36 @@
+package org.testng.internal;
+
+import com.google.inject.Binder;
+import com.google.inject.Module;
+import com.google.inject.Provides;
+import com.google.inject.Singleton;
+
+import org.testng.IAnnotationTransformer;
+import org.testng.IObjectFactory;
+import org.testng.internal.annotations.IAnnotationFinder;
+import org.testng.internal.annotations.JDK15AnnotationFinder;
+
+public class TestNGGuiceModule implements Module {
+
+  private IAnnotationTransformer m_annotationTransformer;
+  private IObjectFactory m_objectFactory;
+
+  public TestNGGuiceModule(IAnnotationTransformer transformer, IObjectFactory factory) {
+    m_annotationTransformer = transformer;
+    m_objectFactory = factory;
+  }
+
+  public void configure(Binder binder) {
+    binder.bind(IAnnotationFinder.class).to(JDK15AnnotationFinder.class).in(Singleton.class);
+  }
+
+  @Provides
+  IAnnotationTransformer provideAnnotationTransformer() {
+    return m_annotationTransformer;
+  }
+
+  @Provides
+  IObjectFactory provideObjectFactory() {
+    return m_objectFactory;
+  }
+}
diff --git a/src/org/testng/internal/annotations/JDK15AnnotationFinder.java b/src/org/testng/internal/annotations/JDK15AnnotationFinder.java
index 546a41c..d00899b 100755
--- a/src/org/testng/internal/annotations/JDK15AnnotationFinder.java
+++ b/src/org/testng/internal/annotations/JDK15AnnotationFinder.java
@@ -1,5 +1,7 @@
 package org.testng.internal.annotations;
 
+import com.google.inject.Inject;
+
 import org.testng.IAnnotationTransformer;
 import org.testng.IAnnotationTransformer2;
 import org.testng.annotations.AfterClass;
@@ -45,12 +47,11 @@
 public class JDK15AnnotationFinder implements IAnnotationFinder {
   private JDK15TagFactory m_tagFactory = new JDK15TagFactory();
   private Map<Class<?>, Class<?>> m_annotationMap = Maps.newHashMap();
+  @Inject
   private IAnnotationTransformer m_transformer = null;
   
   @SuppressWarnings({"deprecation"})
-  public JDK15AnnotationFinder(IAnnotationTransformer transformer) {
-    m_transformer = transformer;
-    
+  public JDK15AnnotationFinder() {
     m_annotationMap.put(IConfigurationAnnotation.class, Configuration.class);
     m_annotationMap.put(IDataProviderAnnotation.class, DataProvider.class);
     m_annotationMap.put(IExpectedExceptionsAnnotation.class, ExpectedExceptions.class);
diff --git a/test/build.xml b/test/build.xml
index cdf35d2..3916017 100644
--- a/test/build.xml
+++ b/test/build.xml
@@ -16,11 +16,14 @@
   <!-- Compile                                                              -->
   <!-- ==================================================================== -->
   <path id="compile.cp">
+    <pathelement location="${testng.jar}" />
 		<pathelement location="${build.dir}"/>
 		<fileset dir="${lib.dir}">
 			<include name="junit.jar"/>
+<!--
 			<include name="${beanshell.jar}"/>
-			<include name="${qdox.jar}"/>
+      <include name="${guice.jar}"/>
+-->
 		</fileset>
   </path>
 
diff --git a/test/src/test/BaseTest.java b/test/src/test/BaseTest.java
index 297e576..840b9d0 100644
--- a/test/src/test/BaseTest.java
+++ b/test/src/test/BaseTest.java
@@ -1,7 +1,10 @@
 package test;

 

 

-import org.testng.IAnnotationTransformer;

+import com.google.inject.Guice;

+import com.google.inject.Injector;

+import com.google.inject.Module;

+

 import org.testng.IInvokedMethodListener;

 import org.testng.ISuite;

 import org.testng.ITestResult;

@@ -10,9 +13,8 @@
 import org.testng.TestListenerAdapter;

 import org.testng.TestRunner;

 import org.testng.annotations.BeforeMethod;

-import org.testng.internal.annotations.DefaultAnnotationTransformer;

+import org.testng.internal.DefaultGuiceModule;

 import org.testng.internal.annotations.IAnnotationFinder;

-import org.testng.internal.annotations.JDK15AnnotationFinder;

 import org.testng.reporters.JUnitXMLReporter;

 import org.testng.reporters.TestHTMLReporter;

 import org.testng.xml.XmlClass;

@@ -48,12 +50,12 @@
 

   private XmlSuite m_suite= null;

   private ITestRunnerFactory m_testRunnerFactory;

-  private IAnnotationTransformer m_defaultAnnotationTransformer= new DefaultAnnotationTransformer();

-  private IAnnotationFinder m_jdkAnnotationFinder;

+  private Injector m_injector;

 

   public BaseTest() {

     m_testRunnerFactory= new InternalTestRunnerFactory(this);

-    m_jdkAnnotationFinder= new JDK15AnnotationFinder(m_defaultAnnotationTransformer);

+    Module module = new DefaultGuiceModule();

+    m_injector = Guice.createInjector(module);

   }

 

   protected void setDebug() {

@@ -183,7 +185,7 @@
     SuiteRunner suite= new SuiteRunner(m_suite,

                                        m_outputDirectory,

                                        m_testRunnerFactory,

-                                       m_jdkAnnotationFinder);

+                                       m_injector.getInstance(IAnnotationFinder.class));

 

     suite.run();

   }

diff --git a/test/src/test/mannotation/MAnnotation2SampleTest.java b/test/src/test/mannotation/MAnnotation2SampleTest.java
index 5656a36..ba95d65 100644
--- a/test/src/test/mannotation/MAnnotation2SampleTest.java
+++ b/test/src/test/mannotation/MAnnotation2SampleTest.java
@@ -1,21 +1,28 @@
 package test.mannotation;
 
-import java.lang.reflect.Method;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Module;
 
 import org.testng.Assert;
 import org.testng.annotations.Configuration;
 import org.testng.annotations.IConfigurationAnnotation;
 import org.testng.annotations.ITestAnnotation;
 import org.testng.annotations.Test;
-import org.testng.internal.annotations.DefaultAnnotationTransformer;
+import org.testng.internal.DefaultGuiceModule;
+import org.testng.internal.annotations.IAnnotationFinder;
 import org.testng.internal.annotations.JDK15AnnotationFinder;
 
+import java.lang.reflect.Method;
+
 public class MAnnotation2SampleTest {
-  private JDK15AnnotationFinder m_finder;
+  private IAnnotationFinder m_finder;
   
   @Configuration(beforeTestClass = true, enabled = true, groups="current")
   public void init() {
-    m_finder = new JDK15AnnotationFinder(new DefaultAnnotationTransformer());
+    Module module = new DefaultGuiceModule();
+    Injector injector = Guice.createInjector(module);
+    m_finder = injector.getInstance(IAnnotationFinder.class);
   }
 
   @Test
diff --git a/test/src/test/mannotation/MAnnotationSampleTest.java b/test/src/test/mannotation/MAnnotationSampleTest.java
index 40bbd65..7fb7ba0 100644
--- a/test/src/test/mannotation/MAnnotationSampleTest.java
+++ b/test/src/test/mannotation/MAnnotationSampleTest.java
@@ -1,7 +1,8 @@
 package test.mannotation;
 
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Module;
 
 import org.testng.Assert;
 import org.testng.annotations.Configuration;
@@ -12,18 +13,24 @@
 import org.testng.annotations.IParametersAnnotation;
 import org.testng.annotations.ITestAnnotation;
 import org.testng.annotations.Test;
-import org.testng.internal.annotations.DefaultAnnotationTransformer;
+import org.testng.internal.DefaultGuiceModule;
 import org.testng.internal.annotations.IAfterSuite;
+import org.testng.internal.annotations.IAnnotationFinder;
 import org.testng.internal.annotations.IBeforeSuite;
 import org.testng.internal.annotations.JDK15AnnotationFinder;
 
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+
 @Test(enabled = true)
 public class MAnnotationSampleTest {
-  private JDK15AnnotationFinder m_finder;
+  private IAnnotationFinder m_finder;
 
   @Configuration(beforeTestClass = true, enabled = true)
   public void init() {
-    m_finder = new JDK15AnnotationFinder(new DefaultAnnotationTransformer());
+    Module module = new DefaultGuiceModule();
+    Injector injector = Guice.createInjector(module);
+    m_finder = injector.getInstance(IAnnotationFinder.class);
   }
 
   public void verifyTestClassLevel() {
@@ -210,7 +217,9 @@
 
   public void verifyParameters() throws SecurityException, NoSuchMethodException 
   {
-    m_finder = new JDK15AnnotationFinder(new DefaultAnnotationTransformer());
+    Module module = new DefaultGuiceModule();
+    Injector injector = Guice.createInjector(module);
+    m_finder = injector.getInstance(IAnnotationFinder.class);
     Method method = MTest1.class.getMethod("parameters", new Class[0]);
     IParametersAnnotation parameters = 
       (IParametersAnnotation) m_finder.findAnnotation(method, IParametersAnnotation.class);
diff --git a/test/testng-single.xml b/test/testng-single.xml
index 44ca791..5ab66b7 100644
--- a/test/testng-single.xml
+++ b/test/testng-single.xml
@@ -24,8 +24,10 @@
     </groups>
 -->
     <classes>
-      <class name="test.regression.MyTestngTest2"/>
+      <class name="test.dataprovider.FailedDataProviderTest" />
 <!-- 
+      <class name="test.tmp.B"/>
+      <class name="test.regression.MyTestngTest2"/>
       <class name="test.regression.BeforeTestFailingTest"/>
       <class name="test.inject.InjectDataProviderTest"/>
       <class name="test.dataprovider.IteratorParallelTest"/>