aboutsummaryrefslogtreecommitdiff
path: root/hamcrest-core/src/main/java/org/hamcrest/core/Every.java
diff options
context:
space:
mode:
Diffstat (limited to 'hamcrest-core/src/main/java/org/hamcrest/core/Every.java')
-rw-r--r--hamcrest-core/src/main/java/org/hamcrest/core/Every.java44
1 files changed, 44 insertions, 0 deletions
diff --git a/hamcrest-core/src/main/java/org/hamcrest/core/Every.java b/hamcrest-core/src/main/java/org/hamcrest/core/Every.java
new file mode 100644
index 0000000..757b7b4
--- /dev/null
+++ b/hamcrest-core/src/main/java/org/hamcrest/core/Every.java
@@ -0,0 +1,44 @@
+package org.hamcrest.core;
+
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.hamcrest.TypeSafeDiagnosingMatcher;
+
+public class Every<T> extends TypeSafeDiagnosingMatcher<Iterable<? extends T>> {
+ private final Matcher<? super T> matcher;
+
+ public Every(Matcher<? super T> matcher) {
+ this.matcher= matcher;
+ }
+
+ @Override
+ public boolean matchesSafely(Iterable<? extends 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 {@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>.
+ * 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}
+ */
+ public static <U> Matcher<Iterable<? extends U>> everyItem(final Matcher<U> itemMatcher) {
+ return new Every<U>(itemMatcher);
+ }
+}