diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-06-19 17:48:16 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-06-19 17:49:28 +0100 |
| commit | 4f211efe89c3d86073369fc4b609ec8498aa61db (patch) | |
| tree | 5abd1d46d9b7289a01f73c13cc5c3d994d47157d /src/test | |
| parent | 81d6985af5c1d43a8d03af18eca3ec51242362c3 (diff) | |
Handle unknown namespace in import type checking
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceTests.java | 23 |
1 files changed, 22 insertions, 1 deletions
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")) ); } @@ -100,6 +100,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() .withImports(List.of( |
