diff options
author | Julien Herr <julien.herr@alcatel-lucent.com> | 2015-11-26 23:02:18 +0100 |
---|---|---|
committer | Julien Herr <julien.herr@alcatel-lucent.com> | 2015-11-26 23:02:18 +0100 |
commit | 7ee5cec3b5ee1d35e056d443a7636885322f63d7 (patch) | |
tree | d0e11482c0d8be7b74e48794b36a0ec4d37bacf1 /src | |
parent | def4c569704623bdde13ff3a238f6a7305951bf6 (diff) | |
download | testng-7ee5cec3b5ee1d35e056d443a7636885322f63d7.tar.gz |
Support @Listeners in annotation transformer
Diffstat (limited to 'src')
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) {} +} |