
org.cthul.matchers.hamcrest.IsMatchResult Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of cthul-matchers Show documentation
Show all versions of cthul-matchers Show documentation
Provides hamcrest.org matchers for strings and exceptions,
allows matching code blocks, and provides several utilities for
combining matchers.
The newest version!
package org.cthul.matchers.hamcrest;
import org.cthul.matchers.diagnose.result.AbstractMatchResult;
import org.cthul.matchers.diagnose.result.MatchResult;
import org.cthul.matchers.diagnose.safe.TypesafeNestedResultMatcher;
import org.hamcrest.Description;
import org.hamcrest.Factory;
import org.hamcrest.Matcher;
/**
*
*/
public class IsMatchResult extends TypesafeNestedResultMatcher> {
@Factory
public static IsMatchResult match() {
return new IsMatchResult<>();
}
@Factory
public static IsMatchResult mismatch() {
return new IsMatchResult<>(false);
}
@Factory
public static IsMatchResult match(Matcher super MatchResult> resultMatcher) {
return new IsMatchResult<>(resultMatcher);
}
@Factory
public static IsMatchResult mismatch(Matcher super MatchResult> resultMatcher) {
return new IsMatchResult<>(false, resultMatcher);
}
@Factory
public static IsMatchResult matchWithMessage(Matcher super String> resultMatcher) {
return match(HasDescription.message(resultMatcher));
}
@Factory
public static IsMatchResult mismatchWithMessage(Matcher super String> resultMatcher) {
return mismatch(HasDescription.message(resultMatcher));
}
@Factory
public static IsMatchResult matchWithMessage(String message) {
return match(HasDescription.message(message));
}
@Factory
public static IsMatchResult mismatchWithMessage(String message) {
return mismatch(HasDescription.message(message));
}
@Factory
public static IsMatchResult match(String message) {
return match(HasDescription.message(message));
}
@Factory
public static IsMatchResult mismatch(String message) {
return mismatch(HasDescription.message(message));
}
private final boolean match;
private final Matcher super MatchResult> resultMatcher;
public IsMatchResult() {
super(MatchResult.class);
this.match = true;
this.resultMatcher = null;
}
public IsMatchResult(Matcher super MatchResult> resultMatcher) {
super(MatchResult.class);
this.match = true;
this.resultMatcher = resultMatcher;
}
public IsMatchResult(boolean match) {
super(MatchResult.class);
this.match = match;
this.resultMatcher = null;
}
public IsMatchResult(boolean match, Matcher super MatchResult> resultMatcher) {
super(MatchResult.class);
this.match = match;
this.resultMatcher = resultMatcher;
}
@Override
public void describeTo(Description description) {
if (resultMatcher == null) {
description
.appendText(match ? "a match" : " a mismatch");
} else {
description
.appendText(match ? "match " : "mismatch ");
nestedDescribeTo(resultMatcher, description);
}
}
@Override
public int getDescriptionPrecedence() {
return resultMatcher == null ? P_ATOMIC : P_UNARY;
}
@Override
protected boolean matchesSafely(MatchResult item) {
if (item.matched() != match) {
return false;
}
if (resultMatcher == null) {
return true;
}
return resultMatcher.matches(item);
}
@Override
protected > MatchResult matchResultSafely(I item) {
if (resultMatcher == null || item.matched() != match) {
return valueResult(item);
}
MatchResult msgResult = quickMatchResult(resultMatcher, item);
return messageResult(item, msgResult);
}
private > MatchResult valueResult(final I item) {
return new AbstractMatchResult>(item, this, item.matched() == match) {
@Override
public void describeMatch(Description d) {
d.appendText("was ")
.appendText(match ? "match " : "mismatch ")
.appendValue(item);
}
@Override
public void describeMismatch(Description d) {
d.appendText("was ")
.appendText(match ? "mismatch " : "match ")
.appendValue(item);
}
};
}
private > MatchResult messageResult(I item, final MatchResult mr) {
return new NestedResult>(item, this, mr.matched()) {
@Override
public void describeMatch(Description d) {
d.appendText(match ? "match " : "mismatch ");
nestedDescribeTo(getMatchPrecedence(), mr, d);
}
@Override
public void describeMismatch(Description d) {
d.appendText(match ? "match " : "mismatch ");
nestedDescribeTo(getMismatchPrecedence(), mr, d);
}
};
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy