diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-11-05 19:38:22 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-11-05 19:38:22 +0000 |
| commit | 120b830cab1462d76761ee0d26cba7df783dc741 (patch) | |
| tree | 01a0877a9cfcf747ec0749bf46f3853c5763c4d6 /src/test/java | |
| parent | 23bc783e4c0eea019d47f1b69d9d8a74adb15326 (diff) | |
Check that handled effect is user-defined effect
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerTryTests.java | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerTryTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerTryTests.java index 9224c8ff..802f4d44 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerTryTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerTryTests.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test; import org.shedlang.compiler.ast.untyped.Untyped; import org.shedlang.compiler.ast.untyped.UntypedCallNode; import org.shedlang.compiler.ast.untyped.UntypedTryNode; +import org.shedlang.compiler.typechecker.errors.NotUserDefinedEffectError; import org.shedlang.compiler.typechecker.errors.UnexpectedEffectError; import org.shedlang.compiler.types.Effects; import org.shedlang.compiler.types.FunctionType; @@ -133,4 +134,26 @@ public class TypeCheckerTryTests { assertThat(result.value(), isTypedTryNode()); } + + @Test + public void whenHandledEffectIsNotUserDefinedEffectThenErrorIsThrown() { + var untyped = UntypedTryNode.builder() + .withHandledEffect(Untyped.typeLevelReference("Io")) + .build(); + var context = TypeCheckerContext.EMPTY + .enterFunction( + P.map( + Map.entry("Io", Variable.defined(Types.effectType(Effects.IO), VariableType.CONSTANT)) + ), + Effects.NONE, + Optional.empty() + ); + + var error = assertThrows( + NotUserDefinedEffectError.class, + () -> typeCheckExpression(untyped, context) + ); + + assertThat(error.effect(), equalTo(Effects.IO)); + } } |
