package org.zwobble.mammoth.tests; import org.hamcrest.FeatureMatcher; import org.hamcrest.Matcher; import org.hamcrest.Matchers; import org.zwobble.mammoth.Result; import org.zwobble.mammoth.internal.results.InternalResult; import static org.hamcrest.Matchers.*; import static org.zwobble.mammoth.internal.util.Lists.eagerMap; import static org.zwobble.mammoth.internal.util.Lists.list; import static org.zwobble.mammoth.tests.DeepReflectionMatcher.deepEquals; public class ResultMatchers { public static Matcher> isInternalSuccess(Object value) { return isInternalResult(deepEquals(value), list()); } public static Matcher> isInternalSuccess(Matcher valueMatcher) { return isInternalResult(valueMatcher, list()); } public static Matcher> isInternalResult(Matcher valueMatcher, Iterable warnings) { return new FeatureMatcher, Result>(isResult(valueMatcher, warnings), "InternalResult as Result", "Result") { @Override protected Result featureValueOf(InternalResult actual) { return actual.toResult(); } }; } public static Matcher> isSuccess(Object value) { return isSuccess(deepEquals(value)); } public static Matcher> isSuccess(Matcher valueMatcher) { return isResult(valueMatcher, list()); } public static Matcher> isResult(Matcher valueMatcher, Iterable warnings) { return Matchers.allOf( hasProperty("value", valueMatcher), hasWarnings(warnings)); } public static Matcher hasWarnings(Iterable warnings) { return hasProperty("warnings", containsInAnyOrder(eagerMap(warnings, Matchers::equalTo))); } }