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