aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-09-17 16:31:02 +0100
committerMichael Williamson <mike@zwobble.org>2023-09-17 16:31:02 +0100
commit6587267906ea7b43270868b8bdee96bceed17602 (patch)
tree05f9268ac178607ae547ba514949d93cf523278c /src/test/java
parent99bfde40214711b05043907ad773304bd8ea5e93 (diff)
Parse tuple targets
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/ParserAssignTests.java18
2 files changed, 26 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 1af0a613..a86c8d6e 100644
--- a/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java
+++ b/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java
@@ -197,6 +197,15 @@ public class UntypedNodeMatchers {
);
}
+ public static Matcher<UntypedTargetNode> isUntypedTargetTupleNode(
+ Matcher<Iterable<? extends UntypedTargetNode>> elements
+ ) {
+ return instanceOf(
+ UntypedTargetNode.Tuple.class,
+ has("elements", x -> x.elements(), elements)
+ );
+ }
+
public static Matcher<UntypedTargetNode> isUntypedTargetValNode(String name) {
return instanceOf(
UntypedTargetNode.Val.class,
diff --git a/src/test/java/org/shedlang/compiler/parser/ParserAssignTests.java b/src/test/java/org/shedlang/compiler/parser/ParserAssignTests.java
index 3640db47..9c29d328 100644
--- a/src/test/java/org/shedlang/compiler/parser/ParserAssignTests.java
+++ b/src/test/java/org/shedlang/compiler/parser/ParserAssignTests.java
@@ -5,10 +5,11 @@ 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.isSequence;
public class ParserAssignTests {
@Test
- public void canParseAssignAsFunctionStatement() {
+ public void canParseReassignAsFunctionStatement() {
var source = "assign x = y;";
var node = parseString(source, Parser::parseFunctionStatement);
@@ -18,4 +19,19 @@ public class ParserAssignTests {
isUntypedReferenceNode("y")
));
}
+
+ @Test
+ public void canParseTupleTarget() {
+ var source = "#(val x, assign y) = z;";
+
+ var node = parseString(source, Parser::parseFunctionStatement);
+
+ assertThat(node, isUntypedAssignNode(
+ isUntypedTargetTupleNode(isSequence(
+ isUntypedTargetValNode("x"),
+ isUntypedTargetReassignNode("y")
+ )),
+ isUntypedReferenceNode("z")
+ ));
+ }
}