diff --git a/rhodecode/tests/models/test_diff_parsers.py b/rhodecode/tests/models/test_diff_parsers.py --- a/rhodecode/tests/models/test_diff_parsers.py +++ b/rhodecode/tests/models/test_diff_parsers.py @@ -3,84 +3,249 @@ import os import unittest from rhodecode.tests import * from rhodecode.lib.diffs import DiffProcessor, NEW_FILENODE, DEL_FILENODE, \ - MOD_FILENODE, RENAMED_FILENODE, CHMOD_FILENODE + MOD_FILENODE, RENAMED_FILENODE, CHMOD_FILENODE, BIN_FILENODE dn = os.path.dirname FIXTURES = os.path.join(dn(dn(os.path.abspath(__file__))), 'fixtures') DIFF_FIXTURES = { 'hg_diff_add_single_binary_file.diff': [ - (u'US Warszawa.jpg', 'A', ['b', NEW_FILENODE]), + ('US Warszawa.jpg', 'A', + {'added': 0, + 'deleted': 0, + 'binary': True, + 'ops': {NEW_FILENODE: 'new file 100755', + BIN_FILENODE: 'binary diff not shown'}}), ], 'hg_diff_mod_single_binary_file.diff': [ - (u'US Warszawa.jpg', 'M', ['b', MOD_FILENODE]), + ('US Warszawa.jpg', 'M', + {'added': 0, + 'deleted': 0, + 'binary': True, + 'ops': {MOD_FILENODE: 'modified file', + BIN_FILENODE: 'binary diff not shown'}}), + ], + + 'hg_diff_mod_single_file_and_rename_and_chmod.diff': [ + ('README', 'M', + {'added': 3, + 'deleted': 0, + 'binary': False, + 'ops': {MOD_FILENODE: 'modified file', + RENAMED_FILENODE: 'file renamed from README.rst to README', + CHMOD_FILENODE: 'modified file chmod 100755 => 100644'}}), + ], + 'hg_diff_rename_and_chmod_file.diff': [ + ('README', 'M', + {'added': 3, + 'deleted': 0, + 'binary': False, + 'ops': {MOD_FILENODE: 'modified file', + BIN_FILENODE: 'binary diff not shown'}}), ], 'hg_diff_del_single_binary_file.diff': [ - (u'US Warszawa.jpg', 'D', ['b', DEL_FILENODE]), + ('US Warszawa.jpg', 'D', + {'added': 0, + 'deleted': 0, + 'binary': True, + 'ops': {DEL_FILENODE: 'deleted file', + BIN_FILENODE: 'binary diff not shown'}}), + ], + 'hg_diff_chmod_and_mod_single_binary_file.diff': [ + ('gravatar.png', 'M', + {'added': 0, + 'deleted': 0, + 'binary': True, + 'ops': {CHMOD_FILENODE: 'modified file chmod 100644 => 100755', + BIN_FILENODE: 'binary diff not shown'}}), + ], + 'hg_diff_chmod.diff': [ + ('file', 'M', + {'added': 0, + 'deleted': 0, + 'binary': True, + 'ops': {CHMOD_FILENODE: 'modified file chmod 100755 => 100644'}}), + ], + 'hg_diff_rename_file.diff': [ + ('file_renamed', 'M', + {'added': 0, + 'deleted': 0, + 'binary': True, + 'ops': {RENAMED_FILENODE: 'file renamed from file to file_renamed'}}), + ], + 'hg_diff_rename_and_chmod_file.diff': [ + ('README', 'M', + {'added': 0, + 'deleted': 0, + 'binary': True, + 'ops': {CHMOD_FILENODE: 'modified file chmod 100644 => 100755', + RENAMED_FILENODE: 'file renamed from README.rst to README'}}), ], 'hg_diff_binary_and_normal.diff': [ - (u'img/baseline-10px.png', 'A', ['b', NEW_FILENODE]), - (u'js/jquery/hashgrid.js', 'A', [340, 0]), - (u'index.html', 'M', [3, 2]), - (u'less/docs.less', 'M', [34, 0]), - (u'less/scaffolding.less', 'M', [1, 3]), - (u'readme.markdown', 'M', [1, 10]), - (u'img/baseline-20px.png', 'D', ['b', DEL_FILENODE]), - (u'js/global.js', 'D', [0, 75]) - ], - 'hg_diff_chmod.diff': [ - (u'file', 'M', ['b', CHMOD_FILENODE]), - ], - 'hg_diff_rename_file.diff': [ - (u'file_renamed', 'M', ['b', RENAMED_FILENODE]), + ('img/baseline-10px.png', 'A', + {'added': 0, + 'deleted': 0, + 'binary': True, + 'ops': {NEW_FILENODE: 'new file 100644', + BIN_FILENODE: 'binary diff not shown'}}), + ('js/jquery/hashgrid.js', 'A', + {'added': 340, + 'deleted': 0, + 'binary': False, + 'ops': {NEW_FILENODE: 'new file 100755'}}), + ('index.html', 'M', + {'added': 3, + 'deleted': 2, + 'binary': False, + 'ops': {MOD_FILENODE: 'modified file'}}), + ('less/docs.less', 'M', + {'added': 34, + 'deleted': 0, + 'binary': False, + 'ops': {MOD_FILENODE: 'modified file'}}), + ('less/scaffolding.less', 'M', + {'added': 1, + 'deleted': 3, + 'binary': False, + 'ops': {MOD_FILENODE: 'modified file'}}), + ('readme.markdown', 'M', + {'added': 1, + 'deleted': 10, + 'binary': False, + 'ops': {MOD_FILENODE: 'modified file'}}), + ('img/baseline-20px.png', 'D', + {'added': 0, + 'deleted': 0, + 'binary': True, + 'ops': {DEL_FILENODE: 'deleted file', + BIN_FILENODE: 'binary diff not shown'}}), + ('js/global.js', 'D', + {'added': 0, + 'deleted': 75, + 'binary': False, + 'ops': {DEL_FILENODE: 'deleted file'}}) ], 'git_diff_chmod.diff': [ - (u'work-horus.xls', 'M', ['b', CHMOD_FILENODE]), + ('work-horus.xls', 'M', + {'added': 0, + 'deleted': 0, + 'binary': True, + 'ops': {CHMOD_FILENODE: 'modified file chmod 100644 => 100755'}}) ], 'git_diff_rename_file.diff': [ - (u'file.xls', 'M', ['b', RENAMED_FILENODE]), + ('file.xls', 'M', + {'added': 0, + 'deleted': 0, + 'binary': True, + 'ops': {RENAMED_FILENODE: 'file renamed from work-horus.xls to file.xls'}}) ], 'git_diff_mod_single_binary_file.diff': [ - ('US Warszawa.jpg', 'M', ['b', MOD_FILENODE]) - + ('US Warszawa.jpg', 'M', + {'added': 0, + 'deleted': 0, + 'binary': True, + 'ops': {MOD_FILENODE: 'modified file', + BIN_FILENODE: 'binary diff not shown'}}) ], 'git_diff_binary_and_normal.diff': [ - (u'img/baseline-10px.png', 'A', ['b', NEW_FILENODE]), - (u'js/jquery/hashgrid.js', 'A', [340, 0]), - (u'index.html', 'M', [3, 2]), - (u'less/docs.less', 'M', [34, 0]), - (u'less/scaffolding.less', 'M', [1, 3]), - (u'readme.markdown', 'M', [1, 10]), - (u'img/baseline-20px.png', 'D', ['b', DEL_FILENODE]), - (u'js/global.js', 'D', [0, 75]) + ('img/baseline-10px.png', 'A', + {'added': 0, + 'deleted': 0, + 'binary': True, + 'ops': {NEW_FILENODE: 'new file 100644', + BIN_FILENODE: 'binary diff not shown'}}), + ('js/jquery/hashgrid.js', 'A', + {'added': 340, + 'deleted': 0, + 'binary': False, + 'ops': {NEW_FILENODE: 'new file 100755'}}), + ('index.html', 'M', + {'added': 3, + 'deleted': 2, + 'binary': False, + 'ops': {MOD_FILENODE: 'modified file'}}), + ('less/docs.less', 'M', + {'added': 34, + 'deleted': 0, + 'binary': False, + 'ops': {MOD_FILENODE: 'modified file'}}), + ('less/scaffolding.less', 'M', + {'added': 1, + 'deleted': 3, + 'binary': False, + 'ops': {MOD_FILENODE: 'modified file'}}), + ('readme.markdown', 'M', + {'added': 1, + 'deleted': 10, + 'binary': False, + 'ops': {MOD_FILENODE: 'modified file'}}), + ('img/baseline-20px.png', 'D', + {'added': 0, + 'deleted': 0, + 'binary': True, + 'ops': {DEL_FILENODE: 'deleted file', + BIN_FILENODE: 'binary diff not shown'}}), + ('js/global.js', 'D', + {'added': 0, + 'deleted': 75, + 'binary': False, + 'ops': {DEL_FILENODE: 'deleted file'}}), ], 'diff_with_diff_data.diff': [ - (u'vcs/backends/base.py', 'M', [18, 2]), - (u'vcs/backends/git/repository.py', 'M', [46, 15]), - (u'vcs/backends/hg.py', 'M', [22, 3]), - (u'vcs/tests/test_git.py', 'M', [5, 5]), - (u'vcs/tests/test_repository.py', 'M', [174, 2]) + ('vcs/backends/base.py', 'M', + {'added': 18, + 'deleted': 2, + 'binary': False, + 'ops': {MOD_FILENODE: 'modified file'}}), + ('vcs/backends/git/repository.py', 'M', + {'added': 46, + 'deleted': 15, + 'binary': False, + 'ops': {MOD_FILENODE: 'modified file'}}), + ('vcs/backends/hg.py', 'M', + {'added': 22, + 'deleted': 3, + 'binary': False, + 'ops': {MOD_FILENODE: 'modified file'}}), + ('vcs/tests/test_git.py', 'M', + {'added': 5, + 'deleted': 5, + 'binary': False, + 'ops': {MOD_FILENODE: 'modified file'}}), + ('vcs/tests/test_repository.py', 'M', + {'added': 174, + 'deleted': 2, + 'binary': False, + 'ops': {MOD_FILENODE: 'modified file'}}), ], -# 'large_diff.diff': [ -# -# ], - +# 'large_diff.diff': [ +# ('.hgignore', 'A', {'deleted': 0, 'binary': False, 'added': 3, 'ops': {1: 'new file 100644'}}), +# ('MANIFEST.in', 'A', {'deleted': 0, 'binary': False, 'added': 3, 'ops': {1: 'new file 100644'}}), +# ('README.txt', 'A', {'deleted': 0, 'binary': False, 'added': 19, 'ops': {1: 'new file 100644'}}), +# ('development.ini', 'A', {'deleted': 0, 'binary': False, 'added': 116, 'ops': {1: 'new file 100644'}}), +# ('docs/index.txt', 'A', {'deleted': 0, 'binary': False, 'added': 19, 'ops': {1: 'new file 100644'}}), +# ('ez_setup.py', 'A', {'deleted': 0, 'binary': False, 'added': 276, 'ops': {1: 'new file 100644'}}), +# ('hgapp.py', 'A', {'deleted': 0, 'binary': False, 'added': 26, 'ops': {1: 'new file 100644'}}), +# ('hgwebdir.config', 'A', {'deleted': 0, 'binary': False, 'added': 21, 'ops': {1: 'new file 100644'}}), +# ('pylons_app.egg-info/PKG-INFO', 'A', {'deleted': 0, 'binary': False, 'added': 10, 'ops': {1: 'new file 100644'}}), +# ('pylons_app.egg-info/SOURCES.txt', 'A', {'deleted': 0, 'binary': False, 'added': 33, 'ops': {1: 'new file 100644'}}), +# ('pylons_app.egg-info/dependency_links.txt', 'A', {'deleted': 0, 'binary': False, 'added': 1, 'ops': {1: 'new file 100644'}}), +# #TODO: +# ], } -def _diff_checker(fixture): - with open(os.path.join(FIXTURES, fixture)) as f: - diff = f.read() +class DiffLibTest(unittest.TestCase): + + @parameterized.expand([(x,) for x in DIFF_FIXTURES]) + def test_diff(self, diff_fixture): - diff_proc = DiffProcessor(diff) - diff_proc_d = diff_proc.prepare() - data = [(x['filename'], x['operation'], x['stats']) for x in diff_proc_d] - expected_data = DIFF_FIXTURES[fixture] + with open(os.path.join(FIXTURES, diff_fixture)) as f: + diff = f.read() - assert expected_data == data - - -def test_parse_diff(): - for fixture in DIFF_FIXTURES: - yield _diff_checker, fixture + diff_proc = DiffProcessor(diff) + diff_proc_d = diff_proc.prepare() + data = [(x['filename'], x['operation'], x['stats']) for x in diff_proc_d] + expected_data = DIFF_FIXTURES[diff_fixture] + self.assertListEqual(expected_data, data)