summaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-06-19 17:47:22 +0100
committerMichael Williamson <mike@zwobble.org>2026-06-19 17:47:22 +0100
commit81d6985af5c1d43a8d03af18eca3ec51242362c3 (patch)
tree310c990ca568acd369960c1a42f58e5da9d76724 /src/test/java
parentf818776dba8bda2bf6e423da991190f3f4b4ff3f (diff)
Throw error on unknown namespace field
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceTests.java26
1 files changed, 25 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 c4b31b8..3559578 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceTests.java
@@ -9,6 +9,7 @@ import org.zwobble.hobgoblin.compiler.types.*;
import java.util.List;
import java.util.Optional;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.zwobble.hobgoblin.compiler.types.TypeMatchers.isMetaType;
import static org.zwobble.precisely.AssertThat.assertThat;
import static org.zwobble.precisely.Matchers.*;
@@ -42,7 +43,7 @@ public class TypeCheckerNamespaceTests {
))
));
assertThat(
- context.namespaceFields(NamespaceName.of("a", "b")).get("X"),
+ context.namespaceFields(NamespaceName.of("a", "b")).fieldType("X").orElseThrow(),
isMetaType(new StructType(NamespaceName.of("a", "b"), "X"))
);
}
@@ -97,4 +98,27 @@ public class TypeCheckerNamespaceTests {
)
);
}
+
+ @Test
+ public void whenNamespaceHasNoSuchFieldThenErrorIsThrown() {
+ 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();
+ context.defineNamespace(NamespaceName.of("a"), List.of());
+
+ var error = assertThrows(
+ UnknownNamespaceFieldError.class,
+ () -> TypeChecker.typeCheckNamespace(untyped, context)
+ );
+
+ assertThat(error.fieldName(), equalTo("A"));
+ assertThat(error.namespaceName(), equalTo(NamespaceName.of("a")));
+ }
}