aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-13 20:54:23 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-13 20:54:23 +0100
commitf5b0a2fc84fe231c02645c630013c71610c64554 (patch)
treeaf8f05a2e6b723cc36798c4b3466a0459883bc81 /src/test/java
parent5944d9423280e78c23252c2c8468e117efe0ed55 (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.java9
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java36
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))
+ ))
+ );
+ }
}