package org.hamcrest; /** * Utility class for writing one off matchers. * For example: * <pre> * Matcher<String> aNonEmptyString = new CustomTypeSafeMatcher<String>("a non empty string") { * public boolean matchesSafely(String string) { * return !string.isEmpty(); * } * public void describeMismatchSafely(String string, Description mismatchDescription) { * mismatchDescription.appendText("was empty"); * } * }; * </pre> * This is a variant of {@link CustomMatcher} that first type checks * the argument being matched. By the time {@link TypeSafeMatcher#matchesSafely} is * is called the argument is guaranteed to be non-null and of the correct * type. * * @author Neil Dunn * @param <T> The type of object being matched */ public abstract class CustomTypeSafeMatcher<T> extends TypeSafeMatcher<T> { private final String fixedDescription; public CustomTypeSafeMatcher(String description) { if (description == null) { throw new IllegalArgumentException("Description must be non null!"); } this.fixedDescription = description; } @Override public final void describeTo(Description description) { description.appendText(fixedDescription); } }