From 4f211efe89c3d86073369fc4b609ec8498aa61db Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 19 Jun 2026 17:48:16 +0100 Subject: Handle unknown namespace in import type checking --- .../typechecker/TypeCheckerNamespaceTests.java | 23 +++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src/test') diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceTests.java index 3559578..82cccf3 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceTests.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceTests.java @@ -43,7 +43,7 @@ public class TypeCheckerNamespaceTests { )) )); assertThat( - context.namespaceFields(NamespaceName.of("a", "b")).fieldType("X").orElseThrow(), + context.namespaceFields(NamespaceName.of("a", "b")).orElseThrow().fieldType("X").orElseThrow(), isMetaType(new StructType(NamespaceName.of("a", "b"), "X")) ); } @@ -99,6 +99,27 @@ public class TypeCheckerNamespaceTests { ); } + @Test + public void whenNamespaceIsUnknownThenErrorIsThrown() { + var untyped = UntypedNamespaceNode.arbitrary() + .withImports(List.of( + UntypedImportNode.arbitrary() + .withAncestorDepth(Optional.empty()) + .withNamespaceName(NamespaceName.of("a")) + .withImportedNames(List.of("A")) + .build() + )) + .build(); + var context = TypeCheckerContextArb.globalContext(); + + var error = assertThrows( + UnknownNamespaceError.class, + () -> TypeChecker.typeCheckNamespace(untyped, context) + ); + + assertThat(error.namespaceName(), equalTo(NamespaceName.of("a"))); + } + @Test public void whenNamespaceHasNoSuchFieldThenErrorIsThrown() { var untyped = UntypedNamespaceNode.arbitrary() -- cgit v1.2.3