summaryrefslogtreecommitdiff
path: root/odoo/addons/base/tests/test_func.py
diff options
context:
space:
mode:
Diffstat (limited to 'odoo/addons/base/tests/test_func.py')
-rw-r--r--odoo/addons/base/tests/test_func.py65
1 files changed, 65 insertions, 0 deletions
diff --git a/odoo/addons/base/tests/test_func.py b/odoo/addons/base/tests/test_func.py
new file mode 100644
index 00000000000..ac394cb9b79
--- /dev/null
+++ b/odoo/addons/base/tests/test_func.py
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import functools
+import unittest
+
+from odoo.tools import frozendict
+from odoo.tools.func import compose
+
+
+class TestCompose(unittest.TestCase):
+ def test_basic(self):
+ str_add = compose(str, lambda a, b: a + b)
+ self.assertEqual(str_add(1, 2), "3")
+
+ def test_decorator(self):
+ """ ensure compose() can be partially applied as a decorator
+ """
+ @functools.partial(compose, unicode)
+ def mul(a, b):
+ return a * b
+
+ self.assertEqual(mul(5, 42), u"210")
+
+
+class TestFrozendict(unittest.TestCase):
+ def test_frozendict_immutable(self):
+ """ Ensure that a frozendict is immutable. """
+ vals = {'name': 'Joe', 'age': 42}
+ frozen_vals = frozendict(vals)
+
+ # check __setitem__, __delitem__
+ with self.assertRaises(Exception):
+ frozen_vals['surname'] = 'Jack'
+ with self.assertRaises(Exception):
+ frozen_vals['name'] = 'Jack'
+ with self.assertRaises(Exception):
+ del frozen_vals['name']
+
+ # check update, setdefault, pop, popitem, clear
+ with self.assertRaises(Exception):
+ frozen_vals.update({'surname': 'Jack'})
+ with self.assertRaises(Exception):
+ frozen_vals.update({'name': 'Jack'})
+ with self.assertRaises(Exception):
+ frozen_vals.setdefault('surname', 'Jack')
+ with self.assertRaises(Exception):
+ frozen_vals.pop('surname', 'Jack')
+ with self.assertRaises(Exception):
+ frozen_vals.pop('name', 'Jack')
+ with self.assertRaises(Exception):
+ frozen_vals.popitem()
+ with self.assertRaises(Exception):
+ frozen_vals.clear()
+
+ def test_frozendict_hash(self):
+ """ Ensure that a frozendict is hashable. """
+ # dict with simple values
+ hash(frozendict({'name': 'Joe', 'age': 42}))
+
+ # dict with tuples, lists, and embedded dicts
+ hash(frozendict({
+ 'user_id': (42, 'Joe'),
+ 'line_ids': [(0, 0, {'values': [42]})],
+ }))