def test_no_differences(self): test_set = {1, 2, 3, 4, 5} diff_obj = diff_set(test_set, test_set) diffs = [ DiffItem(unchanged, i) for i in test_set] expected_diff = Diff(set, diffs) self.assertEqual(diff_obj, expected_diff) self.assertEqual(patch(test_set, diff_obj), test_set)
def test_mostly_insertions(self): set1 = {4} set2 = {1, 2, 3, 4} diff_obj = diff_set(set1, set2) diffs = [ DiffItem(unchanged, 4), DiffItem(insert, 1), DiffItem(insert, 2), DiffItem(insert, 3)] expected_diff = Diff(set, diffs) expected_diff.context_blocks = [ expected_diff.ContextBlock(set, diffs[1:])] self.assertEqual(diff_obj, expected_diff) self.assertEqual(patch(set1, diff_obj), set2)
def test_context_limit_is_adjustable(self): set1 = {1, 2, 3, 4} set2 = {0, 2, 3, 6} diff_obj = diff_set(set1, set2, context_limit=1) # This diff doesn't quite look like you would expect a sequence diff to # i,e the first 2 DiffItems might look the wrong way round in sequences # diffs removals come before inserts. Sets aren't ordered like # sequences (although python displays them sorted), therefore it would # be wrong to use the sequence diffing algorithms to diff them. In the # case of sets the Diff.diffs list is constructed in the sort order of # the union of the two sets being diffed. diffs = [ DiffItem(remove, 1), DiffItem(remove, 4), DiffItem(unchanged, 2), DiffItem(unchanged, 3), DiffItem(insert, 0), DiffItem(insert, 6)] expected_diff = Diff(set, diffs, context_limit=1) expected_diff.context_blocks = [ expected_diff.ContextBlock(set, diffs[:2]), expected_diff.ContextBlock(set, diffs[4:])] self.assertEqual(diff_obj, expected_diff) self.assertEqual(patch(set1, diff_obj), set2)
def test_depth_is_adjustable(self): diff_obj = diff_set({'a', 'b', 'c'}, {'e'}, _depth=6) self.assertEqual(diff_obj.depth, 6)
def test_empty_diff(self): set1 = set() diff_obj = diff_set(set1, set1) expected_diff = Diff(set, []) self.assertEqual(diff_obj, expected_diff) self.assertEqual(patch(set1, diff_obj), set1)