Home | History | Annotate | Download | only in core
      1 package org.hamcrest.core;
      2 
      3 import static org.hamcrest.core.IsInstanceOf.instanceOf;
      4 import static org.hamcrest.core.IsEqual.equalTo;
      5 import org.hamcrest.Factory;
      6 import org.hamcrest.Matcher;
      7 import org.hamcrest.BaseMatcher;
      8 import org.hamcrest.Description;
      9 
     10 /**
     11  * Decorates another Matcher, retaining the behavior but allowing tests
     12  * to be slightly more expressive.
     13  *
     14  * eg. assertThat(cheese, equalTo(smelly))
     15  * vs  assertThat(cheese, is(equalTo(smelly)))
     16  */
     17 public class Is<T> extends BaseMatcher<T> {
     18 
     19     private final Matcher<T> matcher;
     20 
     21     public Is(Matcher<T> matcher) {
     22         this.matcher = matcher;
     23     }
     24 
     25     public boolean matches(Object arg) {
     26         return matcher.matches(arg);
     27     }
     28 
     29     public void describeTo(Description description) {
     30         description.appendText("is ").appendDescriptionOf(matcher);
     31     }
     32 
     33     /**
     34      * Decorates another Matcher, retaining the behavior but allowing tests
     35      * to be slightly more expressive.
     36      *
     37      * eg. assertThat(cheese, equalTo(smelly))
     38      * vs  assertThat(cheese, is(equalTo(smelly)))
     39      */
     40     @Factory
     41     public static <T> Matcher<T> is(Matcher<T> matcher) {
     42         return new Is<T>(matcher);
     43     }
     44 
     45     /**
     46      * This is a shortcut to the frequently used is(equalTo(x)).
     47      *
     48      * eg. assertThat(cheese, is(equalTo(smelly)))
     49      * vs  assertThat(cheese, is(smelly))
     50      */
     51     @Factory
     52     public static <T> Matcher<T> is(T value) {
     53         return is(equalTo(value));
     54     }
     55 
     56     /**
     57      * This is a shortcut to the frequently used is(instanceOf(SomeClass.class)).
     58      *
     59      * eg. assertThat(cheese, is(instanceOf(Cheddar.class)))
     60      * vs  assertThat(cheese, is(Cheddar.class))
     61      */
     62     @Factory
     63     public static Matcher<Object> is(Class<?> type) {
     64         return is(instanceOf(type));
     65     }
     66 
     67 }
     68 
     69