24
24
"""test suite for weave algorithm"""
28
from bzrlib.weave import Weave, WeaveFormatError
29
from bzrlib.weavefile import write_weave, read_weave
26
30
from pprint import pformat
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
37
from sets import Set, ImmutableSet
39
frozenset = ImmutableSet
34
44
# texts for use in testing
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)
106
class AddWithGivenSha(TestBase):
108
"""Add with caller-supplied SHA-1"""
112
k.add('text0', [], [t], sha1=sha_string(t))
114
k.dump(self.TEST_LOG)
128
class RepeatedAdd(TestBase):
129
"""Add the same version twice; harmless."""
132
idx = k.add('text0', [], TEXT_0)
133
idx2 = k.add('text0', [], TEXT_0)
134
self.assertEqual(idx, idx2)
138
class InvalidRepeatedAdd(TestBase):
141
idx = k.add('text0', [], TEXT_0)
142
self.assertRaises(WeaveError,
146
['not the same text'])
147
self.assertRaises(WeaveError,
150
[12], # not the right parents
155
130
class InsertLines(TestBase):
156
131
"""Store a revision that adds one line to the original.
791
768
['aaa', 'ddd', 'ccc'],
793
770
['<<<<', 'aaa', '====', '>>>>', 'ccc'])
796
class JoinWeavesTests(TestBase):
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)
806
def test_join_empty(self):
807
"""Join two empty weaves."""
808
eq = self.assertEqual
812
eq(w1.numversions(), 0)
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)
819
def test_join_unrelated(self):
820
"""Join two weaves with no history in common."""
822
wb.add('b1', [], ['line from b\n'])
825
eq = self.assertEqual
827
eq(sorted(list(w1.iter_names())),
828
['b1', 'v1', 'v2', 'v3'])
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
840
eq(wa.get_lines('b1'),
841
['hello\n', 'pale blue\n', 'world\n'])
776
from unittest import TestSuite, TestLoader
781
suite.addTest(tl.loadTestsFromModule(testweave))
783
return int(not testsweet.run_suite(suite)) # for shell 0=true
844
786
if __name__ == '__main__':
847
sys.exit(unittest.main())
788
sys.exit(testweave())