package test.annotationtransformer; import org.testng.Assert; import org.testng.IAnnotationTransformer; import org.testng.ITestResult; import org.testng.TestListenerAdapter; import org.testng.TestNG; import org.testng.annotations.Test; import org.testng.xml.Parser; import org.testng.xml.XmlSuite; import test.SimpleBaseTest; import java.io.ByteArrayInputStream; import java.util.Arrays; import java.util.Collection; import java.util.List; public class AnnotationTransformerTest extends SimpleBaseTest { /** * Make sure that without a transformer in place, a class-level * annotation invocationCount is correctly used. */ @Test public void verifyAnnotationWithoutTransformer() { TestNG tng = new TestNG(); tng.setVerbose(0); tng.setTestClasses(new Class[] { AnnotationTransformerClassInvocationSampleTest.class}); TestListenerAdapter tla = new TestListenerAdapter(); tng.addListener(tla); tng.run(); List passed = tla.getPassedTests(); Assert.assertEquals(passed.size(), 6); } /** * Test a transformer on a method-level @Test */ @Test public void verifyAnnotationTransformerMethod() { TestNG tng = new TestNG(); tng.setVerbose(0); tng.setAnnotationTransformer(new MyTransformer()); tng.setTestClasses(new Class[] { AnnotationTransformerSampleTest.class}); TestListenerAdapter tla = new TestListenerAdapter(); tng.addListener(tla); tng.run(); List passed = tla.getPassedTests(); Assert.assertEquals(passed.size(), 15); } /** * Without an annotation transformer, we should have zero * passed tests and one failed test called "one". */ @Test public void verifyAnnotationTransformerClass2() { runTest(null, null, "one"); } /** * With an annotation transformer, we should have one passed * test called "one" and zero failed tests. */ @Test public void verifyAnnotationTransformerClass() { runTest(new MyTimeOutTransformer(), "one", null); } private void runTest(IAnnotationTransformer transformer, String passedName, String failedName) { TestNG tng = new TestNG(); tng.setVerbose(0); if (transformer != null) { tng.setAnnotationTransformer(transformer); } tng.setTestClasses(new Class[] { AnnotationTransformerClassSampleTest.class}); TestListenerAdapter tla = new TestListenerAdapter(); tng.addListener(tla); tng.run(); List<ITestResult> results = passedName != null ? tla.getPassedTests() : tla.getFailedTests(); String name = passedName != null ? passedName : failedName; Assert.assertEquals(results.size(), 1); Assert.assertEquals(name, results.get(0).getMethod().getMethodName()); } @Test public void verifyConfigurationTransformer() { TestNG tng = new TestNG(); tng.setAnnotationTransformer(new ConfigurationTransformer()); tng.setVerbose(0); tng.setTestClasses(new Class[] { ConfigurationSampleTest.class}); TestListenerAdapter tla = new TestListenerAdapter(); tng.addListener(tla); tng.run(); Assert.assertEquals(ConfigurationSampleTest.getBefore(), "correct"); } @Test public void verifyDataProviderTransformer() { TestNG tng = create(); tng.setAnnotationTransformer(new DataProviderTransformer()); tng.setTestClasses(new Class[] { AnnotationTransformerDataProviderSampleTest.class}); TestListenerAdapter tla = new TestListenerAdapter(); tng.addListener(tla); tng.run(); Assert.assertEquals(tla.getPassedTests().size(), 1); } @Test public void verifyFactoryTransformer() { TestNG tng = create(); tng.setAnnotationTransformer(new FactoryTransformer()); tng.setTestClasses(new Class[] { AnnotationTransformerFactorySampleTest.class}); TestListenerAdapter tla = new TestListenerAdapter(); tng.addListener(tla); tng.run(); Assert.assertEquals(tla.getPassedTests().size(), 1); } @Test public void annotationTransformerInXmlShouldBeRun() throws Exception { String xml = "<suite name=\"SingleSuite\" >" + " <listeners>" + " <listener class-name=\"test.annotationtransformer.AnnotationTransformerInTestngXml\" />" + " </listeners>" + " <test enabled=\"true\" name=\"SingleTest\">" + " <classes>" + " <class name=\"test.annotationtransformer.AnnotationTransformerInTestngXml\" />" + " </classes>" + " </test>" + "</suite>" ; ByteArrayInputStream is = new ByteArrayInputStream(xml.getBytes()); Collection<XmlSuite> suites = new Parser(is).parse(); TestNG tng = create(); tng.setXmlSuites(Arrays.asList(suites.toArray(new XmlSuite[0]))); TestListenerAdapter tla = new TestListenerAdapter(); tng.addListener(tla); tng.run(); Assert.assertEquals(tla.getPassedTests().size(), 1); } }