package org.shedlang.compiler.parser; import org.junit.jupiter.api.Test; import org.shedlang.compiler.parser.errors.IntLiteralCannotHaveLeadingZeroesError; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.shedlang.compiler.ast.untyped.UntypedNodeMatchers.isUntypedIntLiteralNode; import static org.shedlang.compiler.parser.ParserTesting.parseString; import static org.zwobble.precisely.AssertThat.assertThat; public class ParserIntLiteralTests { @Test public void canParseZero() { var source = "0"; var node = parseString(source, Parser::parseTopLevelExpression); assertThat(node, isUntypedIntLiteralNode(0)); } @Test public void canParseNegativeZero() { var source = "-0"; var node = parseString(source, Parser::parseTopLevelExpression); assertThat(node, isUntypedIntLiteralNode(0)); } @Test public void canParseSingleDigitPositiveInt() { var source = "7"; var node = parseString(source, Parser::parseTopLevelExpression); assertThat(node, isUntypedIntLiteralNode(7)); } @Test public void canParseManyDigitPositiveInt() { var source = "723"; var node = parseString(source, Parser::parseTopLevelExpression); assertThat(node, isUntypedIntLiteralNode(723)); } @Test public void canParseSingleDigitNegativeInt() { var source = "-7"; var node = parseString(source, Parser::parseTopLevelExpression); assertThat(node, isUntypedIntLiteralNode(-7)); } @Test public void canParseManyDigitNegativeInt() { var source = "-723"; var node = parseString(source, Parser::parseTopLevelExpression); assertThat(node, isUntypedIntLiteralNode(-723)); } @Test public void leadingZeroesOnPositiveNumberAreForbidden() { var source = "01"; assertThrows( IntLiteralCannotHaveLeadingZeroesError.class, () -> parseString(source, Parser::parseTopLevelExpression) ); } @Test public void leadingZeroesOnNegativeNumberAreForbidden() { var source = "-01"; assertThrows( IntLiteralCannotHaveLeadingZeroesError.class, () -> parseString(source, Parser::parseTopLevelExpression) ); } }