summaryrefslogtreecommitdiff
path: root/src/test/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-11-01 21:48:11 +0000
committerMichael Williamson <mike@zwobble.org>2026-11-01 21:48:11 +0000
commit158ebdbc74e74894a32be9c8908da4b068326b67 (patch)
treedefe734b21c4cd7201c8b298e6253211ced009ec /src/test/java/org
parent9f8eb523395296b5d37498d89423daedf8e0121d (diff)
Read tables as members from database schema
Diffstat (limited to 'src/test/java/org')
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerEvalExpressionTests.java28
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerTableDefinitionTests.java3
2 files changed, 31 insertions, 0 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 1b8ddf9..cf1e73c 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerEvalExpressionTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerEvalExpressionTests.java
@@ -1,12 +1,16 @@
package org.zwobble.hobgoblin.compiler.typechecker;
import org.junit.jupiter.api.Test;
+import org.zwobble.hobgoblin.compiler.ast.untyped.UntypedMemberAccessNode;
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.*;
+import org.zwobble.hobgoblin.compiler.util.SequencedMaps;
+
+import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.zwobble.precisely.AssertThat.assertThat;
@@ -64,4 +68,28 @@ public class TypeCheckerEvalExpressionTests {
assertThat(error.variableName(), equalTo("count"));
}
+
+ @Test
+ public void canReadMemberField() {
+ var untyped = UntypedMemberAccessNode.arbitrary()
+ .withReceiver(UntypedReferenceNode.arbitrary().withName("blogApp"))
+ .withMemberName("authors")
+ .build();
+ var globalContext = TypeCheckerContextArb.globalContext();
+ var namespaceName = NamespaceName.of("App");
+ var namespaceContext = globalContext.enterNamespace(namespaceName);
+ var databaseSchema = new DatabaseSchema(namespaceName, "blogApp");
+ namespaceContext.declare("blogApp", Types.databaseSchema(databaseSchema), NullSource.INSTANCE);
+ var table = new Table(databaseSchema, "authors");
+ var rowType = new SimpleStructType(namespaceName, "Author");
+ var idField = new Field("id", NativeTypes.INT_32, NullSource.INSTANCE);
+ var databaseSchemaInfo = new DatabaseSchemaInfo(SequencedMaps.ofEntries(
+ Map.entry("authors", new TableInfo(table, rowType, idField))
+ ));
+ namespaceContext.defineDatabaseSchema(databaseSchema, databaseSchemaInfo);
+
+ var typed = TypeChecker.evalExpression(untyped, namespaceContext);
+
+ assertThat(typed, equalTo(table));
+ }
}
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerTableDefinitionTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerTableDefinitionTests.java
index 989fa39..0dd911b 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerTableDefinitionTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerTableDefinitionTests.java
@@ -40,6 +40,7 @@ public class TypeCheckerTableDefinitionTests {
var typed = typeCheckDatabaseSchemaStatement(
untyped,
+ new DatabaseSchema(NamespaceName.of("App"), "blogApp"),
new DatabaseSchemaInfo(new LinkedHashMap<>()),
namespaceContext
);
@@ -69,6 +70,7 @@ public class TypeCheckerTableDefinitionTests {
TableRowTypeMustBeStructError.class,
() -> typeCheckDatabaseSchemaStatement(
untyped,
+ new DatabaseSchema(NamespaceName.of("App"), "blogApp"),
new DatabaseSchemaInfo(new LinkedHashMap<>()),
namespaceContext
)
@@ -99,6 +101,7 @@ public class TypeCheckerTableDefinitionTests {
NoSuchFieldError.class,
() -> typeCheckDatabaseSchemaStatement(
untyped,
+ new DatabaseSchema(NamespaceName.of("App"), "blogApp"),
new DatabaseSchemaInfo(new LinkedHashMap<>()),
namespaceContext
)