/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

  • Committer: Lukáš Lalinský
  • Date: 2007-12-17 17:28:25 UTC
  • mfrom: (3120 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3123.
  • Revision ID: lalinsky@gmail.com-20071217172825-tr3pqm1mhvs3gwnn
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
231
239
                          ]
232
240
                          , lines)
233
241
 
 
242
    def test_internal_diff_no_content(self):
 
243
        output = StringIO()
 
244
        internal_diff(u'old', [], u'new', [], output)
 
245
        self.assertEqual('', output.getvalue())
 
246
 
 
247
    def test_internal_diff_no_changes(self):
 
248
        output = StringIO()
 
249
        internal_diff(u'old', ['text\n', 'contents\n'],
 
250
                      u'new', ['text\n', 'contents\n'],
 
251
                      output)
 
252
        self.assertEqual('', output.getvalue())
 
253
 
234
254
    def test_internal_diff_returns_bytes(self):
235
255
        import StringIO
236
256
        output = StringIO.StringIO()
544
564
        self.assertContainsRe(diff, "=== modified file 'mod_%s'"%autf8)
545
565
        self.assertContainsRe(diff, "=== removed file 'del_%s'"%autf8)
546
566
 
 
567
 
 
568
class DiffWasIs(DiffPath):
 
569
 
 
570
    def diff(self, file_id, old_path, new_path, old_kind, new_kind):
 
571
        self.to_file.write('was: ')
 
572
        self.to_file.write(self.old_tree.get_file(file_id).read())
 
573
        self.to_file.write('is: ')
 
574
        self.to_file.write(self.new_tree.get_file(file_id).read())
 
575
        pass
 
576
 
 
577
 
 
578
class TestDiffTree(TestCaseWithTransport):
 
579
 
 
580
    def setUp(self):
 
581
        TestCaseWithTransport.setUp(self)
 
582
        self.old_tree = self.make_branch_and_tree('old-tree')
 
583
        self.old_tree.lock_write()
 
584
        self.addCleanup(self.old_tree.unlock)
 
585
        self.new_tree = self.make_branch_and_tree('new-tree')
 
586
        self.new_tree.lock_write()
 
587
        self.addCleanup(self.new_tree.unlock)
 
588
        self.differ = DiffTree(self.old_tree, self.new_tree, StringIO())
 
589
 
 
590
    def test_diff_text(self):
 
591
        self.build_tree_contents([('old-tree/olddir/',),
 
592
                                  ('old-tree/olddir/oldfile', 'old\n')])
 
593
        self.old_tree.add('olddir')
 
594
        self.old_tree.add('olddir/oldfile', 'file-id')
 
595
        self.build_tree_contents([('new-tree/newdir/',),
 
596
                                  ('new-tree/newdir/newfile', 'new\n')])
 
597
        self.new_tree.add('newdir')
 
598
        self.new_tree.add('newdir/newfile', 'file-id')
 
599
        differ = DiffText(self.old_tree, self.new_tree, StringIO())
 
600
        differ.diff_text('file-id', None, 'old label', 'new label')
 
601
        self.assertEqual(
 
602
            '--- old label\n+++ new label\n@@ -1,1 +0,0 @@\n-old\n\n',
 
603
            differ.to_file.getvalue())
 
604
        differ.to_file.seek(0)
 
605
        differ.diff_text(None, 'file-id', 'old label', 'new label')
 
606
        self.assertEqual(
 
607
            '--- old label\n+++ new label\n@@ -0,0 +1,1 @@\n+new\n\n',
 
608
            differ.to_file.getvalue())
 
609
        differ.to_file.seek(0)
 
610
        differ.diff_text('file-id', 'file-id', 'old label', 'new label')
 
611
        self.assertEqual(
 
612
            '--- old label\n+++ new label\n@@ -1,1 +1,1 @@\n-old\n+new\n\n',
 
613
            differ.to_file.getvalue())
 
614
 
 
615
    def test_diff_deletion(self):
 
616
        self.build_tree_contents([('old-tree/file', 'contents'),
 
617
                                  ('new-tree/file', 'contents')])
 
618
        self.old_tree.add('file', 'file-id')
 
619
        self.new_tree.add('file', 'file-id')
 
620
        os.unlink('new-tree/file')
 
621
        self.differ.show_diff(None)
 
622
        self.assertContainsRe(self.differ.to_file.getvalue(), '-contents')
 
623
 
 
624
    def test_diff_creation(self):
 
625
        self.build_tree_contents([('old-tree/file', 'contents'),
 
626
                                  ('new-tree/file', 'contents')])
 
627
        self.old_tree.add('file', 'file-id')
 
628
        self.new_tree.add('file', 'file-id')
 
629
        os.unlink('old-tree/file')
 
630
        self.differ.show_diff(None)
 
631
        self.assertContainsRe(self.differ.to_file.getvalue(), '\+contents')
 
632
 
 
633
    def test_diff_symlink(self):
 
634
        differ = DiffSymlink(self.old_tree, self.new_tree, StringIO())
 
635
        differ.diff_symlink('old target', None)
 
636
        self.assertEqual("=== target was 'old target'\n",
 
637
                         differ.to_file.getvalue())
 
638
 
 
639
        differ = DiffSymlink(self.old_tree, self.new_tree, StringIO())
 
640
        differ.diff_symlink(None, 'new target')
 
641
        self.assertEqual("=== target is 'new target'\n",
 
642
                         differ.to_file.getvalue())
 
643
 
 
644
        differ = DiffSymlink(self.old_tree, self.new_tree, StringIO())
 
645
        differ.diff_symlink('old target', 'new target')
 
646
        self.assertEqual("=== target changed 'old target' => 'new target'\n",
 
647
                         differ.to_file.getvalue())
 
648
 
 
649
    def test_diff(self):
 
650
        self.build_tree_contents([('old-tree/olddir/',),
 
651
                                  ('old-tree/olddir/oldfile', 'old\n')])
 
652
        self.old_tree.add('olddir')
 
653
        self.old_tree.add('olddir/oldfile', 'file-id')
 
654
        self.build_tree_contents([('new-tree/newdir/',),
 
655
                                  ('new-tree/newdir/newfile', 'new\n')])
 
656
        self.new_tree.add('newdir')
 
657
        self.new_tree.add('newdir/newfile', 'file-id')
 
658
        self.differ.diff('file-id', 'olddir/oldfile', 'newdir/newfile')
 
659
        self.assertContainsRe(
 
660
            self.differ.to_file.getvalue(),
 
661
            r'--- olddir/oldfile.*\n\+\+\+ newdir/newfile.*\n\@\@ -1,1 \+1,1'
 
662
             ' \@\@\n-old\n\+new\n\n')
 
663
 
 
664
    def test_diff_kind_change(self):
 
665
        self.build_tree_contents([('old-tree/olddir/',),
 
666
                                  ('old-tree/olddir/oldfile', 'old\n')])
 
667
        self.old_tree.add('olddir')
 
668
        self.old_tree.add('olddir/oldfile', 'file-id')
 
669
        self.build_tree(['new-tree/newdir/'])
 
670
        os.symlink('new', 'new-tree/newdir/newfile')
 
671
        self.new_tree.add('newdir')
 
672
        self.new_tree.add('newdir/newfile', 'file-id')
 
673
        self.differ.diff('file-id', 'olddir/oldfile', 'newdir/newfile')
 
674
        self.assertContainsRe(
 
675
            self.differ.to_file.getvalue(),
 
676
            r'--- olddir/oldfile.*\n\+\+\+ newdir/newfile.*\n\@\@ -1,1 \+0,0'
 
677
             ' \@\@\n-old\n\n')
 
678
        self.assertContainsRe(self.differ.to_file.getvalue(),
 
679
                              "=== target is 'new'\n")
 
680
 
 
681
    def test_diff_directory(self):
 
682
        self.build_tree(['new-tree/new-dir/'])
 
683
        self.new_tree.add('new-dir', 'new-dir-id')
 
684
        self.differ.diff('new-dir-id', None, 'new-dir')
 
685
        self.assertEqual(self.differ.to_file.getvalue(), '')
 
686
 
 
687
    def create_old_new(self):
 
688
        self.build_tree_contents([('old-tree/olddir/',),
 
689
                                  ('old-tree/olddir/oldfile', 'old\n')])
 
690
        self.old_tree.add('olddir')
 
691
        self.old_tree.add('olddir/oldfile', 'file-id')
 
692
        self.build_tree_contents([('new-tree/newdir/',),
 
693
                                  ('new-tree/newdir/newfile', 'new\n')])
 
694
        self.new_tree.add('newdir')
 
695
        self.new_tree.add('newdir/newfile', 'file-id')
 
696
 
 
697
    def test_register_diff(self):
 
698
        self.create_old_new()
 
699
        old_diff_factories = DiffTree.diff_factories
 
700
        DiffTree.diff_factories=old_diff_factories[:]
 
701
        DiffTree.diff_factories.insert(0, DiffWasIs.from_diff_tree)
 
702
        try:
 
703
            differ = DiffTree(self.old_tree, self.new_tree, StringIO())
 
704
        finally:
 
705
            DiffTree.diff_factories = old_diff_factories
 
706
        differ.diff('file-id', 'olddir/oldfile', 'newdir/newfile')
 
707
        self.assertNotContainsRe(
 
708
            differ.to_file.getvalue(),
 
709
            r'--- olddir/oldfile.*\n\+\+\+ newdir/newfile.*\n\@\@ -1,1 \+1,1'
 
710
             ' \@\@\n-old\n\+new\n\n')
 
711
        self.assertContainsRe(differ.to_file.getvalue(),
 
712
                              'was: old\nis: new\n')
 
713
 
 
714
    def test_extra_factories(self):
 
715
        self.create_old_new()
 
716
        differ = DiffTree(self.old_tree, self.new_tree, StringIO(),
 
717
                            extra_factories=[DiffWasIs.from_diff_tree])
 
718
        differ.diff('file-id', 'olddir/oldfile', 'newdir/newfile')
 
719
        self.assertNotContainsRe(
 
720
            differ.to_file.getvalue(),
 
721
            r'--- olddir/oldfile.*\n\+\+\+ newdir/newfile.*\n\@\@ -1,1 \+1,1'
 
722
             ' \@\@\n-old\n\+new\n\n')
 
723
        self.assertContainsRe(differ.to_file.getvalue(),
 
724
                              'was: old\nis: new\n')
 
725
 
 
726
 
547
727
class TestPatienceDiffLib(TestCase):
548
728
 
549
729
    def setUp(self):