diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-07 20:07:20 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-07 20:07:20 +0100 |
| commit | c7d528851c816f59740b83fa93d99ee857695d59 (patch) | |
| tree | 53e597d8cda59d27bbf8fdf302abc2858ce7e248 /src/test/java | |
| parent | 244cc7ad6855696891cd8c72bfedb68c91fd1aaa (diff) | |
Parse effect in function definition
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/ast/UntypedFunctionDefinitionNodeMatcher.java | 2 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/parser/ParserFunctionDefinitionTests.java | 14 |
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"))) + ); + } } |
