aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJulien Herr <julien.herr@alcatel-lucent.com>2015-11-26 23:02:18 +0100
committerJulien Herr <julien.herr@alcatel-lucent.com>2015-11-26 23:02:18 +0100
commit7ee5cec3b5ee1d35e056d443a7636885322f63d7 (patch)
treed0e11482c0d8be7b74e48794b36a0ec4d37bacf1 /src
parentdef4c569704623bdde13ff3a238f6a7305951bf6 (diff)
downloadtestng-7ee5cec3b5ee1d35e056d443a7636885322f63d7.tar.gz
Support @Listeners in annotation transformer
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/testng/IAnnotationTransformer3.java9
-rw-r--r--src/main/java/org/testng/TestRunner.java3
-rw-r--r--src/main/java/org/testng/annotations/IListenersAnnotation.java10
-rw-r--r--src/main/java/org/testng/internal/annotations/IListeners.java7
-rwxr-xr-xsrc/main/java/org/testng/internal/annotations/JDK15AnnotationFinder.java18
-rwxr-xr-xsrc/main/java/org/testng/internal/annotations/JDK15TagFactory.java3
-rw-r--r--src/test/java/test/annotationtransformer/AnnotationTransformerClassSampleTest.java2
-rw-r--r--src/test/java/test/annotationtransformer/AnnotationTransformerTest.java13
-rw-r--r--src/test/java/test/annotationtransformer/MyListenerTransformer.java33
-rw-r--r--src/test/java/test/annotationtransformer/MySuiteListener.java17
10 files changed, 106 insertions, 9 deletions
diff --git a/src/main/java/org/testng/IAnnotationTransformer3.java b/src/main/java/org/testng/IAnnotationTransformer3.java
new file mode 100644
index 00000000..eb10508c
--- /dev/null
+++ b/src/main/java/org/testng/IAnnotationTransformer3.java
@@ -0,0 +1,9 @@
+package org.testng;
+
+import org.testng.annotations.IListenersAnnotation;
+
+public interface IAnnotationTransformer3 extends IAnnotationTransformer2 {
+
+ void transform(IListenersAnnotation annotation, Class testClass);
+
+}
diff --git a/src/main/java/org/testng/TestRunner.java b/src/main/java/org/testng/TestRunner.java
index cce56626..5dddfd0c 100644
--- a/src/main/java/org/testng/TestRunner.java
+++ b/src/main/java/org/testng/TestRunner.java
@@ -15,6 +15,7 @@ import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import org.testng.annotations.Guice;
+import org.testng.annotations.IListenersAnnotation;
import org.testng.collections.ListMultiMap;
import org.testng.collections.Lists;
import org.testng.collections.Maps;
@@ -265,7 +266,7 @@ public class TestRunner
result.listenerClasses = Lists.newArrayList();
do {
- IListeners l = m_annotationFinder.findAnnotation(cls, IListeners.class);
+ IListenersAnnotation l = m_annotationFinder.findAnnotation(cls, IListenersAnnotation.class);
if (l != null) {
Class<? extends ITestNGListener>[] classes = l.getValue();
for (Class<? extends ITestNGListener> c : classes) {
diff --git a/src/main/java/org/testng/annotations/IListenersAnnotation.java b/src/main/java/org/testng/annotations/IListenersAnnotation.java
new file mode 100644
index 00000000..db1f3870
--- /dev/null
+++ b/src/main/java/org/testng/annotations/IListenersAnnotation.java
@@ -0,0 +1,10 @@
+package org.testng.annotations;
+
+import org.testng.ITestNGListener;
+
+public interface IListenersAnnotation extends IAnnotation {
+
+ Class<? extends ITestNGListener>[] getValue();
+
+ void setValue(Class<? extends ITestNGListener>[] value);
+}
diff --git a/src/main/java/org/testng/internal/annotations/IListeners.java b/src/main/java/org/testng/internal/annotations/IListeners.java
index 3102f28d..e53772db 100644
--- a/src/main/java/org/testng/internal/annotations/IListeners.java
+++ b/src/main/java/org/testng/internal/annotations/IListeners.java
@@ -1,10 +1,7 @@
package org.testng.internal.annotations;
-import org.testng.ITestNGListener;
-import org.testng.annotations.IAnnotation;
+import org.testng.annotations.IListenersAnnotation;
-public interface IListeners extends IAnnotation {
- Class<? extends ITestNGListener>[] getValue();
+public interface IListeners extends IListenersAnnotation {
- void setValue(Class<? extends ITestNGListener>[] value);
}
diff --git a/src/main/java/org/testng/internal/annotations/JDK15AnnotationFinder.java b/src/main/java/org/testng/internal/annotations/JDK15AnnotationFinder.java
index 2de11c71..d1b93836 100755
--- a/src/main/java/org/testng/internal/annotations/JDK15AnnotationFinder.java
+++ b/src/main/java/org/testng/internal/annotations/JDK15AnnotationFinder.java
@@ -8,6 +8,7 @@ import java.util.concurrent.ConcurrentHashMap;
import org.testng.IAnnotationTransformer;
import org.testng.IAnnotationTransformer2;
+import org.testng.IAnnotationTransformer3;
import org.testng.ITestNGMethod;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterGroups;
@@ -28,6 +29,7 @@ import org.testng.annotations.IConfigurationAnnotation;
import org.testng.annotations.IDataProviderAnnotation;
import org.testng.annotations.IExpectedExceptionsAnnotation;
import org.testng.annotations.IFactoryAnnotation;
+import org.testng.annotations.IListenersAnnotation;
import org.testng.annotations.IObjectFactoryAnnotation;
import org.testng.annotations.IParametersAnnotation;
import org.testng.annotations.ITestAnnotation;
@@ -56,6 +58,7 @@ public class JDK15AnnotationFinder implements IAnnotationFinder {
@SuppressWarnings({"deprecation"})
public JDK15AnnotationFinder(IAnnotationTransformer transformer) {
m_transformer = transformer;
+ m_annotationMap.put(IListenersAnnotation.class, Listeners.class);
m_annotationMap.put(IConfigurationAnnotation.class, Configuration.class);
m_annotationMap.put(IDataProviderAnnotation.class, DataProvider.class);
m_annotationMap.put(IExpectedExceptionsAnnotation.class, ExpectedExceptions.class);
@@ -63,6 +66,7 @@ public class JDK15AnnotationFinder implements IAnnotationFinder {
m_annotationMap.put(IObjectFactoryAnnotation.class, ObjectFactory.class);
m_annotationMap.put(IParametersAnnotation.class, Parameters.class);
m_annotationMap.put(ITestAnnotation.class, Test.class);
+ // internal
m_annotationMap.put(IBeforeSuite.class, BeforeSuite.class);
m_annotationMap.put(IAfterSuite.class, AfterSuite.class);
m_annotationMap.put(IBeforeTest.class, BeforeTest.class);
@@ -73,7 +77,6 @@ public class JDK15AnnotationFinder implements IAnnotationFinder {
m_annotationMap.put(IAfterGroups.class, AfterGroups.class);
m_annotationMap.put(IBeforeMethod.class, BeforeMethod.class);
m_annotationMap.put(IAfterMethod.class, AfterMethod.class);
- m_annotationMap.put(IListeners.class, Listeners.class);
}
private <A extends Annotation> A findAnnotationInSuperClasses(Class<?> cls, Class<A> a) {
@@ -164,7 +167,18 @@ public class JDK15AnnotationFinder implements IAnnotationFinder {
else if (a instanceof IFactoryAnnotation) {
transformer2.transform((IFactoryAnnotation) a, testMethod);
}
- }
+
+ else if (m_transformer instanceof IAnnotationTransformer3) {
+ IAnnotationTransformer3 transformer = (IAnnotationTransformer3) m_transformer;
+
+ //
+ // Transform @Listeners
+ //
+ if (a instanceof IListenersAnnotation) {
+ transformer.transform((IListenersAnnotation)a, testClass);
+ }
+ } // End IAnnotationTransformer3
+ } // End IAnnotationTransformer2
}
@Override
diff --git a/src/main/java/org/testng/internal/annotations/JDK15TagFactory.java b/src/main/java/org/testng/internal/annotations/JDK15TagFactory.java
index 4a13707b..63d413c8 100755
--- a/src/main/java/org/testng/internal/annotations/JDK15TagFactory.java
+++ b/src/main/java/org/testng/internal/annotations/JDK15TagFactory.java
@@ -27,6 +27,7 @@ import org.testng.annotations.IConfigurationAnnotation;
import org.testng.annotations.IDataProviderAnnotation;
import org.testng.annotations.IExpectedExceptionsAnnotation;
import org.testng.annotations.IFactoryAnnotation;
+import org.testng.annotations.IListenersAnnotation;
import org.testng.annotations.IObjectFactoryAnnotation;
import org.testng.annotations.IParametersAnnotation;
import org.testng.annotations.ITestAnnotation;
@@ -71,7 +72,7 @@ public class JDK15TagFactory {
else if (annotationClass == ITestAnnotation.class) {
result = createTestTag(cls, a, transformer);
}
- else if (annotationClass == IListeners.class) {
+ else if (annotationClass == IListenersAnnotation.class) {
result = createListenersTag(cls, a, transformer);
}
else if (annotationClass == IBeforeSuite.class || annotationClass == IAfterSuite.class ||
diff --git a/src/test/java/test/annotationtransformer/AnnotationTransformerClassSampleTest.java b/src/test/java/test/annotationtransformer/AnnotationTransformerClassSampleTest.java
index 8e7fa14d..94b5f6d5 100644
--- a/src/test/java/test/annotationtransformer/AnnotationTransformerClassSampleTest.java
+++ b/src/test/java/test/annotationtransformer/AnnotationTransformerClassSampleTest.java
@@ -1,5 +1,6 @@
package test.annotationtransformer;
+import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
/**
@@ -10,6 +11,7 @@ import org.testng.annotations.Test;
*
*/
@Test(timeOut = 1000)
+@Listeners(MySuiteListener.class)
public class AnnotationTransformerClassSampleTest {
public void one() {
diff --git a/src/test/java/test/annotationtransformer/AnnotationTransformerTest.java b/src/test/java/test/annotationtransformer/AnnotationTransformerTest.java
index 73521fec..ec929102 100644
--- a/src/test/java/test/annotationtransformer/AnnotationTransformerTest.java
+++ b/src/test/java/test/annotationtransformer/AnnotationTransformerTest.java
@@ -123,6 +123,7 @@ public class AnnotationTransformerTest extends SimpleBaseTest {
private void runTest(IAnnotationTransformer transformer,
String passedName, String failedName)
{
+ MySuiteListener.triggered = false;
TestNG tng = new TestNG();
tng.setVerbose(0);
if (transformer != null) {
@@ -140,8 +141,20 @@ public class AnnotationTransformerTest extends SimpleBaseTest {
Assert.assertEquals(results.size(), 1);
Assert.assertEquals(name, results.get(0).getMethod().getMethodName());
+ Assert.assertTrue(MySuiteListener.triggered);
}
+ @Test
+ public void verifyListenerAnnotationTransformerClass() {
+ MySuiteListener.triggered = false;
+ TestNG tng = new TestNG();
+ tng.setVerbose(0);
+ tng.setAnnotationTransformer(new MyListenerTransformer());
+ tng.setTestClasses(new Class[]{AnnotationTransformerClassSampleTest.class});
+
+ tng.run();
+ Assert.assertFalse(MySuiteListener.triggered);
+ }
@Test
public void verifyConfigurationTransformer() {
diff --git a/src/test/java/test/annotationtransformer/MyListenerTransformer.java b/src/test/java/test/annotationtransformer/MyListenerTransformer.java
new file mode 100644
index 00000000..c2b2e2e1
--- /dev/null
+++ b/src/test/java/test/annotationtransformer/MyListenerTransformer.java
@@ -0,0 +1,33 @@
+package test.annotationtransformer;
+
+import org.testng.IAnnotationTransformer3;
+import org.testng.annotations.IConfigurationAnnotation;
+import org.testng.annotations.IDataProviderAnnotation;
+import org.testng.annotations.IFactoryAnnotation;
+import org.testng.annotations.IListenersAnnotation;
+import org.testng.annotations.ITestAnnotation;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+
+public class MyListenerTransformer implements IAnnotationTransformer3 {
+
+ @Override
+ public void transform(IListenersAnnotation annotation, Class testClass) {
+ annotation.setValue(new Class[0]);
+ }
+
+ @Override
+ public void transform(IConfigurationAnnotation annotation, Class testClass,
+ Constructor testConstructor, Method testMethod) {}
+
+ @Override
+ public void transform(IDataProviderAnnotation annotation, Method method) {}
+
+ @Override
+ public void transform(IFactoryAnnotation annotation, Method method) {}
+
+ @Override
+ public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor,
+ Method testMethod) {}
+}
diff --git a/src/test/java/test/annotationtransformer/MySuiteListener.java b/src/test/java/test/annotationtransformer/MySuiteListener.java
new file mode 100644
index 00000000..4698df96
--- /dev/null
+++ b/src/test/java/test/annotationtransformer/MySuiteListener.java
@@ -0,0 +1,17 @@
+package test.annotationtransformer;
+
+import org.testng.ISuite;
+import org.testng.ISuiteListener;
+
+public class MySuiteListener implements ISuiteListener {
+
+ public static boolean triggered = false;
+
+ @Override
+ public void onStart(ISuite suite) {
+ triggered = true;
+ }
+
+ @Override
+ public void onFinish(ISuite suite) {}
+}