View Javadoc
1   /*-
2    * #%L
3    * io.earcam.instrumental.module.osgi
4    * %%
5    * Copyright (C) 2018 earcam
6    * %%
7    * SPDX-License-Identifier: (BSD-3-Clause OR EPL-1.0 OR Apache-2.0 OR MIT)
8    * 
9    * You <b>must</b> choose to accept, in full - any individual or combination of 
10   * the following licenses:
11   * <ul>
12   * 	<li><a href="https://opensource.org/licenses/BSD-3-Clause">BSD-3-Clause</a></li>
13   * 	<li><a href="https://www.eclipse.org/legal/epl-v10.html">EPL-1.0</a></li>
14   * 	<li><a href="https://www.apache.org/licenses/LICENSE-2.0">Apache-2.0</a></li>
15   * 	<li><a href="https://opensource.org/licenses/MIT">MIT</a></li>
16   * </ul>
17   * #L%
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  		// TODO invoke the TestRig to get a good description of failure....
65  	}
66  
67  
68  	@Override
69  	protected boolean matchesSafely(ParserRuleContext context)
70  	{
71  		return (context.exception == null) == shouldSucceed;
72  	}
73  
74  }