package test.testng1232; import org.testng.Assert; import org.testng.ITestNGListener; import org.testng.TestNG; import org.testng.annotations.Test; import org.testng.xml.XmlSuite; import org.testng.xml.XmlTest; import test.SimpleBaseTest; import test.testng1232.TestListenerFor1232.CounterTypes; public class TestListenerInstances extends SimpleBaseTest { @Test public void testIfOnlyOneListenerInstanceExists() { runTestForTestClass(TestClassContainer.SimpleTestClass.class); } @Test public void testIfOnlyOneListenerInstanceExistsUsingAnnotations() { runTestForTestClass(TestClassContainer.SimpleTestClassWithListener.class); } @Test public void testIfOnlyOneListenerInstanceExistsUsingListenerTag() { runTestForTestClass(TestClassContainer.SimpleTestClass.class, true); } private static void runTestForTestClass(Class<?> clazz) { runTestForTestClass(clazz, false); } private static void runTestForTestClass(Class<?> clazz, boolean injectListenerViaTag) { TestNG tng = createTestNGInstanceFor(clazz, injectListenerViaTag); TestListenerFor1232.resetCounters(); TestListenerFor1232 listener = new TestListenerFor1232(); tng.addListener((ITestNGListener) listener); TestListenerFor1232 anotherListener = new TestListenerFor1232(); tng.addListener((ITestNGListener) anotherListener); tng.run(); for (CounterTypes type : CounterTypes.values()) { Assert.assertEquals(TestListenerFor1232.counters.get(type).intValue(), 1); } } private static TestNG createTestNGInstanceFor(Class<?> clazz, boolean addListenerTag) { XmlSuite xmlSuite = createXmlSuite("Suite"); if (addListenerTag) { xmlSuite.addListener(TestListenerFor1232.class.getName()); } XmlTest xmlTest = createXmlTest(xmlSuite, "Test"); createXmlClass(xmlTest, clazz); return create(xmlSuite); } }