win32/install.iss: use "Git Cola" as the app and group name
[git-cola.git] / test / diffparse_test.py
blobb9cdb888f1a25c3e45c5213a0d2c2a9de7bda951
1 from __future__ import absolute_import, division, unicode_literals
3 import unittest
5 from cola import core
6 from cola.diffparse import _parse_range_str, DiffParser
8 from test import helper
11 class ParseDiffTestCase(unittest.TestCase):
13 def test_diff(self):
14 fixture_path = helper.fixture('diff.txt')
15 parser = DiffParser('cola/diffparse.py', core.read(fixture_path))
16 hunks = parser.hunks
18 self.assertEqual(len(hunks), 3)
19 self.assertEqual(hunks[0].first_line_idx, 0)
20 self.assertEqual(len(hunks[0].lines), 23)
21 self.assertEqual(
22 hunks[0].lines[0],
23 '@@ -6,10 +6,21 @@ from cola import gitcmds')
24 self.assertEqual(
25 hunks[0].lines[1],
26 ' from cola import gitcfg')
27 self.assertEqual(hunks[0].lines[2], ' ')
28 self.assertEqual(hunks[0].lines[3], ' ')
29 self.assertEqual(hunks[0].lines[4], '+class DiffSource(object):')
30 self.assertEqual(
31 hunks[0].lines[-1],
32 " self._header_start_re = re.compile('^@@ -(\d+)"
33 " \+(\d+),(\d+) @@.*')")
35 self.assertEqual(hunks[1].first_line_idx, 23)
36 self.assertEqual(len(hunks[1].lines), 18)
37 self.assertEqual(
38 hunks[1].lines[0],
39 '@@ -29,13 +40,11 @@ class DiffParser(object):')
40 self.assertEqual(
41 hunks[1].lines[1],
42 ' self.diff_sel = []')
43 self.assertEqual(
44 hunks[1].lines[2],
45 ' self.selected = []')
46 self.assertEqual(
47 hunks[1].lines[3],
48 ' self.filename = filename')
49 self.assertEqual(
50 hunks[1].lines[4],
51 '+ self.diff_source = diff_source or DiffSource()')
52 self.assertEqual(
53 hunks[1].lines[-1],
54 ' self.header = header')
56 self.assertEqual(hunks[2].first_line_idx, 41)
57 self.assertEqual(len(hunks[2].lines), 16)
58 self.assertEqual(
59 hunks[2].lines[0],
60 '@@ -43,11 +52,10 @@ class DiffParser(object):')
61 self.assertEqual(
62 hunks[2].lines[-1],
63 ' """Writes a new diff corresponding to the user\'s'
64 ' selection."""')
66 def test_diff_at_start(self):
67 fixture_path = helper.fixture('diff-start.txt')
68 parser = DiffParser('foo bar/a', core.read(fixture_path))
69 hunks = parser.hunks
71 self.assertEqual(hunks[0].lines[0], '@@ -1 +1,4 @@')
72 self.assertEqual(hunks[-1].lines[-1], '+c')
73 self.assertEqual(hunks[0].old_start, 1)
74 self.assertEqual(hunks[0].old_count, 1)
75 self.assertEqual(hunks[0].new_start, 1)
76 self.assertEqual(hunks[0].new_count, 4)
77 self.assertEqual(parser.generate_patch(1, 3),
78 '--- a/foo bar/a\n'
79 '+++ b/foo bar/a\n'
80 '@@ -1 +1,3 @@\n'
81 ' bar\n'
82 '+a\n'
83 '+b\n')
84 self.assertEqual(parser.generate_patch(0, 4),
85 '--- a/foo bar/a\n'
86 '+++ b/foo bar/a\n'
87 '@@ -1 +1,4 @@\n'
88 ' bar\n'
89 '+a\n'
90 '+b\n'
91 '+c\n')
93 def test_diff_at_end(self):
94 fixture_path = helper.fixture('diff-end.txt')
95 parser = DiffParser('rijndael.js', core.read(fixture_path))
96 hunks = parser.hunks
98 self.assertEqual(hunks[0].lines[0], '@@ -1,39 +1 @@')
99 self.assertEqual(
100 hunks[-1].lines[-1],
101 "+module.exports = require('./build/Release/rijndael');")
102 self.assertEqual(hunks[0].old_start, 1)
103 self.assertEqual(hunks[0].old_count, 39)
104 self.assertEqual(hunks[0].new_start, 1)
105 self.assertEqual(hunks[0].new_count, 1)
107 def test_diff_that_empties_file(self):
108 fixture_path = helper.fixture('diff-empty.txt')
109 parser = DiffParser('filename', core.read(fixture_path))
110 hunks = parser.hunks
112 self.assertEqual(hunks[0].lines[0], '@@ -1,2 +0,0 @@')
113 self.assertEqual(hunks[-1].lines[-1], '-second')
114 self.assertEqual(hunks[0].old_start, 1)
115 self.assertEqual(hunks[0].old_count, 2)
116 self.assertEqual(hunks[0].new_start, 0)
117 self.assertEqual(hunks[0].new_count, 0)
118 self.assertEqual(parser.generate_patch(1, 1),
119 '--- a/filename\n'
120 '+++ b/filename\n'
121 '@@ -1,2 +1 @@\n'
122 '-first\n'
123 ' second\n')
124 self.assertEqual(parser.generate_patch(0, 2),
125 '--- a/filename\n'
126 '+++ b/filename\n'
127 '@@ -1,2 +0,0 @@\n'
128 '-first\n'
129 '-second\n')
132 class ParseRangeStrTestCase(unittest.TestCase):
133 def test_parse_range_str(self):
134 start, count = _parse_range_str('1,2')
135 self.assertEqual(start, 1)
136 self.assertEqual(count, 2)
138 def test_parse_range_str_single_line(self):
139 start, count = _parse_range_str('2')
140 self.assertEqual(start, 2)
141 self.assertEqual(count, 1)
143 def test_parse_range_str_empty(self):
144 start, count = _parse_range_str('0,0')
145 self.assertEqual(start, 0)
146 self.assertEqual(count, 0)
149 if __name__ == '__main__':
150 unittest.main()