Mercurial > genshi > genshi-test
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})) |