def test_naryop(self): src = u'$a $b $c, $d $e $f, $g $h $i' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) expr = parser.comma_expr() expected = NaryOpExpr( op=CommaOp(), operands=[ NaryOpExpr( op=WhitespaceOp(), operands=[ VarName(name=u'a'), VarName(name=u'b'), VarName(name=u'c'), ] ), NaryOpExpr( op=WhitespaceOp(), operands=[ VarName(name=u'd'), VarName(name=u'e'), VarName(name=u'f'), ] ), NaryOpExpr( op=WhitespaceOp(), operands=[ VarName(name=u'g'), VarName(name=u'h'), VarName(name=u'i'), ] ), ] ) self.assertEqual(dump(expected), dump(expr))
def test_fwdslash_op4(self): src = u'3/$a' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) expr = parser.comma_expr() expected = BinaryOpExpr( op=DivisionOp(), lhs=NumberNode(number=u'3'), rhs=VarName(name=u'a'), ) self.assertEqual(dump(expected), dump(expr))
def test_fwdslash_op1(self): src = u'3/2' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) expr = parser.comma_expr() expected = BinaryOpExpr( op=FwdSlashOp(), lhs=NumberNode(number=u'3'), rhs=NumberNode(number=u'2'), ) self.assertEqual(dump(expected), dump(expr))
def test_whitespaceop(self): src = '$a $b $c' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) expr = parser.comma_expr() expected = NaryOpExpr( op=WhitespaceOp(), operands=[ VarName(name='a'), VarName(name='b'), VarName(name='c'), ] ) self.assertEqual(dump(expected), dump(expr))
def test_division_op1(self): src = u'3/2/1' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) expr = parser.comma_expr() expected = BinaryOpExpr( op=DivisionOp(), lhs=BinaryOpExpr( op=DivisionOp(), lhs=NumberNode(number=u'3'), rhs=NumberNode(number=u'2'), ), rhs=NumberNode(number=u'1'), ) self.assertEqual(dump(expected), dump(expr))
def test_precedence4(self): src = '$a+$b+$c' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) expr = parser.comma_expr() expected = BinaryOpExpr( op=AddOp(), lhs=BinaryOpExpr( op=AddOp(), lhs=VarName(name='a'), rhs=VarName(name='b') ), rhs=VarName(name='c') ) self.assertEqual(dump(expected), dump(expr))
def test_usub(self): src = '$a -$b' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) expr = parser.comma_expr() expected = NaryOpExpr( op=WhitespaceOp(), operands=[ VarName(name='a'), UnaryOpExpr(op=UMinus(), operand=VarName(name='b') ) ] ) ##expected = "NaryOpExpr(op=WhitespaceOp(), operands=[VarName(name='a'), UnaryOpExpr(op=UMinus(), operand=VarName(name='b'))])" self.assertEqual(expected, expr)
def test_whitespaceop5(self): src = u'$a $b+$c $d' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) expr = parser.comma_expr() expected = NaryOpExpr( op=WhitespaceOp(), operands=[ VarName(name=u'a'), BinaryOpExpr( op=AddOp(), lhs=VarName(name=u'b'), rhs=VarName(name=u'c'), ), VarName(name=u'd'), ] ) self.assertEqual(dump(expected), dump(expr))
def test_precedence3(self): src = '$a+$b*$c+($d - $e)' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) expr = parser.comma_expr() expected = BinaryOpExpr( op=AddOp(), lhs=BinaryOpExpr( op=AddOp(), lhs=VarName(name='a'), rhs=BinaryOpExpr( op=MultOp(), lhs=VarName(name='b'), rhs=VarName(name='c') ) ), rhs=BinaryOpExpr( op=SubtractOp(), lhs=VarName(name='d'), rhs=VarName(name='e') ) ) self.assertEqual(dump(expected), dump(expr))
def test_plus1(self): src = u'$a + $b' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) expr = parser.comma_expr() self.assertEqual("VarName(name=u'a')", dump(expr))
def test_plus(self): src = u'$a+$b' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) expr = parser.comma_expr() self.assertEqual("BinaryOpExpr(op=AddOp(), lhs=VarName(name=u'a'), rhs=VarName(name=u'b'))", dump(expr))
def test_hash(self): src = u'#aabbcc ' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) expr = parser.comma_expr() self.assertEqual("HexColorNode(hex=u'aabbcc')", dump(expr))
def test_ident(self): src = u'abc ' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) expr = parser.comma_expr() self.assertEqual("IdentExpr(name=u'abc')", dump(expr))
def test_empty(self): src = u'' parser = Parser(src) expr = parser.comma_expr() self.assertEqual(None, expr)