aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-26 17:18:50 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-26 17:18:50 +0000
commitd4d8c8bc13a4d2b11f87a474930349c17afab2b1 (patch)
tree1d03e0326b717ee1362a0742f33c71b0fe3731e8 /src/test/java
parentdf6ec9c9606184b472fc3d7278e2a50fb32c1479 (diff)
Parse type level args for calls
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/parser/ParserCallTests.java50
1 files changed, 48 insertions, 2 deletions
diff --git a/src/test/java/org/shedlang/compiler/parser/ParserCallTests.java b/src/test/java/org/shedlang/compiler/parser/ParserCallTests.java
index 3b2bcc50..db0cb5de 100644
--- a/src/test/java/org/shedlang/compiler/parser/ParserCallTests.java
+++ b/src/test/java/org/shedlang/compiler/parser/ParserCallTests.java
@@ -7,8 +7,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
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.isSequence;
+import static org.zwobble.precisely.Matchers.*;
public class ParserCallTests {
// == Receiver ==
@@ -217,4 +216,51 @@ public class ParserCallTests {
.withTypeLevelArgs(isOptionalEmpty())
);
}
+
+ @Test
+ public void canParseCallWithOneTypeLevelArg() {
+ var source = "f[A]()";
+
+ var node = parseString(source, Parser::parseTopLevelExpression);
+
+ assertThat(
+ node,
+ isUntypedCallNode()
+ .withTypeLevelArgs(isOptionalOf(isSequence(
+ isUntypedTypeLevelReferenceNode("A")
+ )))
+ );
+ }
+
+ @Test
+ public void canParseCallWithMultipleTypeLevelArgs() {
+ var source = "f[A, B, C]()";
+
+ var node = parseString(source, Parser::parseTopLevelExpression);
+
+ assertThat(
+ node,
+ isUntypedCallNode()
+ .withTypeLevelArgs(isOptionalOf(isSequence(
+ isUntypedTypeLevelReferenceNode("A"),
+ isUntypedTypeLevelReferenceNode("B"),
+ isUntypedTypeLevelReferenceNode("C")
+ )))
+ );
+ }
+
+ @Test
+ public void typeLevelArgsCanHaveTrailingComma() {
+ var source = "f[A,]()";
+
+ var node = parseString(source, Parser::parseTopLevelExpression);
+
+ assertThat(
+ node,
+ isUntypedCallNode()
+ .withTypeLevelArgs(isOptionalOf(isSequence(
+ isUntypedTypeLevelReferenceNode("A")
+ )))
+ );
+ }
}