diff options
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceTests.java | 26 |
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"))); + } } |
