Exemple #1
0
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."
Exemple #2
0
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."