~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/selftest/test_weave.py

  • Committer: Martin Pool
  • Date: 2005-09-13 08:04:41 UTC
  • Revision ID: mbp@sourcefrog.net-20050913080441-5a15cdaf498fdad3
- fix up weave tests for new test framework

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
18
 
19
19
 
 
20
# TODO: tests regarding version names
 
21
 
20
22
 
21
23
 
22
24
"""test suite for weave algorithm"""
25
27
import testsweet
26
28
from bzrlib.weave import Weave, WeaveFormatError
27
29
from bzrlib.weavefile import write_weave, read_weave
 
30
from bzrlib.selftest import TestCase
28
31
from pprint import pformat
29
32
 
30
33
 
46
49
 
47
50
 
48
51
 
49
 
class TestBase(testsweet.TestBase):
 
52
class TestBase(TestCase):
50
53
    def check_read_write(self, k):
51
54
        """Check the weave k can be written & re-read."""
52
55
        from tempfile import TemporaryFile
60
63
            tf.seek(0)
61
64
            self.log('serialized weave:')
62
65
            self.log(tf.read())
 
66
 
 
67
            self.log('')
 
68
            self.log('parents: %s' % (k._parents == k2._parents))
 
69
            self.log('         %r' % k._parents)
 
70
            self.log('         %r' % k2._parents)
 
71
            self.log('')
 
72
 
 
73
            
63
74
            self.fail('read/write check failed')
64
75
        
65
76
        
74
85
    """Store and retrieve a simple text."""
75
86
    def runTest(self):
76
87
        k = Weave()
77
 
        idx = k.add([], TEXT_0)
 
88
        idx = k.add('text0', [], TEXT_0)
78
89
        self.assertEqual(k.get(idx), TEXT_0)
79
90
        self.assertEqual(idx, 0)
80
91
 
83
94
class AnnotateOne(TestBase):
84
95
    def runTest(self):
85
96
        k = Weave()
86
 
        k.add([], TEXT_0)
 
97
        k.add('text0', [], TEXT_0)
87
98
        self.assertEqual(k.annotate(0),
88
99
                         [(0, TEXT_0[0])])
89
100
 
92
103
    def runTest(self):
93
104
        k = Weave()
94
105
 
95
 
        idx = k.add([], TEXT_0)
 
106
        idx = k.add('text0', [], TEXT_0)
96
107
        self.assertEqual(idx, 0)
97
108
 
98
 
        idx = k.add([], TEXT_1)
 
109
        idx = k.add('text1', [], TEXT_1)
99
110
        self.assertEqual(idx, 1)
100
111
 
101
112
        self.assertEqual(k.get(0), TEXT_0)
102
113
        self.assertEqual(k.get(1), TEXT_1)
103
114
 
104
 
        k.dump(self.TEST_LOG)
105
 
 
106
115
 
107
116
 
108
117
class InvalidAdd(TestBase):
112
121
 
113
122
        self.assertRaises(IndexError,
114
123
                          k.add,
 
124
                          'text0',
115
125
                          [69],
116
126
                          ['new text!'])
117
127
 
124
134
    def runTest(self):
125
135
        k = Weave()
126
136
 
127
 
        k.add([], ['line 1'])
128
 
        k.add([0], ['line 1', 'line 2'])
 
137
        k.add('text0', [], ['line 1'])
 
138
        k.add('text1', [0], ['line 1', 'line 2'])
129
139
 
130
140
        self.assertEqual(k.annotate(0),
131
141
                         [(0, 'line 1')])
138
148
                         [(0, 'line 1'),
139
149
                          (1, 'line 2')])
140
150
 
141
 
        k.add([0], ['line 1', 'diverged line'])
 
151
        k.add('text2', [0], ['line 1', 'diverged line'])
142
152
 
143
153
        self.assertEqual(k.annotate(2),
144
154
                         [(0, 'line 1'),
145
155
                          (2, 'diverged line')])
146
156
 
147
157
        text3 = ['line 1', 'middle line', 'line 2']
148
 
        k.add([0, 1],
 
158
        k.add('text3',
 
159
              [0, 1],
149
160
              text3)
150
161
 
151
162
        # self.log("changes to text3: " + pformat(list(k._delta(set([0, 1]), text3))))
158
169
                          (1, 'line 2')])
159
170
 
160
171
        # now multiple insertions at different places
161
 
        k.add([0, 1, 3],
 
172
        k.add('text4',
 
173
              [0, 1, 3],
162
174
              ['line 1', 'aaa', 'middle line', 'bbb', 'line 2', 'ccc'])
163
175
 
164
176
        self.assertEqual(k.annotate(4), 
180
192
 
181
193
        base_text = ['one', 'two', 'three', 'four']
182
194
 
183
 
        k.add([], base_text)
 
195
        k.add('text0', [], base_text)
184
196
        
185
197
        texts = [['one', 'two', 'three'],
186
198
                 ['two', 'three', 'four'],
188
200
                 ['one', 'two', 'three', 'four'],
189
201
                 ]
190
202
 
 
203
        i = 1
191
204
        for t in texts:
192
 
            ver = k.add([0], t)
 
205
            ver = k.add('text%d' % i,
 
206
                        [0], t)
 
207
            i += 1
193
208
 
194
209
        self.log('final weave:')
195
210
        self.log('k._weave=' + pformat(k._weave))
406
421
    def runTest(self):
407
422
        k = Weave()
408
423
 
409
 
        k.add([], ["line the first",
 
424
        k.add('text0', [], ["line the first",
410
425
                   "line 2",
411
426
                   "line 3",
412
427
                   "fine"])
413
428
 
414
429
        self.assertEqual(len(k.get(0)), 4)
415
430
 
416
 
        k.add([0], ["line the first",
 
431
        k.add('text1', [0], ["line the first",
417
432
                   "fine"])
418
433
 
419
434
        self.assertEqual(k.get(1),
454
469
        self.assertEqual(k.get(0),
455
470
                         ["first line"])
456
471
 
457
 
        k.dump(self.TEST_LOG)
458
 
 
459
472
 
460
473
class DivergedIncludes(TestBase):
461
474
    """Weave with two diverged texts based on version 0.
501
514
        text0 = ['cheddar', 'stilton', 'gruyere']
502
515
        text1 = ['cheddar', 'blue vein', 'neufchatel', 'chevre']
503
516
        
504
 
        k.add([], text0)
505
 
        k.add([0], text1)
 
517
        k.add('text0', [], text0)
 
518
        k.add('text1', [0], text1)
506
519
 
507
520
        self.log('k._weave=' + pformat(k._weave))
508
521
 
522
535
                 ['header', '', 'line from 1', 'fixup line', 'line from 2'],
523
536
                 ]
524
537
 
525
 
        k.add([], texts[0])
526
 
        k.add([0], texts[1])
527
 
        k.add([0], texts[2])
528
 
        k.add([0, 1, 2], texts[3])
 
538
        k.add('text0', [], texts[0])
 
539
        k.add('text1', [0], texts[1])
 
540
        k.add('text2', [0], texts[2])
 
541
        k.add('merge', [0, 1, 2], texts[3])
529
542
 
530
543
        for i, t in enumerate(texts):
531
544
            self.assertEqual(k.get(i), t)
593
606
                 ['header', 'aaa', 'bbb', 'line from 2', 'more from 2'],
594
607
                 ]
595
608
 
596
 
        k.add([], texts[0])
597
 
        k.add([0], texts[1])
598
 
        k.add([0], texts[2])
 
609
        k.add('text0', [], texts[0])
 
610
        k.add('text1', [0], texts[1])
 
611
        k.add('text2', [0], texts[2])
599
612
 
600
613
        self.log('k._weave=' + pformat(k._weave))
601
614
 
641
654
 
642
655
        k = Weave()
643
656
        parents = set()
 
657
        i = 0
644
658
        for t in texts:
645
 
            ver = k.add(list(parents), t)
 
659
            ver = k.add('text%d' % i,
 
660
                        list(parents), t)
646
661
            parents.add(ver)
 
662
            i += 1
647
663
 
648
664
        self.log("k._weave=" + pformat(k._weave))
649
665
 
663
679
            return x + '\n'
664
680
        
665
681
        w = Weave()
666
 
        w.add([], map(addcrlf, base))
667
 
        w.add([0], map(addcrlf, a))
668
 
        w.add([0], map(addcrlf, b))
 
682
        w.add('text0', [], map(addcrlf, base))
 
683
        w.add('text1', [0], map(addcrlf, a))
 
684
        w.add('text2', [0], map(addcrlf, b))
669
685
 
670
686
        self.log('weave is:')
671
687
        tmpf = StringIO()
752
768
    
753
769
 
754
770
 
755
 
def testweave():
756
 
    import testsweet
757
 
    from unittest import TestSuite, TestLoader
758
 
    import testweave
759
 
 
760
 
    tl = TestLoader()
761
 
    suite = TestSuite()
762
 
    suite.addTest(tl.loadTestsFromModule(testweave))
763
 
    
764
 
    return int(not testsweet.run_suite(suite)) # for shell 0=true
765
 
 
766
 
 
767
771
if __name__ == '__main__':
768
772
    import sys
769
 
    sys.exit(testweave())
 
773
    import unittest
 
774
    sys.exit(unittest.main())
770
775