aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-01 19:46:22 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-01 19:46:22 +0100
commitb0d81e8b2354ffb0efba0f395b4aa4e114fd1579 (patch)
tree429f0778cd168cd9883ce2c7e0683b305bc553e1 /src/test/java
parent9645a0ee4ea525b97084d1ef26c326201baaf7b4 (diff)
Check when expression is instance of sum type
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhenTests.java21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhenTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhenTests.java
index aec35c33..031b20c6 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhenTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhenTests.java
@@ -2,12 +2,14 @@ package org.shedlang.compiler.typechecker;
import org.junit.jupiter.api.Test;
import org.shedlang.compiler.ast.untyped.Untyped;
+import org.shedlang.compiler.typechecker.errors.WhenExpressionIsNotInstanceOfSumTypeError;
import org.shedlang.compiler.types.*;
import org.shedlang.compiler.util.P;
import java.util.List;
import java.util.Map;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.shedlang.compiler.ast.typed.TypedNodeMatchers.*;
import static org.zwobble.precisely.AssertThat.assertThat;
import static org.zwobble.precisely.Matchers.equalTo;
@@ -20,6 +22,25 @@ public class TypeCheckerWhenTests {
private static final StructType VARIANT_TYPE_2 = Types.struct(NAMESPACE_NAME, "Variant2");
@Test
+ public void whenExpressionIsNotInstanceOfSumTypeThenErrorIsThrown() {
+ var untyped = Untyped.when(
+ Untyped.reference("x"),
+ List.of()
+ );
+ var context = TypeCheckerContext.EMPTY
+ .enterGlobal(P.map(
+ Map.entry("x", Types.STRING)
+ ));
+
+ var error = assertThrows(
+ WhenExpressionIsNotInstanceOfSumTypeError.class,
+ () -> TypeChecker.typeCheckExpression(untyped, context)
+ );
+
+ assertThat(error.actualType(), equalTo(Types.STRING));
+ }
+
+ @Test
public void whenAllCasesAreHandledThenExpressionTypeChecks() {
var untyped = Untyped.when(
Untyped.reference("x"),