Skip to content

Commit

Permalink
Fix #1084 Using deprecated addListener methods should not register an…
Browse files Browse the repository at this point in the history
…y times
  • Loading branch information
juherr committed Jul 14, 2016
1 parent 110875d commit 48f69f2
Show file tree
Hide file tree
Showing 6 changed files with 210 additions and 15 deletions.
1 change: 1 addition & 0 deletions CHANGES.txt
@@ -1,5 +1,6 @@
Current
Fixed: GITHUB-1085 Remove Guava dependency (Erik C. Thauvin & Julien Herr)
Fixed: GITHUB-1084 Using deprecated addListener methods should not register many times (Anna Kozlova & Julien Herr)

6.9.12
2016/06/21
Expand Down
35 changes: 25 additions & 10 deletions src/main/java/org/testng/TestNG.java
Expand Up @@ -683,8 +683,8 @@ public void setObjectFactory(ITestObjectFactory factory) {
* @param classes A list of classes, which must be either ISuiteListener,
* ITestListener or IReporter
*/
public void setListenerClasses(List<Class> classes) {
for (Class cls: classes) {
public void setListenerClasses(List<Class<? extends ITestNGListener>> classes) {
for (Class<? extends ITestNGListener> cls: classes) {
addListener(ClassHelper.newInstance(cls));
}
}
Expand Down Expand Up @@ -752,7 +752,9 @@ public void addListener(ITestNGListener listener) {
// TODO remove later
@Deprecated
public void addListener(IInvokedMethodListener listener) {
addListener((ITestNGListener) listener);
if (!m_invokedMethodListeners.contains(listener)) {
addListener((ITestNGListener) listener);
}
}

/**
Expand All @@ -761,7 +763,9 @@ public void addListener(IInvokedMethodListener listener) {
// TODO remove later
@Deprecated
public void addListener(ISuiteListener listener) {
addListener((ITestNGListener) listener);
if (!m_suiteListeners.contains(listener)) {
addListener((ITestNGListener) listener);
}
}

/**
Expand All @@ -770,7 +774,9 @@ public void addListener(ISuiteListener listener) {
// TODO remove later
@Deprecated
public void addListener(ITestListener listener) {
addListener((ITestNGListener) listener);
if (!m_testListeners.contains(listener)) {
addListener((ITestNGListener) listener);
}
}

/**
Expand All @@ -779,7 +785,9 @@ public void addListener(ITestListener listener) {
// TODO remove later
@Deprecated
public void addListener(IClassListener listener) {
addListener((ITestNGListener) listener);
if (!m_classListeners.contains(listener)) {
addListener((ITestNGListener) listener);
}
}

/**
Expand All @@ -788,7 +796,9 @@ public void addListener(IClassListener listener) {
// TODO remove later
@Deprecated
public void addListener(IReporter listener) {
addListener((ITestNGListener) listener);
if (!m_reporters.contains(listener)) {
addListener((ITestNGListener) listener);
}
}

/**
Expand All @@ -797,7 +807,9 @@ public void addListener(IReporter listener) {
// TODO remove later
@Deprecated
public void addInvokedMethodListener(IInvokedMethodListener listener) {
addListener((ITestNGListener) listener);
if (!m_invokedMethodListeners.contains(listener)) {
addListener((ITestNGListener) listener);
}
}

public Set<IReporter> getReporters() {
Expand Down Expand Up @@ -1485,10 +1497,13 @@ protected void configure(CommandLineArgs cla) {
sep = ",";
}
String[] strs = Utils.split(cla.listener, sep);
List<Class> classes = Lists.newArrayList();
List<Class<? extends ITestNGListener>> classes = Lists.newArrayList();

for (String cls : strs) {
classes.add(ClassHelper.fileToClass(cls));
Class<?> clazz = ClassHelper.fileToClass(cls);
if (ITestNGListener.class.isAssignableFrom(clazz)) {
classes.add((Class<? extends ITestNGListener>) clazz);
}
}

setListenerClasses(classes);
Expand Down
23 changes: 19 additions & 4 deletions src/test/java/test/listeners/ListenerTest.java
@@ -1,9 +1,6 @@
package test.listeners;

import org.testng.Assert;
import org.testng.ITestNGListener;
import org.testng.TestListenerAdapter;
import org.testng.TestNG;
import org.testng.*;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.testng.collections.Lists;
Expand Down Expand Up @@ -215,4 +212,22 @@ public void setStatusShouldWorkInListener() {
Assert.assertEquals(listener.getContext().getSkippedTests().size(), 0);
Assert.assertEquals(listener.getContext().getPassedTests().size(), 1);
}

@Test(description = "GITHUB-1084: Using deprecated addListener methods should not register many times")
public void listenerRegistration() {
MultiListener listener = new MultiListener();
TestNG tng = create(SimpleSample.class);
tng.addListener((ISuiteListener) listener);
tng.addListener((ITestListener) listener);
tng.addInvokedMethodListener(listener);
tng.run();
Assert.assertEquals(listener.getOnSuiteStartCount(), 1);
Assert.assertEquals(listener.getOnSuiteFinishCount(), 1);
Assert.assertEquals(listener.getOnTestStartCount(), 1);
Assert.assertEquals(listener.getOnTestFinishCount(), 1);
Assert.assertEquals(listener.getBeforeInvocationCount(), 1);
Assert.assertEquals(listener.getAfterInvocationCount(), 1);
Assert.assertEquals(listener.getOnMethodTestStartCount(), 1);
Assert.assertEquals(listener.getOnMethodTestSuccessCount(), 1);
}
}
153 changes: 153 additions & 0 deletions src/test/java/test/listeners/MultiListener.java
@@ -0,0 +1,153 @@
package test.listeners;

import org.testng.IInvokedMethod;
import org.testng.IInvokedMethodListener;
import org.testng.ISuite;
import org.testng.ISuiteListener;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.internal.IResultListener;

public class MultiListener implements ISuiteListener, IResultListener, IInvokedMethodListener {

private int onConfigurationSuccessCount = 0;
private int onConfigurationFailureCount = 0;
private int onConfigurationSkipCount = 0;
private int beforeInvocationCount = 0;
private int afterInvocationCount = 0;
private int onSuiteStartCount = 0;
private int onSuiteFinishCount = 0;
private int onMethodTestStartCount = 0;
private int onMethodTestSuccessCount = 0;
private int onMethodTestFailureCount = 0;
private int onMethodTestSkippedCount = 0;
private int onMethodTestFailedButWithinSuccessPercentageCount = 0;
private int onTestStartCount = 0;
private int onTestFinishCount = 0;

@Override
public void onConfigurationSuccess(ITestResult itr) {
onConfigurationSuccessCount++;
}

@Override
public void onConfigurationFailure(ITestResult itr) {
onConfigurationFailureCount++;
}

@Override
public void onConfigurationSkip(ITestResult itr) {
onConfigurationSkipCount++;
}

@Override
public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
beforeInvocationCount++;
}

@Override
public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
afterInvocationCount++;
}

@Override
public void onStart(ISuite suite) {
onSuiteStartCount++;
}

@Override
public void onFinish(ISuite suite) {
onSuiteFinishCount++;
}

@Override
public void onTestStart(ITestResult result) {
onMethodTestStartCount++;
}

@Override
public void onTestSuccess(ITestResult result) {
onMethodTestSuccessCount++;
}

@Override
public void onTestFailure(ITestResult result) {
onMethodTestFailureCount++;
}

@Override
public void onTestSkipped(ITestResult result) {
onMethodTestSkippedCount++;
}

@Override
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
onMethodTestFailedButWithinSuccessPercentageCount++;
}

@Override
public void onStart(ITestContext context) {
onTestStartCount++;
}

@Override
public void onFinish(ITestContext context) {
onTestFinishCount++;
}

public int getOnConfigurationSuccessCount() {
return onConfigurationSuccessCount;
}

public int getOnConfigurationFailureCount() {
return onConfigurationFailureCount;
}

public int getOnConfigurationSkipCount() {
return onConfigurationSkipCount;
}

public int getBeforeInvocationCount() {
return beforeInvocationCount;
}

public int getAfterInvocationCount() {
return afterInvocationCount;
}

public int getOnSuiteStartCount() {
return onSuiteStartCount;
}

public int getOnSuiteFinishCount() {
return onSuiteFinishCount;
}

public int getOnMethodTestStartCount() {
return onMethodTestStartCount;
}

public int getOnMethodTestSuccessCount() {
return onMethodTestSuccessCount;
}

public int getOnMethodTestFailureCount() {
return onMethodTestFailureCount;
}

public int getOnMethodTestSkippedCount() {
return onMethodTestSkippedCount;
}

public int getOnMethodTestFailedButWithinSuccessPercentageCount() {
return onMethodTestFailedButWithinSuccessPercentageCount;
}

public int getOnTestStartCount() {
return onTestStartCount;
}

public int getOnTestFinishCount() {
return onTestFinishCount;
}
}
11 changes: 11 additions & 0 deletions src/test/java/test/listeners/SimpleSample.java
@@ -0,0 +1,11 @@
package test.listeners;

import org.testng.annotations.Test;

public class SimpleSample {

@Test
public void test() {

}
}
2 changes: 1 addition & 1 deletion src/test/java/test/multiplelisteners/TestMaker.java
Expand Up @@ -19,7 +19,7 @@ public void run()
{
final TestNG tng = new TestNG();
tng.setUseDefaultListeners(false);
tng.setListenerClasses(Arrays.<Class> asList(TestListenerAdapter.class, SimpleReporter.class));
tng.setListenerClasses(Arrays.asList(TestListenerAdapter.class, SimpleReporter.class));
final List<XmlSuite> suites = createSuites();
tng.setXmlSuites(suites);
tng.setVerbose(0);
Expand Down

0 comments on commit 48f69f2

Please sign in to comment.