[ 1612821 ] Double quotes in literal text in Italian/German
[docutils.git] / test / test_viewlist.py
blob2cb578549e804d598bab7473412262fd5a363345
1 #! /usr/bin/env python
3 # $Id$
4 # Author: David Goodger <goodger@python.org>
5 # Copyright: This module has been placed in the public domain.
7 """
8 Test module for the ViewList class from statemachine.py.
9 """
11 import unittest
12 import sys
13 import re
14 from DocutilsTestSupport import statemachine
17 class ViewListTests(unittest.TestCase):
19 a_list = list('abcdefg')
20 b_list = list('AEIOU')
21 c_list = list('XYZ')
23 def setUp(self):
24 self.a = statemachine.ViewList(self.a_list, 'a')
25 self.b = statemachine.ViewList(self.b_list, 'b')
26 self.c = statemachine.ViewList(self.c_list, 'c')
28 def test_lists(self):
29 self.assertEqual(self.a, self.a_list)
30 self.assertEqual(str(self.a), str(self.a_list))
31 self.assertEqual(self.b, self.b_list)
32 self.assertEqual(self.c, self.c_list)
33 self.assertEqual(self.a.items,
34 zip('a' * len(self.a_list), range(len(self.a_list))))
36 def test_get_slice(self):
37 a = self.a[1:-1]
38 a_list = self.a_list[1:-1]
39 self.assertEqual(a, a_list)
40 self.assertEqual(a.items,
41 zip('a' * len(a_list), range(1, len(a_list) + 1)))
42 self.assertEqual(a.parent, self.a)
44 def test_set_slice(self):
45 a = statemachine.ViewList(self.a[:])
46 s = a[2:-2]
47 s[2:2] = self.b
48 s_list = self.a_list[2:-2]
49 s_list[2:2] = self.b_list
50 self.assertEqual(s, s_list)
51 self.assertEqual(s, a[2:-2])
52 self.assertEqual(s.items, a[2:-2].items)
54 def test_del_slice(self):
55 a = statemachine.ViewList(self.a[:])
56 s = a[2:]
57 s_list = self.a_list[2:]
58 del s[3:5]
59 del s_list[3:5]
60 self.assertEqual(s, s_list)
61 self.assertEqual(s, a[2:])
62 self.assertEqual(s.items, a[2:].items)
64 def test_insert(self):
65 a_list = self.a_list[:]
66 a_list.insert(2, 'Q')
67 a_list[4:4] = self.b_list
68 a = self.a[:]
69 self.assert_(isinstance(a, statemachine.ViewList))
70 a.insert(2, 'Q', 'runtime')
71 a.insert(4, self.b)
72 self.assertEqual(a, a_list)
73 self.assertEqual(a.info(2), ('runtime', 0))
74 self.assertEqual(a.info(5), ('b', 1))
76 def test_append(self):
77 a_list = self.a_list[:]
78 a_list.append('Q')
79 a_list.extend(self.b_list)
80 a = statemachine.ViewList(self.a)
81 a.append('Q', 'runtime')
82 a.append(self.b)
83 self.assertEqual(a, a_list)
84 self.assertEqual(a.info(len(self.a)), ('runtime', 0))
85 self.assertEqual(a.info(-2), ('b', len(self.b) - 2))
87 def test_extend(self):
88 a_list = self.a_list[:]
89 a_list.extend(self.b_list)
90 a = statemachine.ViewList(self.a)
91 a.extend(self.b)
92 self.assertEqual(a, a_list)
93 self.assertEqual(a.info(len(self.a) + 1), ('b', 1))
95 def test_view(self):
96 a = statemachine.ViewList(self.a[:])
97 a.insert(4, self.b)
98 s = a[2:-2]
99 s.insert(5, self.c)
100 self.assertEqual(s, a[2:-2])
101 self.assertEqual(s.items, a[2:-2].items)
102 s.pop()
103 self.assertEqual(s, a[2:-2])
104 self.assertEqual(s.items, a[2:-2].items)
105 s.remove('X')
106 self.assertEqual(s, a[2:-2])
107 self.assertEqual(s.items, a[2:-2].items)
109 def test_trim(self):
110 a = statemachine.ViewList(self.a[:])
111 s = a[1:-1]
112 s.trim_start(1)
113 self.assertEquals(a, self.a)
114 self.assertEquals(s, a[2:-1])
115 s.trim_end(1)
116 self.assertEquals(a, self.a)
117 self.assertEquals(s, a[2:-2])
120 # print
121 # print a
122 # print s
123 # print a.items
124 # print s.items
127 class StringList(unittest.TestCase):
129 text = """\
130 This is some
131 example text.
133 Here is some
134 indented text.
136 Unindented text.
139 indented_string = """\
141 literal
142 block"""
145 def setUp(self):
146 self.a_list = self.text.splitlines(1)
147 self.a = statemachine.StringList(self.a_list, 'a')
149 def test_trim_left(self):
150 s = self.a[3:5]
151 s.trim_left(4)
152 self.assertEqual(s, [line.lstrip() for line in self.a_list[3:5]])
154 def test_get_indented(self):
155 self.assertEquals(self.a.get_indented(),
156 ([], 0, 0))
157 block = statemachine.StringList(
158 statemachine.string2lines(self.indented_string))
159 self.assertEquals(block.get_indented(),
160 ([s[6:] for s in block], 6, 1))
163 if __name__ == '__main__':
164 unittest.main()