comparison genshi/template/tests/interpolation.py @ 407:f37d8e6acdf2 trunk

Move string interpolation code into separate module (`genshi.template.interpolation`).
author cmlenz
date Wed, 21 Feb 2007 14:17:22 +0000
parents
children 8779b2a775d9 9755836bb396
comparison
equal deleted inserted replaced
406:01be13831f5e 407:f37d8e6acdf2
1 # -*- coding: utf-8 -*-
2 #
3 # Copyright (C) 2007 Edgewall Software
4 # All rights reserved.
5 #
6 # This software is licensed as described in the file COPYING, which
7 # you should have received as part of this distribution. The terms
8 # are also available at http://genshi.edgewall.org/wiki/License.
9 #
10 # This software consists of voluntary contributions made by many
11 # individuals. For the exact contribution history, see the revision
12 # history and logs, available at http://genshi.edgewall.org/log/.
13
14 import doctest
15 import sys
16 import unittest
17
18 from genshi.core import TEXT
19 from genshi.template.base import TemplateSyntaxError, EXPR
20 from genshi.template.interpolation import interpolate
21
22
23 class InterpolateTestCase(unittest.TestCase):
24
25 def test_interpolate_string(self):
26 parts = list(interpolate('bla'))
27 self.assertEqual(1, len(parts))
28 self.assertEqual(TEXT, parts[0][0])
29 self.assertEqual('bla', parts[0][1])
30
31 def test_interpolate_simple(self):
32 parts = list(interpolate('${bla}'))
33 self.assertEqual(1, len(parts))
34 self.assertEqual(EXPR, parts[0][0])
35 self.assertEqual('bla', parts[0][1].source)
36
37 def test_interpolate_escaped(self):
38 parts = list(interpolate('$${bla}'))
39 self.assertEqual(1, len(parts))
40 self.assertEqual(TEXT, parts[0][0])
41 self.assertEqual('${bla}', parts[0][1])
42
43 def test_interpolate_dobuleescaped(self):
44 parts = list(interpolate('$$${bla}'))
45 self.assertEqual(2, len(parts))
46 self.assertEqual(TEXT, parts[0][0])
47 self.assertEqual('$', parts[0][1])
48 self.assertEqual(EXPR, parts[1][0])
49 self.assertEqual('bla', parts[1][1].source)
50
51 def test_interpolate_short(self):
52 parts = list(interpolate('$bla'))
53 self.assertEqual(1, len(parts))
54 self.assertEqual(EXPR, parts[0][0])
55 self.assertEqual('bla', parts[0][1].source)
56
57 def test_interpolate_short_escaped(self):
58 parts = list(interpolate('$$bla'))
59 self.assertEqual(1, len(parts))
60 self.assertEqual(TEXT, parts[0][0])
61 self.assertEqual('$bla', parts[0][1])
62
63 def test_interpolate_short_doubleescaped(self):
64 parts = list(interpolate('$$$bla'))
65 self.assertEqual(2, len(parts))
66 self.assertEqual(TEXT, parts[0][0])
67 self.assertEqual('$', parts[0][1])
68 self.assertEqual(EXPR, parts[1][0])
69 self.assertEqual('bla', parts[1][1].source)
70
71 def test_interpolate_short_starting_with_underscore(self):
72 parts = list(interpolate('$_bla'))
73 self.assertEqual(1, len(parts))
74 self.assertEqual(EXPR, parts[0][0])
75 self.assertEqual('_bla', parts[0][1].source)
76
77 def test_interpolate_short_containing_underscore(self):
78 parts = list(interpolate('$foo_bar'))
79 self.assertEqual(1, len(parts))
80 self.assertEqual(EXPR, parts[0][0])
81 self.assertEqual('foo_bar', parts[0][1].source)
82
83 def test_interpolate_short_starting_with_dot(self):
84 parts = list(interpolate('$.bla'))
85 self.assertEqual(1, len(parts))
86 self.assertEqual(TEXT, parts[0][0])
87 self.assertEqual('$.bla', parts[0][1])
88
89 def test_interpolate_short_containing_dot(self):
90 parts = list(interpolate('$foo.bar'))
91 self.assertEqual(1, len(parts))
92 self.assertEqual(EXPR, parts[0][0])
93 self.assertEqual('foo.bar', parts[0][1].source)
94
95 def test_interpolate_short_starting_with_digit(self):
96 parts = list(interpolate('$0bla'))
97 self.assertEqual(1, len(parts))
98 self.assertEqual(TEXT, parts[0][0])
99 self.assertEqual('$0bla', parts[0][1])
100
101 def test_interpolate_short_containing_digit(self):
102 parts = list(interpolate('$foo0'))
103 self.assertEqual(1, len(parts))
104 self.assertEqual(EXPR, parts[0][0])
105 self.assertEqual('foo0', parts[0][1].source)
106
107 def test_interpolate_short_starting_with_digit(self):
108 parts = list(interpolate('$0bla'))
109 self.assertEqual(1, len(parts))
110 self.assertEqual(TEXT, parts[0][0])
111 self.assertEqual('$0bla', parts[0][1])
112
113 def test_interpolate_short_containing_digit(self):
114 parts = list(interpolate('$foo0'))
115 self.assertEqual(1, len(parts))
116 self.assertEqual(EXPR, parts[0][0])
117 self.assertEqual('foo0', parts[0][1].source)
118
119 def test_interpolate_full_nested_brackets(self):
120 parts = list(interpolate('${{1:2}}'))
121 self.assertEqual(1, len(parts))
122 self.assertEqual(EXPR, parts[0][0])
123 self.assertEqual('{1:2}', parts[0][1].source)
124
125 def test_interpolate_full_mismatched_brackets(self):
126 try:
127 list(interpolate('${{1:2}'))
128 except TemplateSyntaxError, e:
129 pass
130 else:
131 self.fail('Expected TemplateSyntaxError')
132
133 def test_interpolate_quoted_brackets_1(self):
134 parts = list(interpolate('${"}"}'))
135 self.assertEqual(1, len(parts))
136 self.assertEqual(EXPR, parts[0][0])
137 self.assertEqual('"}"', parts[0][1].source)
138
139 def test_interpolate_quoted_brackets_2(self):
140 parts = list(interpolate("${'}'}"))
141 self.assertEqual(1, len(parts))
142 self.assertEqual(EXPR, parts[0][0])
143 self.assertEqual("'}'", parts[0][1].source)
144
145 def test_interpolate_quoted_brackets_3(self):
146 parts = list(interpolate("${'''}'''}"))
147 self.assertEqual(1, len(parts))
148 self.assertEqual(EXPR, parts[0][0])
149 self.assertEqual("'''}'''", parts[0][1].source)
150
151 def test_interpolate_quoted_brackets_4(self):
152 parts = list(interpolate("${'''}\"\"\"'''}"))
153 self.assertEqual(1, len(parts))
154 self.assertEqual(EXPR, parts[0][0])
155 self.assertEqual("'''}\"\"\"'''", parts[0][1].source)
156
157 def test_interpolate_quoted_brackets_5(self):
158 parts = list(interpolate(r"${'\'}'}"))
159 self.assertEqual(1, len(parts))
160 self.assertEqual(EXPR, parts[0][0])
161 self.assertEqual(r"'\'}'", parts[0][1].source)
162
163 def test_interpolate_mixed1(self):
164 parts = list(interpolate('$foo bar $baz'))
165 self.assertEqual(3, len(parts))
166 self.assertEqual(EXPR, parts[0][0])
167 self.assertEqual('foo', parts[0][1].source)
168 self.assertEqual(TEXT, parts[1][0])
169 self.assertEqual(' bar ', parts[1][1])
170 self.assertEqual(EXPR, parts[2][0])
171 self.assertEqual('baz', parts[2][1].source)
172
173 def test_interpolate_mixed2(self):
174 parts = list(interpolate('foo $bar baz'))
175 self.assertEqual(3, len(parts))
176 self.assertEqual(TEXT, parts[0][0])
177 self.assertEqual('foo ', parts[0][1])
178 self.assertEqual(EXPR, parts[1][0])
179 self.assertEqual('bar', parts[1][1].source)
180 self.assertEqual(TEXT, parts[2][0])
181 self.assertEqual(' baz', parts[2][1])
182
183
184 def suite():
185 suite = unittest.TestSuite()
186 suite.addTest(doctest.DocTestSuite(interpolate.__module__))
187 suite.addTest(unittest.makeSuite(InterpolateTestCase, 'test'))
188 return suite
189
190 if __name__ == '__main__':
191 unittest.main(defaultTest='suite')
Copyright (C) 2012-2017 Edgewall Software