def runTest(self): k = Weave() base_text = ['one', 'two', 'three', 'four'] k.add_lines('text0', [], base_text) texts = [['one', 'two', 'three'], ['two', 'three', 'four'], ['one', 'four'], ['one', 'two', 'three', 'four'], ] i = 1 for t in texts: ver = k.add_lines('text%d' % i, ['text0'], t) i += 1 self.log('final weave:') self.log('k._weave=' + pformat(k._weave)) for i in range(len(texts)): self.assertEqual(k.get_lines(i+1), texts[i])
def runTest(self): return # NOT RUN k = Weave() k.add_lines([], ['aaa', 'bbb']) k.add_lines([0], ['111', 'aaa', 'ccc', 'bbb']) k.add_lines([1], ['aaa', 'ccc', 'bbb', '222'])
def runTest(self): return # NOT RUN k = Weave() k.add_lines([], ['aaa', 'bbb']) k.add_lines([0], ['aaa', '111', 'bbb']) k.add_lines([1], ['aaa', '222', 'bbb']) merged = k.merge([1, 2]) self.assertEquals([[['aaa']], [['111'], ['222']], [['bbb']]])
def runTest(self): k = Weave() text0 = ['cheddar', 'stilton', 'gruyere'] text1 = ['cheddar', 'blue vein', 'neufchatel', 'chevre'] k.add_lines('text0', [], text0) k.add_lines('text1', ['text0'], text1) self.log('k._weave=' + pformat(k._weave)) self.assertEqual(k.get_lines(0), text0) self.assertEqual(k.get_lines(1), text1)
def runTest(self): return # NOT RUN k = Weave() k.add_lines([], ['aaa', 'bbb']) k.add_lines([0], ['aaa', '111', 'bbb']) k.add_lines([1], ['aaa', '222', 'bbb']) merged = k.merge([1, 2]) self.assertEqual([[['aaa']], [['111'], ['222']], [['bbb']]])
def runTest(self): k = Weave() k.add_lines('basis', [], TEXT_0) idx = k.add_lines('text0', [], TEXT_0) self.assertRaises(errors.RevisionAlreadyPresent, k.add_lines, 'text0', [], ['not the same text']) self.assertRaises(errors.RevisionAlreadyPresent, k.add_lines, 'text0', ['basis'], # not the right parents TEXT_0)
def runTest(self): k = Weave() k.add_lines('text0', [], ['line 1']) k.add_lines('text1', ['text0'], ['line 1', 'line 2']) self.assertEqual(k.annotate('text0'), [('text0', 'line 1')]) self.assertEqual(k.get_lines(1), ['line 1', 'line 2']) self.assertEqual(k.annotate('text1'), [('text0', 'line 1'), ('text1', 'line 2')]) k.add_lines('text2', ['text0'], ['line 1', 'diverged line']) self.assertEqual(k.annotate('text2'), [('text0', 'line 1'), ('text2', 'diverged line')]) text3 = ['line 1', 'middle line', 'line 2'] k.add_lines('text3', ['text0', 'text1'], text3) # self.log("changes to text3: " + pformat(list(k._delta(set([0, 1]), text3)))) self.log("k._weave=" + pformat(k._weave)) self.assertEqual(k.annotate('text3'), [('text0', 'line 1'), ('text3', 'middle line'), ('text1', 'line 2')]) # now multiple insertions at different places k.add_lines('text4', ['text0', 'text1', 'text3'], ['line 1', 'aaa', 'middle line', 'bbb', 'line 2', 'ccc']) self.assertEqual(k.annotate('text4'), [('text0', 'line 1'), ('text4', 'aaa'), ('text3', 'middle line'), ('text4', 'bbb'), ('text1', 'line 2'), ('text4', 'ccc')])
def test_written_detection(self): # Test detection of weave file corruption. # # Make sure that we can detect if a weave file has # been corrupted. This doesn't test all forms of corruption, # but it at least helps verify the data you get, is what you want. from cStringIO import StringIO w = Weave() w.add_lines('v1', [], ['hello\n']) w.add_lines('v2', ['v1'], ['hello\n', 'there\n']) tmpf = StringIO() write_weave(w, tmpf) # Because we are corrupting, we need to make sure we have the exact text self.assertEquals('# bzr weave file v5\n' 'i\n1 f572d396fae9206628714fb2ce00f72e94f2258f\nn v1\n\n' 'i 0\n1 90f265c6e75f1c8f9ab76dcf85528352c5f215ef\nn v2\n\n' 'w\n{ 0\n. hello\n}\n{ 1\n. there\n}\nW\n', tmpf.getvalue()) # Change a single letter tmpf = StringIO('# bzr weave file v5\n' 'i\n1 f572d396fae9206628714fb2ce00f72e94f2258f\nn v1\n\n' 'i 0\n1 90f265c6e75f1c8f9ab76dcf85528352c5f215ef\nn v2\n\n' 'w\n{ 0\n. hello\n}\n{ 1\n. There\n}\nW\n') w = read_weave(tmpf) self.assertEqual('hello\n', w.get_text('v1')) self.assertRaises(errors.WeaveInvalidChecksum, w.get_text, 'v2') self.assertRaises(errors.WeaveInvalidChecksum, w.get_lines, 'v2') self.assertRaises(errors.WeaveInvalidChecksum, w.check) # Change the sha checksum tmpf = StringIO('# bzr weave file v5\n' 'i\n1 f572d396fae9206628714fb2ce00f72e94f2258f\nn v1\n\n' 'i 0\n1 f0f265c6e75f1c8f9ab76dcf85528352c5f215ef\nn v2\n\n' 'w\n{ 0\n. hello\n}\n{ 1\n. there\n}\nW\n') w = read_weave(tmpf) self.assertEqual('hello\n', w.get_text('v1')) self.assertRaises(errors.WeaveInvalidChecksum, w.get_text, 'v2') self.assertRaises(errors.WeaveInvalidChecksum, w.get_lines, 'v2') self.assertRaises(errors.WeaveInvalidChecksum, w.check)
def test_written_detection(self): # Test detection of weave file corruption. # # Make sure that we can detect if a weave file has # been corrupted. This doesn't test all forms of corruption, # but it at least helps verify the data you get, is what you want. from cStringIO import StringIO w = Weave() w.add_lines('v1', [], ['hello\n']) w.add_lines('v2', ['v1'], ['hello\n', 'there\n']) tmpf = StringIO() write_weave(w, tmpf) # Because we are corrupting, we need to make sure we have the exact text self.assertEqual('# bzr weave file v5\n' 'i\n1 f572d396fae9206628714fb2ce00f72e94f2258f\nn v1\n\n' 'i 0\n1 90f265c6e75f1c8f9ab76dcf85528352c5f215ef\nn v2\n\n' 'w\n{ 0\n. hello\n}\n{ 1\n. there\n}\nW\n', tmpf.getvalue()) # Change a single letter tmpf = StringIO('# bzr weave file v5\n' 'i\n1 f572d396fae9206628714fb2ce00f72e94f2258f\nn v1\n\n' 'i 0\n1 90f265c6e75f1c8f9ab76dcf85528352c5f215ef\nn v2\n\n' 'w\n{ 0\n. hello\n}\n{ 1\n. There\n}\nW\n') w = read_weave(tmpf) self.assertEqual('hello\n', w.get_text('v1')) self.assertRaises(errors.WeaveInvalidChecksum, w.get_text, 'v2') self.assertRaises(errors.WeaveInvalidChecksum, w.get_lines, 'v2') self.assertRaises(errors.WeaveInvalidChecksum, w.check) # Change the sha checksum tmpf = StringIO('# bzr weave file v5\n' 'i\n1 f572d396fae9206628714fb2ce00f72e94f2258f\nn v1\n\n' 'i 0\n1 f0f265c6e75f1c8f9ab76dcf85528352c5f215ef\nn v2\n\n' 'w\n{ 0\n. hello\n}\n{ 1\n. there\n}\nW\n') w = read_weave(tmpf) self.assertEqual('hello\n', w.get_text('v1')) self.assertRaises(errors.WeaveInvalidChecksum, w.get_text, 'v2') self.assertRaises(errors.WeaveInvalidChecksum, w.get_lines, 'v2') self.assertRaises(errors.WeaveInvalidChecksum, w.check)
def runTest(self): k = Weave() k.add_lines('text0', [], ["line the first", "line 2", "line 3", "fine"]) self.assertEqual(len(k.get_lines(0)), 4) k.add_lines('text1', ['text0'], ["line the first", "fine"]) self.assertEqual(k.get_lines(1), ["line the first", "fine"]) self.assertEqual(k.annotate('text1'), [('text0', "line the first"), ('text0', "fine")])
def runTest(self): k = Weave() texts = [['header'], ['header', '', 'line from 1'], ['header', '', 'line from 2', 'more from 2'], ['header', '', 'line from 1', 'fixup line', 'line from 2'], ] k.add_lines('text0', [], texts[0]) k.add_lines('text1', ['text0'], texts[1]) k.add_lines('text2', ['text0'], texts[2]) k.add_lines('merge', ['text0', 'text1', 'text2'], texts[3]) for i, t in enumerate(texts): self.assertEqual(k.get_lines(i), t) self.assertEqual(k.annotate('merge'), [('text0', 'header'), ('text1', ''), ('text1', 'line from 1'), ('merge', 'fixup line'), ('text2', 'line from 2'), ]) self.assertEqual(list(k.get_ancestry(['merge'])), ['text0', 'text1', 'text2', 'merge']) self.log('k._weave=' + pformat(k._weave)) self.check_read_write(k)
def test_multi_line_merge(self): rawtexts = [ """A Book of Verses underneath the Bough, A Jug of Wine, a Loaf of Bread, -- and Thou Beside me singing in the Wilderness -- Oh, Wilderness were Paradise enow!""", """A Book of Verses underneath the Bough, A Jug of Wine, a Loaf of Bread, -- and Thou Beside me singing in the Wilderness -- Oh, Wilderness were Paradise now!""", """A Book of poems underneath the tree, A Jug of Wine, a Loaf of Bread, and Thou Beside me singing in the Wilderness -- Oh, Wilderness were Paradise now! -- O. Khayyam""", """A Book of Verses underneath the Bough, A Jug of Wine, a Loaf of Bread, and Thou Beside me singing in the Wilderness -- Oh, Wilderness were Paradise now!""", ] texts = [[l.strip() for l in t.split('\n')] for t in rawtexts] k = Weave() parents = set() i = 0 for t in texts: ver = k.add_lines('text%d' % i, list(parents), t) parents.add('text%d' % i) i += 1 self.log("k._weave=" + pformat(k._weave)) for i, t in enumerate(texts): self.assertEqual(k.get_lines(i), t) self.check_read_write(k)
def test_allow_reserved_false(self): w = Weave('name', allow_reserved=False) # Add lines is checked at the WeaveFile level, not at the Weave level w.add_lines('name:', [], TEXT_1) # But get_lines is checked at this level self.assertRaises(errors.ReservedId, w.get_lines, 'name:')
def runTest(self): k = Weave(get_scope=lambda:None) self.assertFalse('foo' in k) k.add_lines('foo', [], TEXT_1) self.assertTrue('foo' in k)
def test_allow_reserved_true(self): w = Weave('name', allow_reserved=True) w.add_lines('name:', [], TEXT_1) self.assertEqual(TEXT_1, w.get_lines('name:'))
def runTest(self): k = Weave() k.add_lines('text0', [], TEXT_0) self.assertEqual(k.annotate('text0'), [('text0', TEXT_0[0])])
def test_duplicate_add(self): k = Weave() idx = k.add_lines('text0', [], TEXT_0) idx2 = k.add_lines('text0', [], TEXT_0) self.assertEqual(idx, idx2)