diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-12-26 17:18:50 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-12-26 17:18:50 +0000 |
| commit | d4d8c8bc13a4d2b11f87a474930349c17afab2b1 (patch) | |
| tree | 1d03e0326b717ee1362a0742f33c71b0fe3731e8 /src/test/java | |
| parent | df6ec9c9606184b472fc3d7278e2a50fb32c1479 (diff) | |
Parse type level args for calls
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/parser/ParserCallTests.java | 50 |
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") + ))) + ); + } } |
