/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_knit.py

Merge bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
54
54
    TestCase,
55
55
    TestCaseWithMemoryTransport,
56
56
    TestCaseWithTransport,
 
57
    TestNotApplicable,
57
58
    )
58
59
from bzrlib.transport import get_transport
59
60
from bzrlib.transport.memory import MemoryTransport
920
921
        return make_file_factory(annotate, mapper)(self.get_transport())
921
922
 
922
923
 
 
924
class TestBadShaError(KnitTests):
 
925
    """Tests for handling of sha errors."""
 
926
 
 
927
    def test_exception_has_text(self):
 
928
        # having the failed text included in the error allows for recovery.
 
929
        source = self.make_test_knit()
 
930
        target = self.make_test_knit(name="target")
 
931
        if not source._max_delta_chain:
 
932
            raise TestNotApplicable(
 
933
                "cannot get delta-caused sha failures without deltas.")
 
934
        # create a basis
 
935
        basis = ('basis',)
 
936
        broken = ('broken',)
 
937
        source.add_lines(basis, (), ['foo\n'])
 
938
        source.add_lines(broken, (basis,), ['foo\n', 'bar\n'])
 
939
        # Seed target with a bad basis text
 
940
        target.add_lines(basis, (), ['gam\n'])
 
941
        target.insert_record_stream(
 
942
            source.get_record_stream([broken], 'unordered', False))
 
943
        err = self.assertRaises(errors.KnitCorrupt,
 
944
            target.get_record_stream([broken], 'unordered', True).next)
 
945
        self.assertEqual(['gam\n', 'bar\n'], err.content)
 
946
        # Test for formatting with live data
 
947
        self.assertStartsWith(str(err), "Knit ")
 
948
 
 
949
 
923
950
class TestKnitIndex(KnitTests):
924
951
 
925
952
    def test_add_versions_dictionary_compresses(self):
1408
1435
        basis.calls = []
1409
1436
        test.add_lines(key_cross_border, (key_basis,), ['foo\n'])
1410
1437
        self.assertEqual('fulltext', test._index.get_method(key_cross_border))
1411
 
        self.assertEqual([("get_parent_map", set([key_basis]))], basis.calls)
 
1438
        # we don't even need to look at the basis to see that this should be
 
1439
        # stored as a fulltext
 
1440
        self.assertEqual([], basis.calls)
1412
1441
        # Subsequent adds do delta.
1413
1442
        basis.calls = []
1414
1443
        test.add_lines(key_delta, (key_cross_border,), ['foo\n'])
1669
1698
        source.add_lines(key_delta, (key_basis,), ['bar\n'])
1670
1699
        stream = source.get_record_stream([key_delta], 'unordered', False)
1671
1700
        test.insert_record_stream(stream)
1672
 
        self.assertEqual([("get_parent_map", set([key_basis]))],
 
1701
        # XXX: this does somewhat too many calls in making sure of whether it
 
1702
        # has to recreate the full text.
 
1703
        self.assertEqual([("get_parent_map", set([key_basis])),
 
1704
             ('get_parent_map', set([key_basis])),
 
1705
             ('get_record_stream', [key_basis], 'unordered', True)],
1673
1706
            basis.calls)
1674
1707
        self.assertEqual({key_delta:(key_basis,)},
1675
1708
            test.get_parent_map([key_delta]))
1736
1769
        test.add_mpdiffs([(key_delta, (key_basis,),
1737
1770
            source.get_sha1s([key_delta])[key_delta], diffs[0])])
1738
1771
        self.assertEqual([("get_parent_map", set([key_basis])),
1739
 
            ('get_record_stream', [key_basis], 'unordered', True),
1740
 
            ('get_parent_map', set([key_basis]))],
 
1772
            ('get_record_stream', [key_basis], 'unordered', True),],
1741
1773
            basis.calls)
1742
1774
        self.assertEqual({key_delta:(key_basis,)},
1743
1775
            test.get_parent_map([key_delta]))
1762
1794
                multiparent.NewText(['foo\n']),
1763
1795
                multiparent.ParentText(1, 0, 2, 1)])],
1764
1796
            diffs)
1765
 
        self.assertEqual(4, len(basis.calls))
 
1797
        self.assertEqual(3, len(basis.calls))
1766
1798
        self.assertEqual([
1767
1799
            ("get_parent_map", set([key_left, key_right])),
1768
1800
            ("get_parent_map", set([key_left, key_right])),
1769
 
            ("get_parent_map", set([key_left, key_right])),
1770
1801
            ],
1771
 
            basis.calls[:3])
1772
 
        last_call = basis.calls[3]
 
1802
            basis.calls[:-1])
 
1803
        last_call = basis.calls[-1]
1773
1804
        self.assertEqual('get_record_stream', last_call[0])
1774
1805
        self.assertEqual(set([key_left, key_right]), set(last_call[1]))
1775
1806
        self.assertEqual('unordered', last_call[2])