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.isSequence; public class ParserAssignTests { @Test public void canParseSetAsFunctionStatement() { var source = "set x = y;"; var node = parseString(source, Parser::parseFunctionStatement); assertThat(node, isUntypedAssignNode( isUntypedTargetReassignNode("x"), isUntypedReferenceNode("y") )); } @Test public void canParseTupleTarget() { var source = "#(val x, set y) = z;"; var node = parseString(source, Parser::parseFunctionStatement); assertThat(node, isUntypedAssignNode( isUntypedTargetTupleNode(isSequence( isUntypedTargetValNode("x"), isUntypedTargetReassignNode("y") )), isUntypedReferenceNode("z") )); } @Test public void canParseIgnoreTarget() { var source = "_ = x;"; var node = parseString(source, Parser::parseFunctionStatement); assertThat(node, isUntypedAssignNode( isUntypedTargetIgnoreNode(), isUntypedReferenceNode("x") )); } }