aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-09-17 16:44:23 +0100
committerMichael Williamson <mike@zwobble.org>2023-09-17 16:44:31 +0100
commit4530282258bd61928646a7af792f30c0b46b016b (patch)
tree7a5d944ba67f1d356fdd8d369a83d2a03ee0aeed /src/test/java
parent891db26b0e9c1fe81b5b7f49d11a1e2a28af9987 (diff)
Parse tuple types
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/ParserTupleTypeTests.java24
2 files changed, 33 insertions, 0 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 e65bcb5c..37d432e8 100644
--- a/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java
+++ b/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java
@@ -229,6 +229,15 @@ public class UntypedNodeMatchers {
);
}
+ public static Matcher<UntypedTypeLevelExpressionNode> isUntypedTupleTypeNode(
+ Matcher<Iterable<? extends UntypedTypeLevelExpressionNode>> elements
+ ) {
+ return instanceOf(
+ UntypedTupleTypeNode.class,
+ has("elements", x -> x.elements(), elements)
+ );
+ }
+
public static Matcher<UntypedTypeLevelExpressionNode> isUntypedTypeLevelReferenceNode(String name) {
return instanceOf(
UntypedTypeLevelReferenceNode.class,
diff --git a/src/test/java/org/shedlang/compiler/parser/ParserTupleTypeTests.java b/src/test/java/org/shedlang/compiler/parser/ParserTupleTypeTests.java
new file mode 100644
index 00000000..cae49b5a
--- /dev/null
+++ b/src/test/java/org/shedlang/compiler/parser/ParserTupleTypeTests.java
@@ -0,0 +1,24 @@
+package org.shedlang.compiler.parser;
+
+import org.junit.jupiter.api.Test;
+
+import static org.shedlang.compiler.ast.untyped.UntypedNodeMatchers.isUntypedTupleTypeNode;
+import static org.shedlang.compiler.ast.untyped.UntypedNodeMatchers.isUntypedTypeLevelReferenceNode;
+import static org.shedlang.compiler.parser.ParserTesting.parseString;
+import static org.zwobble.precisely.AssertThat.assertThat;
+import static org.zwobble.precisely.Matchers.isSequence;
+
+public class ParserTupleTypeTests {
+ @Test
+ public void canParseTupleTypes() {
+ var source = "#(A, B, C)";
+
+ var node = parseString(source, Parser::parseTopLevelTypeLevelExpression);
+
+ assertThat(node, isUntypedTupleTypeNode(isSequence(
+ isUntypedTypeLevelReferenceNode("A"),
+ isUntypedTypeLevelReferenceNode("B"),
+ isUntypedTypeLevelReferenceNode("C")
+ )));
+ }
+}