changeset 340:b517929eb334 trunk

Make expressions hashable.
author cmlenz
date Thu, 09 Nov 2006 16:42:08 +0000
parents 7763f7aec949
children 35189e960252
files genshi/template/eval.py genshi/template/tests/eval.py
diffstat 2 files changed, 19 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/genshi/template/eval.py
+++ b/genshi/template/eval.py
@@ -83,6 +83,15 @@
             self.code = _compile(ast.Expression(source), filename=filename,
                                  lineno=lineno)
 
+    def __eq__(self, other):
+        return (type(other) == Expression) and (self.code == other.code)
+
+    def __hash__(self):
+        return hash(self.code)
+
+    def __ne__(self, other):
+        return not self == other
+
     def __repr__(self):
         return 'Expression(%r)' % self.source
 
--- a/genshi/template/tests/eval.py
+++ b/genshi/template/tests/eval.py
@@ -20,6 +20,16 @@
 
 class ExpressionTestCase(unittest.TestCase):
 
+    def test_eq(self):
+        expr = Expression('x,y')
+        self.assertEqual(expr, Expression('x,y'))
+        self.assertNotEqual(expr, Expression('y, x'))
+
+    def test_hash(self):
+        expr = Expression('x,y')
+        self.assertEqual(hash(expr), hash(Expression('x,y')))
+        self.assertNotEqual(hash(expr), hash(Expression('y, x')))
+
     def test_name_lookup(self):
         self.assertEqual('bar', Expression('foo').evaluate({'foo': 'bar'}))
         self.assertEqual(id, Expression('id').evaluate({}, nocall=True))
Copyright (C) 2012-2017 Edgewall Software