def test_no_differences(self): test_set = {1, 2, 3, 4, 5} diff_obj = diff.diff_set(test_set, test_set) diffs = [ diff.DiffItem(diff.unchanged, i) for i in test_set] expected_diff = diff.Diff(set, diffs) self.assertEqual(diff_obj, expected_diff)
def test_mostly_insertions(self): set1 = {4} set2 = {1, 2, 3, 4} diff_obj = diff.diff_set(set1, set2) diffs = [ diff.DiffItem(diff.unchanged, 4), diff.DiffItem(diff.insert, 1), diff.DiffItem(diff.insert, 2), diff.DiffItem(diff.insert, 3)] expected_diff = diff.Diff(set, diffs) expected_diff.context_blocks = [ expected_diff.ContextBlock(set, diffs[1:])] self.assertEqual(diff_obj, expected_diff)
def test_mostly_removals(self): set1 = {1, 2, 3, 4} set2 = {4} diff_obj = diff.diff_set(set1, set2) diffs = [ diff.DiffItem(diff.remove, 1), diff.DiffItem(diff.remove, 2), diff.DiffItem(diff.remove, 3), diff.DiffItem(diff.unchanged, 4)] expected_diff = diff.Diff(set, diffs) expected_diff.context_blocks = [ expected_diff.ContextBlock(set, diffs[:3])] self.assertEqual(diff_obj, expected_diff)
def test_context_limit_is_adjustable(self): set1 = {1, 2, 3, 4} set2 = {0, 2, 3, 6} diff_obj = diff.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 = [ diff.DiffItem(diff.remove, 1), diff.DiffItem(diff.remove, 4), diff.DiffItem(diff.unchanged, 2), diff.DiffItem(diff.unchanged, 3), diff.DiffItem(diff.insert, 0), diff.DiffItem(diff.insert, 6)] expected_diff = 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)
def test_depth_is_adjustable(self): diff_obj = diff.diff_set({'a', 'b', 'c'}, {'e'}, _depth=6) self.assertEqual(diff_obj.depth, 6)
def test_empty_diff(self): diff_obj = diff.diff_set(set(), set()) expected_diff = diff.Diff(set, []) self.assertEqual(diff_obj, expected_diff)