package org.junit.tests.assertion;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.lang.annotation.AnnotationFormatError;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
import org.junit.runners.model.MultipleFailureException;
/**
* Tests for {@link org.junit.runners.model.MultipleFailureException}
*
* @author kcooney@google.com (Kevin Cooney)
*/
public class MultipleFailureExceptionTest {
@Test
public void assertEmptyDoesNotThrowForEmptyList() throws Exception {
MultipleFailureException.assertEmpty(Collections.<Throwable>emptyList());
}
@Test
public void assertEmptyRethrowsSingleRuntimeException() throws Exception {
Throwable exception= new ExpectedException("pesto");
List<Throwable> errors= Collections.singletonList(exception);
try {
MultipleFailureException.assertEmpty(errors);
fail();
} catch (ExpectedException e) {
assertSame(e, exception);
}
}
@Test
public void assertEmptyRethrowsSingleError() throws Exception {
Throwable exception= new AnnotationFormatError("changeo");
List<Throwable> errors= Collections.singletonList(exception);
try {
MultipleFailureException.assertEmpty(errors);
fail();
} catch (AnnotationFormatError e) {
assertSame(e, exception);
}
}
@Test
public void assertEmptyThrowsMutipleFailureExceptionForManyThrowables() throws Exception {
List<Throwable> errors = new ArrayList<Throwable>();
errors.add(new ExpectedException("basil"));
errors.add(new RuntimeException("garlic"));
try {
MultipleFailureException.assertEmpty(errors);
fail();
} catch (MultipleFailureException expected) {
assertThat(expected.getFailures(), equalTo(errors));
assertTrue(expected.getMessage().startsWith("There were 2 errors:\n"));
assertTrue(expected.getMessage().contains("ExpectedException(basil)\n"));
assertTrue(expected.getMessage().contains("RuntimeException(garlic)"));
}
}
private static class ExpectedException extends RuntimeException {
private static final long serialVersionUID = 1L;
public ExpectedException(String message) {
super(message);
}
}
}