From 16120bc80e13a557a6065f08c1da24453920241a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 3 Jul 2023 11:56:38 +0100 Subject: Parse val statements --- .../compiler/ast/untyped/UntypedNodeMatchers.java | 18 ++++++++++++++++++ .../shedlang/compiler/parser/ParserValTests.java | 21 +++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 src/test/java/org/shedlang/compiler/parser/ParserValTests.java (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java b/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java index 95d30cc6..aeee9df1 100644 --- a/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java +++ b/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java @@ -63,10 +63,28 @@ public class UntypedNodeMatchers { ); } + public static Matcher isUntypedTargetVariableNode(String name) { + return instanceOf( + UntypedTargetNode.Variable.class, + has("name", x -> x.name(), equalTo(name)) + ); + } + public static Matcher isUntypedTypeLevelReferenceNode(String name) { return instanceOf( UntypedTypeLevelReferenceNode.class, has("name", x -> x.name(), equalTo(name)) ); } + + public static Matcher isUntypedValNode( + Matcher target, + Matcher expression + ) { + return instanceOf( + UntypedValNode.class, + has("target", x -> x.target(), target), + has("expression", x -> x.expression(), expression) + ); + } } diff --git a/src/test/java/org/shedlang/compiler/parser/ParserValTests.java b/src/test/java/org/shedlang/compiler/parser/ParserValTests.java new file mode 100644 index 00000000..99b07e54 --- /dev/null +++ b/src/test/java/org/shedlang/compiler/parser/ParserValTests.java @@ -0,0 +1,21 @@ +package org.shedlang.compiler.parser; + +import org.junit.jupiter.api.Test; + +import static org.shedlang.compiler.ast.untyped.UntypedNodeMatchers.*; +import static org.shedlang.compiler.parser.ParserTesting.parseString; +import static org.zwobble.precisely.AssertThat.assertThat; + +public class ParserValTests { + @Test + public void canParseValAsFunctionStatement() { + var source = "val x = y;"; + + var node = parseString(source, Parser::parseFunctionStatement); + + assertThat(node, isUntypedValNode( + isUntypedTargetVariableNode("x"), + isUntypedReferenceNode("y") + )); + } +} -- cgit v1.2.3