##// END OF EJS Templates
tests: update more of test-bdiff.py to use unittest (part 2 of 4)
Augie Fackler -
r30592:0d8cada9 default
parent child Browse files
Show More
@@ -1,4 +1,5 b''
1 from __future__ import absolute_import, print_function
1 from __future__ import absolute_import, print_function
2 import collections
2 import struct
3 import struct
3 import unittest
4 import unittest
4
5
@@ -9,6 +10,11 b' from mercurial import ('
9 mpatch,
10 mpatch,
10 )
11 )
11
12
13 class diffreplace(
14 collections.namedtuple('diffreplace', 'start end from_ to')):
15 def __repr__(self):
16 return 'diffreplace(%r, %r, %r, %r)' % self
17
12 class BdiffTests(unittest.TestCase):
18 class BdiffTests(unittest.TestCase):
13
19
14 def assert_bdiff_applies(self, a, b):
20 def assert_bdiff_applies(self, a, b):
@@ -49,7 +55,45 b' class BdiffTests(unittest.TestCase):'
49 for a, b in cases:
55 for a, b in cases:
50 self.assert_bdiff(a, b)
56 self.assert_bdiff(a, b)
51
57
52 #issue1295
58 def showdiff(self, a, b):
59 bin = bdiff.bdiff(a, b)
60 pos = 0
61 q = 0
62 actions = []
63 while pos < len(bin):
64 p1, p2, l = struct.unpack(">lll", bin[pos:pos + 12])
65 pos += 12
66 if p1:
67 actions.append(a[q:p1])
68 actions.append(diffreplace(p1, p2, a[p1:p2], bin[pos:pos + l]))
69 pos += l
70 q = p2
71 if q < len(a):
72 actions.append(a[q:])
73 return actions
74
75 def test_issue1295(self):
76 cases = [
77 ("x\n\nx\n\nx\n\nx\n\nz\n", "x\n\nx\n\ny\n\nx\n\nx\n\nz\n",
78 ['x\n\nx\n\n', diffreplace(6, 6, '', 'y\n\n'), 'x\n\nx\n\nz\n']),
79 ("x\n\nx\n\nx\n\nx\n\nz\n", "x\n\nx\n\ny\n\nx\n\ny\n\nx\n\nz\n",
80 ['x\n\nx\n\n',
81 diffreplace(6, 6, '', 'y\n\n'),
82 'x\n\n',
83 diffreplace(9, 9, '', 'y\n\n'),
84 'x\n\nz\n']),
85 # we should pick up abbbc. rather than bc.de as the longest match
86 ("a\nb\nb\nb\nc\n.\nd\ne\n.\nf\n",
87 "a\nb\nb\na\nb\nb\nb\nc\n.\nb\nc\n.\nd\ne\nf\n",
88 ['a\nb\nb\n',
89 diffreplace(6, 6, '', 'a\nb\nb\nb\nc\n.\n'),
90 'b\nc\n.\nd\ne\n',
91 diffreplace(16, 18, '.\n', ''),
92 'f\n']),
93 ]
94 for old, new, want in cases:
95 self.assertEqual(self.showdiff(old, new), want)
96
53 def showdiff(a, b):
97 def showdiff(a, b):
54 print('showdiff(\n %r,\n %r):' % (a, b))
98 print('showdiff(\n %r,\n %r):' % (a, b))
55 bin = bdiff.bdiff(a, b)
99 bin = bdiff.bdiff(a, b)
@@ -66,14 +110,6 b' def showdiff(a, b):'
66 if q < len(a):
110 if q < len(a):
67 print('', repr(a[q:]))
111 print('', repr(a[q:]))
68
112
69 showdiff("x\n\nx\n\nx\n\nx\n\nz\n", "x\n\nx\n\ny\n\nx\n\nx\n\nz\n")
70 showdiff("x\n\nx\n\nx\n\nx\n\nz\n", "x\n\nx\n\ny\n\nx\n\ny\n\nx\n\nz\n")
71 # we should pick up abbbc. rather than bc.de as the longest match
72 showdiff("a\nb\nb\nb\nc\n.\nd\ne\n.\nf\n",
73 "a\nb\nb\na\nb\nb\nb\nc\n.\nb\nc\n.\nd\ne\nf\n")
74
75 print("done")
76
77 def testfixws(a, b, allws):
113 def testfixws(a, b, allws):
78 c = bdiff.fixws(a, allws)
114 c = bdiff.fixws(a, allws)
79 if c != b:
115 if c != b:
@@ -1,26 +1,3 b''
1 showdiff(
2 'x\n\nx\n\nx\n\nx\n\nz\n',
3 'x\n\nx\n\ny\n\nx\n\nx\n\nz\n'):
4 'x\n\nx\n\n'
5 6 6 '' -> 'y\n\n'
6 'x\n\nx\n\nz\n'
7 showdiff(
8 'x\n\nx\n\nx\n\nx\n\nz\n',
9 'x\n\nx\n\ny\n\nx\n\ny\n\nx\n\nz\n'):
10 'x\n\nx\n\n'
11 6 6 '' -> 'y\n\n'
12 'x\n\n'
13 9 9 '' -> 'y\n\n'
14 'x\n\nz\n'
15 showdiff(
16 'a\nb\nb\nb\nc\n.\nd\ne\n.\nf\n',
17 'a\nb\nb\na\nb\nb\nb\nc\n.\nb\nc\n.\nd\ne\nf\n'):
18 'a\nb\nb\n'
19 6 6 '' -> 'a\nb\nb\nb\nc\n.\n'
20 'b\nc\n.\nd\ne\n'
21 16 18 '.\n' -> ''
22 'f\n'
23 done
24 done
1 done
25 Nice diff for a trivial change:
2 Nice diff for a trivial change:
26 showdiff(
3 showdiff(
General Comments 0
You need to be logged in to leave comments. Login now