Mercurial > genshi > mirror
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') |