completion: apply flake8 suggestions
[git-cola.git] / test / diffparse_test.py
blob855ae0b8483bcead5cd9ed32d20990ed2b9e09aa
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):
12 def test_diff(self):
13 fixture_path = helper.fixture('diff.txt')
14 parser = DiffParser('cola/diffparse.py', core.read(fixture_path))
15 hunks = parser.hunks
17 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(hunks[0].lines[0],
22 '@@ -6,10 +6,21 @@ from cola import gitcmds')
23 self.assertEqual(hunks[0].lines[1],
24 ' from cola import gitcfg')
25 self.assertEqual(hunks[0].lines[2],
26 ' ')
27 self.assertEqual(hunks[0].lines[3],
28 ' ')
29 self.assertEqual(hunks[0].lines[4],
30 '+class DiffSource(object):')
31 self.assertEqual(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(hunks[1].lines[0],
38 '@@ -29,13 +40,11 @@ class DiffParser(object):')
39 self.assertEqual(hunks[1].lines[1],
40 ' self.diff_sel = []')
41 self.assertEqual(hunks[1].lines[2],
42 ' self.selected = []')
43 self.assertEqual(hunks[1].lines[3],
44 ' self.filename = filename')
45 self.assertEqual(hunks[1].lines[4],
46 '+ self.diff_source = diff_source or DiffSource()')
47 self.assertEqual(hunks[1].lines[-1],
48 ' self.header = header')
50 self.assertEqual(hunks[2].first_line_idx, 41)
51 self.assertEqual(len(hunks[2].lines), 16)
52 self.assertEqual(hunks[2].lines[0],
53 '@@ -43,11 +52,10 @@ class DiffParser(object):')
54 self.assertEqual(hunks[2].lines[-1],
55 ' """Writes a new diff corresponding to the user\'s'
56 ' selection."""')
58 def test_diff_at_start(self):
59 fixture_path = helper.fixture('diff-start.txt')
60 parser = DiffParser('foo bar/a', core.read(fixture_path))
61 hunks = parser.hunks
63 self.assertEqual(hunks[0].lines[0], '@@ -1 +1,4 @@')
64 self.assertEqual(hunks[-1].lines[-1], '+c')
65 self.assertEqual(hunks[0].old_start, 1)
66 self.assertEqual(hunks[0].old_count, 1)
67 self.assertEqual(hunks[0].new_start, 1)
68 self.assertEqual(hunks[0].new_count, 4)
69 self.assertEqual(parser.generate_patch(1, 3),
70 '--- a/foo bar/a\n'
71 '+++ b/foo bar/a\n'
72 '@@ -1 +1,3 @@\n'
73 ' bar\n'
74 '+a\n'
75 '+b\n')
76 self.assertEqual(parser.generate_patch(0, 4),
77 '--- a/foo bar/a\n'
78 '+++ b/foo bar/a\n'
79 '@@ -1 +1,4 @@\n'
80 ' bar\n'
81 '+a\n'
82 '+b\n'
83 '+c\n')
85 def test_diff_at_end(self):
86 fixture_path = helper.fixture('diff-end.txt')
87 parser = DiffParser('rijndael.js', core.read(fixture_path))
88 hunks = parser.hunks
90 self.assertEqual(hunks[0].lines[0],
91 '@@ -1,39 +1 @@')
92 self.assertEqual(hunks[-1].lines[-1],
93 "+module.exports = require('./build/Release/rijndael');")
94 self.assertEqual(hunks[0].old_start, 1)
95 self.assertEqual(hunks[0].old_count, 39)
96 self.assertEqual(hunks[0].new_start, 1)
97 self.assertEqual(hunks[0].new_count, 1)
99 def test_diff_that_empties_file(self):
100 fixture_path = helper.fixture('diff-empty.txt')
101 parser = DiffParser('filename', core.read(fixture_path))
102 hunks = parser.hunks
104 self.assertEqual(hunks[0].lines[0],
105 '@@ -1,2 +0,0 @@')
106 self.assertEqual(hunks[-1].lines[-1],
107 '-second')
108 self.assertEqual(hunks[0].old_start, 1)
109 self.assertEqual(hunks[0].old_count, 2)
110 self.assertEqual(hunks[0].new_start, 0)
111 self.assertEqual(hunks[0].new_count, 0)
112 self.assertEqual(parser.generate_patch(1, 1),
113 '--- a/filename\n'
114 '+++ b/filename\n'
115 '@@ -1,2 +1 @@\n'
116 '-first\n'
117 ' second\n')
118 self.assertEqual(parser.generate_patch(0, 2),
119 '--- a/filename\n'
120 '+++ b/filename\n'
121 '@@ -1,2 +0,0 @@\n'
122 '-first\n'
123 '-second\n')
126 class ParseRangeStrTestCase(unittest.TestCase):
127 def test_parse_range_str(self):
128 start, count = _parse_range_str('1,2')
129 self.assertEqual(start, 1)
130 self.assertEqual(count, 2)
132 def test_parse_range_str_single_line(self):
133 start, count = _parse_range_str('2')
134 self.assertEqual(start, 2)
135 self.assertEqual(count, 1)
137 def test_parse_range_str_empty(self):
138 start, count = _parse_range_str('0,0')
139 self.assertEqual(start, 0)
140 self.assertEqual(count, 0)
143 if __name__ == '__main__':
144 unittest.main()