diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-13 20:54:23 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-13 20:54:23 +0100 |
| commit | f5b0a2fc84fe231c02645c630013c71610c64554 (patch) | |
| tree | af8f05a2e6b723cc36798c4b3466a0459883bc81 /src/test/java | |
| parent | 5944d9423280e78c23252c2c8468e117efe0ed55 (diff) | |
Store types of fields on namespace node
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java | 9 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java | 36 |
2 files changed, 40 insertions, 5 deletions
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 1f2f5c95..f93b7d5a 100644 --- a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java +++ b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java @@ -50,8 +50,15 @@ public class Untyped { return new UntypedNamedArgNode(name, expression, Sources.NULL); } + public static UntypedNamespaceNode namespace( + NamespaceName namespaceName, + List<UntypedNamespaceStatementNode> body + ) { + return new UntypedNamespaceNode(namespaceName, body, Sources.NULL); + } + public static UntypedNamespaceNode namespace(List<UntypedNamespaceStatementNode> body) { - return new UntypedNamespaceNode(NamespaceName.of("Example"), body, Sources.NULL); + return namespace(NamespaceName.of("DefaultNamespaceName"), body); } public static UntypedReferenceNode reference(String name) { diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java index a0f69b89..734ed89a 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java @@ -3,6 +3,8 @@ package org.shedlang.compiler.typechecker; import org.junit.jupiter.api.Test; import org.shedlang.compiler.ast.untyped.Untyped; import org.shedlang.compiler.ast.untyped.UntypedFunctionDefinitionNode; +import org.shedlang.compiler.types.FunctionType; +import org.shedlang.compiler.types.NamespaceName; import org.shedlang.compiler.types.Types; import org.shedlang.compiler.util.P; @@ -12,6 +14,7 @@ import java.util.Map; import static org.shedlang.compiler.ast.typed.TypedNodeMatchers.isTypedFunctionDefinitionNode; import static org.shedlang.compiler.ast.typed.TypedNodeMatchers.isTypedNamespaceNode; import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.equalTo; import static org.zwobble.precisely.Matchers.isSequence; public class TypeCheckerNamespaceTests { @@ -21,10 +24,10 @@ public class TypeCheckerNamespaceTests { var context = TypeCheckerContext.EMPTY .enter(P.map(Map.entry("Unit", Types.metaType(Types.UNIT)))); - var typed = TypeChecker.typeCheckNamespace(untyped, context); + var result = TypeChecker.typeCheckNamespace(untyped, context); assertThat( - typed, + result.value(), isTypedNamespaceNode(isSequence()) ); } @@ -40,13 +43,38 @@ public class TypeCheckerNamespaceTests { var context = TypeCheckerContext.EMPTY .enter(P.map(Map.entry("Unit", Types.metaType(Types.UNIT)))); - var typed = TypeChecker.typeCheckNamespace(untyped, context); + var result = TypeChecker.typeCheckNamespace(untyped, context); assertThat( - typed, + result.value(), isTypedNamespaceNode(isSequence( isTypedFunctionDefinitionNode().withName("f") )) ); } + + @Test + public void typesOfFieldsAreStored() { + var namespaceName = NamespaceName.of("Example"); + var untyped = Untyped.namespace( + namespaceName, + List.of( + UntypedFunctionDefinitionNode.builder() + .withName("f") + .withReturnType(Untyped.typeLevelReference("Unit")) + .build() + ) + ); + var context = TypeCheckerContext.EMPTY + .enter(P.map(Map.entry("Unit", Types.metaType(Types.UNIT)))); + + var result = TypeChecker.typeCheckNamespace(untyped, context); + + assertThat( + result.context().namespaceFields().get(namespaceName), + equalTo(P.orderedMap( + Map.entry("f", new FunctionType(List.of(), List.of(), Types.UNIT)) + )) + ); + } } |
