org.hamcrest.junit.internal.StacktracePrintingMatcher Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hamcrest-junit Show documentation
Show all versions of hamcrest-junit Show documentation
Classes to use Hamcrest matchers within JUnit tests
package org.hamcrest.junit.internal;
import java.io.PrintWriter;
import java.io.StringWriter;
import org.hamcrest.Description;
import org.hamcrest.Factory;
import org.hamcrest.Matcher;
/**
* A matcher that delegates to throwableMatcher and in addition appends the
* stacktrace of the actual Throwable in case of a mismatch.
*/
public class StacktracePrintingMatcher extends
org.hamcrest.TypeSafeMatcher {
private final Matcher fThrowableMatcher;
public StacktracePrintingMatcher(Matcher throwableMatcher) {
fThrowableMatcher = throwableMatcher;
}
public void describeTo(Description description) {
fThrowableMatcher.describeTo(description);
}
@Override
protected boolean matchesSafely(T item) {
return fThrowableMatcher.matches(item);
}
@Override
protected void describeMismatchSafely(T item, Description description) {
fThrowableMatcher.describeMismatch(item, description);
description.appendText("\nStacktrace was: ");
description.appendText(readStacktrace(item));
}
private String readStacktrace(Throwable throwable) {
StringWriter stringWriter = new StringWriter();
throwable.printStackTrace(new PrintWriter(stringWriter));
return stringWriter.toString();
}
@Factory
public static Matcher isThrowable(
Matcher throwableMatcher) {
return new StacktracePrintingMatcher(throwableMatcher);
}
@Factory
public static Matcher isException(
Matcher exceptionMatcher) {
return new StacktracePrintingMatcher(exceptionMatcher);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy