package org.hamcrest.core;
import org.hamcrest.Description;
import org.hamcrest.Factory;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeDiagnosingMatcher;
public class Every<T> extends TypeSafeDiagnosingMatcher<Iterable<T>> {
private final Matcher<? super T> matcher;
public Every(Matcher<? super T> matcher) {
this.matcher= matcher;
}
@Override
public boolean matchesSafely(Iterable<T> collection, Description mismatchDescription) {
for (T t : collection) {
if (!matcher.matches(t)) {
mismatchDescription.appendText("an item ");
matcher.describeMismatch(t, mismatchDescription);
return false;
}
}
return true;
}
@Override
public void describeTo(Description description) {
description.appendText("every item is ").appendDescriptionOf(matcher);
}
Creates a matcher for Iterable
s that only matches when a single pass over the examined Iterable
yields items that are all matched by the specified itemMatcher
.
For example:
assertThat(Arrays.asList("bar", "baz"), everyItem(startsWith("ba")))
Params: - itemMatcher – the matcher to apply to every item provided by the examined
Iterable
/**
* Creates a matcher for {@link Iterable}s that only matches when a single pass over the
* examined {@link Iterable} yields items that are all matched by the specified
* <code>itemMatcher</code>.
* <p/>
* For example:
* <pre>assertThat(Arrays.asList("bar", "baz"), everyItem(startsWith("ba")))</pre>
*
* @param itemMatcher
* the matcher to apply to every item provided by the examined {@link Iterable}
*/
@Factory
public static <U> Matcher<Iterable<U>> everyItem(final Matcher<U> itemMatcher) {
return new Every<U>(itemMatcher);
}
}