package org.shedlang.compiler.parser; 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.isOptionalOf; import static org.zwobble.precisely.Matchers.isSequence; public class ParserWhenTests { @Test public void canParseWhen() { var source = """ when (x) { is A { return 4; } is B { } } """; var node = parseString(source, Parser::parseTopLevelExpression); assertThat(node, isUntypedWhenNode( isUntypedReferenceNode("x"), isSequence( isUntypedWhenCaseNode( isUntypedTypeLevelReferenceNode("A"), isUntypedBlockNode(isSequence( isUntypedFunctionReturnNode(isOptionalOf(isUntypedIntLiteralNode(4))) )) ), isUntypedWhenCaseNode( isUntypedTypeLevelReferenceNode("B"), isUntypedBlockNode(isSequence()) ) ) )); } }