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