From d4d8c8bc13a4d2b11f87a474930349c17afab2b1 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 26 Dec 2023 17:18:50 +0000 Subject: Parse type level args for calls --- .../shedlang/compiler/parser/ParserCallTests.java | 50 +++++++++++++++++++++- 1 file changed, 48 insertions(+), 2 deletions(-) (limited to 'src/test/java') 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") + ))) + ); + } } -- cgit v1.2.3