package org.junit.rules;
import static junit.framework.Assert.fail;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assume.assumeTrue;
import static org.junit.runner.JUnitCore.runClasses;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runners.model.FrameworkMethod;
@SuppressWarnings("deprecation")
public class TestWatchmanTest {
public static class ViolatedAssumptionTest {
static StringBuilder log;
@BeforeClass
public static void initLog() {
log = new StringBuilder();
}
@Rule
public LoggingTestWatchman watchman = new LoggingTestWatchman(log);
@Test
public void succeeds() {
assumeTrue(false);
}
}
@Test
public void neitherLogSuccessNorFailedForViolatedAssumption() {
runClasses(ViolatedAssumptionTest.class);
assertThat(ViolatedAssumptionTest.log.toString(),
is("starting finished "));
}
public static class FailingTest {
static StringBuilder log;
@BeforeClass
public static void initLog() {
log = new StringBuilder();
}
@Rule
public LoggingTestWatchman watchman = new LoggingTestWatchman(log);
@Test
public void succeeds() {
fail();
}
}
@Test
public void logFailingTest() {
runClasses(FailingTest.class);
assertThat(FailingTest.log.toString(),
is("starting failed finished "));
}
private static class LoggingTestWatchman extends TestWatchman {
private final StringBuilder log;
private LoggingTestWatchman(StringBuilder log) {
this.log = log;
}
@Override
public void succeeded(FrameworkMethod method) {
log.append("succeeded ");
}
@Override
public void failed(Throwable e, FrameworkMethod method) {
log.append("failed ");
}
@Override
public void starting(FrameworkMethod method) {
log.append("starting ");
}
@Override
public void finished(FrameworkMethod method) {
log.append("finished ");
}
}
}