aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-12-19 18:28:41 +0000
committerMichael Williamson <mike@zwobble.org>2024-12-19 18:28:41 +0000
commit8f812ba74b95cfb68f8792b6b0dde61e42c36a5f (patch)
tree45ba4b92d5df16877766ffc3cd906d85fed0f5af /src/test/java
parent5cc08d49a2cf7dc3d1794d39f49aff760372cffb (diff)
Support access methods on structs
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java29
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"),