diff options
Diffstat (limited to 'hamcrest-core/src/test/java/org/hamcrest/AbstractMatcherTest.java')
-rw-r--r-- | hamcrest-core/src/test/java/org/hamcrest/AbstractMatcherTest.java | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/hamcrest-core/src/test/java/org/hamcrest/AbstractMatcherTest.java b/hamcrest-core/src/test/java/org/hamcrest/AbstractMatcherTest.java new file mode 100644 index 0000000..22f823b --- /dev/null +++ b/hamcrest-core/src/test/java/org/hamcrest/AbstractMatcherTest.java @@ -0,0 +1,77 @@ +package org.hamcrest; + +import junit.framework.TestCase; +import org.junit.Assert; + +public abstract class AbstractMatcherTest extends TestCase { + + /** + * Create an instance of the Matcher so some generic safety-net tests can be run on it. + */ + protected abstract Matcher<?> createMatcher(); + + public static <T> void assertMatches(Matcher<T> matcher, T arg) { + assertMatches("Expected match, but mismatched", matcher, arg); + } + + public static <T> void assertMatches(String message, Matcher<T> matcher, T arg) { + if (!matcher.matches(arg)) { + Assert.fail(message + " because: '" + mismatchDescription(matcher, arg) + "'"); + } + } + + public static <T> void assertDoesNotMatch(Matcher<? super T> c, T arg) { + assertDoesNotMatch("Unexpected match", c, arg); + } + + public static <T> void assertDoesNotMatch(String message, Matcher<? super T> c, T arg) { + Assert.assertFalse(message, c.matches(arg)); + } + + public static void assertDescription(String expected, Matcher<?> matcher) { + Description description = new StringDescription(); + description.appendDescriptionOf(matcher); + Assert.assertEquals("Expected description", expected, description.toString().trim()); + } + + public static <T> void assertMismatchDescription(String expected, Matcher<? super T> matcher, T arg) { + Assert.assertFalse("Precondition: Matcher should not match item.", matcher.matches(arg)); + Assert.assertEquals("Expected mismatch description", expected, mismatchDescription(matcher, arg)); + } + + public static void assertNullSafe(Matcher<?> matcher) { + try { + matcher.matches(null); + } + catch (Exception e) { + Assert.fail("Matcher was not null safe"); + } + } + + public static void assertUnknownTypeSafe(Matcher<?> matcher) { + try { + matcher.matches(new UnknownType()); + } + catch (Exception e) { + Assert.fail("Matcher was not unknown type safe"); + } + } + + public static <T> String mismatchDescription(Matcher<? super T> matcher, T arg) { + Description description = new StringDescription(); + matcher.describeMismatch(arg, description); + return description.toString().trim(); + } + + public void testIsNullSafe() { + assertNullSafe(createMatcher()); + } + + public void testCopesWithUnknownTypes() { + assertUnknownTypeSafe(createMatcher()); + } + + public static class UnknownType { + } + +} |