comparison genshi/template/tests/base.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 e29a94b3ba0c
children 4675d5cf6c67
comparison
equal deleted inserted replaced
406:01be13831f5e 407:f37d8e6acdf2
12 # history and logs, available at http://genshi.edgewall.org/log/. 12 # history and logs, available at http://genshi.edgewall.org/log/.
13 13
14 import doctest 14 import doctest
15 import unittest 15 import unittest
16 16
17 from genshi.core import Stream 17 from genshi.template.base import Template
18 from genshi.template.base import Template, TemplateSyntaxError
19
20
21 class TemplateTestCase(unittest.TestCase):
22 """Tests for basic template processing, expression evaluation and error
23 reporting.
24 """
25
26 def test_interpolate_string(self):
27 parts = list(Template._interpolate('bla'))
28 self.assertEqual(1, len(parts))
29 self.assertEqual(Stream.TEXT, parts[0][0])
30 self.assertEqual('bla', parts[0][1])
31
32 def test_interpolate_simple(self):
33 parts = list(Template._interpolate('${bla}'))
34 self.assertEqual(1, len(parts))
35 self.assertEqual(Template.EXPR, parts[0][0])
36 self.assertEqual('bla', parts[0][1].source)
37
38 def test_interpolate_escaped(self):
39 parts = list(Template._interpolate('$${bla}'))
40 self.assertEqual(1, len(parts))
41 self.assertEqual(Stream.TEXT, parts[0][0])
42 self.assertEqual('${bla}', parts[0][1])
43
44 def test_interpolate_dobuleescaped(self):
45 parts = list(Template._interpolate('$$${bla}'))
46 self.assertEqual(2, len(parts))
47 self.assertEqual(Stream.TEXT, parts[0][0])
48 self.assertEqual('$', parts[0][1])
49 self.assertEqual(Template.EXPR, parts[1][0])
50 self.assertEqual('bla', parts[1][1].source)
51
52 def test_interpolate_short(self):
53 parts = list(Template._interpolate('$bla'))
54 self.assertEqual(1, len(parts))
55 self.assertEqual(Template.EXPR, parts[0][0])
56 self.assertEqual('bla', parts[0][1].source)
57
58 def test_interpolate_short_escaped(self):
59 parts = list(Template._interpolate('$$bla'))
60 self.assertEqual(1, len(parts))
61 self.assertEqual(Stream.TEXT, parts[0][0])
62 self.assertEqual('$bla', parts[0][1])
63
64 def test_interpolate_short_doubleescaped(self):
65 parts = list(Template._interpolate('$$$bla'))
66 self.assertEqual(2, len(parts))
67 self.assertEqual(Stream.TEXT, parts[0][0])
68 self.assertEqual('$', parts[0][1])
69 self.assertEqual(Template.EXPR, parts[1][0])
70 self.assertEqual('bla', parts[1][1].source)
71
72 def test_interpolate_short_starting_with_underscore(self):
73 parts = list(Template._interpolate('$_bla'))
74 self.assertEqual(1, len(parts))
75 self.assertEqual(Template.EXPR, parts[0][0])
76 self.assertEqual('_bla', parts[0][1].source)
77
78 def test_interpolate_short_containing_underscore(self):
79 parts = list(Template._interpolate('$foo_bar'))
80 self.assertEqual(1, len(parts))
81 self.assertEqual(Template.EXPR, parts[0][0])
82 self.assertEqual('foo_bar', parts[0][1].source)
83
84 def test_interpolate_short_starting_with_dot(self):
85 parts = list(Template._interpolate('$.bla'))
86 self.assertEqual(1, len(parts))
87 self.assertEqual(Stream.TEXT, parts[0][0])
88 self.assertEqual('$.bla', parts[0][1])
89
90 def test_interpolate_short_containing_dot(self):
91 parts = list(Template._interpolate('$foo.bar'))
92 self.assertEqual(1, len(parts))
93 self.assertEqual(Template.EXPR, parts[0][0])
94 self.assertEqual('foo.bar', parts[0][1].source)
95
96 def test_interpolate_short_starting_with_digit(self):
97 parts = list(Template._interpolate('$0bla'))
98 self.assertEqual(1, len(parts))
99 self.assertEqual(Stream.TEXT, parts[0][0])
100 self.assertEqual('$0bla', parts[0][1])
101
102 def test_interpolate_short_containing_digit(self):
103 parts = list(Template._interpolate('$foo0'))
104 self.assertEqual(1, len(parts))
105 self.assertEqual(Template.EXPR, parts[0][0])
106 self.assertEqual('foo0', parts[0][1].source)
107
108 def test_interpolate_short_starting_with_digit(self):
109 parts = list(Template._interpolate('$0bla'))
110 self.assertEqual(1, len(parts))
111 self.assertEqual(Stream.TEXT, parts[0][0])
112 self.assertEqual('$0bla', parts[0][1])
113
114 def test_interpolate_short_containing_digit(self):
115 parts = list(Template._interpolate('$foo0'))
116 self.assertEqual(1, len(parts))
117 self.assertEqual(Template.EXPR, parts[0][0])
118 self.assertEqual('foo0', parts[0][1].source)
119
120 def test_interpolate_full_nested_brackets(self):
121 parts = list(Template._interpolate('${{1:2}}'))
122 self.assertEqual(1, len(parts))
123 self.assertEqual(Template.EXPR, parts[0][0])
124 self.assertEqual('{1:2}', parts[0][1].source)
125
126 def test_interpolate_full_mismatched_brackets(self):
127 try:
128 list(Template._interpolate('${{1:2}'))
129 except TemplateSyntaxError, e:
130 pass
131 else:
132 self.fail('Expected TemplateSyntaxError')
133
134 def test_interpolate_quoted_brackets_1(self):
135 parts = list(Template._interpolate('${"}"}'))
136 self.assertEqual(1, len(parts))
137 self.assertEqual(Template.EXPR, parts[0][0])
138 self.assertEqual('"}"', parts[0][1].source)
139
140 def test_interpolate_quoted_brackets_2(self):
141 parts = list(Template._interpolate("${'}'}"))
142 self.assertEqual(1, len(parts))
143 self.assertEqual(Template.EXPR, parts[0][0])
144 self.assertEqual("'}'", parts[0][1].source)
145
146 def test_interpolate_quoted_brackets_3(self):
147 parts = list(Template._interpolate("${'''}'''}"))
148 self.assertEqual(1, len(parts))
149 self.assertEqual(Template.EXPR, parts[0][0])
150 self.assertEqual("'''}'''", parts[0][1].source)
151
152 def test_interpolate_quoted_brackets_4(self):
153 parts = list(Template._interpolate("${'''}\"\"\"'''}"))
154 self.assertEqual(1, len(parts))
155 self.assertEqual(Template.EXPR, parts[0][0])
156 self.assertEqual("'''}\"\"\"'''", parts[0][1].source)
157
158 def test_interpolate_quoted_brackets_5(self):
159 parts = list(Template._interpolate(r"${'\'}'}"))
160 self.assertEqual(1, len(parts))
161 self.assertEqual(Template.EXPR, parts[0][0])
162 self.assertEqual(r"'\'}'", parts[0][1].source)
163
164 def test_interpolate_mixed1(self):
165 parts = list(Template._interpolate('$foo bar $baz'))
166 self.assertEqual(3, len(parts))
167 self.assertEqual(Template.EXPR, parts[0][0])
168 self.assertEqual('foo', parts[0][1].source)
169 self.assertEqual(Stream.TEXT, parts[1][0])
170 self.assertEqual(' bar ', parts[1][1])
171 self.assertEqual(Template.EXPR, parts[2][0])
172 self.assertEqual('baz', parts[2][1].source)
173
174 def test_interpolate_mixed2(self):
175 parts = list(Template._interpolate('foo $bar baz'))
176 self.assertEqual(3, len(parts))
177 self.assertEqual(Stream.TEXT, parts[0][0])
178 self.assertEqual('foo ', parts[0][1])
179 self.assertEqual(Template.EXPR, parts[1][0])
180 self.assertEqual('bar', parts[1][1].source)
181 self.assertEqual(Stream.TEXT, parts[2][0])
182 self.assertEqual(' baz', parts[2][1])
183
184 18
185 def suite(): 19 def suite():
186 suite = unittest.TestSuite() 20 suite = unittest.TestSuite()
187 suite.addTest(doctest.DocTestSuite(Template.__module__)) 21 suite.addTest(doctest.DocTestSuite(Template.__module__))
188 suite.addTest(unittest.makeSuite(TemplateTestCase, 'test'))
189 return suite 22 return suite
190 23
191 if __name__ == '__main__': 24 if __name__ == '__main__':
192 unittest.main(defaultTest='suite') 25 unittest.main(defaultTest='suite')
Copyright (C) 2012-2017 Edgewall Software