blob: e89c493eaeef1dad970d4c38d4de409a63217e3a [file] [log] [blame]
package org.hamcrest.core;
import org.hamcrest.Matcher;
import org.junit.Test;
import static org.hamcrest.AbstractMatcherTest.*;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.hamcrest.core.IsNot.not;
import static org.hamcrest.core.IsNull.notNullValue;
public final class CombinableTest {
private static final CombinableMatcher<Integer> EITHER_3_OR_4 = CombinableMatcher.<Integer>either(equalTo(3)).or(equalTo(4));
private static final CombinableMatcher<Integer> NOT_3_AND_NOT_4 = CombinableMatcher.<Integer>both(not(equalTo(3))).and(not(equalTo(4)));
@Test public void
copesWithNullsAndUnknownTypes() {
assertNullSafe(EITHER_3_OR_4);
assertNullSafe(NOT_3_AND_NOT_4);
assertUnknownTypeSafe(EITHER_3_OR_4);
assertUnknownTypeSafe(NOT_3_AND_NOT_4);
}
@Test public void
bothAcceptsAndRejects() {
assertMatches("both didn't pass", NOT_3_AND_NOT_4, 2);
assertDoesNotMatch("both didn't fail", NOT_3_AND_NOT_4, 3);
}
@Test public void
acceptsAndRejectsThreeAnds() {
CombinableMatcher<? super Integer> tripleAnd = NOT_3_AND_NOT_4.and(equalTo(2));
assertMatches("tripleAnd didn't pass", tripleAnd, 2);
assertDoesNotMatch("tripleAnd didn't fail", tripleAnd, 3);
}
@Test public void
bothDescribesItself() {
assertDescription("(not <3> and not <4>)", NOT_3_AND_NOT_4);
assertMismatchDescription("not <3> was <3>", NOT_3_AND_NOT_4, 3);
}
@Test public void
eitherAcceptsAndRejects() {
assertMatches("either didn't pass", EITHER_3_OR_4, 3);
assertDoesNotMatch("either didn't fail", EITHER_3_OR_4, 6);
}
@Test public void
acceptsAndRejectsThreeOrs() {
final CombinableMatcher<Integer> tripleOr = EITHER_3_OR_4.or(equalTo(11));
assertMatches("tripleOr didn't pass", tripleOr, 11);
assertDoesNotMatch("tripleOr didn't fail", tripleOr, 9);
}
@Test public void
eitherDescribesItself() {
assertDescription("(<3> or <4>)", EITHER_3_OR_4);
assertMismatchDescription("was <6>", EITHER_3_OR_4, 6);
}
@Test public void
picksUpTypeFromLeftHandSideOfExpression() {
@SuppressWarnings("unused")
Matcher<String> matcher = CombinableMatcher.both(equalTo("yellow")).and(notNullValue(String.class));
}
}