Skip to content

Commit 4491f2a

Browse files
7h3kk1djnape
authored andcommitted
Added EitherMatcher in place of Left/RightMatcher
1 parent 71214d3 commit 4491f2a

File tree

7 files changed

+61
-95
lines changed

7 files changed

+61
-95
lines changed

src/test/java/com/jnape/palatable/lambda/adt/TryTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
import static org.junit.Assert.assertTrue;
4242
import static org.junit.Assert.fail;
4343
import static testsupport.assertion.MonadErrorAssert.assertLaws;
44-
import static testsupport.matchers.LeftMatcher.isLeftThat;
44+
import static testsupport.matchers.EitherMatcher.isLeftThat;
4545

4646
@RunWith(Traits.class)
4747
public class TryTest {

src/test/java/com/jnape/palatable/lambda/functions/builtin/fn1/CoalesceTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
import static java.util.Arrays.asList;
99
import static java.util.Collections.emptyList;
1010
import static org.junit.Assert.assertThat;
11+
import static testsupport.matchers.EitherMatcher.isLeftThat;
12+
import static testsupport.matchers.EitherMatcher.isRightThat;
1113
import static testsupport.matchers.IterableMatcher.isEmpty;
1214
import static testsupport.matchers.IterableMatcher.iterates;
13-
import static testsupport.matchers.LeftMatcher.isLeftThat;
14-
import static testsupport.matchers.RightMatcher.isRightThat;
1515

1616
public class CoalesceTest {
1717

src/test/java/com/jnape/palatable/lambda/matchers/StateMatcherTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
import static com.jnape.palatable.lambda.functor.builtin.State.state;
88
import static org.hamcrest.MatcherAssert.assertThat;
99
import static org.hamcrest.core.IsEqual.equalTo;
10-
import static testsupport.matchers.LeftMatcher.isLeftThat;
11-
import static testsupport.matchers.RightMatcher.isRightThat;
10+
import static testsupport.matchers.EitherMatcher.isLeftThat;
11+
import static testsupport.matchers.EitherMatcher.isRightThat;
1212
import static testsupport.matchers.StateMatcher.whenEvaluatedWith;
1313
import static testsupport.matchers.StateMatcher.whenExecutedWith;
1414
import static testsupport.matchers.StateMatcher.whenRunWith;

src/test/java/com/jnape/palatable/lambda/matchers/StateTMatcherTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
import static org.hamcrest.MatcherAssert.assertThat;
1616
import static org.hamcrest.core.IsEqual.equalTo;
1717
import static org.junit.Assert.assertEquals;
18+
import static testsupport.matchers.EitherMatcher.isLeftThat;
19+
import static testsupport.matchers.EitherMatcher.isRightThat;
1820
import static testsupport.matchers.IOMatcher.yieldsValue;
19-
import static testsupport.matchers.LeftMatcher.isLeftThat;
20-
import static testsupport.matchers.RightMatcher.isRightThat;
2121
import static testsupport.matchers.StateTMatcher.whenEvaluatedWith;
2222
import static testsupport.matchers.StateTMatcher.whenExecutedWith;
2323
import static testsupport.matchers.StateTMatcher.whenRunWith;
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package testsupport.matchers;
2+
3+
import com.jnape.palatable.lambda.adt.Either;
4+
import org.hamcrest.Description;
5+
import org.hamcrest.Matcher;
6+
import org.hamcrest.TypeSafeMatcher;
7+
8+
import static com.jnape.palatable.lambda.adt.Either.left;
9+
import static com.jnape.palatable.lambda.adt.Either.right;
10+
import static com.jnape.palatable.lambda.functions.builtin.fn1.Constantly.constantly;
11+
import static com.jnape.palatable.lambda.io.IO.io;
12+
13+
public final class EitherMatcher<L, R> extends TypeSafeMatcher<Either<L, R>> {
14+
private final Either<Matcher<L>, Matcher<R>> matcher;
15+
16+
private EitherMatcher(Either<Matcher<L>, Matcher<R>> matcher) {
17+
this.matcher = matcher;
18+
}
19+
20+
@Override
21+
protected void describeMismatchSafely(Either<L, R> item, Description mismatchDescription) {
22+
mismatchDescription.appendText("was ");
23+
item.match(l -> matcher.match(lMatcher -> io(() -> lMatcher.describeMismatch(l, mismatchDescription)),
24+
rMatcher -> io(() -> mismatchDescription.appendValue(item))),
25+
r -> matcher.match(lMatcher -> io(() -> mismatchDescription.appendValue(item)),
26+
lMatcher -> io(() -> lMatcher.describeMismatch(r, mismatchDescription))))
27+
.unsafePerformIO();
28+
}
29+
30+
@Override
31+
protected boolean matchesSafely(Either<L, R> actual) {
32+
return actual.match(l -> matcher.match(lMatcher -> lMatcher.matches(l),
33+
constantly(false)),
34+
r -> matcher.match(constantly(false),
35+
rMatcher -> rMatcher.matches(r)));
36+
}
37+
38+
@Override
39+
public void describeTo(Description description) {
40+
matcher.match(l -> io(() -> description.appendText("Left value of "))
41+
.flatMap(constantly(io(() -> l.describeTo(description)))),
42+
r -> io(() -> description.appendText("Right value of "))
43+
.flatMap(constantly(io(() -> r.describeTo(description)))))
44+
.unsafePerformIO();
45+
}
46+
47+
public static <L, R> EitherMatcher<L, R> isLeftThat(Matcher<L> lMatcher) {
48+
return new EitherMatcher<>(left(lMatcher));
49+
}
50+
51+
public static <L, R> EitherMatcher<L, R> isRightThat(Matcher<R> rMatcher) {
52+
return new EitherMatcher<>(right(rMatcher));
53+
}
54+
}

src/test/java/testsupport/matchers/LeftMatcher.java

Lines changed: 0 additions & 44 deletions
This file was deleted.

src/test/java/testsupport/matchers/RightMatcher.java

Lines changed: 0 additions & 44 deletions
This file was deleted.

0 commit comments

Comments
 (0)