diff options
Diffstat (limited to 'src/test/java/org/zwobble/couscous/tests/util/ExtraMatchers.java')
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/util/ExtraMatchers.java | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/util/ExtraMatchers.java b/src/test/java/org/zwobble/couscous/tests/util/ExtraMatchers.java new file mode 100644 index 0000000..3107d53 --- /dev/null +++ b/src/test/java/org/zwobble/couscous/tests/util/ExtraMatchers.java @@ -0,0 +1,39 @@ +package org.zwobble.couscous.tests.util; + +import org.hamcrest.Description; +import org.hamcrest.DiagnosingMatcher; +import org.hamcrest.Matcher; + +public class ExtraMatchers { + public static <T, U> Matcher<T> isInstance(Class<U> type, Matcher<? super U> downcastMatcher) { + return new DiagnosingMatcher<T>() { + @Override + protected boolean matches(Object item, Description mismatch) { + if (null == item) { + mismatch.appendText("null"); + return false; + } + + if (!type.isInstance(item)) { + mismatch.appendValue(item).appendText(" is a " + item.getClass().getName()); + return false; + } + + if (!downcastMatcher.matches(item)) { + downcastMatcher.describeMismatch(item, mismatch); + return false; + } + + return true; + } + + @Override + public void describeTo(Description description) { + description + .appendText(type.getSimpleName()) + .appendText(" with "); + downcastMatcher.describeTo(description); + } + }; + } +} |
