package sk.stuba.fiit.perconik.core.resources;
import javax.annotation.Nullable;
import org.eclipse.jdt.junit.JUnitCore;
import org.eclipse.jdt.junit.model.ITestCaseElement;
import org.eclipse.jdt.junit.model.ITestRunSession;
import sk.stuba.fiit.perconik.core.listeners.TestRunListener;
import static com.google.common.base.Preconditions.checkNotNull;
enum TestRunHandler implements Handler<TestRunListener> {
INSTANCE;
private static final class TestRunListenerProxy extends org.eclipse.jdt.junit.TestRunListener {
final TestRunListener listener;
public TestRunListenerProxy(final TestRunListener listener) {
this.listener = checkNotNull(listener);
}
@Override
public void sessionLaunched(final ITestRunSession session) {
this.listener.sessionLaunched(session);
}
@Override
public void sessionStarted(final ITestRunSession session) {
this.listener.sessionStarted(session);
}
@Override
public void sessionFinished(final ITestRunSession session) {
this.listener.sessionFinished(session);
}
@Override
public void testCaseStarted(final ITestCaseElement testCaseElement) {
this.listener.testCaseStarted(testCaseElement);
}
@Override
public void testCaseFinished(final ITestCaseElement testCaseElement) {
this.listener.testCaseFinished(testCaseElement);
}
@Override
public boolean equals(@Nullable final Object o) {
if (this == o) {
return true;
}
if (!(o instanceof TestRunListenerProxy)) {
return false;
}
TestRunListenerProxy other = (TestRunListenerProxy) o;
return this.listener.equals(other.listener);
}
@Override
public int hashCode() {
return this.listener.hashCode();
}
@Override
public String toString() {
return this.listener.toString();
}
}
public void register(final TestRunListener listener) {
JUnitCore.addTestRunListener(new TestRunListenerProxy(listener));
}
public void unregister(final TestRunListener listener) {
JUnitCore.addTestRunListener(new TestRunListenerProxy(listener));
}
}