~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_weave.py

  • Committer: John Arbash Meinel
  • Author(s): Mark Hammond
  • Date: 2008-09-09 17:02:21 UTC
  • mto: This revision was merged to the branch mainline in revision 3697.
  • Revision ID: john@arbash-meinel.com-20080909170221-svim3jw2mrz0amp3
An updated transparent icon for bzr.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2011, 2016 Canonical Ltd
 
1
# Copyright (C) 2005 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
 
18
18
# TODO: tests regarding version names
19
 
# TODO: rbc 20050108 test that join does not leave an inconsistent weave
 
19
# TODO: rbc 20050108 test that join does not leave an inconsistent weave 
20
20
#       if it fails.
21
21
 
22
22
"""test suite for weave algorithm"""
28
28
    )
29
29
from bzrlib.osutils import sha_string
30
30
from bzrlib.tests import TestCase, TestCaseInTempDir
31
 
from bzrlib.weave import Weave, WeaveFormatError
 
31
from bzrlib.weave import Weave, WeaveFormatError, WeaveError
32
32
from bzrlib.weavefile import write_weave, read_weave
33
33
 
34
34
 
64
64
 
65
65
class WeaveContains(TestBase):
66
66
    """Weave __contains__ operator"""
67
 
 
68
67
    def runTest(self):
69
68
        k = Weave(get_scope=lambda:None)
70
69
        self.assertFalse('foo' in k)
73
72
 
74
73
 
75
74
class Easy(TestBase):
76
 
 
77
75
    def runTest(self):
78
76
        k = Weave()
79
77
 
80
78
 
81
79
class AnnotateOne(TestBase):
82
 
 
83
80
    def runTest(self):
84
81
        k = Weave()
85
82
        k.add_lines('text0', [], TEXT_0)
89
86
 
90
87
class InvalidAdd(TestBase):
91
88
    """Try to use invalid version number during add."""
92
 
 
93
89
    def runTest(self):
94
90
        k = Weave()
95
91
 
111
107
 
112
108
 
113
109
class InvalidRepeatedAdd(TestBase):
114
 
 
115
110
    def runTest(self):
116
111
        k = Weave()
117
112
        k.add_lines('basis', [], TEXT_0)
126
121
                          'text0',
127
122
                          ['basis'],         # not the right parents
128
123
                          TEXT_0)
129
 
 
 
124
        
130
125
 
131
126
class InsertLines(TestBase):
132
127
    """Store a revision that adds one line to the original.
175
170
              ['text0', 'text1', 'text3'],
176
171
              ['line 1', 'aaa', 'middle line', 'bbb', 'line 2', 'ccc'])
177
172
 
178
 
        self.assertEqual(k.annotate('text4'),
 
173
        self.assertEqual(k.annotate('text4'), 
179
174
                         [('text0', 'line 1'),
180
175
                          ('text4', 'aaa'),
181
176
                          ('text3', 'middle line'),
194
189
        base_text = ['one', 'two', 'three', 'four']
195
190
 
196
191
        k.add_lines('text0', [], base_text)
197
 
 
 
192
        
198
193
        texts = [['one', 'two', 'three'],
199
194
                 ['two', 'three', 'four'],
200
195
                 ['one', 'four'],
231
226
                ]
232
227
        ################################### SKIPPED
233
228
        # Weave.get doesn't trap this anymore
234
 
        return
 
229
        return 
235
230
 
236
231
        self.assertRaises(WeaveFormatError,
237
232
                          k.get_lines,
238
 
                          0)
 
233
                          0)        
239
234
 
240
235
 
241
236
class CannedDelete(TestBase):
283
278
                'line to be deleted',
284
279
                (']', 1),
285
280
                ('{', 1),
286
 
                'replacement line',
 
281
                'replacement line',                
287
282
                ('}', 1),
288
283
                'last line',
289
284
                ('}', 0),
326
321
 
327
322
        ################################### SKIPPED
328
323
        # Weave.get doesn't trap this anymore
329
 
        return
 
324
        return 
330
325
 
331
326
 
332
327
        self.assertRaises(WeaveFormatError,
404
399
                          '  added in version 1',
405
400
                          '  also from v1',
406
401
                          '}'])
407
 
 
 
402
                       
408
403
        self.assertEqual(k.get_lines(2),
409
404
                         ['foo {',
410
405
                          '  added in v2',
416
411
                          '  added in v2',
417
412
                          '  also from v1',
418
413
                          '}'])
419
 
 
 
414
                         
420
415
 
421
416
class DeleteLines2(TestBase):
422
417
    """Test recording revisions that delete lines.
498
493
                ('}', 1),
499
494
                ('{', 2),
500
495
                "alternative second line",
501
 
                ('}', 2),
 
496
                ('}', 2),                
502
497
                ]
503
498
 
504
499
        k._sha1s = [sha_string('first line')
526
521
 
527
522
        text0 = ['cheddar', 'stilton', 'gruyere']
528
523
        text1 = ['cheddar', 'blue vein', 'neufchatel', 'chevre']
529
 
 
 
524
        
530
525
        k.add_lines('text0', [], text0)
531
526
        k.add_lines('text1', ['text0'], text1)
532
527
 
538
533
 
539
534
class Merge(TestBase):
540
535
    """Storage of versions that merge diverged parents"""
541
 
 
542
536
    def runTest(self):
543
537
        k = Weave()
544
538
 
588
582
 
589
583
        merged = k.merge([1, 2])
590
584
 
591
 
        self.assertEqual([[['aaa']],
 
585
        self.assertEquals([[['aaa']],
592
586
                           [['111'], ['222']],
593
587
                           [['bbb']]])
594
588
 
615
609
            A Jug of Wine, a Loaf of Bread, -- and Thou
616
610
            Beside me singing in the Wilderness --
617
611
            Oh, Wilderness were Paradise enow!""",
618
 
 
 
612
            
619
613
            """A Book of Verses underneath the Bough,
620
614
            A Jug of Wine, a Loaf of Bread, -- and Thou
621
615
            Beside me singing in the Wilderness --
655
649
 
656
650
 
657
651
class JoinWeavesTests(TestBase):
658
 
 
659
652
    def setUp(self):
660
653
        super(JoinWeavesTests, self).setUp()
661
654
        self.weave1 = Weave()
681
674
        write_weave(w, tmpf)
682
675
 
683
676
        # Because we are corrupting, we need to make sure we have the exact text
684
 
        self.assertEqual('# bzr weave file v5\n'
 
677
        self.assertEquals('# bzr weave file v5\n'
685
678
                          'i\n1 f572d396fae9206628714fb2ce00f72e94f2258f\nn v1\n\n'
686
679
                          'i 0\n1 90f265c6e75f1c8f9ab76dcf85528352c5f215ef\nn v2\n\n'
687
680
                          'w\n{ 0\n. hello\n}\n{ 1\n. there\n}\nW\n',
731
724
 
732
725
class InstrumentedWeave(Weave):
733
726
    """Keep track of how many times functions are called."""
734
 
 
 
727
    
735
728
    def __init__(self, weave_name=None):
736
729
        self._extract_count = 0
737
730
        Weave.__init__(self, weave_name=weave_name)
760
753
 
761
754
 
762
755
class TestWeaveFile(TestCaseInTempDir):
763
 
 
 
756
    
764
757
    def test_empty_file(self):
765
758
        f = open('empty.weave', 'wb+')
766
759
        try: