summaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-11-01 21:16:49 +0000
committerMichael Williamson <mike@zwobble.org>2026-11-01 21:16:49 +0000
commit1390becc9814e78f94fa01299b1b04acadfbfe46 (patch)
tree9e8b1818b3e3a4e60a38026d994e30c4a9a7680e /src/test/java
parentc5fd3e34f18f0773d1283fc5ed06fb289053e162 (diff)
Check handling of non-type-level values
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerEvalExpressionTests.java28
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerMetaTypeTests.java2
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerTypeLevelReferenceTests.java2
3 files changed, 25 insertions, 7 deletions
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 1c4d276..2d63eae 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerEvalExpressionTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerEvalExpressionTests.java
@@ -2,18 +2,18 @@ package org.zwobble.hobgoblin.compiler.typechecker;
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.types.DatabaseSchema;
-import org.zwobble.hobgoblin.compiler.types.NamespaceName;
-import org.zwobble.hobgoblin.compiler.types.Table;
-import org.zwobble.hobgoblin.compiler.types.Types;
+import org.zwobble.hobgoblin.compiler.typechecker.errors.UnexpectedTypeError;
+import org.zwobble.hobgoblin.compiler.types.*;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.zwobble.precisely.AssertThat.assertThat;
import static org.zwobble.precisely.Matchers.equalTo;
public class TypeCheckerEvalExpressionTests {
@Test
- public void canEvaluateReference() {
+ public void whenVariableIsTypeLevelValueThenCanEvaluateReference() {
var untyped = UntypedReferenceNode.arbitrary()
.withName("authors")
.build();
@@ -28,4 +28,22 @@ public class TypeCheckerEvalExpressionTests {
assertThat(typed, equalTo(table));
}
+
+ @Test
+ public void whenVariableIsNotTypeLevelValueThenCannotEvaluateReference() {
+ var untyped = UntypedReferenceNode.arbitrary()
+ .withName("count")
+ .build();
+ var globalContext = TypeCheckerContextArb.globalContext();
+ var namespaceName = NamespaceName.of("App");
+ var namespaceContext = globalContext.enterNamespace(namespaceName);
+ namespaceContext.declare("count", NativeTypes.INT_32, NullSource.INSTANCE);
+
+ var error = assertThrows(
+ UnexpectedTypeError.class,
+ () -> TypeChecker.evalExpression(untyped, namespaceContext)
+ );
+
+ assertThat(error.expected(), equalTo(new TypeSet.TypeLevelValue()));
+ }
}
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerMetaTypeTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerMetaTypeTests.java
index 074d1df..713cd13 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerMetaTypeTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerMetaTypeTests.java
@@ -27,7 +27,7 @@ public class TypeCheckerMetaTypeTests {
() -> TypeChecker.typeCheckMetaType(untyped, context)
);
- assertThat(error.expected(), equalTo(new TypeSet.MetaType()));
+ assertThat(error.expected(), equalTo(new TypeSet.TypeLevelValue()));
assertThat(error.actual(), equalTo(nativeType));
}
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerTypeLevelReferenceTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerTypeLevelReferenceTests.java
index 084be46..98f4f22 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerTypeLevelReferenceTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerTypeLevelReferenceTests.java
@@ -40,7 +40,7 @@ public class TypeCheckerTypeLevelReferenceTests {
() -> TypeChecker.typeCheckTypeLevelExpression(untyped, context)
);
- assertThat(error.expected(), equalTo(new TypeSet.MetaType()));
+ assertThat(error.expected(), equalTo(new TypeSet.TypeLevelValue()));
assertThat(error.actual(), equalTo(nativeType));
}