diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-09 19:17:56 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-09 19:17:56 +0100 |
| commit | 383321e4cbd303255607adcd0f8a2338050c795d (patch) | |
| tree | 23c56abb2d2ea4eea0a40e4ebf7c143ce96de950 /src/test/java | |
| parent | bf55e95953edeefad8e83c034bfb4920d99c29ba (diff) | |
Handle if expression statement
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/parser/ParserExpressionStatementTests.java | 56 |
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")) + )) + ) + )); + } } |
