summaryrefslogtreecommitdiff
path: root/src/test/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-06-19 17:48:16 +0100
committerMichael Williamson <mike@zwobble.org>2026-06-19 17:49:28 +0100
commit4f211efe89c3d86073369fc4b609ec8498aa61db (patch)
tree5abd1d46d9b7289a01f73c13cc5c3d994d47157d /src/test/java/org
parent81d6985af5c1d43a8d03af18eca3ec51242362c3 (diff)
Handle unknown namespace in import type checking
Diffstat (limited to 'src/test/java/org')
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceTests.java23
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(