aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-21 00:10:50 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-21 00:10:50 +0100
commit51f3d868199b411a4b0a010c0a26585b5718e0fb (patch)
tree10337877d31a4ee89920805f1315d45647fe07e6 /src/test/java
parent8c9b4c92c1493d96d4bb2a5b88bf9e98e3a584e2 (diff)
Support type checking field access on namespace
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFieldAccessTests.java28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFieldAccessTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFieldAccessTests.java
index 62971de5..dfddc7ca 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFieldAccessTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFieldAccessTests.java
@@ -43,7 +43,33 @@ public class TypeCheckerFieldAccessTests {
}
@Test
- public void whenReceiverIsNotStructTypeThenErrorIsThrown() {
+ public void canAccessFieldOnNamespaceType() {
+ var untyped = Untyped.fieldAccess(
+ Untyped.reference("Example"),
+ "name"
+ );
+ var namespaceType = Types.namespace(NamespaceName.of("Example"));
+ var context = TypeCheckerContext.EMPTY
+ .enterGlobal(P.map(Map.entry("Example", namespaceType)))
+ .addNamespaceFields(
+ namespaceType.namespaceName(),
+ P.orderedMap(Map.entry("name", Types.STRING))
+ );
+
+ var typed = TypeChecker.typeCheckExpression(untyped, context);
+
+ assertThat(
+ typed.value(),
+ isTypedFieldAccessNode(
+ isTypedReferenceNode("Example", namespaceType),
+ "name",
+ Types.STRING
+ )
+ );
+ }
+
+ @Test
+ public void whenReceiverIsTypeWithoutFieldsThenErrorIsThrown() {
var untyped = Untyped.fieldAccess(
Untyped.reference("user"),
"name"