def test_expr_with_addition(self): lexer = Lexer('3 + 2') parser = Parser(lexer) result = parser.expr() expected = BinOp(left=Num(Token('INTEGER', 3)), op=Token('ADD', '+'), right=Num(Token('INTEGER', 2))) assert result == expected
def test_term_with_multiply(self): lexer = Lexer('3 * 2') parser = Parser(lexer) result = parser.term() expected = BinOp(left=Num(Token('INTEGER', 3)), op=Token('MULTIPLY', '*'), right=Num(Token('INTEGER', 2))) assert result == expected
def test_term_with_division(self): lexer = Lexer('3 / 2') parser = Parser(lexer) result = parser.term() expected = BinOp(left=Num(Token('INTEGER', 3)), op=Token('DIVIDE', '/'), right=Num(Token('INTEGER', 2))) assert result == expected
def test_parser(self): lexer = Lexer('3 + 1') parser = Parser(lexer) result = parser.parse() expected = BinOp(left=Num(Token('INTEGER', 3)), op=Token('ADD', '+'), right=Num(Token('INTEGER', 1))) assert result == expected
def test_expr_with_subtraction(self): lexer = Lexer('3 - 2') parser = Parser(lexer) result = parser.expr() expected = BinOp(left=Num(Token('INTEGER', 3)), op=Token('SUBTRACT', '-'), right=Num(Token('INTEGER', 2))) assert result == expected
def test_factor_with_parens(self): lexer = Lexer('(3)') parser = Parser(lexer) result = parser.factor() expected = Num(Token('INTEGER', 3)) assert result == expected
def test_factor_error(self): lexer = Lexer('+') parser = Parser(lexer) with pytest.raises(SyntaxError) as ex: parser.factor() assert 'Invalid syntax' == str(ex.value)
def test_eat_error(self): lexer = Lexer('3') parser = Parser(lexer) with pytest.raises(SyntaxError) as ex: parser.eat('ADD') assert 'Invalid syntax' == str(ex.value)