aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/tools/cython/Cython/Tests/TestStringIOTree.py
blob: 724920085eed1467103b1967582237a7b10ff6c7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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(), list(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')