package cucumber.runtime.java.guice.matcher; import org.hamcrest.Description; import org.hamcrest.TypeSafeDiagnosingMatcher; import java.util.Collection; import java.util.HashSet; abstract class ElementsAreAllMatcher<E> extends TypeSafeDiagnosingMatcher<Collection<? extends E>> { @Override public void describeTo(Description description) { description.appendText(getDescription()); } abstract String getDescription(); boolean containsMoreThanOneElement(Collection<? extends E> item, Description mismatchDescription) { return item.size() > 1 || fail("collection did not contain more than one element", item, mismatchDescription); } boolean noElementIsNull(Collection<? extends E> item, Description mismatchDescription) { return !item.contains(null) || fail("collection contained null element", item, mismatchDescription); } int actualNumberOfUniqueElements(Collection<? extends E> item) { return new HashSet<E>(item).size(); } protected boolean fail(String reasonForFailure, Collection<? extends E> item, Description mismatchDescription) { mismatchDescription.appendText(reasonForFailure); mismatchDescription.appendText(" <"); mismatchDescription.appendText(item.toString()); mismatchDescription.appendText(">"); return false; } }