aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/zwobble
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-04-17 16:00:18 +0100
committerMichael Williamson <mike@zwobble.org>2016-04-17 16:01:50 +0100
commit188051b4be316db4de8b6f48d634f249dd2e4986 (patch)
tree2ba5e06ce66271bf86875c192764af5f20aa6266 /src/test/java/org/zwobble
parenta5f76463dfc74d9b126f65416a51905a995c711d (diff)
Add reading of try statements
Diffstat (limited to 'src/test/java/org/zwobble')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java6
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java13
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/NodeMatchers.java24
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)));
+ }
}