summaryrefslogtreecommitdiffstats
path: root/hamcrest-core/src/org/hamcrest/core/AllOf.java
diff options
context:
space:
mode:
Diffstat (limited to 'hamcrest-core/src/org/hamcrest/core/AllOf.java')
-rw-r--r--hamcrest-core/src/org/hamcrest/core/AllOf.java51
1 files changed, 51 insertions, 0 deletions
diff --git a/hamcrest-core/src/org/hamcrest/core/AllOf.java b/hamcrest-core/src/org/hamcrest/core/AllOf.java
new file mode 100644
index 0000000..f619a7d
--- /dev/null
+++ b/hamcrest-core/src/org/hamcrest/core/AllOf.java
@@ -0,0 +1,51 @@
+package org.hamcrest.core;
+
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Matcher;
+import org.hamcrest.Description;
+import org.hamcrest.Factory;
+
+import java.util.Arrays;
+
+/**
+ * Calculates the logical conjunction of two matchers. Evaluation is
+ * shortcut, so that the second matcher is not called if the first
+ * matcher returns <code>false</code>.
+ */
+public class AllOf<T> extends BaseMatcher<T> {
+ private final Iterable<Matcher<? extends T>> matchers;
+
+ public AllOf(Iterable<Matcher<? extends T>> matchers) {
+ this.matchers = matchers;
+ }
+
+ public boolean matches(Object o) {
+ for (Matcher<? extends T> matcher : matchers) {
+ if (!matcher.matches(o)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public void describeTo(Description description) {
+ description.appendList("(", " and ", ")", matchers);
+ }
+
+ /**
+ * Evaluates to true only if ALL of the passed in matchers evaluate to true.
+ */
+ @Factory
+ public static <T> Matcher<T> allOf(Matcher<? extends T>... matchers) {
+ return allOf(Arrays.asList(matchers));
+ }
+
+ /**
+ * Evaluates to true only if ALL of the passed in matchers evaluate to true.
+ */
+ @Factory
+ public static <T> Matcher<T> allOf(Iterable<Matcher<? extends T>> matchers) {
+ return new AllOf<T>(matchers);
+ }
+
+}