From 5831a308f4d8f9e83821fffff67a2141cc76d26b Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 22 Oct 2023 13:16:44 +0100 Subject: Parse visibility for vals --- .../org/shedlang/compiler/ast/untyped/Untyped.java | 3 ++- .../compiler/ast/untyped/UntypedNodeMatchers.java | 12 +++++++++- .../shedlang/compiler/parser/ParserValTests.java | 26 ++++++++++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java index 3e925601..9e4ac8cd 100644 --- a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java +++ b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java @@ -2,6 +2,7 @@ package org.shedlang.compiler.ast.untyped; import org.shedlang.compiler.sources.Sources; import org.shedlang.compiler.types.NamespaceName; +import org.shedlang.compiler.types.Visibility; import java.math.BigInteger; import java.util.List; @@ -181,7 +182,7 @@ public class Untyped { } public static UntypedTargetNode targetVal(String name) { - return new UntypedTargetNode.Val(name, Sources.NULL); + return new UntypedTargetNode.Val(name, Visibility.PRIVATE, Sources.NULL); } public static UntypedTargetNode targetVar(String name) { 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 6d426bf4..26716e3d 100644 --- a/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java +++ b/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java @@ -1,6 +1,7 @@ package org.shedlang.compiler.ast.untyped; import org.shedlang.compiler.types.NamespaceName; +import org.shedlang.compiler.types.Visibility; import org.zwobble.precisely.Matcher; import java.math.BigInteger; @@ -20,7 +21,7 @@ public class UntypedNodeMatchers { public static Matcher isUntypedAssignNode( Matcher target, - Matcher expression + Matcher expression ) { return instanceOf( UntypedAssignNode.class, @@ -254,6 +255,15 @@ public class UntypedNodeMatchers { ); } + public static Matcher isUntypedTargetValNode( + Visibility visibility + ) { + return instanceOf( + UntypedTargetNode.Val.class, + has("visibility", x -> x.visibility(), equalTo(visibility)) + ); + } + public static Matcher isUntypedTargetVarNode(String name) { return instanceOf( UntypedTargetNode.Var.class, diff --git a/src/test/java/org/shedlang/compiler/parser/ParserValTests.java b/src/test/java/org/shedlang/compiler/parser/ParserValTests.java index 6b01fc17..ba28f4f9 100644 --- a/src/test/java/org/shedlang/compiler/parser/ParserValTests.java +++ b/src/test/java/org/shedlang/compiler/parser/ParserValTests.java @@ -1,10 +1,12 @@ package org.shedlang.compiler.parser; import org.junit.jupiter.api.Test; +import org.shedlang.compiler.types.Visibility; 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.anything; public class ParserValTests { @Test @@ -30,4 +32,28 @@ public class ParserValTests { isUntypedReferenceNode("y") )); } + + @Test + public void defaultVisibilityIsPrivate() { + var source = "val x = y;"; + + var node = parseString(source, Parser::parseNamespaceStatement); + + assertThat(node, isUntypedAssignNode( + isUntypedTargetValNode(Visibility.PRIVATE), + anything() + )); + } + + @Test + public void whenValIsPrefixWithPubThenVisibilityIsPublic() { + var source = "pub val x = y;"; + + var node = parseString(source, Parser::parseNamespaceStatement); + + assertThat(node, isUntypedAssignNode( + isUntypedTargetValNode(Visibility.PUBLIC), + anything() + )); + } } -- cgit v1.2.3