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