1facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffinpackage org.junit.rules; 2facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin 3facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffinimport static org.hamcrest.CoreMatchers.allOf; 4facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffinimport static org.junit.matchers.JUnitMatchers.isThrowable; 5facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin 6facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffinimport java.util.ArrayList; 7facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffinimport java.util.List; 8facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin 9facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffinimport org.hamcrest.Matcher; 10facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin 11facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin/** 12facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin * Builds special matcher used by {@link ExpectedException}. 13facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin */ 14facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffinclass ExpectedExceptionMatcherBuilder { 15facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin 16facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin private final List<Matcher<?>> matchers = new ArrayList<Matcher<?>>(); 17facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin 18facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin void add(Matcher<?> matcher) { 19facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin matchers.add(matcher); 20facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin } 21facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin 22facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin boolean expectsThrowable() { 23facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin return !matchers.isEmpty(); 24facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin } 25facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin 26facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin Matcher<Throwable> build() { 27facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin return isThrowable(allOfTheMatchers()); 28facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin } 29facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin 30facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin private Matcher<Throwable> allOfTheMatchers() { 31facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin if (matchers.size() == 1) { 32facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin return cast(matchers.get(0)); 33facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin } 34facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin return allOf(castedMatchers()); 35facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin } 36facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin 37facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin @SuppressWarnings({"unchecked", "rawtypes"}) 38facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin private List<Matcher<? super Throwable>> castedMatchers() { 39facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin return new ArrayList<Matcher<? super Throwable>>((List) matchers); 40facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin } 41facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin 42facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin @SuppressWarnings("unchecked") 43facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin private Matcher<Throwable> cast(Matcher<?> singleMatcher) { 44facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin return (Matcher<Throwable>) singleMatcher; 45facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin } 46facdecc8e055d722b8c0e0c8fbf8a8644e7fec57Paul Duffin} 47