blob: f0cbdd5b712b99c510ad245ddc607bfdfbe70daa [file] [log] [blame]
package org.hamcrest;
import org.hamcrest.core.IsEqual;
import org.junit.Test;
import static org.hamcrest.AbstractMatcherTest.*;
import static org.junit.Assert.assertEquals;
public final class FeatureMatcherTest {
private final FeatureMatcher<Thingy, String> resultMatcher = resultMatcher();
@Test public void
matchesPartOfAnObject() {
assertMatches("feature", resultMatcher, new Thingy("bar"));
assertDescription("Thingy with result \"bar\"", resultMatcher);
}
@Test public void
mismatchesPartOfAnObject() {
assertMismatchDescription("result mismatch-description", resultMatcher, new Thingy("foo"));
}
@Test public void
doesNotThrowNullPointerException() {
assertMismatchDescription("was null", resultMatcher, null);
}
@Test public void
doesNotThrowClassCastException() {
resultMatcher.matches(new ShouldNotMatch());
StringDescription mismatchDescription = new StringDescription();
resultMatcher.describeMismatch(new ShouldNotMatch(), mismatchDescription);
assertEquals("was <ShouldNotMatch>", mismatchDescription.toString());
}
public static class Match extends IsEqual<String> {
public Match(String equalArg) { super(equalArg); }
@Override public void describeMismatch(Object item, Description description) {
description.appendText("mismatch-description");
}
}
public static class Thingy {
private final String result;
public Thingy(String result) {
this.result = result;
}
public String getResult() {
return result;
}
}
public static class ShouldNotMatch {
@Override public String toString() { return "ShouldNotMatch"; }
}
private static FeatureMatcher<Thingy, String> resultMatcher() {
return new FeatureMatcher<Thingy, String>(new Match("bar"), "Thingy with result", "result") {
@Override
public String featureValueOf(Thingy actual) {
return actual.getResult();
}
};
}
}