From 6b0e8c55ad423aef60720ee4b3bb455de74f25f3 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 2 Dec 2023 23:48:28 +0000 Subject: Parse break statements --- .../compiler/ast/untyped/UntypedNodeMatchers.java | 9 +++++++ .../shedlang/compiler/parser/ParserBreakTests.java | 31 ++++++++++++++++++++++ .../compiler/parser/ParserResumeTests.java | 2 +- 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 src/test/java/org/shedlang/compiler/parser/ParserBreakTests.java (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java b/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java index 41c51713..32f1d085 100644 --- a/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java +++ b/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java @@ -69,6 +69,15 @@ public class UntypedNodeMatchers { ); } + public static Matcher isUntypedBreakNode( + Matcher> expression + ) { + return instanceOf( + UntypedBreakNode.class, + has("expression", x -> x.expression(), expression) + ); + } + public static UntypedCallNodeMatcher isUntypedCallNode() { return UntypedCallNodeMatcher.empty(); } diff --git a/src/test/java/org/shedlang/compiler/parser/ParserBreakTests.java b/src/test/java/org/shedlang/compiler/parser/ParserBreakTests.java new file mode 100644 index 00000000..53031e21 --- /dev/null +++ b/src/test/java/org/shedlang/compiler/parser/ParserBreakTests.java @@ -0,0 +1,31 @@ +package org.shedlang.compiler.parser; + +import org.junit.jupiter.api.Test; + +import static org.shedlang.compiler.ast.untyped.UntypedNodeMatchers.*; +import static org.shedlang.compiler.parser.ParserTesting.parseString; +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.isOptionalEmpty; +import static org.zwobble.precisely.Matchers.isOptionalOf; + +public class ParserBreakTests { + @Test + public void canParseBreakWithExpression() { + var source = "break x;"; + + var node = parseString(source, Parser::parseFunctionStatement); + + assertThat(node, isUntypedBreakNode(isOptionalOf( + isUntypedReferenceNode("x")) + )); + } + + @Test + public void canParseBreakWithoutExpression() { + var source = "break;"; + + var node = parseString(source, Parser::parseFunctionStatement); + + assertThat(node, isUntypedBreakNode(isOptionalEmpty())); + } +} diff --git a/src/test/java/org/shedlang/compiler/parser/ParserResumeTests.java b/src/test/java/org/shedlang/compiler/parser/ParserResumeTests.java index 8e134656..876cf5a7 100644 --- a/src/test/java/org/shedlang/compiler/parser/ParserResumeTests.java +++ b/src/test/java/org/shedlang/compiler/parser/ParserResumeTests.java @@ -8,7 +8,7 @@ import static org.zwobble.precisely.AssertThat.assertThat; import static org.zwobble.precisely.Matchers.isOptionalEmpty; import static org.zwobble.precisely.Matchers.isOptionalOf; -public class ParserFunctionResumeTests { +public class ParserResumeTests { @Test public void canParseResumeWithExpression() { var source = "resume x;"; -- cgit v1.2.3