247
247
self.assertEqual(['line'], f.get_lines('eolbeforefirstparent'))
248
248
#self.assertTrue(deltas['eolbeforefirstparent'] in expected_deltas)
250
def test_make_mpdiffs(self):
251
from bzrlib import multiparent
252
vf = self.get_file('foo')
253
sha1s = self._setup_for_deltas(vf)
254
new_vf = self.get_file('bar')
255
for version in multiparent.topo_iter(vf):
256
mpdiff = vf.make_mpdiffs([version])[0]
257
new_vf.add_mpdiffs([(version, vf.get_parents(version),
258
vf.get_sha1(version), mpdiff)])
259
self.assertEqualDiff(vf.get_text(version),
260
new_vf.get_text(version))
262
250
def _setup_for_deltas(self, f):
263
251
self.assertRaises(errors.RevisionNotPresent, f.get_delta, 'base')
264
252
# add texts that should trip the knit maximum delta chain threshold
396
384
self.assertRaises(RevisionNotPresent,
397
385
f.get_ancestry, ['rM', 'rX'])
399
self.assertEqual(set(f.get_ancestry('rM')),
400
set(f.get_ancestry('rM', topo_sorted=False)))
402
387
def test_mutate_after_finish(self):
403
388
f = self.get_file()
404
389
f.transaction_finished()
572
557
"""Open the versioned file from disk again."""
573
558
raise NotImplementedError(self.reopen_file)
575
def test_iter_parents(self):
576
"""iter_parents returns the parents for many nodes."""
580
f.add_lines('r0', [], ['a\n', 'b\n'])
582
f.add_lines('r1', ['r0'], ['a\n', 'b\n'])
584
f.add_lines('r2', ['r1', 'r0'], ['a\n', 'b\n'])
586
# cases: each sample data individually:
587
self.assertEqual(set([('r0', ())]),
588
set(f.iter_parents(['r0'])))
589
self.assertEqual(set([('r1', ('r0', ))]),
590
set(f.iter_parents(['r1'])))
591
self.assertEqual(set([('r2', ('r1', 'r0'))]),
592
set(f.iter_parents(['r2'])))
593
# no nodes returned for a missing node
594
self.assertEqual(set(),
595
set(f.iter_parents(['missing'])))
596
# 1 node returned with missing nodes skipped
597
self.assertEqual(set([('r1', ('r0', ))]),
598
set(f.iter_parents(['ghost1', 'r1', 'ghost'])))
600
self.assertEqual(set([('r0', ()), ('r1', ('r0', ))]),
601
set(f.iter_parents(['r0', 'r1'])))
602
# 2 nodes returned, missing skipped
603
self.assertEqual(set([('r0', ()), ('r1', ('r0', ))]),
604
set(f.iter_parents(['a', 'r0', 'b', 'r1', 'c'])))
606
560
def test_iter_lines_added_or_present_in_versions(self):
607
561
# test that we get at least an equalset of the lines added by
608
562
# versions in the weave
733
687
# - these are ghost unaware and must not be reflect ghosts
734
688
self.assertEqual(['notbxbfse'], vf.get_ancestry('notbxbfse'))
735
689
self.assertEqual([], vf.get_parents('notbxbfse'))
736
self.assertEqual({'notbxbfse':()}, vf.get_graph())
690
self.assertEqual({'notbxbfse':[]}, vf.get_graph())
737
691
self.assertFalse(self.callDeprecated([osutils._revision_id_warning],
738
692
vf.has_version, parent_id_unicode))
739
693
self.assertFalse(vf.has_version(parent_id_utf8))
750
704
vf.add_lines, parent_id_unicode, [], [])
751
705
self.assertEqual([parent_id_utf8, 'notbxbfse'], vf.get_ancestry(['notbxbfse']))
752
706
self.assertEqual([parent_id_utf8], vf.get_parents('notbxbfse'))
753
self.assertEqual({parent_id_utf8:(),
754
'notbxbfse':(parent_id_utf8, ),
707
self.assertEqual({parent_id_utf8:[],
708
'notbxbfse':[parent_id_utf8],
757
711
self.assertTrue(self.callDeprecated([osutils._revision_id_warning],
819
773
'3f786850e387550fdab836ed7e6dc881de23001b', vf.get_sha1('b'))
820
774
self.assertEqual(
821
775
'86f7e437faa5a7fce15d1ddcb9eaeaea377667b8', vf.get_sha1('c'))
823
self.assertEqual(['3f786850e387550fdab836ed7e6dc881de23001b',
824
'86f7e437faa5a7fce15d1ddcb9eaeaea377667b8',
825
'3f786850e387550fdab836ed7e6dc881de23001b'],
826
vf.get_sha1s(['a', 'c', 'b']))
829
778
class TestWeave(TestCaseWithTransport, VersionedFileTestMixIn):