~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_diff.py

  • Committer: John Arbash Meinel
  • Date: 2005-12-12 17:16:40 UTC
  • mto: This revision was merged to the branch mainline in revision 1727.
  • Revision ID: john@arbash-meinel.com-20051212171640-ff7b0d595a160a97
Added a main function for running cdvdifflib manually, included tests for unified_diff interfaces

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
from bzrlib.tests import TestCase
 
1
from bzrlib.tests import TestCase, TestCaseInTempDir
2
2
from bzrlib.diff import internal_diff
3
3
from cStringIO import StringIO
4
4
def udiff_lines(old, new):
76
76
        test_one(['a', 'c', 'b', 'a', 'c'], ['a', 'b', 'c'],
77
77
                 [(0, 0), (2, 1), (4, 2)])
78
78
 
79
 
        # FIXME: recurse_matches won't match non-unique lines, 
80
 
        # surrounded by bogus text
81
 
        # This is what it should be
 
79
        # recurse_matches doesn't match non-unique 
 
80
        # lines surrounded by bogus text.
 
81
        # The update has been done in cdvdifflib.SequenceMatcher instead
 
82
 
 
83
        # This is what it could be
82
84
        #test_one('aBccDe', 'abccde', [(0,0), (2,2), (3,3), (5,5)])
 
85
 
83
86
        # This is what it currently gives:
84
87
        test_one('aBccDe', 'abccde', [(0,0), (5,5)])
85
88
 
198
201
                , ('equal',   8,9, 8,9)
199
202
                ])
200
203
 
 
204
    def test_cdv_unified_diff(self):
 
205
        from bzrlib.cdv.cdvdifflib import unified_diff
 
206
        from bzrlib.cdv.cdvdifflib import SequenceMatcher
 
207
 
 
208
        txt_a = [ 'hello there\n'
 
209
                , 'world\n'
 
210
                , 'how are you today?\n']
 
211
        txt_b = [ 'hello there\n'
 
212
                , 'how are you today?\n']
 
213
 
 
214
        self.assertEquals([ '---  \n'
 
215
                          , '+++  \n'
 
216
                          , '@@ -1,3 +1,2 @@\n'
 
217
                          , ' hello there\n'
 
218
                          , '-world\n'
 
219
                          , ' how are you today?\n'
 
220
                          ]
 
221
                          , list(unified_diff(txt_a, txt_b
 
222
                                        , sequencematcher=SequenceMatcher)))
 
223
 
 
224
        txt_a = map(lambda x: x+'\n', 'abcdefghijklmnop')
 
225
        txt_b = map(lambda x: x+'\n', 'abcdefxydefghijklmnop')
 
226
 
 
227
        # This is the result with LongestCommonSubstring matching
 
228
        self.assertEquals([ '---  \n'
 
229
                          , '+++  \n'
 
230
                          , '@@ -1,6 +1,11 @@\n'
 
231
                          , ' a\n'
 
232
                          , ' b\n'
 
233
                          , ' c\n'
 
234
                          , '+d\n'
 
235
                          , '+e\n'
 
236
                          , '+f\n'
 
237
                          , '+x\n'
 
238
                          , '+y\n'
 
239
                          , ' d\n'
 
240
                          , ' e\n'
 
241
                          , ' f\n']
 
242
                          , list(unified_diff(txt_a, txt_b)))
 
243
 
 
244
        # And the cdv diff
 
245
        self.assertEquals([ '---  \n'
 
246
                          , '+++  \n'
 
247
                          , '@@ -4,6 +4,11 @@\n'
 
248
                          , ' d\n'
 
249
                          , ' e\n'
 
250
                          , ' f\n'
 
251
                          , '+x\n'
 
252
                          , '+y\n'
 
253
                          , '+d\n'
 
254
                          , '+e\n'
 
255
                          , '+f\n'
 
256
                          , ' g\n'
 
257
                          , ' h\n'
 
258
                          , ' i\n'
 
259
                          ]
 
260
                          , list(unified_diff(txt_a, txt_b
 
261
                                        , sequencematcher=SequenceMatcher)))
 
262
 
 
263
class TestCDVDiffLibFiles(TestCase):
 
264
 
 
265
    def test_cdv_unified_diff_files(self):
 
266
        from bzrlib.cdv.cdvdifflib import unified_diff_files
 
267
        from bzrlib.cdv.cdvdifflib import SequenceMatcher
 
268
 
 
269
        txt_a = [ 'hello there\n'
 
270
                , 'world\n'
 
271
                , 'how are you today?\n']
 
272
        txt_b = [ 'hello there\n'
 
273
                , 'how are you today?\n']
 
274
        open('a1', 'wb').writelines(txt_a)
 
275
        open('b1', 'wb').writelines(txt_b)
 
276
 
 
277
        self.assertEquals([ '--- a1 \n'
 
278
                          , '+++ b1 \n'
 
279
                          , '@@ -1,3 +1,2 @@\n'
 
280
                          , ' hello there\n'
 
281
                          , '-world\n'
 
282
                          , ' how are you today?\n'
 
283
                          ]
 
284
                          , list(unified_diff_files('a1', 'b1'
 
285
                                        , sequencematcher=SequenceMatcher)))
 
286
 
 
287
        txt_a = map(lambda x: x+'\n', 'abcdefghijklmnop')
 
288
        txt_b = map(lambda x: x+'\n', 'abcdefxydefghijklmnop')
 
289
        open('a2', 'wb').writelines(txt_a)
 
290
        open('b2', 'wb').writelines(txt_b)
 
291
 
 
292
        # This is the result with LongestCommonSubstring matching
 
293
        self.assertEquals([ '--- a2 \n'
 
294
                          , '+++ b2 \n'
 
295
                          , '@@ -1,6 +1,11 @@\n'
 
296
                          , ' a\n'
 
297
                          , ' b\n'
 
298
                          , ' c\n'
 
299
                          , '+d\n'
 
300
                          , '+e\n'
 
301
                          , '+f\n'
 
302
                          , '+x\n'
 
303
                          , '+y\n'
 
304
                          , ' d\n'
 
305
                          , ' e\n'
 
306
                          , ' f\n']
 
307
                          , list(unified_diff_files('a2', 'b2')))
 
308
 
 
309
        # And the cdv diff
 
310
        self.assertEquals([ '--- a2 \n'
 
311
                          , '+++ b2 \n'
 
312
                          , '@@ -4,6 +4,11 @@\n'
 
313
                          , ' d\n'
 
314
                          , ' e\n'
 
315
                          , ' f\n'
 
316
                          , '+x\n'
 
317
                          , '+y\n'
 
318
                          , '+d\n'
 
319
                          , '+e\n'
 
320
                          , '+f\n'
 
321
                          , ' g\n'
 
322
                          , ' h\n'
 
323
                          , ' i\n'
 
324
                          ]
 
325
                          , list(unified_diff_files('a2', 'b2'
 
326
                                        , sequencematcher=SequenceMatcher)))
 
327