class ParserTest(unittest.TestCase): def setUp(self): self.lexer = Lexer() self.parser = Parser() def test_call(self): """Ensures function calls are parsed properly.""" code = "print('hello')" tokens = self.lexer.parse(code) parsed = self.parser.parse_literal(tokens) assert parsed == "[{CallExpression {IdentLiteral print} [{StringLiteral hello}]}]", "Issue in function call parsing." def test_math(self): """Ensures arithmetic is parsed properly.""" code = "5 + 5 / 2" tokens = self.lexer.parse(code) parsed = self.parser.parse_literal(tokens) assert parsed == "[{BinaryOperator + {left: {IntegerLiteral 5}, right: {BinaryOperator / {left: {IntegerLiteral 5}, right: {IntegerLiteral 2}}}}}]", "Issue in arithmetic parsing." def test_assignment_1(self): """Ensures variable declaration and assignment are parsed properly.""" code = "int test = 5 * 5 / 5" tokens = self.lexer.parse(code) parsed = self.parser.parse_literal(tokens) assert parsed == "[{Assignment {IdentLiteral test} {BinaryOperator / {left: {BinaryOperator * {left: {IntegerLiteral 5}, right: {IntegerLiteral 5}}}, right: {IntegerLiteral 5}}}}]", "Issue in assignment parsing." def test_conditional_1(self): """Ensures conditionals are parsed properly.""" code = "if (1 == 1) return 1" tokens = self.lexer.parse(code) parsed = self.parser.parse_literal(tokens) assert parsed == "[{Conditional if {BinaryOperator == {left: {IntegerLiteral 1}, right: {IntegerLiteral 1}}} [{Return {IntegerLiteral 1}}] []}]", "Issue in inline conditional parsing."
class ParserTest(unittest.TestCase): def setUp(self): self.lexer = Lexer() self.parser = Parser() def test_call(self): """Ensures function calls are parsed properly.""" code = "print('hello')" tokens = self.lexer.parse(code) parsed = self.parser.parse_literal(tokens)[0] test = CallExpression(name=IdentLiteral(name='print'), args=[StringLiteral('hello')]) assert pickle(parsed) == pickle( test), "Issue in function call parsing." def test_math(self): """Ensures arithmetic is parsed properly.""" code = "5 + 5 / 2" tokens = self.lexer.parse(code) parsed = self.parser.parse_literal(tokens)[0] test = BinaryOperator(operator='+', left=IntegerLiteral(5), right=BinaryOperator(operator='/', left=IntegerLiteral(5), right=IntegerLiteral(2))) assert pickle(parsed) == pickle(test), "Issue in arithmetic parsing." def test_assignment_1(self): """Ensures variable declaration and assignment are parsed properly.""" code = "let test = 5 * 5 / 5" tokens = self.lexer.parse(code) parsed = self.parser.parse_literal(tokens)[0] test = Assignment(_type='let', ident=IdentLiteral(name='test'), value=BinaryOperator(operator='/', left=BinaryOperator( operator='*', left=IntegerLiteral(5), right=IntegerLiteral(5)), right=IntegerLiteral(5))) assert pickle(parsed) == pickle(test), "Issue in assignment parsing." def test_conditional_1(self): """Ensures conditionals are parsed properly.""" code = "if (1 == 1) return 1" tokens = self.lexer.parse(code) parsed = self.parser.parse_literal(tokens)[0] test = Conditional('if', expression=BinaryOperator(operator='==', left=IntegerLiteral(1), right=IntegerLiteral(1)), body=[Return(IntegerLiteral(1))], else_body=[]) assert pickle(parsed) == pickle( test), "Issue in inline conditional parsing."