1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package io.earcam.instrumental.module.osgi.parser;
20
21 import org.antlr.v4.runtime.ParserRuleContext;
22 import org.hamcrest.Description;
23 import org.hamcrest.TypeSafeMatcher;
24
25 public class ParserValidityMatcher extends TypeSafeMatcher<ParserRuleContext> {
26
27 private boolean shouldSucceed;
28
29
30 private ParserValidityMatcher(boolean shouldSucceed)
31 {
32 this.shouldSucceed = shouldSucceed;
33 }
34
35
36 public static ParserValidityMatcher valid()
37 {
38 return new ParserValidityMatcher(true);
39 }
40
41
42 public static ParserValidityMatcher invalid()
43 {
44 return new ParserValidityMatcher(false);
45 }
46
47
48 @Override
49 public void describeTo(Description description)
50 {
51 if(shouldSucceed) {
52 description.appendText("expected success");
53 } else {
54 description.appendText("expected failure");
55 }
56 }
57
58
59 @Override
60 protected void describeMismatchSafely(ParserRuleContext context, Description mismatchDescription)
61 {
62 super.describeMismatchSafely(context, mismatchDescription);
63 mismatchDescription.appendValue(context.exception);
64
65 }
66
67
68 @Override
69 protected boolean matchesSafely(ParserRuleContext context)
70 {
71 return (context.exception == null) == shouldSucceed;
72 }
73
74 }