The former is deprecated. No functionality change.
- skip-blame just removing an ess and some whitespace
| indygreg | 
| hg-reviewers | 
The former is deprecated. No functionality change.
| Automatic diff as part of commit; lint not applicable. | 
| Automatic diff as part of commit; unit tests not applicable. | 
| Path | Packages | |||
|---|---|---|---|---|
| M | tests/test-simplemerge.py (164 lines) | 
| Status | Author | Revision | |
|---|---|---|---|
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | ||
| Closed | durin42 | 
| pass | pass | ||||
| def test_no_changes(self): | def test_no_changes(self): | ||||
| """No conflicts because nothing changed""" | """No conflicts because nothing changed""" | ||||
| m3 = Merge3(['aaa', 'bbb'], | m3 = Merge3(['aaa', 'bbb'], | ||||
| ['aaa', 'bbb'], | ['aaa', 'bbb'], | ||||
| ['aaa', 'bbb']) | ['aaa', 'bbb']) | ||||
| self.assertEquals(m3.find_unconflicted(), | self.assertEqual(m3.find_unconflicted(), | ||||
| [(0, 2)]) | [(0, 2)]) | ||||
| self.assertEquals(list(m3.find_sync_regions()), | self.assertEqual(list(m3.find_sync_regions()), | ||||
| [(0, 2, | [(0, 2, | ||||
| 0, 2, | 0, 2, | ||||
| 0, 2), | 0, 2), | ||||
| (2, 2, 2, 2, 2, 2)]) | (2, 2, 2, 2, 2, 2)]) | ||||
| self.assertEquals(list(m3.merge_regions()), | self.assertEqual(list(m3.merge_regions()), | ||||
| [('unchanged', 0, 2)]) | [('unchanged', 0, 2)]) | ||||
| self.assertEquals(list(m3.merge_groups()), | self.assertEqual(list(m3.merge_groups()), | ||||
| [('unchanged', ['aaa', 'bbb'])]) | [('unchanged', ['aaa', 'bbb'])]) | ||||
| def test_front_insert(self): | def test_front_insert(self): | ||||
| m3 = Merge3(['zz'], | m3 = Merge3(['zz'], | ||||
| ['aaa', 'bbb', 'zz'], | ['aaa', 'bbb', 'zz'], | ||||
| ['zz']) | ['zz']) | ||||
| # todo: should use a sentinel at end as from get_matching_blocks | # todo: should use a sentinel at end as from get_matching_blocks | ||||
| # to match without zz | # to match without zz | ||||
| self.assertEquals(list(m3.find_sync_regions()), | self.assertEqual(list(m3.find_sync_regions()), | ||||
| [(0, 1, 2, 3, 0, 1), | [(0, 1, 2, 3, 0, 1), | ||||
| (1, 1, 3, 3, 1, 1)]) | (1, 1, 3, 3, 1, 1)]) | ||||
| self.assertEquals(list(m3.merge_regions()), | self.assertEqual(list(m3.merge_regions()), | ||||
| [('a', 0, 2), | [('a', 0, 2), | ||||
| ('unchanged', 0, 1)]) | ('unchanged', 0, 1)]) | ||||
| self.assertEquals(list(m3.merge_groups()), | self.assertEqual(list(m3.merge_groups()), | ||||
| [('a', ['aaa', 'bbb']), | [('a', ['aaa', 'bbb']), | ||||
| ('unchanged', ['zz'])]) | ('unchanged', ['zz'])]) | ||||
| def test_null_insert(self): | def test_null_insert(self): | ||||
| m3 = Merge3([], | m3 = Merge3([], | ||||
| ['aaa', 'bbb'], | ['aaa', 'bbb'], | ||||
| []) | []) | ||||
| # todo: should use a sentinel at end as from get_matching_blocks | # todo: should use a sentinel at end as from get_matching_blocks | ||||
| # to match without zz | # to match without zz | ||||
| self.assertEquals(list(m3.find_sync_regions()), | self.assertEqual(list(m3.find_sync_regions()), | ||||
| [(0, 0, 2, 2, 0, 0)]) | [(0, 0, 2, 2, 0, 0)]) | ||||
| self.assertEquals(list(m3.merge_regions()), | self.assertEqual(list(m3.merge_regions()), | ||||
| [('a', 0, 2)]) | [('a', 0, 2)]) | ||||
| self.assertEquals(list(m3.merge_lines()), | self.assertEqual(list(m3.merge_lines()), | ||||
| ['aaa', 'bbb']) | ['aaa', 'bbb']) | ||||
| def test_no_conflicts(self): | def test_no_conflicts(self): | ||||
| """No conflicts because only one side changed""" | """No conflicts because only one side changed""" | ||||
| m3 = Merge3(['aaa', 'bbb'], | m3 = Merge3(['aaa', 'bbb'], | ||||
| ['aaa', '111', 'bbb'], | ['aaa', '111', 'bbb'], | ||||
| ['aaa', 'bbb']) | ['aaa', 'bbb']) | ||||
| self.assertEquals(m3.find_unconflicted(), | self.assertEqual(m3.find_unconflicted(), | ||||
| [(0, 1), (1, 2)]) | [(0, 1), (1, 2)]) | ||||
| self.assertEquals(list(m3.find_sync_regions()), | self.assertEqual(list(m3.find_sync_regions()), | ||||
| [(0, 1, 0, 1, 0, 1), | [(0, 1, 0, 1, 0, 1), | ||||
| (1, 2, 2, 3, 1, 2), | (1, 2, 2, 3, 1, 2), | ||||
| (2, 2, 3, 3, 2, 2)]) | (2, 2, 3, 3, 2, 2)]) | ||||
| self.assertEquals(list(m3.merge_regions()), | self.assertEqual(list(m3.merge_regions()), | ||||
| [('unchanged', 0, 1), | [('unchanged', 0, 1), | ||||
| ('a', 1, 2), | ('a', 1, 2), | ||||
| ('unchanged', 1, 2)]) | ('unchanged', 1, 2)]) | ||||
| def test_append_a(self): | def test_append_a(self): | ||||
| m3 = Merge3(['aaa\n', 'bbb\n'], | m3 = Merge3(['aaa\n', 'bbb\n'], | ||||
| ['aaa\n', 'bbb\n', '222\n'], | ['aaa\n', 'bbb\n', '222\n'], | ||||
| ['aaa\n', 'bbb\n']) | ['aaa\n', 'bbb\n']) | ||||
| self.assertEquals(''.join(m3.merge_lines()), | self.assertEqual(''.join(m3.merge_lines()), | ||||
| 'aaa\nbbb\n222\n') | 'aaa\nbbb\n222\n') | ||||
| def test_append_b(self): | def test_append_b(self): | ||||
| m3 = Merge3(['aaa\n', 'bbb\n'], | m3 = Merge3(['aaa\n', 'bbb\n'], | ||||
| ['aaa\n', 'bbb\n'], | ['aaa\n', 'bbb\n'], | ||||
| ['aaa\n', 'bbb\n', '222\n']) | ['aaa\n', 'bbb\n', '222\n']) | ||||
| self.assertEquals(''.join(m3.merge_lines()), | self.assertEqual(''.join(m3.merge_lines()), | ||||
| 'aaa\nbbb\n222\n') | 'aaa\nbbb\n222\n') | ||||
| def test_append_agreement(self): | def test_append_agreement(self): | ||||
| m3 = Merge3(['aaa\n', 'bbb\n'], | m3 = Merge3(['aaa\n', 'bbb\n'], | ||||
| ['aaa\n', 'bbb\n', '222\n'], | ['aaa\n', 'bbb\n', '222\n'], | ||||
| ['aaa\n', 'bbb\n', '222\n']) | ['aaa\n', 'bbb\n', '222\n']) | ||||
| self.assertEquals(''.join(m3.merge_lines()), | self.assertEqual(''.join(m3.merge_lines()), | ||||
| 'aaa\nbbb\n222\n') | 'aaa\nbbb\n222\n') | ||||
| def test_append_clash(self): | def test_append_clash(self): | ||||
| m3 = Merge3(['aaa\n', 'bbb\n'], | m3 = Merge3(['aaa\n', 'bbb\n'], | ||||
| ['aaa\n', 'bbb\n', '222\n'], | ['aaa\n', 'bbb\n', '222\n'], | ||||
| ['aaa\n', 'bbb\n', '333\n']) | ['aaa\n', 'bbb\n', '333\n']) | ||||
| ml = m3.merge_lines(name_a='a', | ml = m3.merge_lines(name_a='a', | ||||
| name_b='b', | name_b='b', | ||||
| start_marker='<<', | start_marker='<<', | ||||
| mid_marker='--', | mid_marker='--', | ||||
| end_marker='>>') | end_marker='>>') | ||||
| self.assertEquals(''.join(ml), | self.assertEqual(''.join(ml), | ||||
| 'aaa\n' | 'aaa\n' | ||||
| 'bbb\n' | 'bbb\n' | ||||
| '<< a\n' | '<< a\n' | ||||
| '222\n' | '222\n' | ||||
| '--\n' | '--\n' | ||||
| '333\n' | '333\n' | ||||
| '>> b\n' | '>> b\n' | ||||
| ) | ) | ||||
| def test_insert_agreement(self): | def test_insert_agreement(self): | ||||
| m3 = Merge3(['aaa\n', 'bbb\n'], | m3 = Merge3(['aaa\n', 'bbb\n'], | ||||
| ['aaa\n', '222\n', 'bbb\n'], | ['aaa\n', '222\n', 'bbb\n'], | ||||
| ['aaa\n', '222\n', 'bbb\n']) | ['aaa\n', '222\n', 'bbb\n']) | ||||
| ml = m3.merge_lines(name_a='a', | ml = m3.merge_lines(name_a='a', | ||||
| name_b='b', | name_b='b', | ||||
| start_marker='<<', | start_marker='<<', | ||||
| mid_marker='--', | mid_marker='--', | ||||
| end_marker='>>') | end_marker='>>') | ||||
| self.assertEquals(''.join(ml), 'aaa\n222\nbbb\n') | self.assertEqual(''.join(ml), 'aaa\n222\nbbb\n') | ||||
| def test_insert_clash(self): | def test_insert_clash(self): | ||||
| """Both try to insert lines in the same place.""" | """Both try to insert lines in the same place.""" | ||||
| m3 = Merge3(['aaa\n', 'bbb\n'], | m3 = Merge3(['aaa\n', 'bbb\n'], | ||||
| ['aaa\n', '111\n', 'bbb\n'], | ['aaa\n', '111\n', 'bbb\n'], | ||||
| ['aaa\n', '222\n', 'bbb\n']) | ['aaa\n', '222\n', 'bbb\n']) | ||||
| self.assertEquals(m3.find_unconflicted(), | self.assertEqual(m3.find_unconflicted(), | ||||
| [(0, 1), (1, 2)]) | [(0, 1), (1, 2)]) | ||||
| self.assertEquals(list(m3.find_sync_regions()), | self.assertEqual(list(m3.find_sync_regions()), | ||||
| [(0, 1, 0, 1, 0, 1), | [(0, 1, 0, 1, 0, 1), | ||||
| (1, 2, 2, 3, 2, 3), | (1, 2, 2, 3, 2, 3), | ||||
| (2, 2, 3, 3, 3, 3)]) | (2, 2, 3, 3, 3, 3)]) | ||||
| self.assertEquals(list(m3.merge_regions()), | self.assertEqual(list(m3.merge_regions()), | ||||
| [('unchanged', 0, 1), | [('unchanged', 0, 1), | ||||
| ('conflict', 1, 1, 1, 2, 1, 2), | ('conflict', 1, 1, 1, 2, 1, 2), | ||||
| ('unchanged', 1, 2)]) | ('unchanged', 1, 2)]) | ||||
| self.assertEquals(list(m3.merge_groups()), | self.assertEqual(list(m3.merge_groups()), | ||||
| [('unchanged', ['aaa\n']), | [('unchanged', ['aaa\n']), | ||||
| ('conflict', [], ['111\n'], ['222\n']), | ('conflict', [], ['111\n'], ['222\n']), | ||||
| ('unchanged', ['bbb\n']), | ('unchanged', ['bbb\n']), | ||||
| ]) | ]) | ||||
| ml = m3.merge_lines(name_a='a', | ml = m3.merge_lines(name_a='a', | ||||
| name_b='b', | name_b='b', | ||||
| start_marker='<<', | start_marker='<<', | ||||
| mid_marker='--', | mid_marker='--', | ||||
| end_marker='>>') | end_marker='>>') | ||||
| self.assertEquals(''.join(ml), | self.assertEqual(''.join(ml), | ||||
| '''aaa | '''aaa | ||||
| << a | << a | ||||
| 111 | 111 | ||||
| -- | -- | ||||
| 222 | 222 | ||||
| >> b | >> b | ||||
| bbb | bbb | ||||
| ''') | ''') | ||||
| def test_replace_clash(self): | def test_replace_clash(self): | ||||
| """Both try to insert lines in the same place.""" | """Both try to insert lines in the same place.""" | ||||
| m3 = Merge3(['aaa', '000', 'bbb'], | m3 = Merge3(['aaa', '000', 'bbb'], | ||||
| ['aaa', '111', 'bbb'], | ['aaa', '111', 'bbb'], | ||||
| ['aaa', '222', 'bbb']) | ['aaa', '222', 'bbb']) | ||||
| self.assertEquals(m3.find_unconflicted(), | self.assertEqual(m3.find_unconflicted(), | ||||
| [(0, 1), (2, 3)]) | [(0, 1), (2, 3)]) | ||||
| self.assertEquals(list(m3.find_sync_regions()), | self.assertEqual(list(m3.find_sync_regions()), | ||||
| [(0, 1, 0, 1, 0, 1), | [(0, 1, 0, 1, 0, 1), | ||||
| (2, 3, 2, 3, 2, 3), | (2, 3, 2, 3, 2, 3), | ||||
| (3, 3, 3, 3, 3, 3)]) | (3, 3, 3, 3, 3, 3)]) | ||||
| def test_replace_multi(self): | def test_replace_multi(self): | ||||
| """Replacement with regions of different size.""" | """Replacement with regions of different size.""" | ||||
| m3 = Merge3(['aaa', '000', '000', 'bbb'], | m3 = Merge3(['aaa', '000', '000', 'bbb'], | ||||
| ['aaa', '111', '111', '111', 'bbb'], | ['aaa', '111', '111', '111', 'bbb'], | ||||
| ['aaa', '222', '222', '222', '222', 'bbb']) | ['aaa', '222', '222', '222', '222', 'bbb']) | ||||
| self.assertEquals(m3.find_unconflicted(), | self.assertEqual(m3.find_unconflicted(), | ||||
| [(0, 1), (3, 4)]) | [(0, 1), (3, 4)]) | ||||
| self.assertEquals(list(m3.find_sync_regions()), | self.assertEqual(list(m3.find_sync_regions()), | ||||
| [(0, 1, 0, 1, 0, 1), | [(0, 1, 0, 1, 0, 1), | ||||
| (3, 4, 4, 5, 5, 6), | (3, 4, 4, 5, 5, 6), | ||||
| (4, 4, 5, 5, 6, 6)]) | (4, 4, 5, 5, 6, 6)]) | ||||
| def test_merge_poem(self): | def test_merge_poem(self): | ||||
| """Test case from diff3 manual""" | """Test case from diff3 manual""" | ||||
| m3 = Merge3(TZU, LAO, TAO) | m3 = Merge3(TZU, LAO, TAO) | ||||
| ml = list(m3.merge_lines('LAO', 'TAO')) | ml = list(m3.merge_lines('LAO', 'TAO')) | ||||
| self.log('merge result:') | self.log('merge result:') | ||||
| self.log(''.join(ml)) | self.log(''.join(ml)) | ||||
| self.assertEquals(ml, MERGED_RESULT) | self.assertEqual(ml, MERGED_RESULT) | ||||
| def test_binary(self): | def test_binary(self): | ||||
| with self.assertRaises(error.Abort): | with self.assertRaises(error.Abort): | ||||
| Merge3(['\x00'], ['a'], ['b']) | Merge3(['\x00'], ['a'], ['b']) | ||||
| def test_dos_text(self): | def test_dos_text(self): | ||||
| base_text = 'a\r\n' | base_text = 'a\r\n' | ||||
| this_text = 'b\r\n' | this_text = 'b\r\n' | ||||
| other_text = 'c\r\n' | other_text = 'c\r\n' | ||||
| m3 = Merge3(base_text.splitlines(True), other_text.splitlines(True), | m3 = Merge3(base_text.splitlines(True), other_text.splitlines(True), | ||||
| this_text.splitlines(True)) | this_text.splitlines(True)) | ||||
| m_lines = m3.merge_lines('OTHER', 'THIS') | m_lines = m3.merge_lines('OTHER', 'THIS') | ||||
| self.assertEqual('<<<<<<< OTHER\r\nc\r\n=======\r\nb\r\n' | self.assertEqual('<<<<<<< OTHER\r\nc\r\n=======\r\nb\r\n' | ||||
| '>>>>>>> THIS\r\n'.splitlines(True), list(m_lines)) | '>>>>>>> THIS\r\n'.splitlines(True), list(m_lines)) | ||||
| def test_mac_text(self): | def test_mac_text(self): | ||||
| base_text = 'a\r' | base_text = 'a\r' | ||||
| this_text = 'b\r' | this_text = 'b\r' | ||||
| other_text = 'c\r' | other_text = 'c\r' | ||||
| m3 = Merge3(base_text.splitlines(True), other_text.splitlines(True), | m3 = Merge3(base_text.splitlines(True), other_text.splitlines(True), | ||||
| this_text.splitlines(True)) | this_text.splitlines(True)) | ||||
| m_lines = m3.merge_lines('OTHER', 'THIS') | m_lines = m3.merge_lines('OTHER', 'THIS') | ||||
| self.assertEqual('<<<<<<< OTHER\rc\r=======\rb\r' | self.assertEqual('<<<<<<< OTHER\rc\r=======\rb\r' | ||||
| '>>>>>>> THIS\r'.splitlines(True), list(m_lines)) | '>>>>>>> THIS\r'.splitlines(True), list(m_lines)) | ||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||
| # hide the timer | # hide the timer | ||||
| import time | import time | ||||
| orig = time.time | orig = time.time | ||||
| try: | try: | ||||
| time.time = lambda: 0 | time.time = lambda: 0 | ||||
| unittest.main() | unittest.main() | ||||
| finally: | finally: | ||||
| time.time = orig | time.time = orig | ||||