tests/test-bdiff.py
changeset 32202 ded48ad55146
parent 30931 f2ad0d804700
child 32203 0c73634d0570
equal deleted inserted replaced
32201:4462a981e8df 32202:ded48ad55146
     2 import collections
     2 import collections
     3 import struct
     3 import struct
     4 import unittest
     4 import unittest
     5 
     5 
     6 from mercurial import (
     6 from mercurial import (
     7     bdiff,
     7     mdiff,
     8     mpatch,
     8     mpatch,
     9 )
     9 )
    10 
    10 
    11 class diffreplace(
    11 class diffreplace(
    12     collections.namedtuple('diffreplace', 'start end from_ to')):
    12     collections.namedtuple('diffreplace', 'start end from_ to')):
    14         return 'diffreplace(%r, %r, %r, %r)' % self
    14         return 'diffreplace(%r, %r, %r, %r)' % self
    15 
    15 
    16 class BdiffTests(unittest.TestCase):
    16 class BdiffTests(unittest.TestCase):
    17 
    17 
    18     def assert_bdiff_applies(self, a, b):
    18     def assert_bdiff_applies(self, a, b):
    19         d = bdiff.bdiff(a, b)
    19         d = mdiff.textdiff(a, b)
    20         c = a
    20         c = a
    21         if d:
    21         if d:
    22             c = mpatch.patches(a, [d])
    22             c = mpatch.patches(a, [d])
    23         self.assertEqual(
    23         self.assertEqual(
    24             c, b, ("bad diff+patch result from\n  %r to\n  "
    24             c, b, ("bad diff+patch result from\n  %r to\n  "
    52         ]
    52         ]
    53         for a, b in cases:
    53         for a, b in cases:
    54             self.assert_bdiff(a, b)
    54             self.assert_bdiff(a, b)
    55 
    55 
    56     def showdiff(self, a, b):
    56     def showdiff(self, a, b):
    57         bin = bdiff.bdiff(a, b)
    57         bin = mdiff.textdiff(a, b)
    58         pos = 0
    58         pos = 0
    59         q = 0
    59         q = 0
    60         actions = []
    60         actions = []
    61         while pos < len(bin):
    61         while pos < len(bin):
    62             p1, p2, l = struct.unpack(">lll", bin[pos:pos + 12])
    62             p1, p2, l = struct.unpack(">lll", bin[pos:pos + 12])
   108             (" \ta\r b\t\n", " a b\n", 0),
   108             (" \ta\r b\t\n", " a b\n", 0),
   109             ("", "", 1),
   109             ("", "", 1),
   110             ("", "", 0),
   110             ("", "", 0),
   111         ]
   111         ]
   112         for a, b, allws in cases:
   112         for a, b, allws in cases:
   113             c = bdiff.fixws(a, allws)
   113             c = mdiff.fixws(a, allws)
   114             self.assertEqual(
   114             self.assertEqual(
   115                 c, b, 'fixws(%r) want %r got %r (allws=%r)' % (a, b, c, allws))
   115                 c, b, 'fixws(%r) want %r got %r (allws=%r)' % (a, b, c, allws))
   116 
   116 
   117     def test_nice_diff_for_trivial_change(self):
   117     def test_nice_diff_for_trivial_change(self):
   118         self.assertEqual(self.showdiff(
   118         self.assertEqual(self.showdiff(