
ext.test4j.hamcrest.FeatureMatcher Maven / Gradle / Ivy
package ext.test4j.hamcrest;
import ext.test4j.hamcrest.internal.ReflectiveTypeFinder;
/**
* Supporting class for matching a feature of an object. Implement
* featureValueOf()
in a subclass to pull out the feature to be
* matched against.
*
* @param
* The type of the object to be matched
* @param
* The type of the feature to be matched
*/
public abstract class FeatureMatcher extends TypeSafeDiagnosingMatcher {
private static final ReflectiveTypeFinder TYPE_FINDER = new ReflectiveTypeFinder("featureValueOf", 1, 0);
private final Matcher super U> subMatcher;
private final String featureDescription;
private final String featureName;
/**
* Constructor
*
* @param subMatcher
* The matcher to apply to the feature
* @param featureDescription
* Descriptive text to use in describeTo
* @param featureName
* Identifying text for mismatch message
*/
public FeatureMatcher(Matcher super U> subMatcher, String featureDescription, String featureName) {
super(TYPE_FINDER);
this.subMatcher = subMatcher;
this.featureDescription = featureDescription;
this.featureName = featureName;
}
/**
* Implement this to extract the interesting feature.
*
* @param actual
* the target object
* @return the feature to be matched
*/
protected abstract U featureValueOf(T actual);
@Override
protected boolean matchesSafely(T actual, Description mismatchDescription) {
final U featureValue = featureValueOf(actual);
if (!subMatcher.matches(featureValue)) {
mismatchDescription.appendText(featureName).appendText(" ");
subMatcher.describeMismatch(featureValue, mismatchDescription);
return false;
}
return true;
};
public final void describeTo(Description description) {
description.appendText(featureDescription).appendText(" ").appendDescriptionOf(subMatcher);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy