package org.hamcrest.core; import org.hamcrest.Description; import org.hamcrest.DiagnosingMatcher; import org.hamcrest.Matcher; import java.util.Arrays; import java.util.List; /** * Calculates the logical conjunction of multiple matchers. Evaluation is shortcut, so * subsequent matchers are not called if an earlier matcher returns false. */ public class AllOf extends DiagnosingMatcher { private final Iterable> matchers; public AllOf(Iterable> matchers) { this.matchers = matchers; } @Override public boolean matches(Object o, Description mismatch) { for (Matcher matcher : matchers) { if (!matcher.matches(o)) { mismatch.appendDescriptionOf(matcher).appendText(" "); matcher.describeMismatch(o, mismatch); return false; } } return true; } @Override public void describeTo(Description description) { description.appendList("(", " " + "and" + " ", ")", matchers); } /** * Creates a matcher that matches if the examined object matches ALL of the specified matchers. * For example: *
assertThat("myValue", allOf(startsWith("my"), containsString("Val")))
*/ public static Matcher allOf(Iterable> matchers) { return new AllOf<>(matchers); } /** * Creates a matcher that matches if the examined object matches ALL of the specified matchers. * For example: *
assertThat("myValue", allOf(startsWith("my"), containsString("Val")))
*/ @SafeVarargs public static Matcher allOf(Matcher... matchers) { return allOf((List) Arrays.asList(matchers)); } }