comparison genshi/template/tests/eval.py @ 845:9cabfbc4ac5c

Fix nested list comprehensions & generator expressions (fixes #327)
author mgood
date Sun, 09 Aug 2009 20:38:59 +0000
parents 46816d77cab7
children 0d9e87c6cf6e
comparison
equal deleted inserted replaced
844:0af77f663a65 845:9cabfbc4ac5c
256 256
257 expr = Expression("[offset + n for n in numbers]") 257 expr = Expression("[offset + n for n in numbers]")
258 self.assertEqual([2, 3, 4, 5, 6], 258 self.assertEqual([2, 3, 4, 5, 6],
259 expr.evaluate({'numbers': range(5), 'offset': 2})) 259 expr.evaluate({'numbers': range(5), 'offset': 2}))
260 260
261 expr = Expression("[n for group in groups for n in group]")
262 self.assertEqual([0, 1, 0, 1, 2],
263 expr.evaluate({'groups': [range(2), range(3)]}))
264
265 expr = Expression("[(a, b) for a in x for b in y]")
266 self.assertEqual([('x0', 'y0'), ('x0', 'y1'), ('x1', 'y0'), ('x1', 'y1')],
267 expr.evaluate({'x': ['x0', 'x1'], 'y': ['y0', 'y1']}))
268
261 def test_list_comprehension_with_getattr(self): 269 def test_list_comprehension_with_getattr(self):
262 items = [{'name': 'a', 'value': 1}, {'name': 'b', 'value': 2}] 270 items = [{'name': 'a', 'value': 1}, {'name': 'b', 'value': 2}]
263 expr = Expression("[i.name for i in items if i.value > 1]") 271 expr = Expression("[i.name for i in items if i.value > 1]")
264 self.assertEqual(['b'], expr.evaluate({'items': items})) 272 self.assertEqual(['b'], expr.evaluate({'items': items}))
265 273
277 expr.evaluate({'numbers': range(5)})) 285 expr.evaluate({'numbers': range(5)}))
278 286
279 expr = Expression("list(offset + n for n in numbers)") 287 expr = Expression("list(offset + n for n in numbers)")
280 self.assertEqual([2, 3, 4, 5, 6], 288 self.assertEqual([2, 3, 4, 5, 6],
281 expr.evaluate({'numbers': range(5), 'offset': 2})) 289 expr.evaluate({'numbers': range(5), 'offset': 2}))
290
291 expr = Expression("list(n for group in groups for n in group)")
292 self.assertEqual([0, 1, 0, 1, 2],
293 expr.evaluate({'groups': [range(2), range(3)]}))
294
295 expr = Expression("list((a, b) for a in x for b in y)")
296 self.assertEqual([('x0', 'y0'), ('x0', 'y1'), ('x1', 'y0'), ('x1', 'y1')],
297 expr.evaluate({'x': ['x0', 'x1'], 'y': ['y0', 'y1']}))
282 298
283 def test_generator_expression_with_getattr(self): 299 def test_generator_expression_with_getattr(self):
284 items = [{'name': 'a', 'value': 1}, {'name': 'b', 'value': 2}] 300 items = [{'name': 'a', 'value': 1}, {'name': 'b', 'value': 2}]
285 expr = Expression("list(i.name for i in items if i.value > 1)") 301 expr = Expression("list(i.name for i in items if i.value > 1)")
286 self.assertEqual(['b'], expr.evaluate({'items': items})) 302 self.assertEqual(['b'], expr.evaluate({'items': items}))
Copyright (C) 2012-2017 Edgewall Software