aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
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"))
+ ))
+ )
+ ));
+ }
}