From a6d2cf68ec980cb7f53e50e56fe1c0376b15bf5a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 1 Nov 2026 21:17:29 +0000 Subject: Check handling of undeclared variable --- .../typechecker/TypeCheckerEvalExpressionTests.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src') diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerEvalExpressionTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerEvalExpressionTests.java index 2d63eae..1b8ddf9 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerEvalExpressionTests.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerEvalExpressionTests.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test; import org.zwobble.hobgoblin.compiler.ast.untyped.UntypedReferenceNode; import org.zwobble.hobgoblin.compiler.builtins.NativeTypes; import org.zwobble.hobgoblin.compiler.sources.NullSource; +import org.zwobble.hobgoblin.compiler.typechecker.errors.UndeclaredVariableError; import org.zwobble.hobgoblin.compiler.typechecker.errors.UnexpectedTypeError; import org.zwobble.hobgoblin.compiler.types.*; @@ -46,4 +47,21 @@ public class TypeCheckerEvalExpressionTests { assertThat(error.expected(), equalTo(new TypeSet.TypeLevelValue())); } + + @Test + public void whenVariableIsNotDeclaredThenCannotEvaluateReference() { + var untyped = UntypedReferenceNode.arbitrary() + .withName("count") + .build(); + var globalContext = TypeCheckerContextArb.globalContext(); + var namespaceName = NamespaceName.of("App"); + var namespaceContext = globalContext.enterNamespace(namespaceName); + + var error = assertThrows( + UndeclaredVariableError.class, + () -> TypeChecker.evalExpression(untyped, namespaceContext) + ); + + assertThat(error.variableName(), equalTo("count")); + } } -- cgit v1.2.3