/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 bzrlib/tests/test_versionedfile.py

  • Committer: Martin Pool
  • Date: 2007-08-20 05:53:39 UTC
  • mfrom: (2727 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2730.
  • Revision ID: mbp@sourcefrog.net-20070820055339-uzei7f7i7jo6tugg
merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
36
36
                           )
37
37
from bzrlib.knit import KnitVersionedFile, \
38
38
     KnitAnnotateFactory
39
 
from bzrlib.tests import TestCaseWithTransport
 
39
from bzrlib.tests import TestCaseWithTransport, TestSkipped
40
40
from bzrlib.tests.HTTPTestUtil import TestCaseWithWebserver
41
41
from bzrlib.trace import mutter
42
42
from bzrlib.transport import get_transport
126
126
            (errors.BzrBadParameterUnicode, NotImplementedError),
127
127
            vf.add_lines_with_ghosts, 'a', [], ['a\n', u'b\n', 'c\n'])
128
128
 
 
129
    def test_add_follows_left_matching_blocks(self):
 
130
        """If we change left_matching_blocks, delta changes
 
131
 
 
132
        Note: There are multiple correct deltas in this case, because
 
133
        we start with 1 "a" and we get 3.
 
134
        """
 
135
        vf = self.get_file()
 
136
        if isinstance(vf, WeaveFile):
 
137
            raise TestSkipped("WeaveFile ignores left_matching_blocks")
 
138
        vf.add_lines('1', [], ['a\n'])
 
139
        vf.add_lines('2', ['1'], ['a\n', 'a\n', 'a\n'],
 
140
                     left_matching_blocks=[(0, 0, 1), (1, 3, 0)])
 
141
        self.assertEqual([(1, 1, 2, [('2', 'a\n'), ('2', 'a\n')])],
 
142
                         vf.get_delta('2')[3])
 
143
        vf.add_lines('3', ['1'], ['a\n', 'a\n', 'a\n'],
 
144
                     left_matching_blocks=[(0, 2, 1), (1, 3, 0)])
 
145
        self.assertEqual([(0, 0, 2, [('3', 'a\n'), ('3', 'a\n')])],
 
146
                         vf.get_delta('3')[3])
 
147
 
129
148
    def test_inline_newline_throws(self):
130
149
        # \r characters are not permitted in lines being added
131
150
        vf = self.get_file()
247
266
        self.assertEqual(['line'], f.get_lines('eolbeforefirstparent'))
248
267
        #self.assertTrue(deltas['eolbeforefirstparent'] in expected_deltas)
249
268
 
 
269
    def test_make_mpdiffs(self):
 
270
        from bzrlib import multiparent
 
271
        vf = self.get_file('foo')
 
272
        sha1s = self._setup_for_deltas(vf)
 
273
        new_vf = self.get_file('bar')
 
274
        for version in multiparent.topo_iter(vf):
 
275
            mpdiff = vf.make_mpdiffs([version])[0]
 
276
            new_vf.add_mpdiffs([(version, vf.get_parents(version),
 
277
                                 vf.get_sha1(version), mpdiff)])
 
278
            self.assertEqualDiff(vf.get_text(version),
 
279
                                 new_vf.get_text(version))
 
280
 
250
281
    def _setup_for_deltas(self, f):
251
282
        self.assertRaises(errors.RevisionNotPresent, f.get_delta, 'base')
252
283
        # add texts that should trip the knit maximum delta chain threshold
384
415
        self.assertRaises(RevisionNotPresent,
385
416
            f.get_ancestry, ['rM', 'rX'])
386
417
 
 
418
        self.assertEqual(set(f.get_ancestry('rM')),
 
419
            set(f.get_ancestry('rM', topo_sorted=False)))
 
420
 
387
421
    def test_mutate_after_finish(self):
388
422
        f = self.get_file()
389
423
        f.transaction_finished()
450
484
    def test_get_graph(self):
451
485
        f = self.get_file()
452
486
        graph = {
453
 
            'v1': [],
454
 
            'v2': ['v1'],
455
 
            'v3': ['v2']}
 
487
            'v1': (),
 
488
            'v2': ('v1', ),
 
489
            'v3': ('v2', )}
456
490
        self.build_graph(f, graph)
457
491
        self.assertEqual(graph, f.get_graph())
458
492
    
460
494
        f = self.get_file()
461
495
        complex_graph = {}
462
496
        simple_a = {
463
 
            'c': [],
464
 
            'b': ['c'],
465
 
            'a': ['b'],
 
497
            'c': (),
 
498
            'b': ('c', ),
 
499
            'a': ('b', ),
466
500
            }
467
501
        complex_graph.update(simple_a)
468
502
        simple_b = {
469
 
            'c': [],
470
 
            'b': ['c'],
 
503
            'c': (),
 
504
            'b': ('c', ),
471
505
            }
472
506
        complex_graph.update(simple_b)
473
507
        simple_gam = {
474
 
            'c': [],
475
 
            'oo': [],
476
 
            'bar': ['oo', 'c'],
477
 
            'gam': ['bar'],
 
508
            'c': (),
 
509
            'oo': (),
 
510
            'bar': ('oo', 'c'),
 
511
            'gam': ('bar', ),
478
512
            }
479
513
        complex_graph.update(simple_gam)
480
514
        simple_b_gam = {}
509
543
        self.assertRaises(RevisionNotPresent,
510
544
            f.annotate, 'foo')
511
545
 
512
 
    def test_walk(self):
513
 
        # tests that walk returns all the inclusions for the requested
514
 
        # revisions as well as the revisions changes themselves.
515
 
        f = self.get_file('1')
516
 
        f.add_lines('r0', [], ['a\n', 'b\n'])
517
 
        f.add_lines('r1', ['r0'], ['c\n', 'b\n'])
518
 
        f.add_lines('rX', ['r1'], ['d\n', 'b\n'])
519
 
        f.add_lines('rY', ['r1'], ['c\n', 'e\n'])
520
 
 
521
 
        lines = {}
522
 
        for lineno, insert, dset, text in f.walk(['rX', 'rY']):
523
 
            lines[text] = (insert, dset)
524
 
 
525
 
        self.assertTrue(lines['a\n'], ('r0', set(['r1'])))
526
 
        self.assertTrue(lines['b\n'], ('r0', set(['rY'])))
527
 
        self.assertTrue(lines['c\n'], ('r1', set(['rX'])))
528
 
        self.assertTrue(lines['d\n'], ('rX', set([])))
529
 
        self.assertTrue(lines['e\n'], ('rY', set([])))
530
 
 
531
546
    def test_detection(self):
532
547
        # Test weaves detect corruption.
533
548
        #
557
572
        """Open the versioned file from disk again."""
558
573
        raise NotImplementedError(self.reopen_file)
559
574
 
 
575
    def test_iter_parents(self):
 
576
        """iter_parents returns the parents for many nodes."""
 
577
        f = self.get_file()
 
578
        # sample data:
 
579
        # no parents
 
580
        f.add_lines('r0', [], ['a\n', 'b\n'])
 
581
        # 1 parents
 
582
        f.add_lines('r1', ['r0'], ['a\n', 'b\n'])
 
583
        # 2 parents
 
584
        f.add_lines('r2', ['r1', 'r0'], ['a\n', 'b\n'])
 
585
        # XXX TODO a ghost
 
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'])))
 
599
        # 2 nodes returned
 
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'])))
 
605
 
560
606
    def test_iter_lines_added_or_present_in_versions(self):
561
607
        # test that we get at least an equalset of the lines added by
562
608
        # versions in the weave 
687
733
        # - these are ghost unaware and must not be reflect ghosts
688
734
        self.assertEqual(['notbxbfse'], vf.get_ancestry('notbxbfse'))
689
735
        self.assertEqual([], vf.get_parents('notbxbfse'))
690
 
        self.assertEqual({'notbxbfse':[]}, vf.get_graph())
 
736
        self.assertEqual({'notbxbfse':()}, vf.get_graph())
691
737
        self.assertFalse(self.callDeprecated([osutils._revision_id_warning],
692
738
                         vf.has_version, parent_id_unicode))
693
739
        self.assertFalse(vf.has_version(parent_id_utf8))
704
750
                            vf.add_lines, parent_id_unicode, [], [])
705
751
        self.assertEqual([parent_id_utf8, 'notbxbfse'], vf.get_ancestry(['notbxbfse']))
706
752
        self.assertEqual([parent_id_utf8], vf.get_parents('notbxbfse'))
707
 
        self.assertEqual({parent_id_utf8:[],
708
 
                          'notbxbfse':[parent_id_utf8],
 
753
        self.assertEqual({parent_id_utf8:(),
 
754
                          'notbxbfse':(parent_id_utf8, ),
709
755
                          },
710
756
                         vf.get_graph())
711
757
        self.assertTrue(self.callDeprecated([osutils._revision_id_warning],
773
819
            '3f786850e387550fdab836ed7e6dc881de23001b', vf.get_sha1('b'))
774
820
        self.assertEqual(
775
821
            '86f7e437faa5a7fce15d1ddcb9eaeaea377667b8', vf.get_sha1('c'))
 
822
 
 
823
        self.assertEqual(['3f786850e387550fdab836ed7e6dc881de23001b',
 
824
                          '86f7e437faa5a7fce15d1ddcb9eaeaea377667b8',
 
825
                          '3f786850e387550fdab836ed7e6dc881de23001b'],
 
826
                          vf.get_sha1s(['a', 'c', 'b']))
776
827
        
777
828
 
778
829
class TestWeave(TestCaseWithTransport, VersionedFileTestMixIn):