Open Source Repository

Home /junit/junit-4.8.2 | Repository Home


org/junit/internal/matchers/CombinableMatcher.java
package org.junit.internal.matchers;

import static org.hamcrest.CoreMatchers.allOf;
import static org.hamcrest.CoreMatchers.anyOf;
import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
import org.hamcrest.Matcher;

public class CombinableMatcher<T> extends BaseMatcher<T> {

  private final Matcher<? extends T> fMatcher;

  public CombinableMatcher(Matcher<? extends T> matcher) {
    fMatcher= matcher;
  }

  public boolean matches(Object item) {
    return fMatcher.matches(item);
  }

  public void describeTo(Description description) {
    description.appendDescriptionOf(fMatcher);
  }
  
  @SuppressWarnings("unchecked")
  public CombinableMatcher<T> and(Matcher<? extends T> matcher) {
    return new CombinableMatcher<T>(allOf(matcher, fMatcher));
  }

  @SuppressWarnings("unchecked")
  public CombinableMatcher<T> or(Matcher<? extends T> matcher) {
    return new CombinableMatcher<T>(anyOf(matcher, fMatcher));
  }
}