/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 breezy/tests/test_weave.py

  • Committer: Jelmer Vernooij
  • Date: 2018-05-22 02:05:12 UTC
  • mto: (6973.12.2 python3-k)
  • mto: This revision was merged to the branch mainline in revision 6992.
  • Revision ID: jelmer@jelmer.uk-20180522020512-btpj2jchdlehi3en
Add more bees.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005 Canonical Ltd
 
1
# Copyright (C) 2005-2011, 2016 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
23
23
 
24
24
from pprint import pformat
25
25
 
26
 
from bzrlib import (
 
26
from .. import (
27
27
    errors,
28
28
    )
29
 
from bzrlib.osutils import sha_string
30
 
from bzrlib.tests import TestCase, TestCaseInTempDir
31
 
from bzrlib.weave import Weave, WeaveFormatError, WeaveError
32
 
from bzrlib.weavefile import write_weave, read_weave
 
29
from ..osutils import sha_string
 
30
from ..sixish import (
 
31
    BytesIO,
 
32
    )
 
33
from . import TestCase, TestCaseInTempDir
 
34
from ..bzr.weave import Weave, WeaveFormatError, WeaveInvalidChecksum
 
35
from ..bzr.weavefile import write_weave, read_weave
33
36
 
34
37
 
35
38
# texts for use in testing
64
67
 
65
68
class WeaveContains(TestBase):
66
69
    """Weave __contains__ operator"""
 
70
 
67
71
    def runTest(self):
68
72
        k = Weave(get_scope=lambda:None)
69
73
        self.assertFalse('foo' in k)
72
76
 
73
77
 
74
78
class Easy(TestBase):
 
79
 
75
80
    def runTest(self):
76
81
        k = Weave()
77
82
 
78
83
 
79
84
class AnnotateOne(TestBase):
 
85
 
80
86
    def runTest(self):
81
87
        k = Weave()
82
88
        k.add_lines('text0', [], TEXT_0)
86
92
 
87
93
class InvalidAdd(TestBase):
88
94
    """Try to use invalid version number during add."""
 
95
 
89
96
    def runTest(self):
90
97
        k = Weave()
91
98
 
107
114
 
108
115
 
109
116
class InvalidRepeatedAdd(TestBase):
 
117
 
110
118
    def runTest(self):
111
119
        k = Weave()
112
120
        k.add_lines('basis', [], TEXT_0)
337
345
        k._parents = [frozenset(),
338
346
                frozenset([0]),
339
347
                frozenset([0]),
340
 
                frozenset([0,1,2]),
 
348
                frozenset([0, 1, 2]),
341
349
                ]
342
350
        k._weave = [('{', 0),
343
351
                'foo {',
370
378
        k._parents = [frozenset(),
371
379
                frozenset([0]),
372
380
                frozenset([0]),
373
 
                frozenset([0,1,2]),
 
381
                frozenset([0, 1, 2]),
374
382
                ]
375
383
        k._weave = [('{', 0),
376
384
                'foo {',
533
541
 
534
542
class Merge(TestBase):
535
543
    """Storage of versions that merge diverged parents"""
 
544
 
536
545
    def runTest(self):
537
546
        k = Weave()
538
547
 
582
591
 
583
592
        merged = k.merge([1, 2])
584
593
 
585
 
        self.assertEquals([[['aaa']],
 
594
        self.assertEqual([[['aaa']],
586
595
                           [['111'], ['222']],
587
596
                           [['bbb']]])
588
597
 
649
658
 
650
659
 
651
660
class JoinWeavesTests(TestBase):
 
661
 
652
662
    def setUp(self):
653
663
        super(JoinWeavesTests, self).setUp()
654
664
        self.weave1 = Weave()
664
674
        # Make sure that we can detect if a weave file has
665
675
        # been corrupted. This doesn't test all forms of corruption,
666
676
        # but it at least helps verify the data you get, is what you want.
667
 
        from cStringIO import StringIO
668
677
 
669
678
        w = Weave()
670
679
        w.add_lines('v1', [], ['hello\n'])
671
680
        w.add_lines('v2', ['v1'], ['hello\n', 'there\n'])
672
681
 
673
 
        tmpf = StringIO()
 
682
        tmpf = BytesIO()
674
683
        write_weave(w, tmpf)
675
684
 
676
685
        # Because we are corrupting, we need to make sure we have the exact text
677
 
        self.assertEquals('# bzr weave file v5\n'
 
686
        self.assertEqual('# bzr weave file v5\n'
678
687
                          'i\n1 f572d396fae9206628714fb2ce00f72e94f2258f\nn v1\n\n'
679
688
                          'i 0\n1 90f265c6e75f1c8f9ab76dcf85528352c5f215ef\nn v2\n\n'
680
689
                          'w\n{ 0\n. hello\n}\n{ 1\n. there\n}\nW\n',
681
690
                          tmpf.getvalue())
682
691
 
683
692
        # Change a single letter
684
 
        tmpf = StringIO('# bzr weave file v5\n'
685
 
                        'i\n1 f572d396fae9206628714fb2ce00f72e94f2258f\nn v1\n\n'
686
 
                        'i 0\n1 90f265c6e75f1c8f9ab76dcf85528352c5f215ef\nn v2\n\n'
687
 
                        'w\n{ 0\n. hello\n}\n{ 1\n. There\n}\nW\n')
 
693
        tmpf = BytesIO(b'# bzr weave file v5\n'
 
694
                       b'i\n1 f572d396fae9206628714fb2ce00f72e94f2258f\nn v1\n\n'
 
695
                       b'i 0\n1 90f265c6e75f1c8f9ab76dcf85528352c5f215ef\nn v2\n\n'
 
696
                       b'w\n{ 0\n. hello\n}\n{ 1\n. There\n}\nW\n')
688
697
 
689
698
        w = read_weave(tmpf)
690
699
 
691
700
        self.assertEqual('hello\n', w.get_text('v1'))
692
 
        self.assertRaises(errors.WeaveInvalidChecksum, w.get_text, 'v2')
693
 
        self.assertRaises(errors.WeaveInvalidChecksum, w.get_lines, 'v2')
694
 
        self.assertRaises(errors.WeaveInvalidChecksum, w.check)
 
701
        self.assertRaises(WeaveInvalidChecksum, w.get_text, 'v2')
 
702
        self.assertRaises(WeaveInvalidChecksum, w.get_lines, 'v2')
 
703
        self.assertRaises(WeaveInvalidChecksum, w.check)
695
704
 
696
705
        # Change the sha checksum
697
 
        tmpf = StringIO('# bzr weave file v5\n'
698
 
                        'i\n1 f572d396fae9206628714fb2ce00f72e94f2258f\nn v1\n\n'
699
 
                        'i 0\n1 f0f265c6e75f1c8f9ab76dcf85528352c5f215ef\nn v2\n\n'
700
 
                        'w\n{ 0\n. hello\n}\n{ 1\n. there\n}\nW\n')
 
706
        tmpf = BytesIO(b'# bzr weave file v5\n'
 
707
                       b'i\n1 f572d396fae9206628714fb2ce00f72e94f2258f\nn v1\n\n'
 
708
                       b'i 0\n1 f0f265c6e75f1c8f9ab76dcf85528352c5f215ef\nn v2\n\n'
 
709
                       b'w\n{ 0\n. hello\n}\n{ 1\n. there\n}\nW\n')
701
710
 
702
711
        w = read_weave(tmpf)
703
712
 
704
713
        self.assertEqual('hello\n', w.get_text('v1'))
705
 
        self.assertRaises(errors.WeaveInvalidChecksum, w.get_text, 'v2')
706
 
        self.assertRaises(errors.WeaveInvalidChecksum, w.get_lines, 'v2')
707
 
        self.assertRaises(errors.WeaveInvalidChecksum, w.check)
 
714
        self.assertRaises(WeaveInvalidChecksum, w.get_text, 'v2')
 
715
        self.assertRaises(WeaveInvalidChecksum, w.get_lines, 'v2')
 
716
        self.assertRaises(WeaveInvalidChecksum, w.check)
708
717
 
709
718
 
710
719
class TestWeave(TestCase):
739
748
 
740
749
    def test_compatible_parents(self):
741
750
        w1 = Weave('a')
742
 
        my_parents = set([1, 2, 3])
 
751
        my_parents = {1, 2, 3}
743
752
        # subsets are ok
744
 
        self.assertTrue(w1._compatible_parents(my_parents, set([3])))
 
753
        self.assertTrue(w1._compatible_parents(my_parents, {3}))
745
754
        # same sets
746
755
        self.assertTrue(w1._compatible_parents(my_parents, set(my_parents)))
747
756
        # same empty corner case
748
757
        self.assertTrue(w1._compatible_parents(set(), set()))
749
758
        # other cannot contain stuff my_parents does not
750
 
        self.assertFalse(w1._compatible_parents(set(), set([1])))
751
 
        self.assertFalse(w1._compatible_parents(my_parents, set([1, 2, 3, 4])))
752
 
        self.assertFalse(w1._compatible_parents(my_parents, set([4])))
 
759
        self.assertFalse(w1._compatible_parents(set(), {1}))
 
760
        self.assertFalse(w1._compatible_parents(my_parents, {1, 2, 3, 4}))
 
761
        self.assertFalse(w1._compatible_parents(my_parents, {4}))
753
762
 
754
763
 
755
764
class TestWeaveFile(TestCaseInTempDir):
756
765
 
757
766
    def test_empty_file(self):
758
 
        f = open('empty.weave', 'wb+')
759
 
        try:
760
 
            self.assertRaises(errors.WeaveFormatError,
761
 
                              read_weave, f)
762
 
        finally:
763
 
            f.close()
 
767
        with open('empty.weave', 'wb+') as f:
 
768
            self.assertRaises(WeaveFormatError, read_weave, f)