~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_diff.py

  • Committer: Vincent Ladeuil
  • Date: 2011-02-10 12:37:27 UTC
  • mto: This revision was merged to the branch mainline in revision 5661.
  • Revision ID: v.ladeuil+lp@free.fr-20110210123727-8e0pu4wtlt6fj7nf
thread is already a python module, avoid confusion and use cethread instead.

Show diffs side-by-side

added added

removed removed

Lines of Context:
226
226
        output = StringIO.StringIO()
227
227
        diff.internal_diff(u'old_\xb5', ['old_text\n'],
228
228
                            u'new_\xe5', ['new_text\n'], output)
229
 
        self.assertIsInstance(output.getvalue(), str,
 
229
        self.failUnless(isinstance(output.getvalue(), str),
230
230
            'internal_diff should return bytestrings')
231
231
 
232
232
 
249
249
        self.assertEqual(out.splitlines(True) + ['\n'], lines)
250
250
 
251
251
 
252
 
def get_diff_as_string(tree1, tree2, specific_files=None, working_tree=None):
253
 
    output = StringIO()
254
 
    if working_tree is not None:
255
 
        extra_trees = (working_tree,)
256
 
    else:
257
 
        extra_trees = ()
258
 
    diff.show_diff_trees(tree1, tree2, output,
259
 
        specific_files=specific_files,
260
 
        extra_trees=extra_trees, old_label='old/',
261
 
        new_label='new/')
262
 
    return output.getvalue()
263
 
 
264
 
 
265
 
class TestDiffDates(tests.TestCaseWithTransport):
 
252
class TestShowDiffTreesHelper(tests.TestCaseWithTransport):
 
253
    """Has a helper for running show_diff_trees"""
 
254
 
 
255
    def get_diff(self, tree1, tree2, specific_files=None, working_tree=None):
 
256
        output = StringIO()
 
257
        if working_tree is not None:
 
258
            extra_trees = (working_tree,)
 
259
        else:
 
260
            extra_trees = ()
 
261
        diff.show_diff_trees(tree1, tree2, output,
 
262
                             specific_files=specific_files,
 
263
                             extra_trees=extra_trees, old_label='old/',
 
264
                             new_label='new/')
 
265
        return output.getvalue()
 
266
 
 
267
 
 
268
class TestDiffDates(TestShowDiffTreesHelper):
266
269
 
267
270
    def setUp(self):
268
271
        super(TestDiffDates, self).setUp()
303
306
        os.utime('file1', (1144195200, 1144195200)) # 2006-04-05 00:00:00 UTC
304
307
 
305
308
    def test_diff_rev_tree_working_tree(self):
306
 
        output = get_diff_as_string(self.wt.basis_tree(), self.wt)
 
309
        output = self.get_diff(self.wt.basis_tree(), self.wt)
307
310
        # note that the date for old/file1 is from rev 2 rather than from
308
311
        # the basis revision (rev 4)
309
312
        self.assertEqualDiff(output, '''\
319
322
    def test_diff_rev_tree_rev_tree(self):
320
323
        tree1 = self.b.repository.revision_tree('rev-2')
321
324
        tree2 = self.b.repository.revision_tree('rev-3')
322
 
        output = get_diff_as_string(tree1, tree2)
 
325
        output = self.get_diff(tree1, tree2)
323
326
        self.assertEqualDiff(output, '''\
324
327
=== modified file 'file2'
325
328
--- old/file2\t2006-04-01 00:00:00 +0000
333
336
    def test_diff_add_files(self):
334
337
        tree1 = self.b.repository.revision_tree(_mod_revision.NULL_REVISION)
335
338
        tree2 = self.b.repository.revision_tree('rev-1')
336
 
        output = get_diff_as_string(tree1, tree2)
 
339
        output = self.get_diff(tree1, tree2)
337
340
        # the files have the epoch time stamp for the tree in which
338
341
        # they don't exist.
339
342
        self.assertEqualDiff(output, '''\
354
357
    def test_diff_remove_files(self):
355
358
        tree1 = self.b.repository.revision_tree('rev-3')
356
359
        tree2 = self.b.repository.revision_tree('rev-4')
357
 
        output = get_diff_as_string(tree1, tree2)
 
360
        output = self.get_diff(tree1, tree2)
358
361
        # the file has the epoch time stamp for the tree in which
359
362
        # it doesn't exist.
360
363
        self.assertEqualDiff(output, '''\
371
374
        self.wt.rename_one('file1', 'file1b')
372
375
        old_tree = self.b.repository.revision_tree('rev-1')
373
376
        new_tree = self.b.repository.revision_tree('rev-4')
374
 
        out = get_diff_as_string(old_tree, new_tree, specific_files=['file1b'],
 
377
        out = self.get_diff(old_tree, new_tree, specific_files=['file1b'],
375
378
                            working_tree=self.wt)
376
379
        self.assertContainsRe(out, 'file1\t')
377
380
 
383
386
        self.wt.rename_one('file1', 'dir1/file1')
384
387
        old_tree = self.b.repository.revision_tree('rev-1')
385
388
        new_tree = self.b.repository.revision_tree('rev-4')
386
 
        out = get_diff_as_string(old_tree, new_tree, specific_files=['dir1'],
 
389
        out = self.get_diff(old_tree, new_tree, specific_files=['dir1'],
387
390
                            working_tree=self.wt)
388
391
        self.assertContainsRe(out, 'file1\t')
389
 
        out = get_diff_as_string(old_tree, new_tree, specific_files=['dir2'],
 
392
        out = self.get_diff(old_tree, new_tree, specific_files=['dir2'],
390
393
                            working_tree=self.wt)
391
394
        self.assertNotContainsRe(out, 'file1\t')
392
395
 
393
396
 
394
 
class TestShowDiffTrees(tests.TestCaseWithTransport):
 
397
 
 
398
class TestShowDiffTrees(TestShowDiffTreesHelper):
395
399
    """Direct tests for show_diff_trees"""
396
400
 
397
401
    def test_modified_file(self):
402
406
        tree.commit('one', rev_id='rev-1')
403
407
 
404
408
        self.build_tree_contents([('tree/file', 'new contents\n')])
405
 
        d = get_diff_as_string(tree.basis_tree(), tree)
 
409
        d = self.get_diff(tree.basis_tree(), tree)
406
410
        self.assertContainsRe(d, "=== modified file 'file'\n")
407
411
        self.assertContainsRe(d, '--- old/file\t')
408
412
        self.assertContainsRe(d, '\\+\\+\\+ new/file\t')
419
423
 
420
424
        tree.rename_one('dir', 'other')
421
425
        self.build_tree_contents([('tree/other/file', 'new contents\n')])
422
 
        d = get_diff_as_string(tree.basis_tree(), tree)
 
426
        d = self.get_diff(tree.basis_tree(), tree)
423
427
        self.assertContainsRe(d, "=== renamed directory 'dir' => 'other'\n")
424
428
        self.assertContainsRe(d, "=== modified file 'other/file'\n")
425
429
        # XXX: This is technically incorrect, because it used to be at another
438
442
        tree.commit('one', rev_id='rev-1')
439
443
 
440
444
        tree.rename_one('dir', 'newdir')
441
 
        d = get_diff_as_string(tree.basis_tree(), tree)
 
445
        d = self.get_diff(tree.basis_tree(), tree)
442
446
        # Renaming a directory should be a single "you renamed this dir" even
443
447
        # when there are files inside.
444
448
        self.assertEqual(d, "=== renamed directory 'dir' => 'newdir'\n")
451
455
        tree.commit('one', rev_id='rev-1')
452
456
 
453
457
        tree.rename_one('file', 'newname')
454
 
        d = get_diff_as_string(tree.basis_tree(), tree)
 
458
        d = self.get_diff(tree.basis_tree(), tree)
455
459
        self.assertContainsRe(d, "=== renamed file 'file' => 'newname'\n")
456
460
        # We shouldn't have a --- or +++ line, because there is no content
457
461
        # change
466
470
 
467
471
        tree.rename_one('file', 'newname')
468
472
        self.build_tree_contents([('tree/newname', 'new contents\n')])
469
 
        d = get_diff_as_string(tree.basis_tree(), tree)
 
473
        d = self.get_diff(tree.basis_tree(), tree)
470
474
        self.assertContainsRe(d, "=== renamed file 'file' => 'newname'\n")
471
475
        self.assertContainsRe(d, '--- old/file\t')
472
476
        self.assertContainsRe(d, '\\+\\+\\+ new/newname\t')
496
500
        tree.rename_one('c', 'new-c')
497
501
        tree.rename_one('d', 'new-d')
498
502
 
499
 
        d = get_diff_as_string(tree.basis_tree(), tree)
 
503
        d = self.get_diff(tree.basis_tree(), tree)
500
504
 
501
505
        self.assertContainsRe(d, r"file 'a'.*\(properties changed:"
502
506
                                  ".*\+x to -x.*\)")
560
564
        tree.add(['add_'+alpha], ['file-id'])
561
565
        self.build_tree_contents([('tree/mod_'+alpha, 'contents_mod\n')])
562
566
 
563
 
        d = get_diff_as_string(tree.basis_tree(), tree)
 
567
        d = self.get_diff(tree.basis_tree(), tree)
564
568
        self.assertContainsRe(d,
565
569
                "=== renamed file 'ren_%s' => 'ren_%s'\n"%(autf8, outf8))
566
570
        self.assertContainsRe(d, "=== added file 'add_%s'"%autf8)
1480
1484
        return self.applyDeprecated(
1481
1485
            deprecated_in((2, 2, 0)), diff.get_trees_and_branches_to_diff,
1482
1486
            path_list, revision_specs, old_url, new_url)
 
1487