Index: third_party/cython/src/Cython/Tests/TestStringIOTree.py |
diff --git a/third_party/cython/src/Cython/Tests/TestStringIOTree.py b/third_party/cython/src/Cython/Tests/TestStringIOTree.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..09c04a514146a846efbe79d4f68bcb164cb620be |
--- /dev/null |
+++ b/third_party/cython/src/Cython/Tests/TestStringIOTree.py |
@@ -0,0 +1,67 @@ |
+import unittest |
+ |
+from Cython import StringIOTree as stringtree |
+ |
+code = """ |
+cdef int spam # line 1 |
+ |
+cdef ham(): |
+ a = 1 |
+ b = 2 |
+ c = 3 |
+ d = 4 |
+ |
+def eggs(): |
+ pass |
+ |
+cpdef bacon(): |
+ print spam |
+ print 'scotch' |
+ print 'tea?' |
+ print 'or coffee?' # line 16 |
+""" |
+ |
+linemap = dict(enumerate(code.splitlines())) |
+ |
+class TestStringIOTree(unittest.TestCase): |
+ |
+ def setUp(self): |
+ self.tree = stringtree.StringIOTree() |
+ |
+ def test_markers(self): |
+ assert not self.tree.allmarkers() |
+ |
+ def test_insertion(self): |
+ self.write_lines((1, 2, 3)) |
+ line_4_to_6_insertion_point = self.tree.insertion_point() |
+ self.write_lines((7, 8)) |
+ line_9_to_13_insertion_point = self.tree.insertion_point() |
+ self.write_lines((14, 15, 16)) |
+ |
+ line_4_insertion_point = line_4_to_6_insertion_point.insertion_point() |
+ self.write_lines((5, 6), tree=line_4_to_6_insertion_point) |
+ |
+ line_9_to_12_insertion_point = ( |
+ line_9_to_13_insertion_point.insertion_point()) |
+ self.write_line(13, tree=line_9_to_13_insertion_point) |
+ |
+ self.write_line(4, tree=line_4_insertion_point) |
+ self.write_line(9, tree=line_9_to_12_insertion_point) |
+ line_10_insertion_point = line_9_to_12_insertion_point.insertion_point() |
+ self.write_line(11, tree=line_9_to_12_insertion_point) |
+ self.write_line(10, tree=line_10_insertion_point) |
+ self.write_line(12, tree=line_9_to_12_insertion_point) |
+ |
+ self.assertEqual(self.tree.allmarkers(), range(1, 17)) |
+ self.assertEqual(code.strip(), self.tree.getvalue().strip()) |
+ |
+ |
+ def write_lines(self, linenos, tree=None): |
+ for lineno in linenos: |
+ self.write_line(lineno, tree=tree) |
+ |
+ def write_line(self, lineno, tree=None): |
+ if tree is None: |
+ tree = self.tree |
+ tree.markers.append(lineno) |
+ tree.write(linemap[lineno] + '\n') |