aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-22 23:23:36 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-22 23:23:36 +0100
commit192cb27a8d8bc78211897c9f9325eb898390dbc4 (patch)
treef3771b5f2fb54a5b5eaa3fceadf283f190df9627 /src/test/java
parent074d98cef949be601fc11377c4036cd5e7023ac4 (diff)
Check type of main function
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/config/ConfigCheckerTests.java25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/config/ConfigCheckerTests.java b/src/test/java/org/shedlang/compiler/config/ConfigCheckerTests.java
index b6134ed2..404e57e6 100644
--- a/src/test/java/org/shedlang/compiler/config/ConfigCheckerTests.java
+++ b/src/test/java/org/shedlang/compiler/config/ConfigCheckerTests.java
@@ -66,4 +66,29 @@ public class ConfigCheckerTests {
assertThat(error.getMessage(), equalTo("Namespace Main has no field main"));
}
+
+ @Test
+ public void whenMainFunctionHasWrongTypeThenBinConfigIsInvalid() throws IOException {
+ var binConfig = new BinConfig("x", NamespaceName.of("Main"));
+ var typeInfos = TypeInfos.EMPTY
+ .addNamespaceTypeInfo(
+ NamespaceName.of("Main"),
+ NamespaceTypeInfo.fromFields(P.orderedMap(
+ Map.entry(
+ "main",
+ new FunctionType(List.of(), List.of(), Effects.IO, Types.STRING)
+ )
+ ))
+ );
+
+ var error = assertThrows(
+ ConfigError.class,
+ () -> ConfigChecker.configCheckBin(binConfig, typeInfos)
+ );
+
+ assertThat(
+ error.getMessage(),
+ equalTo("main function should have type fn () ! Io -> Unit, but Main.main has type fn () ! Io -> String")
+ );
+ }
}