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 Is(Matcher<T> matcher)21 public Is(Matcher<T> matcher) { 22 this.matcher = matcher; 23 } 24 matches(Object arg)25 public boolean matches(Object arg) { 26 return matcher.matches(arg); 27 } 28 describeTo(Description description)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 is(Matcher<T> matcher)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 is(T value)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 is(Class<?> type)63 public static Matcher<Object> is(Class<?> type) { 64 return is(instanceOf(type)); 65 } 66 67 } 68 69