import unittest import pgmon class TestPgmonMethods(unittest.TestCase): ## # update_deep ## def test_update_deep__empty_cases(self): # Test empty dict cases d1 = {} d2 = {} pgmon.update_deep(d1, d2) self.assertEqual(d1, {}) self.assertEqual(d2, {}) d1 = {'a': 1} d2 = {} pgmon.update_deep(d1, d2) self.assertEqual(d1, { 'a': 1 }) self.assertEqual(d2, {}) d1 = {} d2 = {'a': 1} pgmon.update_deep(d1, d2) self.assertEqual(d1, { 'a': 1 }) self.assertEqual(d2, d1) def test_update_deep__scalars(self): # Test adding/updating scalar values d1 = {'foo': 1, 'bar': "text", 'hello': "world"} d2 = {'foo': 2, 'baz': "blah"} pgmon.update_deep(d1, d2) self.assertEqual(d1, {'foo': 2, 'bar': "text", 'baz': "blah", 'hello': "world"}) self.assertEqual(d2, {'foo': 2, 'baz': "blah"}) def test_update_deep__lists(self): # Test adding to lists d1 = {'lst1': []} d2 = {'lst1': [1, 2]} pgmon.update_deep(d1, d2) self.assertEqual(d1, {'lst1': [1, 2]}) self.assertEqual(d2, d1) d1 = {'lst1': [1, 2]} d2 = {'lst1': []} pgmon.update_deep(d1, d2) self.assertEqual(d1, {'lst1': [1, 2]}) self.assertEqual(d2, {'lst1': []}) d1 = {'lst1': [1, 2, 3]} d2 = {'lst1': [3, 4]} pgmon.update_deep(d1, d2) self.assertEqual(d1, {'lst1': [1, 2, 3, 3, 4]}) self.assertEqual(d2, {'lst1': [3, 4]}) # Lists of objects d1 = {'lst1': [{'id': 1}, {'id': 2}, {'id': 3}]} d2 = {'lst1': [{'id': 3}, {'id': 4}]} pgmon.update_deep(d1, d2) self.assertEqual(d1, {'lst1': [{'id': 1}, {'id': 2}, {'id': 3}, {'id': 3}, {'id': 4}]}) self.assertEqual(d2, {'lst1': [{'id': 3}, {'id': 4}]}) # Nested lists d1 = {'obj1': {'l1': [1, 2]}} d2 = {'obj1': {'l1': [3, 4]}} pgmon.update_deep(d1, d2) self.assertEqual(d1, {'obj1': {'l1': [1, 2, 3, 4]}}) self.assertEqual(d2, {'obj1': {'l1': [3, 4]}}) def test_update_deep__dicts(self): # Test adding to lists d1 = {'obj1': {}} d2 = {'obj1': {'a': 1, 'b': 2}} pgmon.update_deep(d1, d2) self.assertEqual(d1, {'obj1': {'a': 1, 'b': 2}}) self.assertEqual(d2, d1) d1 = {'obj1': {'a': 1, 'b': 2}} d2 = {'obj1': {}} pgmon.update_deep(d1, d2) self.assertEqual(d1, {'obj1': {'a': 1, 'b': 2}}) self.assertEqual(d2, {'obj1': {}}) d1 = {'obj1': {'a': 1, 'b': 2}} d2 = {'obj1': {'a': 5, 'c': 12}} pgmon.update_deep(d1, d2) self.assertEqual(d1, {'obj1': {'a': 5, 'b': 2, 'c': 12}}) self.assertEqual(d2, {'obj1': {'a': 5, 'c': 12}}) # Nested dicts d1 = {'obj1': {'d1': {'a': 1, 'b': 2}}} d2 = {'obj1': {'d1': {'a': 5, 'c': 12}}} pgmon.update_deep(d1, d2) self.assertEqual(d1, {'obj1': {'d1': {'a': 5, 'b': 2, 'c': 12}}}) self.assertEqual(d2, {'obj1': {'d1': {'a': 5, 'c': 12}}}) def test_update_deep__types(self): # Test mismatched types d1 = {'foo': 5} d2 = None self.assertRaises(TypeError, pgmon.update_deep, d1, d2) d1 = None d2 = {'foo': 5} self.assertRaises(TypeError, pgmon.update_deep, d1, d2) # Nested mismatched types d1 = {'foo': [1, 2]} d2 = {'foo': {'a': 7}} self.assertRaises(TypeError, pgmon.update_deep, d1, d2)