diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-10-21 00:10:50 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-10-21 00:10:50 +0100 |
| commit | 51f3d868199b411a4b0a010c0a26585b5718e0fb (patch) | |
| tree | 10337877d31a4ee89920805f1315d45647fe07e6 /src/test/java | |
| parent | 8c9b4c92c1493d96d4bb2a5b88bf9e98e3a584e2 (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.java | 28 |
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" |
