def test_diff_at_start(self): fixture_path = helper.fixture('diff-start.txt') parser = diffparse.DiffParser('foo bar/a', core.read(fixture_path)) hunks = parser.hunks self.assertEqual(hunks[0].lines[0], '@@ -1 +1,4 @@\n') self.assertEqual(hunks[-1].lines[-1], '+c\n') self.assertEqual(hunks[0].old_start, 1) self.assertEqual(hunks[0].old_count, 1) self.assertEqual(hunks[0].new_start, 1) self.assertEqual(hunks[0].new_count, 4) self.assertEqual( parser.generate_patch(1, 3), '--- a/foo bar/a\n' '+++ b/foo bar/a\n' '@@ -1 +1,3 @@\n' ' bar\n' '+a\n' '+b\n') self.assertEqual( parser.generate_patch(0, 4), '--- a/foo bar/a\n' '+++ b/foo bar/a\n' '@@ -1 +1,4 @@\n' ' bar\n' '+a\n' '+b\n' '+c\n')
def test_diff(): fixture_path = helper.fixture('diff.txt') parser = diffparse.DiffParser('cola/diffparse.py', core.read(fixture_path)) hunks = parser.hunks assert len(hunks) == 3 assert hunks[0].first_line_idx == 0 assert len(hunks[0].lines) == 23 assert hunks[0].lines[0] == '@@ -6,10 +6,21 @@ from cola import gitcmds\n' assert hunks[0].lines[1] == ' from cola import gitcfg\n' assert hunks[0].lines[2] == ' \n' assert hunks[0].lines[3] == ' \n' assert hunks[0].lines[4] == '+class DiffSource(object):\n' assert hunks[0].lines[-1] == ( r" self._header_start_re = re.compile('^@@ -(\d+)" r" \+(\d+),(\d+) @@.*')" '\n') assert hunks[1].first_line_idx == 23 assert len(hunks[1].lines) == 18 assert hunks[1].lines[ 0] == '@@ -29,13 +40,11 @@ class DiffParser(object):\n' assert hunks[1].lines[1] == ' self.diff_sel = []\n' assert hunks[1].lines[2] == ' self.selected = []\n' assert hunks[1].lines[3] == ' self.filename = filename\n' assert hunks[1].lines[4] == ( '+ self.diff_source = diff_source or DiffSource()\n') assert hunks[1].lines[-1] == ' self.header = header\n' assert hunks[2].first_line_idx == 41 assert len(hunks[2].lines) == 16 assert hunks[2].lines[ 0] == '@@ -43,11 +52,10 @@ class DiffParser(object):\n' assert hunks[2].lines[-1] == ( ' """Writes a new diff corresponding to the user\'s' ' selection."""\n')
def test_diff_file_removal(self): diff_text = """\ deleted file mode 100755 @@ -1,1 +0,0 @@ -#!/bin/sh """ parser = diffparse.DiffParser('deleted.txt', diff_text) self.assertEqual(1, len(parser.hunks)) # Selecting the first two lines generate no diff expect = None actual = parser.generate_patch(0, 1) self.assertEqual(expect, actual) # Selecting the last line should generate a line removal expect = """\ --- a/deleted.txt +++ b/deleted.txt @@ -1 +0,0 @@ -#!/bin/sh """ actual = parser.generate_patch(1, 2) self.assertEqual(expect, actual) # All three lines should map to the same hunk diff actual = parser.generate_hunk_patch(0) self.assertEqual(expect, actual) actual = parser.generate_hunk_patch(1) self.assertEqual(expect, actual) actual = parser.generate_hunk_patch(2) self.assertEqual(expect, actual)
def test_diff_that_empties_file(self): fixture_path = helper.fixture('diff-empty.txt') parser = diffparse.DiffParser('filename', core.read(fixture_path)) hunks = parser.hunks self.assertEqual(hunks[0].lines[0], '@@ -1,2 +0,0 @@\n') self.assertEqual(hunks[-1].lines[-1], '-second\n') self.assertEqual(hunks[0].old_start, 1) self.assertEqual(hunks[0].old_count, 2) self.assertEqual(hunks[0].new_start, 0) self.assertEqual(hunks[0].new_count, 0) self.assertEqual( parser.generate_patch(1, 1), '--- a/filename\n' '+++ b/filename\n' '@@ -1,2 +1 @@\n' '-first\n' ' second\n', ) self.assertEqual( parser.generate_patch(0, 2), '--- a/filename\n' '+++ b/filename\n' '@@ -1,2 +0,0 @@\n' '-first\n' '-second\n', )
def test_diff(self): fixture_path = helper.fixture('diff.txt') parser = diffparse.DiffParser( 'cola/diffparse.py', core.read(fixture_path)) hunks = parser.hunks self.assertEqual(len(hunks), 3) self.assertEqual(hunks[0].first_line_idx, 0) self.assertEqual(len(hunks[0].lines), 23) self.assertEqual( hunks[0].lines[0], '@@ -6,10 +6,21 @@ from cola import gitcmds\n') self.assertEqual( hunks[0].lines[1], ' from cola import gitcfg\n') self.assertEqual(hunks[0].lines[2], ' \n') self.assertEqual(hunks[0].lines[3], ' \n') self.assertEqual(hunks[0].lines[4], '+class DiffSource(object):\n') self.assertEqual( hunks[0].lines[-1], r" self._header_start_re = re.compile('^@@ -(\d+)" r" \+(\d+),(\d+) @@.*')" '\n') self.assertEqual(hunks[1].first_line_idx, 23) self.assertEqual(len(hunks[1].lines), 18) self.assertEqual( hunks[1].lines[0], '@@ -29,13 +40,11 @@ class DiffParser(object):\n') self.assertEqual( hunks[1].lines[1], ' self.diff_sel = []\n') self.assertEqual( hunks[1].lines[2], ' self.selected = []\n') self.assertEqual( hunks[1].lines[3], ' self.filename = filename\n') self.assertEqual( hunks[1].lines[4], '+ self.diff_source = diff_source or DiffSource()\n') self.assertEqual( hunks[1].lines[-1], ' self.header = header\n') self.assertEqual(hunks[2].first_line_idx, 41) self.assertEqual(len(hunks[2].lines), 16) self.assertEqual( hunks[2].lines[0], '@@ -43,11 +52,10 @@ class DiffParser(object):\n') self.assertEqual( hunks[2].lines[-1], ' """Writes a new diff corresponding to the user\'s' ' selection."""\n')
def test_diff_at_end(): fixture_path = helper.fixture('diff-end.txt') parser = diffparse.DiffParser('rijndael.js', core.read(fixture_path)) hunks = parser.hunks assert hunks[0].lines[0] == '@@ -1,39 +1 @@\n' assert hunks[-1].lines[-1] == ( "+module.exports = require('./build/Release/rijndael');\n") assert hunks[0].old_start == 1 assert hunks[0].old_count == 39 assert hunks[0].new_start == 1 assert hunks[0].new_count == 1
def test_diff_at_end(self): fixture_path = helper.fixture('diff-end.txt') parser = diffparse.DiffParser('rijndael.js', core.read(fixture_path)) hunks = parser.hunks self.assertEqual(hunks[0].lines[0], '@@ -1,39 +1 @@\n') self.assertEqual( hunks[-1].lines[-1], "+module.exports = require('./build/Release/rijndael');\n") self.assertEqual(hunks[0].old_start, 1) self.assertEqual(hunks[0].old_count, 39) self.assertEqual(hunks[0].new_start, 1) self.assertEqual(hunks[0].new_count, 1)
def test_diff_that_empties_file(): fixture_path = helper.fixture('diff-empty.txt') parser = diffparse.DiffParser('filename', core.read(fixture_path)) hunks = parser.hunks assert hunks[0].lines[0] == '@@ -1,2 +0,0 @@\n' assert hunks[-1].lines[-1] == '-second\n' assert hunks[0].old_start == 1 assert hunks[0].old_count == 2 assert hunks[0].new_start == 0 assert hunks[0].new_count == 0 assert parser.generate_patch(1, 1) == ('--- a/filename\n' '+++ b/filename\n' '@@ -1,2 +1 @@\n' '-first\n' ' second\n') assert parser.generate_patch(0, 2) == ('--- a/filename\n' '+++ b/filename\n' '@@ -1,2 +0,0 @@\n' '-first\n' '-second\n')
def test_diff_at_start(): fixture_path = helper.fixture('diff-start.txt') parser = diffparse.DiffParser('foo bar/a', core.read(fixture_path)) hunks = parser.hunks assert hunks[0].lines[0] == '@@ -1 +1,4 @@\n' assert hunks[-1].lines[-1] == '+c\n' assert hunks[0].old_start == 1 assert hunks[0].old_count == 1 assert hunks[0].new_start == 1 assert hunks[0].new_count == 4 assert parser.generate_patch(1, 3) == ('--- a/foo bar/a\n' '+++ b/foo bar/a\n' '@@ -1 +1,3 @@\n' ' bar\n' '+a\n' '+b\n') assert parser.generate_patch(0, 4) == ('--- a/foo bar/a\n' '+++ b/foo bar/a\n' '@@ -1 +1,4 @@\n' ' bar\n' '+a\n' '+b\n' '+c\n')