aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-09 19:17:56 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-09 19:17:56 +0100
commit383321e4cbd303255607adcd0f8a2338050c795d (patch)
tree23c56abb2d2ea4eea0a40e4ebf7c143ce96de950 /src/test/java
parentbf55e95953edeefad8e83c034bfb4920d99c29ba (diff)
Handle if expression statement
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/parser/ParserExpressionStatementTests.java56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/parser/ParserExpressionStatementTests.java b/src/test/java/org/shedlang/compiler/parser/ParserExpressionStatementTests.java
index d962e68e..5b8bf167 100644
--- a/src/test/java/org/shedlang/compiler/parser/ParserExpressionStatementTests.java
+++ b/src/test/java/org/shedlang/compiler/parser/ParserExpressionStatementTests.java
@@ -5,6 +5,7 @@ import org.junit.jupiter.api.Test;
import static org.shedlang.compiler.ast.untyped.UntypedNodeMatchers.*;
import static org.shedlang.compiler.parser.ParserTesting.parseString;
import static org.zwobble.precisely.AssertThat.assertThat;
+import static org.zwobble.precisely.Matchers.isSequence;
public class ParserExpressionStatementTests {
@Test
@@ -15,4 +16,59 @@ public class ParserExpressionStatementTests {
assertThat(node, isUntypedExpressionStatementNode(isUntypedReferenceNode("f")));
}
+
+ @Test
+ public void canParseBlockReturn() {
+ var source = "f";
+
+ var node = parseString(source, Parser::parseFunctionStatement);
+
+ assertThat(node, isUntypedBlockReturnNode(isUntypedReferenceNode("f")));
+ }
+
+ @Test
+ public void ifWithAllBranchesAsExpressionStatementsIsExpressionStatement() {
+ var source = "if (a) { b; } else { c; }";
+
+ var node = parseString(source, Parser::parseFunctionStatement);
+
+ assertThat(node, isUntypedExpressionStatementNode(
+ isUntypedIfNode(
+ isSequence(
+ isUntypedConditionalBranchNode(
+ isUntypedReferenceNode("a"),
+ isUntypedBlockNode(isSequence(
+ isUntypedExpressionStatementNode(isUntypedReferenceNode("b"))
+ ))
+ )
+ ),
+ isUntypedBlockNode(isSequence(
+ isUntypedExpressionStatementNode(isUntypedReferenceNode("c"))
+ ))
+ )
+ ));
+ }
+
+ @Test
+ public void ifWithAllBranchesAsBlockReturnsIsBlockReturn() {
+ var source = "if (a) { b } else { c }";
+
+ var node = parseString(source, Parser::parseFunctionStatement);
+
+ assertThat(node, isUntypedBlockReturnNode(
+ isUntypedIfNode(
+ isSequence(
+ isUntypedConditionalBranchNode(
+ isUntypedReferenceNode("a"),
+ isUntypedBlockNode(isSequence(
+ isUntypedBlockReturnNode(isUntypedReferenceNode("b"))
+ ))
+ )
+ ),
+ isUntypedBlockNode(isSequence(
+ isUntypedBlockReturnNode(isUntypedReferenceNode("c"))
+ ))
+ )
+ ));
+ }
}