[testng] 172/355: Accept non static external provider

Eugene Zhukov eugene-guest at moszumanska.debian.org
Tue Aug 18 10:20:01 UTC 2015


This is an automated email from the git hooks/post-receive script.

eugene-guest pushed a commit to annotated tag OpenBSD
in repository testng.

commit ef0abc561a1298e449b4c90999b46b5cf031deaf
Author: Julien Herr <julien.herr at alcatel-lucent.com>
Date:   Tue Apr 7 14:50:53 2015 +0200

    Accept non static external provider
---
 .../java/org/testng/internal/DataProviderHolder.java |  4 +++-
 src/main/java/org/testng/internal/Parameters.java    | 20 +++++++++++---------
 .../java/test/dataprovider/NonStaticProvider.java    | 13 +++++++++++++
 .../dataprovider/StaticDataProviderSampleTest.java   |  5 +++++
 4 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/src/main/java/org/testng/internal/DataProviderHolder.java b/src/main/java/org/testng/internal/DataProviderHolder.java
index d6aea24..47162cc 100755
--- a/src/main/java/org/testng/internal/DataProviderHolder.java
+++ b/src/main/java/org/testng/internal/DataProviderHolder.java
@@ -8,11 +8,13 @@ import java.lang.reflect.Method;
  * A holder for a pair of Method and IDataProviderAnnotation
  */
 public class DataProviderHolder {
+  Object instance;
   Method method;
   IDataProviderAnnotation annotation;
 
-  public DataProviderHolder(IDataProviderAnnotation annotation, Method method) {
+  public DataProviderHolder(IDataProviderAnnotation annotation, Method method, Object instance) {
     this.annotation = annotation;
     this.method = method;
+    this.instance = instance;
   }
 }
diff --git a/src/main/java/org/testng/internal/Parameters.java b/src/main/java/org/testng/internal/Parameters.java
index 4fa7c91..e05fb19 100755
--- a/src/main/java/org/testng/internal/Parameters.java
+++ b/src/main/java/org/testng/internal/Parameters.java
@@ -253,8 +253,9 @@ public class Parameters {
     return result;
   }
 
-  private static DataProviderHolder findDataProvider(Class clazz, ConstructorOrMethod m,
-      IAnnotationFinder finder) {
+  private static DataProviderHolder findDataProvider(Object instance, Class clazz,
+                                                     ConstructorOrMethod m,
+                                                     IAnnotationFinder finder) {
     DataProviderHolder result = null;
 
     IDataProvidable dp = findDataProviderInfo(clazz, m, finder);
@@ -263,7 +264,7 @@ public class Parameters {
       Class dataProviderClass = dp.getDataProviderClass();
 
       if (! Utils.isStringEmpty(dataProviderName)) {
-        result = findDataProvider(clazz, finder, dataProviderName, dataProviderClass);
+        result = findDataProvider(instance, clazz, finder, dataProviderName, dataProviderClass);
 
         if(null == result) {
           throw new TestNGException("Method " + m + " requires a @DataProvider named : "
@@ -313,8 +314,9 @@ public class Parameters {
   /**
    * Find a method that has a @DataProvider(name=name)
    */
-  private static DataProviderHolder findDataProvider(Class cls, IAnnotationFinder finder,
-      String name, Class dataProviderClass)
+  private static DataProviderHolder findDataProvider(Object instance, Class cls,
+                                                     IAnnotationFinder finder,
+                                                     String name, Class dataProviderClass)
   {
     DataProviderHolder result = null;
 
@@ -328,13 +330,13 @@ public class Parameters {
       IDataProviderAnnotation dp = finder.findAnnotation(m, IDataProviderAnnotation.class);
       if (null != dp && name.equals(getDataProviderName(dp, m))) {
         if (shouldBeStatic && (m.getModifiers() & Modifier.STATIC) == 0) {
-          throw new TestNGException("DataProvider should be static: " + m);
+          instance = ClassHelper.newInstance(dataProviderClass);
         }
 
         if (result != null) {
           throw new TestNGException("Found two providers called '" + name + "' on " + cls);
         }
-        result = new DataProviderHolder(dp, m);
+        result = new DataProviderHolder(dp, m, instance);
       }
     }
 
@@ -417,7 +419,7 @@ public class Parameters {
      * sets of parameters for this method
      */
     DataProviderHolder dataProviderHolder =
-        findDataProvider(testMethod.getTestClass().getRealClass(),
+        findDataProvider(instance, testMethod.getTestClass().getRealClass(),
             testMethod.getConstructorOrMethod(), annotationFinder);
 
     if (null != dataProviderHolder) {
@@ -429,7 +431,7 @@ public class Parameters {
       }
 
       parameters = MethodInvocationHelper.invokeDataProvider(
-          instance, /* a test instance or null if the dataprovider is static*/
+          dataProviderHolder.instance, /* a test instance or null if the dataprovider is static*/
           dataProviderHolder.method,
           testMethod,
           methodParams.context,
diff --git a/src/test/java/test/dataprovider/NonStaticProvider.java b/src/test/java/test/dataprovider/NonStaticProvider.java
new file mode 100644
index 0000000..c49b3d7
--- /dev/null
+++ b/src/test/java/test/dataprovider/NonStaticProvider.java
@@ -0,0 +1,13 @@
+package test.dataprovider;
+
+import org.testng.annotations.DataProvider;
+
+public class NonStaticProvider {
+
+  @DataProvider(name = "external")
+  public Object[][] create() {
+    return new Object[][] {
+        new Object[] { "Cedric" },
+    };
+  }
+}
diff --git a/src/test/java/test/dataprovider/StaticDataProviderSampleTest.java b/src/test/java/test/dataprovider/StaticDataProviderSampleTest.java
index 1ee1445..64e5bf1 100644
--- a/src/test/java/test/dataprovider/StaticDataProviderSampleTest.java
+++ b/src/test/java/test/dataprovider/StaticDataProviderSampleTest.java
@@ -9,4 +9,9 @@ public class StaticDataProviderSampleTest {
   public void verifyStatic(String s) {
     Assert.assertEquals(s, "Cedric");
   }
+
+  @Test(dataProvider = "external", dataProviderClass = NonStaticProvider.class)
+  public void verifyExternal(String s) {
+    Assert.assertEquals(s, "Cedric");
+  }
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/testng.git



More information about the pkg-java-commits mailing list