# HG changeset patch # User Augie Fackler # Date 1229046576 21600 # Node ID 40474f6c1f846314a624067f7933bdebfa9abb3c # Parent 904a4b08f70fe9f12ae70f366a5920de3aababb2 diff_cmd: more robust, add tests. diff --git a/diff_cmd.py b/diff_cmd.py --- a/diff_cmd.py +++ b/diff_cmd.py @@ -37,6 +37,13 @@ def diff_command(ui, repo, hg_repo_path, if o_r: parent = repo[o_r[-1]].parents()[0] base_rev, _junk = svn_commit_hashes[parent.node()] - it = patch.diff(repo, parent.node(), None, - opts=patch.diffopts(ui, opts)) + it = patch.diff(repo, parent.node(), None, + opts=patch.diffopts(ui, opts={'git': True, + 'show_function': False, + 'ignore_all_space': False, + 'ignore_space_change': False, + 'ignore_blank_lines': False, + 'unified': True, + 'text': False, + })) ui.write(filterdiff(''.join(it), base_rev)) diff --git a/tests/test_diff.py b/tests/test_diff.py new file mode 100644 --- /dev/null +++ b/tests/test_diff.py @@ -0,0 +1,34 @@ +from mercurial import ui + +import diff_cmd + +import test_util + +expected_diff_output = '''Index: alpha +=================================================================== +--- alpha\t(revision 3) ++++ alpha\t(working copy) +@@ -1,1 +1,3 @@ +-file: alpha ++alpha ++ ++added line +Index: foo +=================================================================== +new file mode 100644 +--- foo\t(revision 0) ++++ foo\t(working copy) +@@ -0,0 +1,1 @@ ++This is missing a newline. +\ No newline at end of file +''' + +class DiffTests(test_util.TestBase): + def test_diff_output(self): + self._load_fixture_and_fetch('two_revs.svndump') + self.commitchanges([('foo', 'foo', 'This is missing a newline.'), + ('alpha', 'alpha', 'alpha\n\nadded line\n'), + ]) + u = ui.ui() + diff_cmd.diff_command(u, self.repo, self.wc_path) + self.assertEqual(u.stream.getvalue(), expected_diff_output) diff --git a/tests/test_fetch_command.py b/tests/test_fetch_command.py --- a/tests/test_fetch_command.py +++ b/tests/test_fetch_command.py @@ -8,11 +8,6 @@ import test_util class TestBasicRepoLayout(test_util.TestBase): - def _load_fixture_and_fetch(self, fixture_name, subdir='', stupid=False): - return test_util.load_fixture_and_fetch(fixture_name, self.repo_path, - self.wc_path, subdir=subdir, - stupid=stupid) - def test_fresh_fetch_single_rev(self): repo = self._load_fixture_and_fetch('single_rev.svndump') self.assertEqual(node.hex(repo['tip'].node()), diff --git a/tests/test_util.py b/tests/test_util.py --- a/tests/test_util.py +++ b/tests/test_util.py @@ -80,6 +80,9 @@ class MockUI(object): def warn(self, *args): self.stream.write(*args) + def write(self, *args): + self.stream.write(*args) + def __getattr__(self, attr): return getattr(self.inner_ui, attr) @@ -98,6 +101,11 @@ class TestBase(unittest.TestCase): os.chdir(self.oldwd) ui.ui = self._real_ui + def _load_fixture_and_fetch(self, fixture_name, subdir='', stupid=False): + return load_fixture_and_fetch(fixture_name, self.repo_path, + self.wc_path, subdir=subdir, + stupid=stupid) + # define this as a property so that it reloads anytime we need it @property def repo(self):