aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2025-03-02 19:59:51 +0000
committerMichael Williamson <mike@zwobble.org>2025-03-02 19:59:51 +0000
commit02d0212a2695275d25783932982d14a8a3c1a1ec (patch)
tree472af68c8e9f147e68fba577cd6bdc9da1a94ce4 /src/test/java
parent1f73c6fcd01e6c3b3c0e7ca0b30fb46de56f0b59 (diff)
Support accessing native methods
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java30
1 files changed, 30 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 4e0d31fc..d9f7455a 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java
@@ -19,6 +19,36 @@ import static org.zwobble.precisely.Matchers.equalTo;
public class TypeCheckerMemberAccessTests {
@Test
+ public void canAccessMethodOnNativeType() {
+ var untyped = Untyped.memberAccess(
+ Untyped.reference("user"),
+ "name"
+ );
+ var nativeType = Types.nativeType(NamespaceName.of("Example"), "User");
+ var methodType = FunctionType.builder()
+ .withReturnType(Types.BOOL)
+ .build();
+ var nativeTypeInfo = NativeTypeInfo.builder()
+ .addMethod("name", methodType)
+ .build();
+ var context = TypeCheckerContext.EMPTY
+ .enterGlobal(P.map(Map.entry("user", nativeType)))
+ .addNativeTypeInfo(nativeType, nativeTypeInfo);
+
+ var typed = typeCheckExpression(untyped, context);
+
+ assertThat(
+ typed.value(),
+ isTypedMemberAccessNode(
+ isTypedReferenceNode("user", nativeType),
+ "name",
+ MemberKind.METHOD,
+ methodType
+ )
+ );
+ }
+
+ @Test
public void canAccessFieldOnStructType() {
var untyped = Untyped.memberAccess(
Untyped.reference("user"),