aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
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()
+ ))
+ ))
+ );
+ }
}