diff options
Diffstat (limited to 'src/test/java')
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 ) |
