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()
Copyright (C) 2012-2017 Edgewall Software