c3a4e7af81865e27acc810b9419e7e1ef2821f99
[osm/RO.git] / osm_ro / tests / test_utils.py
1 # -*- coding: utf-8 -*-
2 # pylint: disable=E1101
3
4 import unittest
5
6 from ..utils import get_arg, inject_args
7
8
9 class TestUtils(unittest.TestCase):
10 def test_inject_args_curries_arguments(self):
11 fn = inject_args(lambda a=None, b=None: a+b, a=3, b=5)
12 self.assertEqual(fn(), 8)
13
14 def test_inject_args_doesnt_add_arg_if_not_needed(self):
15 fn = inject_args(lambda: 7, a=1, b=2)
16 self.assertEqual(fn(), 7)
17 fn = inject_args(lambda a=None: a, b=2)
18 self.assertEqual(fn(1), 1)
19
20 def test_inject_args_knows_how_to_handle_arg_order(self):
21 fn = inject_args(lambda a=None, b=None: b - a, a=3)
22 self.assertEqual(fn(b=4), 1)
23 fn = inject_args(lambda b=None, a=None: b - a, a=3)
24 self.assertEqual(fn(b=4), 1)
25
26 def test_inject_args_works_as_decorator(self):
27 fn = inject_args(x=1)(lambda x=None: x)
28 self.assertEqual(fn(), 1)
29
30 def test_get_arg__positional(self):
31 def _fn(x, y, z):
32 return x + y + z
33
34 x = get_arg('x', _fn, (1, 3, 4), {})
35 self.assertEqual(x, 1)
36 y = get_arg('y', _fn, (1, 3, 4), {})
37 self.assertEqual(y, 3)
38 z = get_arg('z', _fn, (1, 3, 4), {})
39 self.assertEqual(z, 4)
40
41 def test_get_arg__keyword(self):
42 def _fn(x, y, z=5):
43 return x + y + z
44
45 z = get_arg('z', _fn, (1, 2), {'z': 3})
46 self.assertEqual(z, 3)
47
48
49 if __name__ == '__main__':
50 unittest.main()