/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
1711.2.16 by John Arbash Meinel
test_diff needs a copyright statement
1
# Copyright (C) 2005, 2006 Canonical Development Ltd
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
1558.15.2 by Aaron Bentley
Implemented binary file handling for diff
17
from cStringIO import StringIO
18
19
from bzrlib.diff import internal_diff
20
from bzrlib.errors import BinaryFile
1711.2.20 by John Arbash Meinel
Late bind to patiencediff objects to make it easier to plug-in
21
import bzrlib.patiencediff
1185.81.14 by John Arbash Meinel
Added a main function for running cdvdifflib manually, included tests for unified_diff interfaces
22
from bzrlib.tests import TestCase, TestCaseInTempDir
1558.15.2 by Aaron Bentley
Implemented binary file handling for diff
23
24
1558.15.11 by Aaron Bentley
Apply merge review suggestions
25
def udiff_lines(old, new, allow_binary=False):
974.1.6 by Aaron Bentley
Added unit tests
26
    output = StringIO()
1558.15.11 by Aaron Bentley
Apply merge review suggestions
27
    internal_diff('old', old, 'new', new, output, allow_binary)
974.1.6 by Aaron Bentley
Added unit tests
28
    output.seek(0, 0)
29
    return output.readlines()
30
1185.81.25 by Aaron Bentley
Clean up test_diff
31
1102 by Martin Pool
- merge test refactoring from robertc
32
class TestDiff(TestCase):
1185.81.25 by Aaron Bentley
Clean up test_diff
33
1102 by Martin Pool
- merge test refactoring from robertc
34
    def test_add_nl(self):
35
        """diff generates a valid diff for patches that add a newline"""
974.1.6 by Aaron Bentley
Added unit tests
36
        lines = udiff_lines(['boo'], ['boo\n'])
1185.16.145 by Martin Pool
Remove all assert statements from test cases.
37
        self.check_patch(lines)
38
        self.assertEquals(lines[4], '\\ No newline at end of file\n')
39
            ## "expected no-nl, got %r" % lines[4]
974.1.6 by Aaron Bentley
Added unit tests
40
1102 by Martin Pool
- merge test refactoring from robertc
41
    def test_add_nl_2(self):
42
        """diff generates a valid diff for patches that change last line and
43
        add a newline.
44
        """
974.1.6 by Aaron Bentley
Added unit tests
45
        lines = udiff_lines(['boo'], ['goo\n'])
1185.16.145 by Martin Pool
Remove all assert statements from test cases.
46
        self.check_patch(lines)
47
        self.assertEquals(lines[4], '\\ No newline at end of file\n')
48
            ## "expected no-nl, got %r" % lines[4]
974.1.6 by Aaron Bentley
Added unit tests
49
1102 by Martin Pool
- merge test refactoring from robertc
50
    def test_remove_nl(self):
51
        """diff generates a valid diff for patches that change last line and
52
        add a newline.
53
        """
974.1.6 by Aaron Bentley
Added unit tests
54
        lines = udiff_lines(['boo\n'], ['boo'])
1185.16.145 by Martin Pool
Remove all assert statements from test cases.
55
        self.check_patch(lines)
56
        self.assertEquals(lines[5], '\\ No newline at end of file\n')
57
            ## "expected no-nl, got %r" % lines[5]
58
59
    def check_patch(self, lines):
60
        self.assert_(len(lines) > 1)
61
            ## "Not enough lines for a file header for patch:\n%s" % "".join(lines)
62
        self.assert_(lines[0].startswith ('---'))
63
            ## 'No orig line for patch:\n%s' % "".join(lines)
64
        self.assert_(lines[1].startswith ('+++'))
65
            ## 'No mod line for patch:\n%s' % "".join(lines)
66
        self.assert_(len(lines) > 2)
67
            ## "No hunks for patch:\n%s" % "".join(lines)
68
        self.assert_(lines[2].startswith('@@'))
69
            ## "No hunk header for patch:\n%s" % "".join(lines)
70
        self.assert_('@@' in lines[2][2:])
71
            ## "Unterminated hunk header for patch:\n%s" % "".join(lines)
72
1558.15.2 by Aaron Bentley
Implemented binary file handling for diff
73
    def test_binary_lines(self):
74
        self.assertRaises(BinaryFile, udiff_lines, [1023 * 'a' + '\x00'], [])
75
        self.assertRaises(BinaryFile, udiff_lines, [], [1023 * 'a' + '\x00'])
1558.15.11 by Aaron Bentley
Apply merge review suggestions
76
        udiff_lines([1023 * 'a' + '\x00'], [], allow_binary=True)
77
        udiff_lines([], [1023 * 'a' + '\x00'], allow_binary=True)
1185.81.9 by John Arbash Meinel
Added (failing) tests for cdv.recurse_matches with common sections,
78
1711.2.30 by John Arbash Meinel
Fix bug in internal_diff handling of unicode paths
79
    def test_internal_diff_default(self):
80
        # Default internal diff encoding is utf8
81
        output = StringIO()
82
        internal_diff(u'old_\xb5', ['old_text\n'],
83
                    u'new_\xe5', ['new_text\n'], output)
84
        lines = output.getvalue().splitlines(True)
85
        self.check_patch(lines)
86
        self.assertEquals(['--- old_\xc2\xb5\t\n',
87
                           '+++ new_\xc3\xa5\t\n',
88
                           '@@ -1,1 +1,1 @@\n',
89
                           '-old_text\n',
90
                           '+new_text\n',
91
                           '\n',
92
                          ]
93
                          , lines)
94
95
    def test_internal_diff_utf8(self):
96
        output = StringIO()
97
        internal_diff(u'old_\xb5', ['old_text\n'],
98
                    u'new_\xe5', ['new_text\n'], output,
99
                    path_encoding='utf8')
100
        lines = output.getvalue().splitlines(True)
101
        self.check_patch(lines)
102
        self.assertEquals(['--- old_\xc2\xb5\t\n',
103
                           '+++ new_\xc3\xa5\t\n',
104
                           '@@ -1,1 +1,1 @@\n',
105
                           '-old_text\n',
106
                           '+new_text\n',
107
                           '\n',
108
                          ]
109
                          , lines)
110
111
    def test_internal_diff_iso_8859_1(self):
112
        output = StringIO()
113
        internal_diff(u'old_\xb5', ['old_text\n'],
114
                    u'new_\xe5', ['new_text\n'], output,
115
                    path_encoding='iso-8859-1')
116
        lines = output.getvalue().splitlines(True)
117
        self.check_patch(lines)
118
        self.assertEquals(['--- old_\xb5\t\n',
119
                           '+++ new_\xe5\t\n',
120
                           '@@ -1,1 +1,1 @@\n',
121
                           '-old_text\n',
122
                           '+new_text\n',
123
                           '\n',
124
                          ]
125
                          , lines)
126
127
    def test_internal_diff_returns_bytes(self):
128
        import StringIO
129
        output = StringIO.StringIO()
130
        internal_diff(u'old_\xb5', ['old_text\n'],
131
                    u'new_\xe5', ['new_text\n'], output)
132
        self.failUnless(isinstance(output.getvalue(), str),
133
            'internal_diff should return bytestrings')
134
1185.81.25 by Aaron Bentley
Clean up test_diff
135
1711.2.15 by John Arbash Meinel
Found a couple CDV left
136
class TestPatienceDiffLib(TestCase):
1185.81.1 by John Arbash Meinel
Adding nofrillsprecisemerge's diff algorithm, wrapped in difflib.
137
1185.81.9 by John Arbash Meinel
Added (failing) tests for cdv.recurse_matches with common sections,
138
    def test_unique_lcs(self):
1711.2.20 by John Arbash Meinel
Late bind to patiencediff objects to make it easier to plug-in
139
        unique_lcs = bzrlib.patiencediff.unique_lcs
1185.81.9 by John Arbash Meinel
Added (failing) tests for cdv.recurse_matches with common sections,
140
        self.assertEquals(unique_lcs('', ''), [])
141
        self.assertEquals(unique_lcs('a', 'a'), [(0,0)])
142
        self.assertEquals(unique_lcs('a', 'b'), [])
143
        self.assertEquals(unique_lcs('ab', 'ab'), [(0,0), (1,1)])
144
        self.assertEquals(unique_lcs('abcde', 'cdeab'), [(2,0), (3,1), (4,2)])
145
        self.assertEquals(unique_lcs('cdeab', 'abcde'), [(0,2), (1,3), (2,4)])
146
        self.assertEquals(unique_lcs('abXde', 'abYde'), [(0,0), (1,1), 
147
                                                         (3,3), (4,4)])
148
        self.assertEquals(unique_lcs('acbac', 'abc'), [(2,1)])
149
150
    def test_recurse_matches(self):
151
        def test_one(a, b, matches):
152
            test_matches = []
1711.2.22 by John Arbash Meinel
Passing the alo parameter to recurse_matches shaves of 5% of the diff time.
153
            bzrlib.patiencediff.recurse_matches(a, b, 0, 0, len(a), len(b),
1711.2.20 by John Arbash Meinel
Late bind to patiencediff objects to make it easier to plug-in
154
                test_matches, 10)
1185.81.9 by John Arbash Meinel
Added (failing) tests for cdv.recurse_matches with common sections,
155
            self.assertEquals(test_matches, matches)
156
1711.2.17 by John Arbash Meinel
Small cleanups to patience_diff code.
157
        test_one(['a', '', 'b', '', 'c'], ['a', 'a', 'b', 'c', 'c'],
1185.81.9 by John Arbash Meinel
Added (failing) tests for cdv.recurse_matches with common sections,
158
                 [(0, 0), (2, 2), (4, 4)])
159
        test_one(['a', 'c', 'b', 'a', 'c'], ['a', 'b', 'c'],
160
                 [(0, 0), (2, 1), (4, 2)])
161
1185.81.14 by John Arbash Meinel
Added a main function for running cdvdifflib manually, included tests for unified_diff interfaces
162
        # recurse_matches doesn't match non-unique 
163
        # lines surrounded by bogus text.
1185.81.24 by Aaron Bentley
Reoganize patience-related code
164
        # The update has been done in patiencediff.SequenceMatcher instead
1185.81.14 by John Arbash Meinel
Added a main function for running cdvdifflib manually, included tests for unified_diff interfaces
165
166
        # This is what it could be
1185.81.9 by John Arbash Meinel
Added (failing) tests for cdv.recurse_matches with common sections,
167
        #test_one('aBccDe', 'abccde', [(0,0), (2,2), (3,3), (5,5)])
1185.81.14 by John Arbash Meinel
Added a main function for running cdvdifflib manually, included tests for unified_diff interfaces
168
1185.81.9 by John Arbash Meinel
Added (failing) tests for cdv.recurse_matches with common sections,
169
        # This is what it currently gives:
170
        test_one('aBccDe', 'abccde', [(0,0), (5,5)])
171
1185.81.1 by John Arbash Meinel
Adding nofrillsprecisemerge's diff algorithm, wrapped in difflib.
172
    def test_matching_blocks(self):
1711.2.10 by John Arbash Meinel
Clarify the patience tests a little bit.
173
        def chk_blocks(a, b, expected_blocks):
1185.81.1 by John Arbash Meinel
Adding nofrillsprecisemerge's diff algorithm, wrapped in difflib.
174
            # difflib always adds a signature of the total
175
            # length, with no matching entries at the end
1711.2.20 by John Arbash Meinel
Late bind to patiencediff objects to make it easier to plug-in
176
            s = bzrlib.patiencediff.PatienceSequenceMatcher(None, a, b)
1185.81.11 by John Arbash Meinel
Found some edge cases that weren't being matched.
177
            blocks = s.get_matching_blocks()
1711.2.10 by John Arbash Meinel
Clarify the patience tests a little bit.
178
            self.assertEquals((len(a), len(b), 0), blocks[-1])
179
            self.assertEquals(expected_blocks, blocks[:-1])
1185.81.1 by John Arbash Meinel
Adding nofrillsprecisemerge's diff algorithm, wrapped in difflib.
180
1185.81.2 by John Arbash Meinel
A couple small tests.
181
        # Some basic matching tests
1185.81.1 by John Arbash Meinel
Adding nofrillsprecisemerge's diff algorithm, wrapped in difflib.
182
        chk_blocks('', '', [])
183
        chk_blocks([], [], [])
184
        chk_blocks('abcd', 'abcd', [(0, 0, 4)])
185
        chk_blocks('abcd', 'abce', [(0, 0, 3)])
186
        chk_blocks('eabc', 'abce', [(1, 0, 3)])
187
        chk_blocks('eabce', 'abce', [(1, 0, 4)])
188
        chk_blocks('abcde', 'abXde', [(0, 0, 2), (3, 3, 2)])
1185.81.3 by John Arbash Meinel
Adding tests for checking opcodes.
189
        chk_blocks('abcde', 'abXYZde', [(0, 0, 2), (3, 5, 2)])
190
        chk_blocks('abde', 'abXYZde', [(0, 0, 2), (2, 5, 2)])
191
        # This may check too much, but it checks to see that 
192
        # a copied block stays attached to the previous section,
193
        # not the later one.
194
        # difflib would tend to grab the trailing longest match
195
        # which would make the diff not look right
1185.81.9 by John Arbash Meinel
Added (failing) tests for cdv.recurse_matches with common sections,
196
        chk_blocks('abcdefghijklmnop', 'abcdefxydefghijklmnop',
197
                   [(0, 0, 6), (6, 11, 10)])
1185.81.1 by John Arbash Meinel
Adding nofrillsprecisemerge's diff algorithm, wrapped in difflib.
198
1185.81.2 by John Arbash Meinel
A couple small tests.
199
        # make sure it supports passing in lists
200
        chk_blocks(
1185.81.29 by Aaron Bentley
Fix style issues and duplicated tests
201
                   ['hello there\n',
202
                    'world\n',
203
                    'how are you today?\n'],
204
                   ['hello there\n',
205
                    'how are you today?\n'],
1185.81.2 by John Arbash Meinel
A couple small tests.
206
                [(0, 0, 1), (2, 1, 1)])
1185.81.1 by John Arbash Meinel
Adding nofrillsprecisemerge's diff algorithm, wrapped in difflib.
207
1711.2.21 by John Arbash Meinel
Cleanup patiencediff, remove the use of difflib.SequenceMatcher.
208
        # non unique lines surrounded by non-matching lines
209
        # won't be found
210
        chk_blocks('aBccDe', 'abccde', [(0,0,1), (5,5,1)])
211
212
        # But they only need to be locally unique
213
        chk_blocks('aBcDec', 'abcdec', [(0,0,1), (2,2,1), (4,4,2)])
214
215
        # non unique blocks won't be matched
216
        chk_blocks('aBcdEcdFg', 'abcdecdfg', [(0,0,1), (8,8,1)])
217
218
        # but locally unique ones will
219
        chk_blocks('aBcdEeXcdFg', 'abcdecdfg', [(0,0,1), (2,2,2),
220
                                              (5,4,1), (7,5,2), (10,8,1)])
221
222
        chk_blocks('abbabbXd', 'cabbabxd', [(7,7,1)])
223
        chk_blocks('abbabbbb', 'cabbabbc', [])
224
        chk_blocks('bbbbbbbb', 'cbbbbbbc', [])
1185.81.11 by John Arbash Meinel
Found some edge cases that weren't being matched.
225
1185.81.3 by John Arbash Meinel
Adding tests for checking opcodes.
226
    def test_opcodes(self):
1711.2.10 by John Arbash Meinel
Clarify the patience tests a little bit.
227
        def chk_ops(a, b, expected_codes):
1711.2.20 by John Arbash Meinel
Late bind to patiencediff objects to make it easier to plug-in
228
            s = bzrlib.patiencediff.PatienceSequenceMatcher(None, a, b)
1711.2.10 by John Arbash Meinel
Clarify the patience tests a little bit.
229
            self.assertEquals(expected_codes, s.get_opcodes())
1185.81.3 by John Arbash Meinel
Adding tests for checking opcodes.
230
231
        chk_ops('', '', [])
232
        chk_ops([], [], [])
1185.81.9 by John Arbash Meinel
Added (failing) tests for cdv.recurse_matches with common sections,
233
        chk_ops('abcd', 'abcd', [('equal',    0,4, 0,4)])
1185.81.29 by Aaron Bentley
Fix style issues and duplicated tests
234
        chk_ops('abcd', 'abce', [('equal',   0,3, 0,3),
235
                                 ('replace', 3,4, 3,4)
236
                                ])
237
        chk_ops('eabc', 'abce', [('delete', 0,1, 0,0),
238
                                 ('equal',  1,4, 0,3),
239
                                 ('insert', 4,4, 3,4)
240
                                ])
241
        chk_ops('eabce', 'abce', [('delete', 0,1, 0,0),
242
                                  ('equal',  1,5, 0,4)
1185.81.3 by John Arbash Meinel
Adding tests for checking opcodes.
243
                                 ])
1185.81.29 by Aaron Bentley
Fix style issues and duplicated tests
244
        chk_ops('abcde', 'abXde', [('equal',   0,2, 0,2),
245
                                   ('replace', 2,3, 2,3),
246
                                   ('equal',   3,5, 3,5)
1185.81.3 by John Arbash Meinel
Adding tests for checking opcodes.
247
                                  ])
1185.81.29 by Aaron Bentley
Fix style issues and duplicated tests
248
        chk_ops('abcde', 'abXYZde', [('equal',   0,2, 0,2),
249
                                     ('replace', 2,3, 2,5),
250
                                     ('equal',   3,5, 5,7)
1185.81.3 by John Arbash Meinel
Adding tests for checking opcodes.
251
                                    ])
1185.81.29 by Aaron Bentley
Fix style issues and duplicated tests
252
        chk_ops('abde', 'abXYZde', [('equal',  0,2, 0,2),
253
                                    ('insert', 2,2, 2,5),
254
                                    ('equal',  2,4, 5,7)
1185.81.3 by John Arbash Meinel
Adding tests for checking opcodes.
255
                                   ])
256
        chk_ops('abcdefghijklmnop', 'abcdefxydefghijklmnop',
1185.81.29 by Aaron Bentley
Fix style issues and duplicated tests
257
                [('equal',  0,6,  0,6),
258
                 ('insert', 6,6,  6,11),
259
                 ('equal',  6,16, 11,21)
1185.81.3 by John Arbash Meinel
Adding tests for checking opcodes.
260
                ])
261
        chk_ops(
262
                [ 'hello there\n'
263
                , 'world\n'
264
                , 'how are you today?\n'],
265
                [ 'hello there\n'
266
                , 'how are you today?\n'],
1185.81.29 by Aaron Bentley
Fix style issues and duplicated tests
267
                [('equal',  0,1, 0,1),
268
                 ('delete', 1,2, 1,1),
1711.2.21 by John Arbash Meinel
Cleanup patiencediff, remove the use of difflib.SequenceMatcher.
269
                 ('equal',  2,3, 1,2),
1185.81.9 by John Arbash Meinel
Added (failing) tests for cdv.recurse_matches with common sections,
270
                ])
271
        chk_ops('aBccDe', 'abccde', 
1185.81.29 by Aaron Bentley
Fix style issues and duplicated tests
272
                [('equal',   0,1, 0,1),
1711.2.21 by John Arbash Meinel
Cleanup patiencediff, remove the use of difflib.SequenceMatcher.
273
                 ('replace', 1,5, 1,5),
274
                 ('equal',   5,6, 5,6),
275
                ])
276
        chk_ops('aBcDec', 'abcdec', 
277
                [('equal',   0,1, 0,1),
1185.81.29 by Aaron Bentley
Fix style issues and duplicated tests
278
                 ('replace', 1,2, 1,2),
1711.2.21 by John Arbash Meinel
Cleanup patiencediff, remove the use of difflib.SequenceMatcher.
279
                 ('equal',   2,3, 2,3),
280
                 ('replace', 3,4, 3,4),
281
                 ('equal',   4,6, 4,6),
1185.81.3 by John Arbash Meinel
Adding tests for checking opcodes.
282
                ])
1185.81.10 by John Arbash Meinel
Added some more test cases.
283
        chk_ops('aBcdEcdFg', 'abcdecdfg', 
1185.81.29 by Aaron Bentley
Fix style issues and duplicated tests
284
                [('equal',   0,1, 0,1),
1711.2.21 by John Arbash Meinel
Cleanup patiencediff, remove the use of difflib.SequenceMatcher.
285
                 ('replace', 1,8, 1,8),
1185.81.29 by Aaron Bentley
Fix style issues and duplicated tests
286
                 ('equal',   8,9, 8,9)
1185.81.10 by John Arbash Meinel
Added some more test cases.
287
                ])
1711.2.21 by John Arbash Meinel
Cleanup patiencediff, remove the use of difflib.SequenceMatcher.
288
        chk_ops('aBcdEeXcdFg', 'abcdecdfg', 
289
                [('equal',   0,1, 0,1),
290
                 ('replace', 1,2, 1,2),
291
                 ('equal',   2,4, 2,4),
292
                 ('delete', 4,5, 4,4),
293
                 ('equal',   5,6, 4,5),
294
                 ('delete', 6,7, 5,5),
295
                 ('equal',   7,9, 5,7),
296
                 ('replace', 9,10, 7,8),
297
                 ('equal',   10,11, 8,9)
298
                ])
1185.81.10 by John Arbash Meinel
Added some more test cases.
299
1185.81.16 by John Arbash Meinel
Added tests, and an assert check to make sure ranges are always increasing.
300
    def test_multiple_ranges(self):
301
        # There was an earlier bug where we used a bad set of ranges,
302
        # this triggers that specific bug, to make sure it doesn't regress
1711.2.10 by John Arbash Meinel
Clarify the patience tests a little bit.
303
        def chk_blocks(a, b, expected_blocks):
1185.81.16 by John Arbash Meinel
Added tests, and an assert check to make sure ranges are always increasing.
304
            # difflib always adds a signature of the total
305
            # length, with no matching entries at the end
1711.2.20 by John Arbash Meinel
Late bind to patiencediff objects to make it easier to plug-in
306
            s = bzrlib.patiencediff.PatienceSequenceMatcher(None, a, b)
1185.81.16 by John Arbash Meinel
Added tests, and an assert check to make sure ranges are always increasing.
307
            blocks = s.get_matching_blocks()
308
            x = blocks.pop()
309
            self.assertEquals(x, (len(a), len(b), 0))
1711.2.10 by John Arbash Meinel
Clarify the patience tests a little bit.
310
            self.assertEquals(expected_blocks, blocks)
1185.81.16 by John Arbash Meinel
Added tests, and an assert check to make sure ranges are always increasing.
311
312
        chk_blocks('abcdefghijklmnop'
313
                 , 'abcXghiYZQRSTUVWXYZijklmnop'
314
                 , [(0, 0, 3), (6, 4, 3), (9, 20, 7)])
315
316
        chk_blocks('ABCd efghIjk  L'
317
                 , 'AxyzBCn mo pqrstuvwI1 2  L'
1711.2.21 by John Arbash Meinel
Cleanup patiencediff, remove the use of difflib.SequenceMatcher.
318
                 , [(0,0,1), (1, 4, 2), (9, 19, 1), (12, 23, 3)])
1185.81.16 by John Arbash Meinel
Added tests, and an assert check to make sure ranges are always increasing.
319
1711.2.8 by John Arbash Meinel
rot13 the code snippet to help with clarity.
320
        # These are rot13 code snippets.
1185.81.16 by John Arbash Meinel
Added tests, and an assert check to make sure ranges are always increasing.
321
        chk_blocks('''\
1711.2.8 by John Arbash Meinel
rot13 the code snippet to help with clarity.
322
    trg nqqrq jura lbh nqq n svyr va gur qverpgbel.
323
    """
324
    gnxrf_netf = ['svyr*']
325
    gnxrf_bcgvbaf = ['ab-erphefr']
326
  
327
    qrs eha(frys, svyr_yvfg, ab_erphefr=Snyfr):
328
        sebz omeyvo.nqq vzcbeg fzneg_nqq, nqq_ercbegre_cevag, nqq_ercbegre_ahyy
329
        vs vf_dhvrg():
330
            ercbegre = nqq_ercbegre_ahyy
331
        ryfr:
332
            ercbegre = nqq_ercbegre_cevag
333
        fzneg_nqq(svyr_yvfg, abg ab_erphefr, ercbegre)
334
335
336
pynff pzq_zxqve(Pbzznaq):
337
'''.splitlines(True), '''\
338
    trg nqqrq jura lbh nqq n svyr va gur qverpgbel.
339
340
    --qel-eha jvyy fubj juvpu svyrf jbhyq or nqqrq, ohg abg npghnyyl 
341
    nqq gurz.
342
    """
343
    gnxrf_netf = ['svyr*']
344
    gnxrf_bcgvbaf = ['ab-erphefr', 'qel-eha']
345
346
    qrs eha(frys, svyr_yvfg, ab_erphefr=Snyfr, qel_eha=Snyfr):
347
        vzcbeg omeyvo.nqq
348
349
        vs qel_eha:
350
            vs vf_dhvrg():
351
                # Guvf vf cbvagyrff, ohg V'q engure abg envfr na reebe
352
                npgvba = omeyvo.nqq.nqq_npgvba_ahyy
353
            ryfr:
354
  npgvba = omeyvo.nqq.nqq_npgvba_cevag
355
        ryvs vf_dhvrg():
356
            npgvba = omeyvo.nqq.nqq_npgvba_nqq
357
        ryfr:
358
       npgvba = omeyvo.nqq.nqq_npgvba_nqq_naq_cevag
359
360
        omeyvo.nqq.fzneg_nqq(svyr_yvfg, abg ab_erphefr, npgvba)
361
362
363
pynff pzq_zxqve(Pbzznaq):
1185.81.16 by John Arbash Meinel
Added tests, and an assert check to make sure ranges are always increasing.
364
'''.splitlines(True)
365
, [(0,0,1), (1, 4, 2), (9, 19, 1), (12, 23, 3)])
366
1711.2.9 by John Arbash Meinel
Rename cdv => patience
367
    def test_patience_unified_diff(self):
1185.81.29 by Aaron Bentley
Fix style issues and duplicated tests
368
        txt_a = ['hello there\n',
369
                 'world\n',
370
                 'how are you today?\n']
371
        txt_b = ['hello there\n',
372
                 'how are you today?\n']
1711.2.20 by John Arbash Meinel
Late bind to patiencediff objects to make it easier to plug-in
373
        unified_diff = bzrlib.patiencediff.unified_diff
374
        psm = bzrlib.patiencediff.PatienceSequenceMatcher
1185.81.29 by Aaron Bentley
Fix style issues and duplicated tests
375
        self.assertEquals([ '---  \n',
376
                           '+++  \n',
377
                           '@@ -1,3 +1,2 @@\n',
378
                           ' hello there\n',
379
                           '-world\n',
380
                           ' how are you today?\n'
1185.81.14 by John Arbash Meinel
Added a main function for running cdvdifflib manually, included tests for unified_diff interfaces
381
                          ]
1711.2.20 by John Arbash Meinel
Late bind to patiencediff objects to make it easier to plug-in
382
                          , list(unified_diff(txt_a, txt_b,
383
                                 sequencematcher=psm)))
1185.81.14 by John Arbash Meinel
Added a main function for running cdvdifflib manually, included tests for unified_diff interfaces
384
        txt_a = map(lambda x: x+'\n', 'abcdefghijklmnop')
385
        txt_b = map(lambda x: x+'\n', 'abcdefxydefghijklmnop')
386
        # This is the result with LongestCommonSubstring matching
1185.81.29 by Aaron Bentley
Fix style issues and duplicated tests
387
        self.assertEquals(['---  \n',
388
                           '+++  \n',
389
                           '@@ -1,6 +1,11 @@\n',
390
                           ' a\n',
391
                           ' b\n',
392
                           ' c\n',
393
                           '+d\n',
394
                           '+e\n',
395
                           '+f\n',
396
                           '+x\n',
397
                           '+y\n',
398
                           ' d\n',
399
                           ' e\n',
400
                           ' f\n']
1185.81.14 by John Arbash Meinel
Added a main function for running cdvdifflib manually, included tests for unified_diff interfaces
401
                          , list(unified_diff(txt_a, txt_b)))
1711.2.9 by John Arbash Meinel
Rename cdv => patience
402
        # And the patience diff
1185.81.29 by Aaron Bentley
Fix style issues and duplicated tests
403
        self.assertEquals(['---  \n',
404
                           '+++  \n',
405
                           '@@ -4,6 +4,11 @@\n',
406
                           ' d\n',
407
                           ' e\n',
408
                           ' f\n',
409
                           '+x\n',
410
                           '+y\n',
411
                           '+d\n',
412
                           '+e\n',
413
                           '+f\n',
414
                           ' g\n',
415
                           ' h\n',
416
                           ' i\n',
1185.81.14 by John Arbash Meinel
Added a main function for running cdvdifflib manually, included tests for unified_diff interfaces
417
                          ]
1185.81.25 by Aaron Bentley
Clean up test_diff
418
                          , list(unified_diff(txt_a, txt_b,
1711.2.20 by John Arbash Meinel
Late bind to patiencediff objects to make it easier to plug-in
419
                                 sequencematcher=psm)))
1185.81.25 by Aaron Bentley
Clean up test_diff
420
1185.81.14 by John Arbash Meinel
Added a main function for running cdvdifflib manually, included tests for unified_diff interfaces
421
1711.2.15 by John Arbash Meinel
Found a couple CDV left
422
class TestPatienceDiffLibFiles(TestCaseInTempDir):
1185.81.14 by John Arbash Meinel
Added a main function for running cdvdifflib manually, included tests for unified_diff interfaces
423
1711.2.9 by John Arbash Meinel
Rename cdv => patience
424
    def test_patience_unified_diff_files(self):
1185.81.29 by Aaron Bentley
Fix style issues and duplicated tests
425
        txt_a = ['hello there\n',
426
                 'world\n',
427
                 'how are you today?\n']
428
        txt_b = ['hello there\n',
429
                 'how are you today?\n']
1185.81.14 by John Arbash Meinel
Added a main function for running cdvdifflib manually, included tests for unified_diff interfaces
430
        open('a1', 'wb').writelines(txt_a)
431
        open('b1', 'wb').writelines(txt_b)
432
1711.2.20 by John Arbash Meinel
Late bind to patiencediff objects to make it easier to plug-in
433
        unified_diff_files = bzrlib.patiencediff.unified_diff_files
434
        psm = bzrlib.patiencediff.PatienceSequenceMatcher
1185.81.29 by Aaron Bentley
Fix style issues and duplicated tests
435
        self.assertEquals(['--- a1 \n',
436
                           '+++ b1 \n',
437
                           '@@ -1,3 +1,2 @@\n',
438
                           ' hello there\n',
439
                           '-world\n',
440
                           ' how are you today?\n',
1185.81.14 by John Arbash Meinel
Added a main function for running cdvdifflib manually, included tests for unified_diff interfaces
441
                          ]
1185.81.25 by Aaron Bentley
Clean up test_diff
442
                          , list(unified_diff_files('a1', 'b1',
1711.2.20 by John Arbash Meinel
Late bind to patiencediff objects to make it easier to plug-in
443
                                 sequencematcher=psm)))
1185.81.14 by John Arbash Meinel
Added a main function for running cdvdifflib manually, included tests for unified_diff interfaces
444
445
        txt_a = map(lambda x: x+'\n', 'abcdefghijklmnop')
446
        txt_b = map(lambda x: x+'\n', 'abcdefxydefghijklmnop')
447
        open('a2', 'wb').writelines(txt_a)
448
        open('b2', 'wb').writelines(txt_b)
449
450
        # This is the result with LongestCommonSubstring matching
1185.81.29 by Aaron Bentley
Fix style issues and duplicated tests
451
        self.assertEquals(['--- a2 \n',
452
                           '+++ b2 \n',
453
                           '@@ -1,6 +1,11 @@\n',
454
                           ' a\n',
455
                           ' b\n',
456
                           ' c\n',
457
                           '+d\n',
458
                           '+e\n',
459
                           '+f\n',
460
                           '+x\n',
461
                           '+y\n',
462
                           ' d\n',
463
                           ' e\n',
464
                           ' f\n']
1185.81.14 by John Arbash Meinel
Added a main function for running cdvdifflib manually, included tests for unified_diff interfaces
465
                          , list(unified_diff_files('a2', 'b2')))
466
1711.2.9 by John Arbash Meinel
Rename cdv => patience
467
        # And the patience diff
1185.81.29 by Aaron Bentley
Fix style issues and duplicated tests
468
        self.assertEquals(['--- a2 \n',
469
                           '+++ b2 \n',
470
                           '@@ -4,6 +4,11 @@\n',
471
                           ' d\n',
472
                           ' e\n',
473
                           ' f\n',
474
                           '+x\n',
475
                           '+y\n',
476
                           '+d\n',
477
                           '+e\n',
478
                           '+f\n',
479
                           ' g\n',
480
                           ' h\n',
481
                           ' i\n',
1185.81.14 by John Arbash Meinel
Added a main function for running cdvdifflib manually, included tests for unified_diff interfaces
482
                          ]
1185.81.25 by Aaron Bentley
Clean up test_diff
483
                          , list(unified_diff_files('a2', 'b2',
1711.2.20 by John Arbash Meinel
Late bind to patiencediff objects to make it easier to plug-in
484
                                 sequencematcher=psm)))