diff options
Diffstat (limited to 'src/test/java')
3 files changed, 38 insertions, 5 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java index 8b6ce84..ba69eb4 100644 --- a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java +++ b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java @@ -14,7 +14,7 @@ import static org.zwobble.couscous.ast.AssignmentNode.assign; import static org.zwobble.couscous.ast.CastNode.cast; import static org.zwobble.couscous.ast.ConstructorCallNode.constructorCall; import static org.zwobble.couscous.ast.EnumNode.declareEnum; -import static org.zwobble.couscous.ast.ExceptionHandlerNode.exceptionhandler; +import static org.zwobble.couscous.ast.ExceptionHandlerNode.exceptionHandler; import static org.zwobble.couscous.ast.ExpressionStatementNode.expressionStatement; import static org.zwobble.couscous.ast.FieldAccessNode.fieldAccess; import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg; @@ -308,8 +308,8 @@ public class CsharpSerializerTests { String output = serialize(tryStatement( list(returns(literal(1))), list( - exceptionhandler(varX, list(returns(reference(varX)))), - exceptionhandler(varY, list(returns(reference(varY))))))); + exceptionHandler(varX, list(returns(reference(varX)))), + exceptionHandler(varY, list(returns(reference(varY))))))); assertEquals("try {\n return 1;\n} catch (X x) {\n return x;\n} catch (Y y) {\n return y;\n}\n", output); } 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))); + } } |
