| Index: third_party/cython/src/Cython/Compiler/Tests/TestTreeFragment.py
|
| diff --git a/third_party/cython/src/Cython/Compiler/Tests/TestTreeFragment.py b/third_party/cython/src/Cython/Compiler/Tests/TestTreeFragment.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3352c71d57e6e749003f39335460fc2c41d28d46
|
| --- /dev/null
|
| +++ b/third_party/cython/src/Cython/Compiler/Tests/TestTreeFragment.py
|
| @@ -0,0 +1,64 @@
|
| +from Cython.TestUtils import CythonTest
|
| +from Cython.Compiler.TreeFragment import *
|
| +from Cython.Compiler.Nodes import *
|
| +from Cython.Compiler.UtilNodes import *
|
| +import Cython.Compiler.Naming as Naming
|
| +
|
| +class TestTreeFragments(CythonTest):
|
| +
|
| + def test_basic(self):
|
| + F = self.fragment(u"x = 4")
|
| + T = F.copy()
|
| + self.assertCode(u"x = 4", T)
|
| +
|
| + def test_copy_is_taken(self):
|
| + F = self.fragment(u"if True: x = 4")
|
| + T1 = F.root
|
| + T2 = F.copy()
|
| + self.assertEqual("x", T2.stats[0].if_clauses[0].body.lhs.name)
|
| + T2.stats[0].if_clauses[0].body.lhs.name = "other"
|
| + self.assertEqual("x", T1.stats[0].if_clauses[0].body.lhs.name)
|
| +
|
| + def test_substitutions_are_copied(self):
|
| + T = self.fragment(u"y + y").substitute({"y": NameNode(pos=None, name="x")})
|
| + self.assertEqual("x", T.stats[0].expr.operand1.name)
|
| + self.assertEqual("x", T.stats[0].expr.operand2.name)
|
| + self.assert_(T.stats[0].expr.operand1 is not T.stats[0].expr.operand2)
|
| +
|
| + def test_substitution(self):
|
| + F = self.fragment(u"x = 4")
|
| + y = NameNode(pos=None, name=u"y")
|
| + T = F.substitute({"x" : y})
|
| + self.assertCode(u"y = 4", T)
|
| +
|
| + def test_exprstat(self):
|
| + F = self.fragment(u"PASS")
|
| + pass_stat = PassStatNode(pos=None)
|
| + T = F.substitute({"PASS" : pass_stat})
|
| + self.assert_(isinstance(T.stats[0], PassStatNode), T)
|
| +
|
| + def test_pos_is_transferred(self):
|
| + F = self.fragment(u"""
|
| + x = y
|
| + x = u * v ** w
|
| + """)
|
| + T = F.substitute({"v" : NameNode(pos=None, name="a")})
|
| + v = F.root.stats[1].rhs.operand2.operand1
|
| + a = T.stats[1].rhs.operand2.operand1
|
| + self.assertEquals(v.pos, a.pos)
|
| +
|
| + def test_temps(self):
|
| + TemplateTransform.temp_name_counter = 0
|
| + F = self.fragment(u"""
|
| + TMP
|
| + x = TMP
|
| + """)
|
| + T = F.substitute(temps=[u"TMP"])
|
| + s = T.body.stats
|
| + self.assert_(isinstance(s[0].expr, TempRefNode))
|
| + self.assert_(isinstance(s[1].rhs, TempRefNode))
|
| + self.assert_(s[0].expr.handle is s[1].rhs.handle)
|
| +
|
| +if __name__ == "__main__":
|
| + import unittest
|
| + unittest.main()
|
|
|