Mercurial > genshi > genshi-test
comparison markup/tests/eval.py @ 192:cda3bdfc19ed
Expression evaluation now differentiates between undefined variables and variables that are defined but set to `None`.
author | cmlenz |
---|---|
date | Wed, 23 Aug 2006 17:49:14 +0000 |
parents | 194025141c89 |
children | eb5c8200f49b |
comparison
equal
deleted
inserted
replaced
191:929ef2913b87 | 192:cda3bdfc19ed |
---|---|
18 from markup.eval import Expression | 18 from markup.eval import Expression |
19 | 19 |
20 | 20 |
21 class ExpressionTestCase(unittest.TestCase): | 21 class ExpressionTestCase(unittest.TestCase): |
22 | 22 |
23 def test_name_lookup(self): | |
24 self.assertEqual('bar', Expression('foo').evaluate({'foo': 'bar'})) | |
25 self.assertEqual(id, Expression('id').evaluate({}, nocall=True)) | |
26 self.assertEqual('bar', Expression('id').evaluate({'id': 'bar'})) | |
27 self.assertEqual(None, Expression('id').evaluate({'id': None}, | |
28 nocall=True)) | |
29 | |
23 def test_str_literal(self): | 30 def test_str_literal(self): |
24 self.assertEqual('foo', Expression('"foo"').evaluate({})) | 31 self.assertEqual('foo', Expression('"foo"').evaluate({})) |
25 self.assertEqual('foo', Expression('"""foo"""').evaluate({})) | 32 self.assertEqual('foo', Expression('"""foo"""').evaluate({})) |
26 self.assertEqual('foo', Expression("'foo'").evaluate({})) | 33 self.assertEqual('foo', Expression("'foo'").evaluate({})) |
27 self.assertEqual('foo', Expression("'''foo'''").evaluate({})) | 34 self.assertEqual('foo', Expression("'''foo'''").evaluate({})) |
231 def test_list_comprehension_with_getitem(self): | 238 def test_list_comprehension_with_getitem(self): |
232 items = [{'name': 'a', 'value': 1}, {'name': 'b', 'value': 2}] | 239 items = [{'name': 'a', 'value': 1}, {'name': 'b', 'value': 2}] |
233 expr = Expression("[i['name'] for i in items if i['value'] > 1]") | 240 expr = Expression("[i['name'] for i in items if i['value'] > 1]") |
234 self.assertEqual(['b'], expr.evaluate({'items': items})) | 241 self.assertEqual(['b'], expr.evaluate({'items': items})) |
235 | 242 |
236 def test_error_position(self): | 243 def test_error_call_undefined(self): |
237 expr = Expression("nothing()", filename='index.html', lineno=50) | 244 expr = Expression("nothing()", filename='index.html', lineno=50) |
238 try: | 245 try: |
239 expr.evaluate({}) | 246 expr.evaluate({}) |
240 self.fail('Expected TypeError') | 247 self.fail('Expected NameError') |
241 except TypeError, e: | 248 except NameError, e: |
242 exc_type, exc_value, exc_traceback = sys.exc_info() | 249 exc_type, exc_value, exc_traceback = sys.exc_info() |
243 frame = exc_traceback.tb_next | 250 frame = exc_traceback.tb_next |
251 frames = [] | |
244 while frame.tb_next: | 252 while frame.tb_next: |
245 frame = frame.tb_next | 253 frame = frame.tb_next |
254 frames.append(frame) | |
246 self.assertEqual('<Expression "nothing()">', | 255 self.assertEqual('<Expression "nothing()">', |
247 frame.tb_frame.f_code.co_name) | 256 frames[-3].tb_frame.f_code.co_name) |
248 self.assertEqual('index.html', frame.tb_frame.f_code.co_filename) | 257 self.assertEqual('index.html', |
249 self.assertEqual(50, frame.tb_lineno) | 258 frames[-3].tb_frame.f_code.co_filename) |
259 self.assertEqual(50, frames[-3].tb_lineno) | |
260 | |
261 def test_error_getattr_undefined(self): | |
262 expr = Expression("nothing.nil", filename='index.html', lineno=50) | |
263 try: | |
264 expr.evaluate({}) | |
265 self.fail('Expected NameError') | |
266 except NameError, e: | |
267 exc_type, exc_value, exc_traceback = sys.exc_info() | |
268 frame = exc_traceback.tb_next | |
269 frames = [] | |
270 while frame.tb_next: | |
271 frame = frame.tb_next | |
272 frames.append(frame) | |
273 self.assertEqual('<Expression "nothing.nil">', | |
274 frames[-3].tb_frame.f_code.co_name) | |
275 self.assertEqual('index.html', | |
276 frames[-3].tb_frame.f_code.co_filename) | |
277 self.assertEqual(50, frames[-3].tb_lineno) | |
250 | 278 |
251 | 279 |
252 def suite(): | 280 def suite(): |
253 suite = unittest.TestSuite() | 281 suite = unittest.TestSuite() |
254 suite.addTest(unittest.makeSuite(ExpressionTestCase, 'test')) | 282 suite.addTest(unittest.makeSuite(ExpressionTestCase, 'test')) |