def test_handles_non_dict_mappings(self): """Mapping types in general are supported""" from collections import OrderedDict, defaultdict first = OrderedDict(a=OrderedDict(a1=1), c={'c1': 1}) second = defaultdict(None, a=dict(a2=2)) update_deep(first, second) self.assertEqual(first, {'a': {'a1': 1, 'a2': 2}, 'c': {'c1': 1}})
def test_updates_recursively(self): first = {'a': {'a1': 1, 'aa': {}}, 'b': "B"} second = {'a': {'a2': 2, 'aa': {'aa1': 11}}} result = update_deep(first, second) self.assertEqual(first, { 'a': { 'a1': 1, 'a2': 2, 'aa': { 'aa1': 11 } }, 'b': "B" }) self.assertIsNone( result ) # modifies first in place; doesn't return it (same as dict.update())
def test_overwrites_sequences(self): """Only mappings are handled recursively; sequences are considered atomic""" first = {'a': [1, 2]} second = {'a': [3]} update_deep(first, second) self.assertEqual(first, {'a': [3]})
def test_updates_recursively(self): first = {'a': {'a1': 1, 'aa': {}}, 'b': "B"} second = {'a': {'a2': 2, 'aa': {'aa1': 11}}} result = update_deep(first, second) self.assertEqual(first, {'a': {'a1': 1, 'a2': 2, 'aa': {'aa1': 11}}, 'b': "B"}) self.assertIsNone(result) # modifies first in place; doesn't return it (same as dict.update())