def test_no_differences(self): map1 = {'a': 1} diff_obj = diff_mapping(map1, map1) diffs = [ MappingDiffItem(unchanged, 'a', unchanged, 1)] expected_diff = Diff(dict, diffs) self.assertEqual(diff_obj, expected_diff) self.assertEqual(patch(map1, diff_obj), map1)
def test_common_keys_values_different_types(self): map1 = {'a': (1, 2)} map2 = {'a': '1, 2'} diff_obj = diff_mapping(map1, map2) diffs = [ MappingDiffItem(unchanged, 'a', remove, (1, 2)), MappingDiffItem(unchanged, 'a', insert, '1, 2')] expected_diff = Diff(dict, diffs) expected_diff.context_blocks = [ expected_diff.ContextBlock(dict, diffs)] self.assertEqual(diff_obj, expected_diff) self.assertEqual(patch(map1, diff_obj), map2)
def test_common_keys_values_not_diffable(self): map1 = {'a': 1} map2 = {'a': 2} diff_obj = diff_mapping(map1, map2) diffs = [ MappingDiffItem(unchanged, 'a', remove, 1), MappingDiffItem(unchanged, 'a', insert, 2)] expected_diff = Diff(dict, diffs) expected_diff.context_blocks = [ expected_diff.ContextBlock(dict, diffs)] self.assertEqual(diff_obj, expected_diff) self.assertEqual(patch(map1, diff_obj), map2)
def test_mostly_inserts(self): map1 = {'c': 3} map2 = {'a': 1, 'b': 2, 'c': 3, 'd': 4} diff_obj = diff_mapping(map1, map2) diffs = [ MappingDiffItem(unchanged, 'c', unchanged, 3), MappingDiffItem(insert, 'a', insert, 1), MappingDiffItem(insert, 'b', insert, 2), MappingDiffItem(insert, 'd', insert, 4)] expected_diff = Diff(dict, diffs) expected_diff.context_blocks = [ expected_diff.ContextBlock(dict, diffs[1:])] self.assertEqual(diff_obj, expected_diff) self.assertEqual(patch(map1, diff_obj), map2)
def test_context_limit_is_adjustable(self): map1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4} map2 = {'a': 2, 'b': 2, 'c': 3, 'e': 4} diff_obj = diff_mapping(map1, map2, context_limit=1) diffs = [ MappingDiffItem(remove, 'd', remove, 4), MappingDiffItem(unchanged, 'a', remove, 1), MappingDiffItem(unchanged, 'a', insert, 2), MappingDiffItem(unchanged, 'c', unchanged, 3), MappingDiffItem(unchanged, 'b', unchanged, 2), MappingDiffItem(insert, 'e', insert, 4)] expected_diff = Diff(dict, diffs, context_limit=1) expected_diff.context_blocks = [ expected_diff.ContextBlock(dict, diffs[:3]), expected_diff.ContextBlock(dict, diffs[5:])] self.assertEqual(diff_obj, expected_diff) self.assertEqual(patch(map1, diff_obj), map2)
def test_common_keys_recursive_diff(self): map1 = {'a': {'b': 1}} map2 = {'a': {'b': 2}} diff_obj = diff_mapping(map1, map2) nested_diffs = [ MappingDiffItem(unchanged, 'b', remove, 1), MappingDiffItem(unchanged, 'b', insert, 2)] nested_diff = Diff(dict, nested_diffs, depth=1) nested_diff.context_blocks = [ nested_diff.ContextBlock(dict, nested_diffs, depth=1)] diffs = [ MappingDiffItem( unchanged, 'a', changed, nested_diff)] expected_diff = Diff(dict, diffs) expected_diff.context_blocks = [ expected_diff.ContextBlock(dict, diffs)] self.assertEqual(diff_obj, expected_diff) self.assertEqual(patch(map1, diff_obj), map2)
def test_single_char_edge_case_in_dict(self): map1 = {1: 'a'} map2 = {1: 'b'} diff_obj = diff_mapping(map1, map2) nested_diffs = [ DiffItem(remove, 'a', (0, 1, 0, 0)), DiffItem(insert, 'b', (1, 1, 0, 1)) ] nested_diff = Diff(str, nested_diffs, depth=1) nested_diff.context_blocks = [ nested_diff.ContextBlock(str, nested_diffs, depth=1) ] diffs = [ MappingDiffItem(unchanged, 1, changed, nested_diff) ] expected_diff = Diff(dict, diffs) expected_diff.context_blocks = [ expected_diff.ContextBlock(dict, diffs) ] self.assertEqual(diff_obj, expected_diff) self.assertEqual(patch(map1, diff_obj), map2)
def test_depth_is_adjustable(self): diff_obj = diff_mapping({'a': 1}, {'b': 2}, _depth=2) self.assertEqual(diff_obj.depth, 2)
def test_empty_diff(self): map1 = {} diff_obj = diff_mapping(map1, map1) expected_diff = Diff(dict, []) self.assertEqual(diff_obj, expected_diff) self.assertEqual(patch(map1, diff_obj), map1)