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 <[email protected]> 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 _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

