[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