diff options
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/ast/UntypedNodeMatchers.java | 10 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/parser/ParserCallTests.java | 40 |
2 files changed, 50 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/ast/UntypedNodeMatchers.java b/src/test/java/org/shedlang/compiler/ast/UntypedNodeMatchers.java index 21e8cf1b..3925ec80 100644 --- a/src/test/java/org/shedlang/compiler/ast/UntypedNodeMatchers.java +++ b/src/test/java/org/shedlang/compiler/ast/UntypedNodeMatchers.java @@ -16,6 +16,16 @@ public class UntypedNodeMatchers { return new UntypedCallNodeMatcher(); } + public static Matcher<UntypedNamedArgNode> isUntypedNamedArgNode( + String name, + Matcher<UntypedExpressionNode> expression + ) { + return allOf( + has("name", x -> x.name(), equalTo(name)), + has("expression", x -> x.expression(), expression) + ); + } + public static Matcher<UntypedExpressionNode> isUntypedReferenceNode(String name) { return instanceOf( UntypedReferenceNode.class, diff --git a/src/test/java/org/shedlang/compiler/parser/ParserCallTests.java b/src/test/java/org/shedlang/compiler/parser/ParserCallTests.java index 5345414f..1020b430 100644 --- a/src/test/java/org/shedlang/compiler/parser/ParserCallTests.java +++ b/src/test/java/org/shedlang/compiler/parser/ParserCallTests.java @@ -81,6 +81,46 @@ public class ParserCallTests { } @Test + public void canParseCallWithSingleNamedArg() { + var source = "f(.first = a)"; + + var node = parseString(source, Parser::parseTopLevelExpression); + + assertThat( + node, + isUntypedCallNode() + .withArgs( + isUntypedArgsNode() + .withPositional(isSequence()) + .withNamed(isSequence( + isUntypedNamedArgNode("first", isUntypedReferenceNode("a")) + )) + ) + ); + } + + @Test + public void canParseCallWithManyNamedArgs() { + var source = "f(.first = a, .second = b, .third = c)"; + + var node = parseString(source, Parser::parseTopLevelExpression); + + assertThat( + node, + isUntypedCallNode() + .withArgs( + isUntypedArgsNode() + .withPositional(isSequence()) + .withNamed(isSequence( + isUntypedNamedArgNode("first", isUntypedReferenceNode("a")), + isUntypedNamedArgNode("second", isUntypedReferenceNode("b")), + isUntypedNamedArgNode("third", isUntypedReferenceNode("c")) + )) + ) + ); + } + + @Test public void argumentListCanHaveTrailingComma() { var source = "f(a,)"; |
