aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-07 20:07:20 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-07 20:07:20 +0100
commitc7d528851c816f59740b83fa93d99ee857695d59 (patch)
tree53e597d8cda59d27bbf8fdf302abc2858ce7e248 /src/test/java
parent244cc7ad6855696891cd8c72bfedb68c91fd1aaa (diff)
Parse effect in function definition
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/ast/UntypedFunctionDefinitionNodeMatcher.java2
-rw-r--r--src/test/java/org/shedlang/compiler/parser/ParserFunctionDefinitionTests.java14
2 files changed, 15 insertions, 1 deletions
diff --git a/src/test/java/org/shedlang/compiler/ast/UntypedFunctionDefinitionNodeMatcher.java b/src/test/java/org/shedlang/compiler/ast/UntypedFunctionDefinitionNodeMatcher.java
index 775cf5f5..0a52482d 100644
--- a/src/test/java/org/shedlang/compiler/ast/UntypedFunctionDefinitionNodeMatcher.java
+++ b/src/test/java/org/shedlang/compiler/ast/UntypedFunctionDefinitionNodeMatcher.java
@@ -32,7 +32,7 @@ public class UntypedFunctionDefinitionNodeMatcher extends MatcherBuilder<Untyped
return with(has("body", x -> x.body(), body));
}
- public UntypedFunctionDefinitionNodeMatcher withEffect(Matcher<Optional<UntypedTypeLevelExpressionNode>> effect) {
+ public UntypedFunctionDefinitionNodeMatcher withEffect(Matcher<Optional<? extends UntypedTypeLevelExpressionNode>> effect) {
return with(has("effect", x -> x.effect(), effect));
}
diff --git a/src/test/java/org/shedlang/compiler/parser/ParserFunctionDefinitionTests.java b/src/test/java/org/shedlang/compiler/parser/ParserFunctionDefinitionTests.java
index 34c50065..80ecb5b2 100644
--- a/src/test/java/org/shedlang/compiler/parser/ParserFunctionDefinitionTests.java
+++ b/src/test/java/org/shedlang/compiler/parser/ParserFunctionDefinitionTests.java
@@ -26,4 +26,18 @@ public class ParserFunctionDefinitionTests {
.withBody(isSequence())
);
}
+ @Test
+ public void canParseFunctionWithEffect() {
+ var source = """
+ fun f() ! Io -> Unit {
+ }""";
+
+ var node = parseString(source, Parser::parseNamespaceStatement);
+
+ assertThat(
+ node,
+ isUntypedFunctionDefinitionNode()
+ .withEffect(isOptionalOf(isUntypedTypeLevelReferenceNode("Io")))
+ );
+ }
}