/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: Lukáš Lalinský
  • Date: 2007-12-17 17:28:25 UTC
  • mfrom: (3120 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3123.
  • Revision ID: lalinsky@gmail.com-20071217172825-tr3pqm1mhvs3gwnn
Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
560
560
                     ['base\n', 'lancestor\n', 'otherchild\n'])
561
561
        def iter_with_versions(versions, expected):
562
562
            # now we need to see what lines are returned, and how often.
563
 
            lines = {'base\n':0,
564
 
                     'lancestor\n':0,
565
 
                     'rancestor\n':0,
566
 
                     'child\n':0,
567
 
                     'otherchild\n':0,
568
 
                     }
 
563
            lines = {}
569
564
            progress = InstrumentedProgress()
570
565
            # iterate over the lines
571
 
            for line in vf.iter_lines_added_or_present_in_versions(versions, 
 
566
            for line in vf.iter_lines_added_or_present_in_versions(versions,
572
567
                pb=progress):
 
568
                lines.setdefault(line, 0)
573
569
                lines[line] += 1
574
 
            if []!= progress.updates: 
 
570
            if []!= progress.updates:
575
571
                self.assertEqual(expected, progress.updates)
576
572
            return lines
577
573
        lines = iter_with_versions(['child', 'otherchild'],
579
575
                                    ('Walking content.', 1, 2),
580
576
                                    ('Walking content.', 2, 2)])
581
577
        # we must see child and otherchild
582
 
        self.assertTrue(lines['child\n'] > 0)
583
 
        self.assertTrue(lines['otherchild\n'] > 0)
 
578
        self.assertTrue(lines[('child\n', 'child')] > 0)
 
579
        self.assertTrue(lines[('otherchild\n', 'otherchild')] > 0)
584
580
        # we dont care if we got more than that.
585
581
        
586
582
        # test all lines
591
587
                                          ('Walking content.', 4, 5),
592
588
                                          ('Walking content.', 5, 5)])
593
589
        # all lines must be seen at least once
594
 
        self.assertTrue(lines['base\n'] > 0)
595
 
        self.assertTrue(lines['lancestor\n'] > 0)
596
 
        self.assertTrue(lines['rancestor\n'] > 0)
597
 
        self.assertTrue(lines['child\n'] > 0)
598
 
        self.assertTrue(lines['otherchild\n'] > 0)
 
590
        self.assertTrue(lines[('base\n', 'base')] > 0)
 
591
        self.assertTrue(lines[('lancestor\n', 'lancestor')] > 0)
 
592
        self.assertTrue(lines[('rancestor\n', 'rancestor')] > 0)
 
593
        self.assertTrue(lines[('child\n', 'child')] > 0)
 
594
        self.assertTrue(lines[('otherchild\n', 'otherchild')] > 0)
599
595
 
600
596
    def test_add_lines_with_ghosts(self):
601
597
        # some versioned file formats allow lines to be added with parent
801
797
        return self._factory
802
798
 
803
799
 
 
800
class TestPlanMergeVersionedFile(TestCaseWithMemoryTransport):
 
801
 
 
802
    def setUp(self):
 
803
        TestCaseWithMemoryTransport.setUp(self)
 
804
        self.vf1 = KnitVersionedFile('root', self.get_transport(), create=True)
 
805
        self.vf2 = KnitVersionedFile('root', self.get_transport(), create=True)
 
806
        self.plan_merge_vf = versionedfile._PlanMergeVersionedFile('root',
 
807
            [self.vf1, self.vf2])
 
808
 
 
809
    def test_add_lines(self):
 
810
        self.plan_merge_vf.add_lines('a:', [], [])
 
811
        self.assertRaises(ValueError, self.plan_merge_vf.add_lines, 'a', [],
 
812
                          [])
 
813
        self.assertRaises(ValueError, self.plan_merge_vf.add_lines, 'a:', None,
 
814
                          [])
 
815
        self.assertRaises(ValueError, self.plan_merge_vf.add_lines, 'a:', [],
 
816
                          None)
 
817
 
 
818
    def test_ancestry(self):
 
819
        self.vf1.add_lines('A', [], [])
 
820
        self.vf1.add_lines('B', ['A'], [])
 
821
        self.plan_merge_vf.add_lines('C:', ['B'], [])
 
822
        self.plan_merge_vf.add_lines('D:', ['C:'], [])
 
823
        self.assertEqual(set(['A', 'B', 'C:', 'D:']),
 
824
            self.plan_merge_vf.get_ancestry('D:', topo_sorted=False))
 
825
 
 
826
    def setup_abcde(self):
 
827
        self.vf1.add_lines('A', [], ['a'])
 
828
        self.vf1.add_lines('B', ['A'], ['b'])
 
829
        self.vf2.add_lines('C', [], ['c'])
 
830
        self.vf2.add_lines('D', ['C'], ['d'])
 
831
        self.plan_merge_vf.add_lines('E:', ['B', 'D'], ['e'])
 
832
 
 
833
    def test_ancestry_uses_all_versionedfiles(self):
 
834
        self.setup_abcde()
 
835
        self.assertEqual(set(['A', 'B', 'C', 'D', 'E:']),
 
836
            self.plan_merge_vf.get_ancestry('E:', topo_sorted=False))
 
837
 
 
838
    def test_ancestry_raises_revision_not_present(self):
 
839
        error = self.assertRaises(errors.RevisionNotPresent,
 
840
                                  self.plan_merge_vf.get_ancestry, 'E:', False)
 
841
        self.assertContainsRe(str(error), '{E:} not present in "root"')
 
842
 
 
843
    def test_get_parents(self):
 
844
        self.setup_abcde()
 
845
        self.assertEqual(['A'], self.plan_merge_vf.get_parents('B'))
 
846
        self.assertEqual(['C'], self.plan_merge_vf.get_parents('D'))
 
847
        self.assertEqual(['B', 'D'], self.plan_merge_vf.get_parents('E:'))
 
848
        error = self.assertRaises(errors.RevisionNotPresent,
 
849
                                  self.plan_merge_vf.get_parents, 'F')
 
850
        self.assertContainsRe(str(error), '{F} not present in "root"')
 
851
 
 
852
    def test_get_lines(self):
 
853
        self.setup_abcde()
 
854
        self.assertEqual(['a'], self.plan_merge_vf.get_lines('A'))
 
855
        self.assertEqual(['c'], self.plan_merge_vf.get_lines('C'))
 
856
        self.assertEqual(['e'], self.plan_merge_vf.get_lines('E:'))
 
857
        error = self.assertRaises(errors.RevisionNotPresent,
 
858
                                  self.plan_merge_vf.get_lines, 'F')
 
859
        self.assertContainsRe(str(error), '{F} not present in "root"')
 
860
 
 
861
 
804
862
class InterString(versionedfile.InterVersionedFile):
805
863
    """An inter-versionedfile optimised code path for strings.
806
864