package com.dhemery.polling.fixtures; import com.dhemery.polling.events.ConditionSatisfied; import org.hamcrest.Description; import org.hamcrest.Matcher; import org.hamcrest.TypeSafeMatcher; import static org.hamcrest.Matchers.any; import static org.hamcrest.Matchers.equalTo; public class ConditionSatisfiedMatcher extends TypeSafeMatcher<ConditionSatisfied> { private final Matcher<String> description; private final Matcher<Integer> failureCount; private ConditionSatisfiedMatcher(Matcher<String> description, Matcher<Integer> failureCount) { this.description = description; this.failureCount = failureCount; } @Override protected boolean matchesSafely(ConditionSatisfied event) { return description.matches(event.description()) && failureCount.matches(event.failureCount()); } @Override public void describeTo(Description description) { description.appendText("a satisfaction event with description ").appendDescriptionOf(this.description) .appendText(" with failure count ").appendDescriptionOf(failureCount); } public static Matcher<ConditionSatisfied> satisfaction(Matcher<String> description, Matcher<Integer> failureCount) { return new ConditionSatisfiedMatcher(description, failureCount); } public static Matcher<ConditionSatisfied> satisfaction(String description) { return satisfaction(equalTo(description), any(Integer.class)); } public static Matcher<ConditionSatisfied> satisfactionWithFailureCount(int failureCount) { return satisfaction(any(String.class), equalTo(failureCount)); } }