~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to tools/testweave.py

  • Committer: Martin Pool
  • Date: 2005-07-15 22:55:10 UTC
  • Revision ID: mbp@sourcefrog.net-20050715225510-ebb2753f499f71e5
- add more test cases for weave_merge

Show diffs side-by-side

added added

removed removed

Lines of Context:
686
686
        self.check_read_write(k)
687
687
 
688
688
 
 
689
 
 
690
class MergeCases(TestBase):
 
691
    def doMerge(self, base, a, b, mp):
 
692
        from cStringIO import StringIO
 
693
        from textwrap import dedent
 
694
 
 
695
        def addcrlf(x):
 
696
            return x + '\n'
 
697
        
 
698
        w = Weave()
 
699
        w.add([], map(addcrlf, base))
 
700
        w.add([0], map(addcrlf, a))
 
701
        w.add([0], map(addcrlf, b))
 
702
 
 
703
        self.log('merge plan:')
 
704
        p = list(w.plan_merge(1, 2))
 
705
        for state, line in p:
 
706
            if line:
 
707
                self.log('%12s | %s' % (state, line[:-1]))
 
708
 
 
709
        self.log('merge:')
 
710
        mt = StringIO()
 
711
        mt.writelines(w.weave_merge(p))
 
712
        mt.seek(0)
 
713
        self.log(mt.getvalue())
 
714
 
 
715
        mp = map(addcrlf, mp)
 
716
        self.assertEqual(mt.readlines(), mp)
 
717
        
 
718
        
 
719
    def testOneInsert(self):
 
720
        self.doMerge([],
 
721
                     ['aa'],
 
722
                     [],
 
723
                     ['aa'])
 
724
 
 
725
    def testSeparateInserts(self):
 
726
        self.doMerge(['aaa', 'bbb', 'ccc'],
 
727
                     ['aaa', 'xxx', 'bbb', 'ccc'],
 
728
                     ['aaa', 'bbb', 'yyy', 'ccc'],
 
729
                     ['aaa', 'xxx', 'bbb', 'yyy', 'ccc'])
 
730
 
 
731
    def testSameInsert(self):
 
732
        self.doMerge(['aaa', 'bbb', 'ccc'],
 
733
                     ['aaa', 'xxx', 'bbb', 'ccc'],
 
734
                     ['aaa', 'xxx', 'bbb', 'yyy', 'ccc'],
 
735
                     ['aaa', 'xxx', 'bbb', 'yyy', 'ccc'])
 
736
 
 
737
    def testOverlappedInsert(self):
 
738
        self.doMerge(['aaa', 'bbb'],
 
739
                     ['aaa', 'xxx', 'yyy', 'bbb'],
 
740
                     ['aaa', 'xxx', 'bbb'],
 
741
                     ['aaa', '<<<<', 'xxx', 'yyy', '====', 'xxx', '>>>>', 'bbb'])
 
742
 
 
743
        # really it ought to reduce this to 
 
744
        # ['aaa', 'xxx', 'yyy', 'bbb']
 
745
 
 
746
 
 
747
    def testClashReplace(self):
 
748
        self.doMerge(['aaa'],
 
749
                     ['xxx'],
 
750
                     ['yyy', 'zzz'],
 
751
                     ['<<<<', 'xxx', '====', 'yyy', 'zzz', '>>>>'])
 
752
 
 
753
    def testNonClashInsert(self):
 
754
        self.doMerge(['aaa'],
 
755
                     ['xxx', 'aaa'],
 
756
                     ['yyy', 'zzz'],
 
757
                     ['<<<<', 'xxx', 'aaa', '====', 'yyy', 'zzz', '>>>>'])
 
758
 
 
759
        self.doMerge(['aaa'],
 
760
                     ['aaa'],
 
761
                     ['yyy', 'zzz'],
 
762
                     ['yyy', 'zzz'])
 
763
    
 
764
 
 
765
 
689
766
def testweave():
690
767
    import testsweet
691
768
    from unittest import TestSuite, TestLoader