def compare_to(self, other, column, context_lines=4, template=False): """Compare the model with another revision. Special version to enable highlighting between files. :param other: The other model instance to compare with. :param column: A string what column to compare. :param context_lines: How many additional lines to show on the udiff. :param template: Either or not to prepare the udiff for templates use. """ differ = generate_highlighted_udiff if template else generate_udiff generator = partial(differ, old=getattr(self, column, u''), new=getattr(other, column, u''), old_title=unicode(self), new_title=unicode(other), context_lines=context_lines) if template: udiff = generator(old_lang=self.language, new_lang=other.language) else: udiff = generator() if template: diff = prepare_udiff(udiff, True) return diff and diff[0] or None return udiff
def test_diffrenderer(): a = u'Paul\nJust changed\nA bit' b = u'Paul\nJast changed\nA bit' udiff = generate_udiff(a, b) expected = [{ 'chunks': [[ { 'new_lineno': 1, 'action': 'unmod', 'line': u'Paul', 'old_lineno': 1 }, { 'new_lineno': u'', 'action': 'del', 'line': u'J<del>u</del>st changed', 'old_lineno': 2 }, { 'new_lineno': 2, 'action': 'add', 'line': u'J<ins>a</ins>st changed', 'old_lineno': u'' }, { 'new_lineno': 3, 'action': 'unmod', 'line': u'A bit', 'old_lineno': 3 } ]], 'old_revision': None, 'new_revision': None, 'filename': None }] eq_(DiffRenderer(udiff, True).prepare(), expected) # test that diff renderer can extract the hg revision and filename # This tests also for some broken udiff workarounds. udiff = u''' Those are lines that are not counted --- a/test1.py Tue May 25 22:04:11 2010 +0200 +++ b/test1.py Thu May 27 21:08:19 2010 +0200 @@ -1,3 +1,3 @@ Paul -Just changed +Jast changed A bit''' expected[0]['old_revision'] = u'Tue May 25 22:04:11 2010 +0200' expected[0]['new_revision'] = u'Thu May 27 21:08:19 2010 +0200' expected[0]['filename'] = u'a/test1.py' eq_(DiffRenderer(udiff, True).prepare(), expected) # prepare_udiff does the same as DiffRenderer(udiff).prepare() eq_(prepare_udiff(udiff, True), expected)
def test_diffrenderer(): a = u'Paul\nJust changed\nA bit' b = u'Paul\nJast changed\nA bit' udiff = generate_udiff(a, b) expected = [{ 'chunks': [[{ 'new_lineno': 1, 'action': 'unmod', 'line': u'Paul', 'old_lineno': 1 }, { 'new_lineno': u'', 'action': 'del', 'line': u'J<del>u</del>st changed', 'old_lineno': 2 }, { 'new_lineno': 2, 'action': 'add', 'line': u'J<ins>a</ins>st changed', 'old_lineno': u'' }, { 'new_lineno': 3, 'action': 'unmod', 'line': u'A bit', 'old_lineno': 3 }]], 'old_revision': None, 'new_revision': None, 'filename': None }] eq_(DiffRenderer(udiff, True).prepare(), expected) # test that diff renderer can extract the hg revision and filename # This tests also for some broken udiff workarounds. udiff = u''' Those are lines that are not counted --- a/test1.py Tue May 25 22:04:11 2010 +0200 +++ b/test1.py Thu May 27 21:08:19 2010 +0200 @@ -1,3 +1,3 @@ Paul -Just changed +Jast changed A bit''' expected[0]['old_revision'] = u'Tue May 25 22:04:11 2010 +0200' expected[0]['new_revision'] = u'Thu May 27 21:08:19 2010 +0200' expected[0]['filename'] = u'a/test1.py' eq_(DiffRenderer(udiff, True).prepare(), expected) # prepare_udiff does the same as DiffRenderer(udiff).prepare() eq_(prepare_udiff(udiff, True), expected)