aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
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")
+ )))
+ );
+ }
}