39
|
1 from trac.versioncontrol import diff
|
|
2
|
|
3 import unittest
|
|
4
|
|
5
|
|
6 class DiffTestCase(unittest.TestCase):
|
|
7
|
|
8 def test_get_change_extent(self):
|
|
9 self.assertEqual((3, 0), diff._get_change_extent('xxx', 'xxx'))
|
|
10 self.assertEqual((0, 0), diff._get_change_extent('', 'xxx'))
|
|
11 self.assertEqual((0, 0), diff._get_change_extent('xxx', ''))
|
|
12 self.assertEqual((0, 0), diff._get_change_extent('xxx', 'yyy'))
|
|
13 self.assertEqual((1, -1), diff._get_change_extent('xxx', 'xyx'))
|
|
14 self.assertEqual((1, -1), diff._get_change_extent('xxx', 'xyyyx'))
|
|
15 self.assertEqual((1, 0), diff._get_change_extent('xy', 'xzz'))
|
|
16 self.assertEqual((1, -1), diff._get_change_extent('xyx', 'xzzx'))
|
|
17 self.assertEqual((1, -1), diff._get_change_extent('xzzx', 'xyx'))
|
|
18
|
|
19 def test_insert_blank_line(self):
|
|
20 opcodes = diff._get_opcodes(['A', 'B'], ['A', 'B', ''],
|
|
21 ignore_blank_lines=0)
|
|
22 self.assertEqual(('equal', 0, 2, 0, 2), opcodes.next())
|
|
23 self.assertEqual(('insert', 2, 2, 2, 3), opcodes.next())
|
|
24
|
|
25 opcodes = diff._get_opcodes(['A', 'B'], ['A', 'B', ''],
|
|
26 ignore_blank_lines=1)
|
|
27 self.assertEqual(('equal', 0, 2, 0, 3), opcodes.next())
|
|
28
|
|
29 opcodes = diff._get_opcodes(['A'], ['A', 'B', ''],
|
|
30 ignore_blank_lines=1)
|
|
31 self.assertEqual(('equal', 0, 1, 0, 1), opcodes.next())
|
|
32 self.assertEqual(('insert', 1, 1, 1, 3), opcodes.next())
|
|
33
|
|
34 def test_delete_blank_line(self):
|
|
35 opcodes = diff._get_opcodes(['A', 'B', ''], ['A', 'B'],
|
|
36 ignore_blank_lines=0)
|
|
37 self.assertEqual(('equal', 0, 2, 0, 2), opcodes.next())
|
|
38 self.assertEqual(('delete', 2, 3, 2, 2), opcodes.next())
|
|
39
|
|
40 opcodes = diff._get_opcodes(['A', 'B', ''], ['A', 'B'],
|
|
41 ignore_blank_lines=1)
|
|
42 self.assertEqual(('equal', 0, 3, 0, 2), opcodes.next())
|
|
43
|
|
44 opcodes = diff._get_opcodes(['A', 'B', ''], ['A'],
|
|
45 ignore_blank_lines=1)
|
|
46 self.assertEqual(('equal', 0, 1, 0, 1), opcodes.next())
|
|
47 self.assertEqual(('delete', 1, 3, 1, 1), opcodes.next())
|
|
48
|
|
49 def test_space_changes(self):
|
|
50 opcodes = diff._get_opcodes(['A', 'B b'], ['A', 'B b'],
|
|
51 ignore_space_changes=0)
|
|
52 self.assertEqual(('equal', 0, 1, 0, 1), opcodes.next())
|
|
53 self.assertEqual(('replace', 1, 2, 1, 2), opcodes.next())
|
|
54
|
|
55 opcodes = diff._get_opcodes(['A', 'B b'], ['A', 'B b'],
|
|
56 ignore_space_changes=1)
|
|
57 self.assertEqual(('equal', 0, 2, 0, 2), opcodes.next())
|
|
58
|
|
59 def test_case_changes(self):
|
|
60 opcodes = diff._get_opcodes(['A', 'B b'], ['A', 'B B'],
|
|
61 ignore_case=0)
|
|
62 self.assertEqual(('equal', 0, 1, 0, 1), opcodes.next())
|
|
63 self.assertEqual(('replace', 1, 2, 1, 2), opcodes.next())
|
|
64
|
|
65 opcodes = diff._get_opcodes(['A', 'B b'], ['A', 'B B'],
|
|
66 ignore_case=1)
|
|
67 self.assertEqual(('equal', 0, 2, 0, 2), opcodes.next())
|
|
68
|
|
69 def test_space_and_case_changes(self):
|
|
70 opcodes = diff._get_opcodes(['A', 'B b'], ['A', 'B B'],
|
|
71 ignore_case=0, ignore_space_changes=0)
|
|
72 self.assertEqual(('equal', 0, 1, 0, 1), opcodes.next())
|
|
73 self.assertEqual(('replace', 1, 2, 1, 2), opcodes.next())
|
|
74
|
|
75 opcodes = diff._get_opcodes(['A', 'B b'], ['A', 'B B'],
|
|
76 ignore_case=1, ignore_space_changes=1)
|
|
77 self.assertEqual(('equal', 0, 2, 0, 2), opcodes.next())
|
|
78
|
|
79 def test_grouped_opcodes_context1(self):
|
|
80 opcodes = diff._get_opcodes(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
|
|
81 ['A', 'B', 'C', 'd', 'e', 'f', 'G', 'H'])
|
|
82 groups = diff._group_opcodes(opcodes, n=1)
|
|
83 group = groups.next()
|
|
84 self.assertEqual(('equal', 2, 3, 2, 3), group[0])
|
|
85 self.assertEqual(('replace', 3, 6, 3, 6), group[1])
|
|
86 self.assertEqual(('equal', 6, 7, 6, 7), group[2])
|
|
87
|
|
88 def test_grouped_opcodes_insert_blank_line_at_top(self):
|
|
89 """
|
|
90 Regression test for #2090. Make sure that the equal block following an
|
|
91 insert at the top of a file is correct.
|
|
92 """
|
|
93 opcodes = diff._get_opcodes(['B', 'C', 'D', 'E', 'F', 'G'],
|
|
94 ['A', 'B', 'C', 'D', 'E', 'F', 'G'])
|
|
95 groups = diff._group_opcodes(opcodes, n=3)
|
|
96 self.assertEqual([('insert', 0, 0, 0, 1), ('equal', 0, 3, 1, 4)],
|
|
97 groups.next())
|
|
98
|
|
99
|
|
100 def suite():
|
|
101 return unittest.makeSuite(DiffTestCase, 'test')
|
|
102
|
|
103 if __name__ == '__main__':
|
|
104 unittest.main()
|