aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2025-03-02 19:38:21 +0000
committerMichael Williamson <mike@zwobble.org>2025-03-02 19:38:21 +0000
commitd75f1c798a226861297a18da9a5afaa756e1ba91 (patch)
tree998a26c1755c5374e90882735e75ae3a12e91e0c /src/test/java
parentc865c64502aa92a6eb501c3fc8993d212cb944ee (diff)
Add test for native type methods with params
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNativeTypeDeclarationTests.java56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNativeTypeDeclarationTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNativeTypeDeclarationTests.java
index a02262a4..029fc034 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNativeTypeDeclarationTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNativeTypeDeclarationTests.java
@@ -172,4 +172,60 @@ public class TypeCheckerNativeTypeDeclarationTests {
))
);
}
+
+ @Test
+ public void canTypeCheckMethodWithMultipleParams() {
+ var untyped = UntypedNativeTypeDeclarationNode.builder()
+ .withName("ExampleType")
+ .addMethod(
+ UntypedNativeFunctionDeclarationNode.builder()
+ .addPositionalParam(Untyped.typeLevelReference("This"))
+ .addPositionalParam(Untyped.typeLevelReference("Bool"))
+ .addNamedParam("b", Untyped.typeLevelReference("Int"))
+ .withName("a")
+ .withReturnType(Untyped.typeLevelReference("Unit"))
+ .build()
+ )
+ .build();
+ var context = TypeCheckerContext.EMPTY
+ .enterGlobal(P.map(
+ Map.entry("Unit", Types.metaType(Types.UNIT)),
+ Map.entry("Bool", Types.metaType(Types.BOOL)),
+ Map.entry("Int", Types.metaType(Types.INT))
+ ));
+
+ var typed = typeCheckNamespaceStatement(untyped, context);
+
+ assertThat(
+ typed.value(),
+ isTypedNativeTypeDeclarationNode()
+ .withMethods(isSequence(
+ isTypedNativeFunctionDeclarationNode()
+ .withSignature(
+ FunctionType.builder()
+ .addPositionalParam(Types.nativeType(NAMESPACE_NAME, "ExampleType"))
+ .addPositionalParam(Types.BOOL)
+ .addNamedParam("b", Types.INT)
+ .withReturnType(Types.UNIT)
+ .build()
+ )
+ ))
+ );
+ var nativeTypeInfo = typed.context().toTypeInfos()
+ .nativeTypeInfo(Types.nativeType(NAMESPACE_NAME, "ExampleType"))
+ .orElseThrow();
+ assertThat(
+ nativeTypeInfo,
+ has("methods", x -> x.methods(), isSequence(
+ equalTo(new MethodInfo(
+ "a",
+ FunctionType.builder()
+ .addPositionalParam(Types.BOOL)
+ .addNamedParam("b", Types.INT)
+ .withReturnType(Types.UNIT)
+ .build()
+ ))
+ ))
+ );
+ }
}