comparison markup/tests/eval.py @ 198:d7c0a7d65783

Implemented support for generator expressions (fixes #16)
author mgood
date Thu, 24 Aug 2006 22:42:07 +0000
parents a180441acbff
children 6addf7af09f6
comparison
equal deleted inserted replaced
197:a593d57f478f 198:d7c0a7d65783
237 237
238 def test_list_comprehension_with_getitem(self): 238 def test_list_comprehension_with_getitem(self):
239 items = [{'name': 'a', 'value': 1}, {'name': 'b', 'value': 2}] 239 items = [{'name': 'a', 'value': 1}, {'name': 'b', 'value': 2}]
240 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]")
241 self.assertEqual(['b'], expr.evaluate({'items': items})) 241 self.assertEqual(['b'], expr.evaluate({'items': items}))
242
243 # generator expressions only supported in Python 2.4 and up
244 if sys.version_info >= (2, 4):
245 def test_generator_expression(self):
246 expr = Expression("list(n for n in numbers if n < 2)")
247 self.assertEqual([0, 1], expr.evaluate({'numbers': range(5)}))
248
249 expr = Expression("list((i, n + 1) for i, n in enumerate(numbers))")
250 self.assertEqual([(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)],
251 expr.evaluate({'numbers': range(5)}))
252
253 expr = Expression("list(offset + n for n in numbers)")
254 self.assertEqual([2, 3, 4, 5, 6],
255 expr.evaluate({'numbers': range(5), 'offset': 2}))
256
257 def test_generator_expression_with_getattr(self):
258 items = [{'name': 'a', 'value': 1}, {'name': 'b', 'value': 2}]
259 expr = Expression("list(i.name for i in items if i.value > 1)")
260 self.assertEqual(['b'], expr.evaluate({'items': items}))
261
262 def test_generator_expression_with_getitem(self):
263 items = [{'name': 'a', 'value': 1}, {'name': 'b', 'value': 2}]
264 expr = Expression("list(i['name'] for i in items if i['value'] > 1)")
265 self.assertEqual(['b'], expr.evaluate({'items': items}))
242 266
243 def test_error_access_undefined(self): 267 def test_error_access_undefined(self):
244 expr = Expression("nothing", filename='index.html', lineno=50) 268 expr = Expression("nothing", filename='index.html', lineno=50)
245 self.assertEqual(Undefined, type(expr.evaluate({}))) 269 self.assertEqual(Undefined, type(expr.evaluate({})))
246 270
Copyright (C) 2012-2017 Edgewall Software