/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.tck.junit4.matcher; import static java.lang.String.format; import static org.hamcrest.CoreMatchers.any; import static org.hamcrest.CoreMatchers.is; import org.hamcrest.Description; import org.hamcrest.Matcher; import org.hamcrest.TypeSafeMatcher; import org.hamcrest.core.IsAnything; import org.mule.runtime.api.message.ErrorType; import org.mule.runtime.extension.api.error.ErrorTypeDefinition; /** * {@link Matcher} for {@link ErrorType} instances. * * @since 4.0 */ public final class ErrorTypeMatcher extends TypeSafeMatcher<ErrorType> { private static Matcher anything = IsAnything.anything(); private final Matcher<String> namespace; private final Matcher<String> type; private ErrorTypeMatcher(Matcher<String> namespace, Matcher<String> type) { this.namespace = namespace; this.type = type; } public static ErrorTypeMatcher errorType(ErrorTypeDefinition type) { return errorType(anything, is(type.getType())); } public static ErrorTypeMatcher errorType(String namespace, String type) { return new ErrorTypeMatcher(is(namespace), is(type)); } public static ErrorTypeMatcher errorType(Matcher<String> namespace, Matcher<String> type) { return new ErrorTypeMatcher(namespace, type); } @Override protected boolean matchesSafely(ErrorType item) { return type.matches(item.getIdentifier()) && namespace.matches(item.getNamespace()); } @Override public void describeTo(Description description) { description.appendText("an ErrorType with namespace: <"); namespace.describeTo(description); description.appendText("> and type: <"); type.describeTo(description); description.appendText(">"); } @Override protected void describeMismatchSafely(ErrorType item, Description mismatchDescription) { mismatchDescription .appendText(format("was an ErrorType with namespace <%s> and type: <%s>", item.getNamespace(), item.getIdentifier())); } }