##// END OF EJS Templates
debugcommands: add debugpickmergetool to examine which merge tool is chosen...
debugcommands: add debugpickmergetool to examine which merge tool is chosen Before this patch, there is no convenient way to know which merge tool is chosen for each managed files without actual merging.

File last commit:

r32202:0c73634d default
r32256:9bc36198 default
Show More
test-bdiff.py
149 lines | 5.1 KiB | text/x-python | PythonLexer
Robert Stanca
py3: use print_function in test-bdiff.py
r28734 from __future__ import absolute_import, print_function
Augie Fackler
tests: update more of test-bdiff.py to use unittest (part 2 of 4)
r30592 import collections
Martin Geisler
removed unused imports
r8656 import struct
Augie Fackler
tests: migrate test-bdiff.py to use unittest (part 1 of 4)...
r30591 import unittest
Robert Stanca
py3: use absolute_import in test-bdiff.py
r28733 from mercurial import (
Yuya Nishihara
bdiff: proxy through mdiff module...
r32201 mdiff,
Robert Stanca
py3: use absolute_import in test-bdiff.py
r28733 )
Martin Geisler
tests: renamed Python tests to .py
r8449
Augie Fackler
tests: update more of test-bdiff.py to use unittest (part 2 of 4)
r30592 class diffreplace(
collections.namedtuple('diffreplace', 'start end from_ to')):
def __repr__(self):
return 'diffreplace(%r, %r, %r, %r)' % self
Augie Fackler
tests: migrate test-bdiff.py to use unittest (part 1 of 4)...
r30591 class BdiffTests(unittest.TestCase):
Martin Geisler
tests: renamed Python tests to .py
r8449
Augie Fackler
tests: migrate test-bdiff.py to use unittest (part 1 of 4)...
r30591 def assert_bdiff_applies(self, a, b):
Yuya Nishihara
bdiff: proxy through mdiff module...
r32201 d = mdiff.textdiff(a, b)
Augie Fackler
tests: migrate test-bdiff.py to use unittest (part 1 of 4)...
r30591 c = a
if d:
Yuya Nishihara
mpatch: proxy through mdiff module...
r32202 c = mdiff.patches(a, [d])
Augie Fackler
tests: migrate test-bdiff.py to use unittest (part 1 of 4)...
r30591 self.assertEqual(
c, b, ("bad diff+patch result from\n %r to\n "
"%r: \nbdiff: %r\npatched: %r" % (a, b, d, c[:200])))
def assert_bdiff(self, a, b):
self.assert_bdiff_applies(a, b)
self.assert_bdiff_applies(b, a)
Martin Geisler
tests: renamed Python tests to .py
r8449
Augie Fackler
tests: migrate test-bdiff.py to use unittest (part 1 of 4)...
r30591 def test_bdiff_basic(self):
cases = [
("a\nc\n\n\n\n", "a\nb\n\n\n"),
("a\nb\nc\n", "a\nc\n"),
("", ""),
("a\nb\nc", "a\nb\nc"),
("a\nb\nc\nd\n", "a\nd\n"),
("a\nb\nc\nd\n", "a\nc\ne\n"),
("a\nb\nc\n", "a\nc\n"),
("a\n", "c\na\nb\n"),
("a\n", ""),
("a\n", "b\nc\n"),
("a\n", "c\na\n"),
("", "adjfkjdjksdhfksj"),
("", "ab"),
("", "abc"),
("a", "a"),
("ab", "ab"),
("abc", "abc"),
("a\n", "a\n"),
("a\nb", "a\nb"),
]
for a, b in cases:
self.assert_bdiff(a, b)
Martin Geisler
tests: renamed Python tests to .py
r8449
Augie Fackler
tests: update more of test-bdiff.py to use unittest (part 2 of 4)
r30592 def showdiff(self, a, b):
Yuya Nishihara
bdiff: proxy through mdiff module...
r32201 bin = mdiff.textdiff(a, b)
Augie Fackler
tests: update more of test-bdiff.py to use unittest (part 2 of 4)
r30592 pos = 0
q = 0
actions = []
while pos < len(bin):
p1, p2, l = struct.unpack(">lll", bin[pos:pos + 12])
pos += 12
if p1:
actions.append(a[q:p1])
actions.append(diffreplace(p1, p2, a[p1:p2], bin[pos:pos + l]))
pos += l
q = p2
if q < len(a):
actions.append(a[q:])
return actions
def test_issue1295(self):
cases = [
("x\n\nx\n\nx\n\nx\n\nz\n", "x\n\nx\n\ny\n\nx\n\nx\n\nz\n",
['x\n\nx\n\n', diffreplace(6, 6, '', 'y\n\n'), 'x\n\nx\n\nz\n']),
("x\n\nx\n\nx\n\nx\n\nz\n", "x\n\nx\n\ny\n\nx\n\ny\n\nx\n\nz\n",
['x\n\nx\n\n',
diffreplace(6, 6, '', 'y\n\n'),
'x\n\n',
diffreplace(9, 9, '', 'y\n\n'),
'x\n\nz\n']),
]
for old, new, want in cases:
self.assertEqual(self.showdiff(old, new), want)
Augie Fackler
tests: fix test-bdiff to handle variance between pure and c bdiff code...
r30595 def test_issue1295_varies_on_pure(self):
# we should pick up abbbc. rather than bc.de as the longest match
got = self.showdiff("a\nb\nb\nb\nc\n.\nd\ne\n.\nf\n",
"a\nb\nb\na\nb\nb\nb\nc\n.\nb\nc\n.\nd\ne\nf\n")
want_c = ['a\nb\nb\n',
diffreplace(6, 6, '', 'a\nb\nb\nb\nc\n.\n'),
'b\nc\n.\nd\ne\n',
diffreplace(16, 18, '.\n', ''),
'f\n']
want_pure = [diffreplace(0, 0, '', 'a\nb\nb\n'),
'a\nb\nb\nb\nc\n.\n',
diffreplace(12, 12, '', 'b\nc\n.\n'),
'd\ne\n',
diffreplace(16, 18, '.\n', ''), 'f\n']
self.assert_(got in (want_c, want_pure),
'got: %r, wanted either %r or %r' % (
got, want_c, want_pure))
Augie Fackler
tests: update more of test-bdiff.py to use unittest (part 3 of 4)
r30593 def test_fixws(self):
cases = [
(" \ta\r b\t\n", "ab\n", 1),
(" \ta\r b\t\n", " a b\n", 0),
("", "", 1),
("", "", 0),
]
for a, b, allws in cases:
Yuya Nishihara
bdiff: proxy through mdiff module...
r32201 c = mdiff.fixws(a, allws)
Augie Fackler
tests: update more of test-bdiff.py to use unittest (part 3 of 4)
r30593 self.assertEqual(
c, b, 'fixws(%r) want %r got %r (allws=%r)' % (a, b, c, allws))
Augie Fackler
tests: finish updating test-bdiff to unittest (part 4 of 4)
r30594 def test_nice_diff_for_trivial_change(self):
self.assertEqual(self.showdiff(
''.join('<%s\n-\n' % i for i in range(5)),
''.join('>%s\n-\n' % i for i in range(5))),
[diffreplace(0, 3, '<0\n', '>0\n'),
'-\n',
diffreplace(5, 8, '<1\n', '>1\n'),
'-\n',
diffreplace(10, 13, '<2\n', '>2\n'),
'-\n',
diffreplace(15, 18, '<3\n', '>3\n'),
'-\n',
diffreplace(20, 23, '<4\n', '>4\n'),
'-\n'])
Mads Kiilerich
tests: make test-bdiff.py easier to maintain...
r30427
Augie Fackler
tests: finish updating test-bdiff to unittest (part 4 of 4)
r30594 def test_prefer_appending(self):
# 1 line to 3 lines
self.assertEqual(self.showdiff('a\n', 'a\n' * 3),
['a\n', diffreplace(2, 2, '', 'a\na\n')])
# 1 line to 5 lines
self.assertEqual(self.showdiff('a\n', 'a\n' * 5),
['a\n', diffreplace(2, 2, '', 'a\na\na\na\n')])
Mads Kiilerich
tests: explore some bdiff cases
r30428
Augie Fackler
tests: finish updating test-bdiff to unittest (part 4 of 4)
r30594 def test_prefer_removing_trailing(self):
# 3 lines to 1 line
self.assertEqual(self.showdiff('a\n' * 3, 'a\n'),
['a\n', diffreplace(2, 6, 'a\na\n', '')])
# 5 lines to 1 line
self.assertEqual(self.showdiff('a\n' * 5, 'a\n'),
['a\n', diffreplace(2, 10, 'a\na\na\na\n', '')])
Augie Fackler
tests: migrate test-bdiff.py to use unittest (part 1 of 4)...
r30591
if __name__ == '__main__':
Pulkit Goyal
test-bdiff: move import inside the function to avoid test failure...
r30931 import silenttestrunner
Augie Fackler
tests: migrate test-bdiff.py to use unittest (part 1 of 4)...
r30591 silenttestrunner.main(__name__)