1package org.junit.internal.matchers;
2
3import static org.hamcrest.CoreMatchers.allOf;
4import static org.hamcrest.CoreMatchers.anyOf;
5import org.hamcrest.BaseMatcher;
6import org.hamcrest.Description;
7import org.hamcrest.Matcher;
8
9public class CombinableMatcher<T> extends BaseMatcher<T> {
10
11	private final Matcher<? extends T> fMatcher;
12
13	public CombinableMatcher(Matcher<? extends T> matcher) {
14		fMatcher= matcher;
15	}
16
17	public boolean matches(Object item) {
18		return fMatcher.matches(item);
19	}
20
21	public void describeTo(Description description) {
22		description.appendDescriptionOf(fMatcher);
23	}
24
25	@SuppressWarnings("unchecked")
26	public CombinableMatcher<T> and(Matcher<? extends T> matcher) {
27		return new CombinableMatcher<T>(allOf(matcher, fMatcher));
28	}
29
30	@SuppressWarnings("unchecked")
31	public CombinableMatcher<T> or(Matcher<? extends T> matcher) {
32		return new CombinableMatcher<T>(anyOf(matcher, fMatcher));
33	}
34}