/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_diff.py

Merge bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
import subprocess
21
21
from tempfile import TemporaryFile
22
22
 
23
 
from bzrlib.diff import internal_diff, external_diff, show_diff_trees
 
23
from bzrlib.diff import (
 
24
    internal_diff,
 
25
    external_diff,
 
26
    DiffPath,
 
27
    show_diff_trees,
 
28
    DiffSymlink,
 
29
    DiffTree,
 
30
    DiffText,
 
31
    )
24
32
from bzrlib.errors import BinaryFile, NoDiff
25
33
import bzrlib.osutils as osutils
26
34
import bzrlib.patiencediff
544
552
        self.assertContainsRe(diff, "=== modified file 'mod_%s'"%autf8)
545
553
        self.assertContainsRe(diff, "=== removed file 'del_%s'"%autf8)
546
554
 
 
555
 
 
556
class DiffWasIs(DiffPath):
 
557
 
 
558
    def diff(self, file_id, old_path, new_path, old_kind, new_kind):
 
559
        self.to_file.write('was: ')
 
560
        self.to_file.write(self.old_tree.get_file(file_id).read())
 
561
        self.to_file.write('is: ')
 
562
        self.to_file.write(self.new_tree.get_file(file_id).read())
 
563
        pass
 
564
 
 
565
 
 
566
class TestDiffTree(TestCaseWithTransport):
 
567
 
 
568
    def setUp(self):
 
569
        TestCaseWithTransport.setUp(self)
 
570
        self.old_tree = self.make_branch_and_tree('old-tree')
 
571
        self.old_tree.lock_write()
 
572
        self.addCleanup(self.old_tree.unlock)
 
573
        self.new_tree = self.make_branch_and_tree('new-tree')
 
574
        self.new_tree.lock_write()
 
575
        self.addCleanup(self.new_tree.unlock)
 
576
        self.differ = DiffTree(self.old_tree, self.new_tree, StringIO())
 
577
 
 
578
    def test_diff_text(self):
 
579
        self.build_tree_contents([('old-tree/olddir/',),
 
580
                                  ('old-tree/olddir/oldfile', 'old\n')])
 
581
        self.old_tree.add('olddir')
 
582
        self.old_tree.add('olddir/oldfile', 'file-id')
 
583
        self.build_tree_contents([('new-tree/newdir/',),
 
584
                                  ('new-tree/newdir/newfile', 'new\n')])
 
585
        self.new_tree.add('newdir')
 
586
        self.new_tree.add('newdir/newfile', 'file-id')
 
587
        differ = DiffText(self.old_tree, self.new_tree, StringIO())
 
588
        differ.diff_text('file-id', None, 'old label', 'new label')
 
589
        self.assertEqual(
 
590
            '--- old label\n+++ new label\n@@ -1,1 +0,0 @@\n-old\n\n',
 
591
            differ.to_file.getvalue())
 
592
        differ.to_file.seek(0)
 
593
        differ.diff_text(None, 'file-id', 'old label', 'new label')
 
594
        self.assertEqual(
 
595
            '--- old label\n+++ new label\n@@ -0,0 +1,1 @@\n+new\n\n',
 
596
            differ.to_file.getvalue())
 
597
        differ.to_file.seek(0)
 
598
        differ.diff_text('file-id', 'file-id', 'old label', 'new label')
 
599
        self.assertEqual(
 
600
            '--- old label\n+++ new label\n@@ -1,1 +1,1 @@\n-old\n+new\n\n',
 
601
            differ.to_file.getvalue())
 
602
 
 
603
    def test_diff_symlink(self):
 
604
        differ = DiffSymlink(self.old_tree, self.new_tree, StringIO())
 
605
        differ.diff_symlink('old target', None)
 
606
        self.assertEqual("=== target was 'old target'\n",
 
607
                         differ.to_file.getvalue())
 
608
 
 
609
        differ = DiffSymlink(self.old_tree, self.new_tree, StringIO())
 
610
        differ.diff_symlink(None, 'new target')
 
611
        self.assertEqual("=== target is 'new target'\n",
 
612
                         differ.to_file.getvalue())
 
613
 
 
614
        differ = DiffSymlink(self.old_tree, self.new_tree, StringIO())
 
615
        differ.diff_symlink('old target', 'new target')
 
616
        self.assertEqual("=== target changed 'old target' => 'new target'\n",
 
617
                         differ.to_file.getvalue())
 
618
 
 
619
    def test_diff(self):
 
620
        self.build_tree_contents([('old-tree/olddir/',),
 
621
                                  ('old-tree/olddir/oldfile', 'old\n')])
 
622
        self.old_tree.add('olddir')
 
623
        self.old_tree.add('olddir/oldfile', 'file-id')
 
624
        self.build_tree_contents([('new-tree/newdir/',),
 
625
                                  ('new-tree/newdir/newfile', 'new\n')])
 
626
        self.new_tree.add('newdir')
 
627
        self.new_tree.add('newdir/newfile', 'file-id')
 
628
        self.differ.diff('file-id', 'olddir/oldfile', 'newdir/newfile')
 
629
        self.assertContainsRe(
 
630
            self.differ.to_file.getvalue(),
 
631
            r'--- olddir/oldfile.*\n\+\+\+ newdir/newfile.*\n\@\@ -1,1 \+1,1'
 
632
             ' \@\@\n-old\n\+new\n\n')
 
633
 
 
634
    def test_diff_kind_change(self):
 
635
        self.build_tree_contents([('old-tree/olddir/',),
 
636
                                  ('old-tree/olddir/oldfile', 'old\n')])
 
637
        self.old_tree.add('olddir')
 
638
        self.old_tree.add('olddir/oldfile', 'file-id')
 
639
        self.build_tree(['new-tree/newdir/'])
 
640
        os.symlink('new', 'new-tree/newdir/newfile')
 
641
        self.new_tree.add('newdir')
 
642
        self.new_tree.add('newdir/newfile', 'file-id')
 
643
        self.differ.diff('file-id', 'olddir/oldfile', 'newdir/newfile')
 
644
        self.assertContainsRe(
 
645
            self.differ.to_file.getvalue(),
 
646
            r'--- olddir/oldfile.*\n\+\+\+ newdir/newfile.*\n\@\@ -1,1 \+0,0'
 
647
             ' \@\@\n-old\n\n')
 
648
        self.assertContainsRe(self.differ.to_file.getvalue(),
 
649
                              "=== target is 'new'\n")
 
650
 
 
651
    def test_diff_directory(self):
 
652
        self.build_tree(['new-tree/new-dir/'])
 
653
        self.new_tree.add('new-dir', 'new-dir-id')
 
654
        self.differ.diff('new-dir-id', None, 'new-dir')
 
655
        self.assertEqual(self.differ.to_file.getvalue(), '')
 
656
 
 
657
    def create_old_new(self):
 
658
        self.build_tree_contents([('old-tree/olddir/',),
 
659
                                  ('old-tree/olddir/oldfile', 'old\n')])
 
660
        self.old_tree.add('olddir')
 
661
        self.old_tree.add('olddir/oldfile', 'file-id')
 
662
        self.build_tree_contents([('new-tree/newdir/',),
 
663
                                  ('new-tree/newdir/newfile', 'new\n')])
 
664
        self.new_tree.add('newdir')
 
665
        self.new_tree.add('newdir/newfile', 'file-id')
 
666
 
 
667
    def test_register_diff(self):
 
668
        self.create_old_new()
 
669
        old_diff_factories = DiffTree.diff_factories
 
670
        DiffTree.diff_factories=old_diff_factories[:]
 
671
        DiffTree.diff_factories.insert(0, DiffWasIs.from_diff_tree)
 
672
        try:
 
673
            differ = DiffTree(self.old_tree, self.new_tree, StringIO())
 
674
        finally:
 
675
            DiffTree.diff_factories = old_diff_factories
 
676
        differ.diff('file-id', 'olddir/oldfile', 'newdir/newfile')
 
677
        self.assertNotContainsRe(
 
678
            differ.to_file.getvalue(),
 
679
            r'--- olddir/oldfile.*\n\+\+\+ newdir/newfile.*\n\@\@ -1,1 \+1,1'
 
680
             ' \@\@\n-old\n\+new\n\n')
 
681
        self.assertContainsRe(differ.to_file.getvalue(),
 
682
                              'was: old\nis: new\n')
 
683
 
 
684
    def test_extra_factories(self):
 
685
        self.create_old_new()
 
686
        differ = DiffTree(self.old_tree, self.new_tree, StringIO(),
 
687
                            extra_factories=[DiffWasIs.from_diff_tree])
 
688
        differ.diff('file-id', 'olddir/oldfile', 'newdir/newfile')
 
689
        self.assertNotContainsRe(
 
690
            differ.to_file.getvalue(),
 
691
            r'--- olddir/oldfile.*\n\+\+\+ newdir/newfile.*\n\@\@ -1,1 \+1,1'
 
692
             ' \@\@\n-old\n\+new\n\n')
 
693
        self.assertContainsRe(differ.to_file.getvalue(),
 
694
                              'was: old\nis: new\n')
 
695
 
 
696
 
547
697
class TestPatienceDiffLib(TestCase):
548
698
 
549
699
    def setUp(self):