| package org.junit.rules; |
| |
| import static org.hamcrest.CoreMatchers.allOf; |
| import static org.junit.matchers.JUnitMatchers.isThrowable; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.hamcrest.Matcher; |
| |
| /** |
| * Builds special matcher used by {@link ExpectedException}. |
| */ |
| class ExpectedExceptionMatcherBuilder { |
| |
| private final List<Matcher<?>> matchers = new ArrayList<Matcher<?>>(); |
| |
| void add(Matcher<?> matcher) { |
| matchers.add(matcher); |
| } |
| |
| boolean expectsThrowable() { |
| return !matchers.isEmpty(); |
| } |
| |
| Matcher<Throwable> build() { |
| return isThrowable(allOfTheMatchers()); |
| } |
| |
| private Matcher<Throwable> allOfTheMatchers() { |
| if (matchers.size() == 1) { |
| return cast(matchers.get(0)); |
| } |
| return allOf(castedMatchers()); |
| } |
| |
| @SuppressWarnings({"unchecked", "rawtypes"}) |
| private List<Matcher<? super Throwable>> castedMatchers() { |
| return new ArrayList<Matcher<? super Throwable>>((List) matchers); |
| } |
| |
| @SuppressWarnings("unchecked") |
| private Matcher<Throwable> cast(Matcher<?> singleMatcher) { |
| return (Matcher<Throwable>) singleMatcher; |
| } |
| } |