Mercurial > genshi > genshi-test
diff markup/tests/eval.py @ 131:203f459e7e26
* Support for line numbers in exceptions in expression evaluation (#22).
* Fix bug in expression evaluation when item access was used inside a lambda or list comprehension. Thanks to Kevin Dangoor for reporting the problem.
author | cmlenz |
---|---|
date | Fri, 04 Aug 2006 13:07:52 +0000 |
parents | 226613431921 |
children | df44110ca91d |
line wrap: on
line diff
--- a/markup/tests/eval.py +++ b/markup/tests/eval.py @@ -12,6 +12,7 @@ # history and logs, available at hhttp://markup.edgewall.org/log/. import doctest +import sys import unittest from markup.eval import Expression @@ -214,6 +215,29 @@ self.assertEqual([2, 3, 4, 5, 6], expr.evaluate({'numbers': range(5), 'offset': 2})) + def test_list_comprehension_with_getattr(self): + items = [{'name': 'a', 'value': 1}, {'name': 'b', 'value': 2}] + expr = Expression("[i.name for i in items if i.value > 1]") + self.assertEqual(['b'], expr.evaluate({'items': items})) + + def test_list_comprehension_with_getitem(self): + items = [{'name': 'a', 'value': 1}, {'name': 'b', 'value': 2}] + expr = Expression("[i['name'] for i in items if i['value'] > 1]") + self.assertEqual(['b'], expr.evaluate({'items': items})) + + def test_error_position(self): + expr = Expression("nothing()", filename='index.html', lineno=50) + try: + expr.evaluate({}) + self.fail('Expected TypeError') + except TypeError, e: + exc_type, exc_value, exc_traceback = sys.exc_info() + frame = exc_traceback.tb_next + while frame.tb_next: + frame = frame.tb_next + self.assertEqual('index.html', frame.tb_frame.f_code.co_filename) + self.assertEqual(50, frame.tb_lineno) + def suite(): suite = unittest.TestSuite()