From 296fa6ee9ee63089603c8bb13bb7d3346f85a037 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 22 Oct 2023 13:27:31 +0100 Subject: Add explicit visibility --- .../compiler/ast/typed/TypedNodeMatchers.java | 10 ----- .../typechecker/TypeCheckerNamespaceTests.java | 49 ++++++++++++++++++---- 2 files changed, 40 insertions(+), 19 deletions(-) (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java b/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java index dde00bca..c5a27329 100644 --- a/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java +++ b/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java @@ -195,16 +195,6 @@ public class TypedNodeMatchers { return TypedNamespaceNodeMatcher.empty(); } - public static Matcher isTypedNamespaceNode( - Matcher> body, - Matcher> fieldNames - ) { - return allOf( - has("body", x -> x.body(), body), - has("fieldNames", x -> x.fieldNames(), fieldNames) - ); - } - public static Matcher isTypedParamNode( String name, Matcher> type diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java index bddd7ba6..85515dad 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java @@ -29,7 +29,9 @@ public class TypeCheckerNamespaceTests { assertThat( result.value(), - isTypedNamespaceNode(isSequence(), isSequence()) + isTypedNamespaceNode() + .withImports(isSequence()) + .withBody(isSequence()) ); } @@ -70,12 +72,9 @@ public class TypeCheckerNamespaceTests { assertThat( result.value(), - isTypedNamespaceNode( - isSequence( - isTypedFunctionDefinitionNode().withName("f") - ), - isSequence(equalTo("f")) - ) + isTypedNamespaceNode().withBody(isSequence( + isTypedFunctionDefinitionNode().withName("f") + )) ); } @@ -493,7 +492,7 @@ public class TypeCheckerNamespaceTests { } @Test - public void typesOfFieldsAreStored() { + public void namespaceFieldsIncludesPublicFields() { var namespaceName = NamespaceName.of("Example"); var untyped = Untyped.namespace( namespaceName, @@ -501,6 +500,38 @@ public class TypeCheckerNamespaceTests { UntypedFunctionDefinitionNode.builder() .withName("f") .withReturnType(Untyped.typeLevelReference("Unit")) + .withVisibility(Visibility.PRIVATE) + .build(), + UntypedFunctionDefinitionNode.builder() + .withName("g") + .withReturnType(Untyped.typeLevelReference("Unit")) + .withVisibility(Visibility.PUBLIC) + .build() + ) + ); + var context = TypeCheckerContext.EMPTY + .enterGlobal(P.map(Map.entry("Unit", Types.metaType(Types.UNIT)))); + + var result = TypeChecker.typeCheckNamespace(untyped, context); + + assertThat(result.value().fieldNames(), isSequence(equalTo("g"))); + } + + @Test + public void namespaceTypeIncludesPublicFields() { + var namespaceName = NamespaceName.of("Example"); + var untyped = Untyped.namespace( + namespaceName, + List.of( + UntypedFunctionDefinitionNode.builder() + .withName("f") + .withReturnType(Untyped.typeLevelReference("Unit")) + .withVisibility(Visibility.PRIVATE) + .build(), + UntypedFunctionDefinitionNode.builder() + .withName("g") + .withReturnType(Untyped.typeLevelReference("Unit")) + .withVisibility(Visibility.PUBLIC) .build() ) ); @@ -515,7 +546,7 @@ public class TypeCheckerNamespaceTests { assertThat( namespaceTypeInfo, equalTo(NamespaceTypeInfo.fromFields(P.orderedMap( - Map.entry("f", new FunctionType(List.of(), List.of(), Effects.NONE, Types.UNIT)) + Map.entry("g", new FunctionType(List.of(), List.of(), Effects.NONE, Types.UNIT)) ))) ); } -- cgit v1.2.3