package org.jboss.test.faces.mockito.runner;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import javax.faces.context.FacesContext;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runner.notification.RunNotifier;
import org.junit.runners.model.InitializationError;
import org.mockito.internal.runners.JUnit45AndHigherRunnerImpl;
public class TestFacesMockitoRunnerBeforeFailure {
@Test
public void test() throws InitializationError {
try {
new JUnit45AndHigherRunnerImpl(PrivateTest.class).run(new RunNotifier());
} finally {
assertNull("FacesContext should be cleared after failed test", FacesContext.getCurrentInstance());
assertTrue("@Before should be invoked", PrivateTest.beforeWasCalled);
assertFalse("@Test should not be invoked", PrivateTest.testWasCalled);
assertTrue("@After should be invoked", PrivateTest.afterWasCalled);
assertTrue("@AfterClass should be invoked", PrivateTest.afterClassWasCalled);
}
}
@Ignore("PrivateTest will be ran from outside")
@RunWith(FacesMockitoRunner.class)
public static class PrivateTest {
private static boolean beforeWasCalled = false;
private static boolean testWasCalled = false;
private static boolean afterWasCalled = false;
private static boolean afterClassWasCalled = false;
@Before
public void setUp() {
beforeWasCalled = true;
assertNotNull(FacesContext.getCurrentInstance());
throw new AfterFailureException();
}
@Test
public void privateTest() {
testWasCalled = true;
}
@After
public void tearDown() {
afterWasCalled = true;
}
@AfterClass
public static void verify() {
afterClassWasCalled = true;
}
}
public static class AfterFailureException extends RuntimeException {
}
}