diff markup/tests/eval.py @ 118:c392d38694d9 trunk

Add basic support for using `lambda`s in expressions. Closes #21. (Not sure about default arguments, need a test case).
author cmlenz
date Tue, 01 Aug 2006 22:34:39 +0000
parents e20a153cc20c
children 2ad83f1d337c 9d7ca94133be
line wrap: on
line diff
--- a/markup/tests/eval.py
+++ b/markup/tests/eval.py
@@ -190,6 +190,18 @@
         self.assertEqual('BAR', Expression("foo.upper").evaluate(data))
         data = {'foo': {'bar': range(42)}}
 
+    def test_lambda(self):
+        # Define a custom `sorted` function cause the builtin isn't available
+        # on Python 2.3
+        def sorted(items, compfunc):
+            items.sort(compfunc)
+            return items
+        data = {'items': [{'name': 'b', 'value': 0}, {'name': 'a', 'value': 1}],
+                'sorted': sorted}
+        expr = Expression("sorted(items, lambda a, b: cmp(a.name, b.name))")
+        self.assertEqual([{'name': 'a', 'value': 1}, {'name': 'b', 'value': 0}],
+                         expr.evaluate(data))
+
     def test_list_comprehension(self):
         expr = Expression("[n for n in numbers if n < 2]")
         self.assertEqual([0, 1], expr.evaluate({'numbers': range(5)}))
Copyright (C) 2012-2017 Edgewall Software