~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to tools/testweave.py

  • Committer: Martin Pool
  • Date: 2005-09-12 09:50:44 UTC
  • Revision ID: mbp@sourcefrog.net-20050912095044-6acfdb5611729987
- no tests in bzrlib.fetch anymore

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
 
24
24
"""test suite for weave algorithm"""
25
25
 
 
26
 
 
27
import testsweet
 
28
from bzrlib.weave import Weave, WeaveFormatError
 
29
from bzrlib.weavefile import write_weave, read_weave
26
30
from pprint import pformat
27
31
 
28
 
from bzrlib.weave import Weave, WeaveFormatError, WeaveError
29
 
from bzrlib.weavefile import write_weave, read_weave
30
 
from bzrlib.selftest import TestCase
31
 
from bzrlib.osutils import sha_string
 
32
 
 
33
try:
 
34
    set
 
35
    frozenset
 
36
except NameError:
 
37
    from sets import Set, ImmutableSet
 
38
    set = Set
 
39
    frozenset = ImmutableSet
 
40
    del Set, ImmutableSet
 
41
 
32
42
 
33
43
 
34
44
# texts for use in testing
38
48
 
39
49
 
40
50
 
41
 
class TestBase(TestCase):
 
51
class TestBase(testsweet.TestBase):
42
52
    def check_read_write(self, k):
43
53
        """Check the weave k can be written & re-read."""
44
54
        from tempfile import TemporaryFile
101
111
        self.assertEqual(k.get(0), TEXT_0)
102
112
        self.assertEqual(k.get(1), TEXT_1)
103
113
 
104
 
 
105
 
 
106
 
class AddWithGivenSha(TestBase):
107
 
    def runTest(self):
108
 
        """Add with caller-supplied SHA-1"""
109
 
        k = Weave()
110
 
 
111
 
        t = 'text0'
112
 
        k.add('text0', [], [t], sha1=sha_string(t))
 
114
        k.dump(self.TEST_LOG)
113
115
 
114
116
 
115
117
 
125
127
                          ['new text!'])
126
128
 
127
129
 
128
 
class RepeatedAdd(TestBase):
129
 
    """Add the same version twice; harmless."""
130
 
    def runTest(self):
131
 
        k = Weave()
132
 
        idx = k.add('text0', [], TEXT_0)
133
 
        idx2 = k.add('text0', [], TEXT_0)
134
 
        self.assertEqual(idx, idx2)
135
 
 
136
 
 
137
 
 
138
 
class InvalidRepeatedAdd(TestBase):
139
 
    def runTest(self):
140
 
        k = Weave()
141
 
        idx = k.add('text0', [], TEXT_0)
142
 
        self.assertRaises(WeaveError,
143
 
                          k.add,
144
 
                          'text0',
145
 
                          [],
146
 
                          ['not the same text'])
147
 
        self.assertRaises(WeaveError,
148
 
                          k.add,
149
 
                          'text0',
150
 
                          [12],         # not the right parents
151
 
                          TEXT_0)
152
 
        
153
 
 
154
 
 
155
130
class InsertLines(TestBase):
156
131
    """Store a revision that adds one line to the original.
157
132
 
495
470
        self.assertEqual(k.get(0),
496
471
                         ["first line"])
497
472
 
 
473
        k.dump(self.TEST_LOG)
 
474
 
498
475
 
499
476
class DivergedIncludes(TestBase):
500
477
    """Weave with two diverged texts based on version 0.
791
768
                     ['aaa', 'ddd', 'ccc'],
792
769
                     ['aaa', 'ccc'],
793
770
                     ['<<<<', 'aaa', '====', '>>>>', 'ccc'])
794
 
 
795
 
 
796
 
class JoinWeavesTests(TestBase):
797
 
    def setUp(self):
798
 
        super(JoinWeavesTests, self).setUp()
799
 
        self.weave1 = Weave()
800
 
        self.lines1 = ['hello\n']
801
 
        self.lines3 = ['hello\n', 'cruel\n', 'world\n']
802
 
        self.weave1.add('v1', [], self.lines1)
803
 
        self.weave1.add('v2', [0], ['hello\n', 'world\n'])
804
 
        self.weave1.add('v3', [1], self.lines3)
805
 
        
806
 
    def test_join_empty(self):
807
 
        """Join two empty weaves."""
808
 
        eq = self.assertEqual
809
 
        w1 = Weave()
810
 
        w2 = Weave()
811
 
        w1.join(w2)
812
 
        eq(w1.numversions(), 0)
813
 
        
814
 
    def test_join_empty_to_nonempty(self):
815
 
        """Join empty weave onto nonempty."""
816
 
        self.weave1.join(Weave())
817
 
        self.assertEqual(len(self.weave1), 3)
818
 
 
819
 
    def test_join_unrelated(self):
820
 
        """Join two weaves with no history in common."""
821
 
        wb = Weave()
822
 
        wb.add('b1', [], ['line from b\n'])
823
 
        w1 = self.weave1
824
 
        w1.join(wb)
825
 
        eq = self.assertEqual
826
 
        eq(len(w1), 4)
827
 
        eq(sorted(list(w1.iter_names())),
828
 
           ['b1', 'v1', 'v2', 'v3'])
829
 
 
830
 
    def test_join_related(self):
831
 
        wa = self.weave1.copy()
832
 
        wb = self.weave1.copy()
833
 
        wa.add('a1', ['v3'], ['hello\n', 'sweet\n', 'world\n'])
834
 
        wb.add('b1', ['v3'], ['hello\n', 'pale blue\n', 'world\n'])
835
 
        eq = self.assertEquals
836
 
        eq(len(wa), 4)
837
 
        eq(len(wb), 4)
838
 
        wa.join(wb)
839
 
        eq(len(wa), 5)
840
 
        eq(wa.get_lines('b1'),
841
 
           ['hello\n', 'pale blue\n', 'world\n'])
 
771
    
 
772
 
 
773
 
 
774
def testweave():
 
775
    import testsweet
 
776
    from unittest import TestSuite, TestLoader
 
777
    import testweave
 
778
 
 
779
    tl = TestLoader()
 
780
    suite = TestSuite()
 
781
    suite.addTest(tl.loadTestsFromModule(testweave))
 
782
    
 
783
    return int(not testsweet.run_suite(suite)) # for shell 0=true
842
784
 
843
785
 
844
786
if __name__ == '__main__':
845
787
    import sys
846
 
    import unittest
847
 
    sys.exit(unittest.main())
 
788
    sys.exit(testweave())
848
789