package org.junit.tests;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotSame;
import junit.framework.JUnit4TestAdapter;
import org.junit.Test;
import org.junit.runner.Description;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.RunListener;
import org.junit.runner.notification.Failure;
public class TestListenerTest {
int count;
class ErrorListener extends RunListener {
@Override
public void testRunStarted(Description description) throws Exception {
throw new Error();
}
}
public static class OneTest {
@Test public void nothing() {}
}
@Test(expected=Error.class) public void failingListener() {
JUnitCore runner= new JUnitCore();
runner.addListener(new ErrorListener());
runner.run(OneTest.class);
}
class ExceptionListener extends ErrorListener {
@Override
public void testRunStarted(Description description) throws Exception {
count++;
throw new Exception();
}
}
@Test public void removeFailingListeners() {
JUnitCore core= new JUnitCore();
core.addListener(new ExceptionListener());
count= 0;
Result result= core.run(OneTest.class);
assertEquals(1, count);
assertEquals(1, result.getFailureCount());
Failure testFailure= result.getFailures().get(0);
assertEquals(Description.TEST_MECHANISM, testFailure.getDescription());
count= 0;
core.run(OneTest.class);
assertEquals(0, count); // Doesn't change because listener was removed
}
@Test public void freshResultEachTime() {
JUnitCore core= new JUnitCore();
Result first= core.run(OneTest.class);
Result second= core.run(OneTest.class);
assertNotSame(first, second);
}
public static junit.framework.Test suite() {
return new JUnit4TestAdapter(TestListenerTest.class);
}
}