aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-02 23:48:28 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-02 23:48:28 +0000
commit6b0e8c55ad423aef60720ee4b3bb455de74f25f3 (patch)
tree4a6b2da3b66c8201507e11fdeaab39d76f261821 /src/test/java
parent0e4ddd473e1ad411005dcedd0af2049e8128c3d3 (diff)
Parse break statements
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java9
-rw-r--r--src/test/java/org/shedlang/compiler/parser/ParserBreakTests.java31
-rw-r--r--src/test/java/org/shedlang/compiler/parser/ParserResumeTests.java2
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;";