diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-04-17 16:00:18 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-04-17 16:01:50 +0100 |
| commit | 188051b4be316db4de8b6f48d634f249dd2e4986 (patch) | |
| tree | 2ba5e06ce66271bf86875c192764af5f20aa6266 /src/test/java/org/zwobble/couscous/tests/frontends | |
| parent | a5f76463dfc74d9b126f65416a51905a995c711d (diff) | |
Add reading of try statements
Diffstat (limited to 'src/test/java/org/zwobble/couscous/tests/frontends')
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java | 13 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/frontends/java/NodeMatchers.java | 24 |
2 files changed, 35 insertions, 2 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java index a3245fa..3aafb56 100644 --- a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java +++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java @@ -33,8 +33,7 @@ import static org.zwobble.couscous.ast.TypeCoercionNode.typeCoercion; import static org.zwobble.couscous.ast.VariableReferenceNode.reference; import static org.zwobble.couscous.ast.WhileNode.whileLoop; import static org.zwobble.couscous.tests.frontends.java.JavaReading.*; -import static org.zwobble.couscous.tests.frontends.java.NodeMatchers.isFormalArgument; -import static org.zwobble.couscous.tests.frontends.java.NodeMatchers.isFormalTypeParameter; +import static org.zwobble.couscous.tests.frontends.java.NodeMatchers.*; import static org.zwobble.couscous.types.TypeParameter.typeParameter; import static org.zwobble.couscous.util.ExtraLists.list; import static org.zwobble.couscous.util.ExtraSets.set; @@ -191,6 +190,16 @@ public class JavaReaderTests { "if (_couscous_tmp_0.equals(\"one\")) { return 0; } return 1;"), readStatements("int", "switch (\"one\") { case \"one\": return 0; } return 1;")); } + + @Test + public void canReadTryStatements() { + assertThat( + readStatement("int", "try { return 1; } catch (Exception exception) { return 2; }"), + isTryStatement( + hasTryBody(list(returns(literal(1)))), + hasExceptionHandlers( + isExceptionHandler(ScalarType.of("java.lang.Exception"), "exception", list(returns(literal(2))))))); + } @Test public void canDeclareConstructor() { diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/NodeMatchers.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/NodeMatchers.java index 5ef5344..ba356f8 100644 --- a/src/test/java/org/zwobble/couscous/tests/frontends/java/NodeMatchers.java +++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/NodeMatchers.java @@ -5,7 +5,10 @@ import org.zwobble.couscous.ast.*; import org.zwobble.couscous.ast.identifiers.Identifier; import org.zwobble.couscous.types.Type; +import java.util.List; + import static org.hamcrest.Matchers.allOf; +import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.equalTo; import static org.zwobble.couscous.tests.util.ExtraMatchers.hasFeature; import static org.zwobble.couscous.tests.util.ExtraMatchers.isInstance; @@ -53,4 +56,25 @@ public class NodeMatchers { public static Matcher<ExpressionNode> expressionHasType(Type type) { return hasFeature("type", ExpressionNode::getType, equalTo(type)); } + + @SafeVarargs + public static Matcher<StatementNode> isTryStatement(Matcher<? super TryNode>... matchers) { + return isInstance(TryNode.class, allOf(matchers)); + } + + public static Matcher<TryNode> hasTryBody(List<StatementNode> statements) { + return hasFeature("body", TryNode::getBody, equalTo(statements)); + } + + @SafeVarargs + public static Matcher<TryNode> hasExceptionHandlers(Matcher<ExceptionHandlerNode>... handlers) { + return hasFeature("exception handlers", TryNode::getExceptionHandlers, contains(handlers)); + } + + public static Matcher<ExceptionHandlerNode> isExceptionHandler(Type type, String name, List<StatementNode> body) { + return allOf( + hasFeature("exception type", ExceptionHandlerNode::getExceptionType, equalTo(type)), + hasFeature("exception name", ExceptionHandlerNode::getExceptionName, equalTo(name)), + hasFeature("body", ExceptionHandlerNode::getBody, equalTo(body))); + } } |
