01: package org.junit.matchers;
02:
03: import static org.hamcrest.core.AllOf.allOf;
04: import static org.hamcrest.core.IsEqual.equalTo;
05:
06: import java.util.ArrayList;
07: import java.util.Collection;
08:
09: import org.hamcrest.Description;
10: import org.hamcrest.Factory;
11: import org.hamcrest.Matcher;
12:
13: // Copied (hopefully temporarily) from hamcrest-library
14: public class IsCollectionContaining<T> extends
15: TypeSafeMatcher<Iterable<T>> {
16: private final Matcher<? extends T> elementMatcher;
17:
18: public IsCollectionContaining(Matcher<? extends T> elementMatcher) {
19: this .elementMatcher = elementMatcher;
20: }
21:
22: @Override
23: public boolean matchesSafely(Iterable<T> collection) {
24: for (T item : collection) {
25: if (elementMatcher.matches(item)) {
26: return true;
27: }
28: }
29: return false;
30: }
31:
32: public void describeTo(Description description) {
33: description.appendText("a collection containing ")
34: .appendDescriptionOf(elementMatcher);
35: }
36:
37: @Factory
38: public static <T> Matcher<Iterable<T>> hasItem(
39: Matcher<? extends T> elementMatcher) {
40: return new IsCollectionContaining<T>(elementMatcher);
41: }
42:
43: @Factory
44: public static <T> Matcher<Iterable<T>> hasItem(T element) {
45: return hasItem(equalTo(element));
46: }
47:
48: @Factory
49: public static <T> Matcher<Iterable<T>> hasItems(
50: Matcher<? extends T>... elementMatchers) {
51: Collection<Matcher<? extends Iterable<T>>> all = new ArrayList<Matcher<? extends Iterable<T>>>(
52: elementMatchers.length);
53: for (Matcher<? extends T> elementMatcher : elementMatchers) {
54: all.add(hasItem(elementMatcher));
55: }
56: return allOf(all);
57: }
58:
59: @Factory
60: public static <T> Matcher<Iterable<T>> hasItems(T... elements) {
61: Collection<Matcher<? extends Iterable<T>>> all = new ArrayList<Matcher<? extends Iterable<T>>>(
62: elements.length);
63: for (T element : elements) {
64: all.add(hasItem(element));
65: }
66: return allOf(all);
67: }
68:
69: }
|