Home | History | Annotate | Download | only in core
      1 package org.hamcrest.core;
      2 
      3 import org.hamcrest.BaseMatcher;
      4 import org.hamcrest.Matcher;
      5 import org.hamcrest.Description;
      6 import org.hamcrest.Factory;
      7 
      8 import java.util.Arrays;
      9 
     10 /**
     11  * Calculates the logical conjunction of two matchers. Evaluation is
     12  * shortcut, so that the second matcher is not called if the first
     13  * matcher returns <code>false</code>.
     14  */
     15 public class AllOf<T> extends BaseMatcher<T> {
     16     private final Iterable<Matcher<? extends T>> matchers;
     17 
     18     public AllOf(Iterable<Matcher<? extends T>> matchers) {
     19         this.matchers = matchers;
     20     }
     21 
     22     public boolean matches(Object o) {
     23         for (Matcher<? extends T> matcher : matchers) {
     24             if (!matcher.matches(o)) {
     25                 return false;
     26             }
     27         }
     28         return true;
     29     }
     30 
     31     public void describeTo(Description description) {
     32     	description.appendList("(", " and ", ")", matchers);
     33     }
     34 
     35     /**
     36      * Evaluates to true only if ALL of the passed in matchers evaluate to true.
     37      */
     38     @Factory
     39     public static <T> Matcher<T> allOf(Matcher<? extends T>... matchers) {
     40         return allOf(Arrays.asList(matchers));
     41     }
     42 
     43     /**
     44      * Evaluates to true only if ALL of the passed in matchers evaluate to true.
     45      */
     46     @Factory
     47     public static <T> Matcher<T> allOf(Iterable<Matcher<? extends T>> matchers) {
     48         return new AllOf<T>(matchers);
     49     }
     50 
     51 }
     52