package org.shedlang.compiler.parser; import org.junit.jupiter.api.Test; import org.shedlang.compiler.types.Visibility; 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.anything; public class ParserValTests { @Test public void canParseValAsFunctionStatement() { var source = "val x = y;"; var node = parseString(source, Parser::parseFunctionStatement); assertThat(node, isUntypedAssignNode( isUntypedTargetValNode("x"), isUntypedReferenceNode("y") )); } @Test public void canParseValAsNamespaceStatement() { var source = "val x = y;"; var node = parseString(source, Parser::parseNamespaceStatement); assertThat(node, isUntypedAssignNode( isUntypedTargetValNode("x"), isUntypedReferenceNode("y") )); } @Test public void defaultVisibilityIsPrivate() { var source = "val x = y;"; var node = parseString(source, Parser::parseNamespaceStatement); assertThat(node, isUntypedAssignNode( isUntypedTargetValNode(Visibility.PRIVATE), anything() )); } @Test public void whenValIsPrefixWithPubThenVisibilityIsPublic() { var source = "pub val x = y;"; var node = parseString(source, Parser::parseNamespaceStatement); assertThat(node, isUntypedAssignNode( isUntypedTargetValNode(Visibility.PUBLIC), anything() )); } }