diff options
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java index 1ed1aabe..921358f5 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java @@ -45,6 +45,35 @@ public class TypeCheckerMemberAccessTests { } @Test + public void canAccessMemberOnStructType() { + var untyped = Untyped.memberAccess( + Untyped.reference("user"), + "name" + ); + var structType = Types.struct(NamespaceName.of("Example"), "User"); + var methodType = FunctionType.builder() + .withReturnType(Types.BOOL) + .build(); + var structTypeInfo = StructTypeInfo.builder() + .addMethod("name", methodType) + .build(); + var context = TypeCheckerContext.EMPTY + .enterGlobal(P.map(Map.entry("user", structType))) + .addStructTypeInfo(structType, structTypeInfo); + + var typed = typeCheckExpression(untyped, context); + + assertThat( + typed.value(), + isTypedMemberAccessNode( + isTypedReferenceNode("user", structType), + "name", + methodType + ) + ); + } + + @Test public void canAccessFieldWithFixedTypeOnConstructedStructType() { var untyped = Untyped.memberAccess( Untyped.reference("x"), |
