All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ext.test4j.hamcrest.FeatureMatcher Maven / Gradle / Ivy

There is a newer version: 2.5.0
Show newest version
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 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 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