OLD | NEW |
| (Empty) |
1 #!/usr/bin/env python | |
2 # Copyright 2013 The Chromium Authors. All rights reserved. | |
3 # Use of this source code is governed by a BSD-style license that can be | |
4 # found in the LICENSE file. | |
5 | |
6 import os | |
7 import shutil | |
8 import sys | |
9 import tempfile | |
10 import unittest | |
11 | |
12 sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname( | |
13 os.path.abspath(__file__))))) | |
14 | |
15 from recipe_engine import field_composer | |
16 | |
17 | |
18 # Functors are compared by reference. | |
19 BEAUTY_LAMBDA = lambda x, y: x + y + 1 | |
20 | |
21 | |
22 class TestFieldComposer(unittest.TestCase): | |
23 | |
24 def setUp(self): | |
25 super(TestFieldComposer, self).setUp() | |
26 _functors = { | |
27 'beauty': {'combine': BEAUTY_LAMBDA}, | |
28 'despair': {'combine': lambda x, y: x * y}} | |
29 self.fc = field_composer.FieldComposer( | |
30 {'beauty': 7, 'despair': 10}, _functors) | |
31 | |
32 def test_init_degenerate_registry(self): | |
33 """Lack of 'combine' in registry value should raise an error.""" | |
34 with self.assertRaises(field_composer.DegenerateRegistryError): | |
35 field_composer.FieldComposer( | |
36 {'hello': 'hello'}, {'hello': {'darkness': 'my old friend'}}) | |
37 | |
38 def test_dict_methods_ok(self): | |
39 """FieldComposer acts as a dict for some methods.""" | |
40 for key in ['beauty', 'despair', 'absence']: | |
41 # fc.get returns fc._fields.get | |
42 self.assertEqual(self.fc._fields.get(key), self.fc.get(key)) | |
43 self.assertEqual(self.fc._fields.get(key, 1), self.fc.get(key, 1)) | |
44 | |
45 # in fc returns in fc._fields | |
46 self.assertEqual(key in self.fc, key in self.fc._fields) | |
47 | |
48 # fc[key] returns fc._fields[key] | |
49 if key in self.fc: | |
50 self.assertEqual(self.fc[key], self.fc._fields[key]) | |
51 else: | |
52 with self.assertRaises(KeyError): | |
53 _ = self.fc._fields[key] | |
54 | |
55 def test_compose_with_dict_ok(self): | |
56 new_fields = {'beauty': 9} | |
57 new_fc = self.fc.compose(new_fields) | |
58 expected = {'beauty': 17, 'despair': 10} | |
59 self.assertEqual(expected, new_fc._fields) | |
60 | |
61 def test_compose_with_unknown_field(self): | |
62 """CompositionUndefined must be raised when kwargs don't have combiners.""" | |
63 with self.assertRaises(field_composer.CompositionUndefined): | |
64 self.fc.compose({'beauty': 9, 'hope': 'none to speak of'}) | |
65 | |
66 def test_compose_with_compositor_ok(self): | |
67 second_fc = field_composer.FieldComposer( | |
68 {'beauty': 9}, {'beauty': {'combine': BEAUTY_LAMBDA}}) | |
69 new_fc = self.fc.compose(second_fc) | |
70 expected = {'beauty': 17, 'despair': 10} | |
71 self.assertEqual(expected, new_fc._fields) | |
72 | |
73 def test_compose_with_sneaky_bad_registry(self): | |
74 """RegistryConflict must be raised when functors clash.""" | |
75 second_fc = field_composer.FieldComposer( | |
76 {}, {'beauty': {'combine': lambda x, y: 0}}) | |
77 with self.assertRaises(field_composer.RegistryConflict): | |
78 self.fc.compose(second_fc) | |
79 | |
80 | |
81 if __name__ == '__main__': | |
82 unittest.main() | |
OLD | NEW |