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