diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-12-02 23:48:28 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-12-02 23:48:28 +0000 |
| commit | 6b0e8c55ad423aef60720ee4b3bb455de74f25f3 (patch) | |
| tree | 4a6b2da3b66c8201507e11fdeaab39d76f261821 /src/test/java | |
| parent | 0e4ddd473e1ad411005dcedd0af2049e8128c3d3 (diff) | |
Parse break statements
Diffstat (limited to 'src/test/java')
3 files changed, 41 insertions, 1 deletions
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<UntypedFunctionStatementNode> isUntypedBreakNode( + Matcher<Optional<? extends UntypedExpressionNode>> 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;"; |
