package org.cloudfoundry.identity.uaa.util; import org.hamcrest.BaseMatcher; import org.hamcrest.Description; import org.hamcrest.Matcher; import java.util.function.Predicate; import static org.hamcrest.Matchers.hasItem; public class PredicateMatcher<T> extends BaseMatcher<T> { private PredicateMatcher(){} private Predicate<T> predicate; public static <T> PredicateMatcher<T> is(Predicate<T> predicate) { PredicateMatcher<T> matcher = new PredicateMatcher<>(); matcher.predicate = predicate; return matcher; } public static <T> PredicateMatcher<T>[] are(Predicate<T>... predicates) { PredicateMatcher<T>[] matchers = new PredicateMatcher[predicates.length]; for(int i = 0; i < predicates.length; i++) { matchers[i] = is(predicates[i]); } return matchers; } public static <T> Matcher<Iterable<? super T>> has(Predicate<T> predicate) { PredicateMatcher<T> itemMatcher = is(predicate); return hasItem(itemMatcher); } @Override public boolean matches(Object item) { try { return predicate.test((T) item); } catch(ClassCastException ex) { return false; } } @Override public void describeTo(Description description) { description.appendText("match for a predicate"); } }