18
18
"""Tests for the formatting and construction of errors."""
20
import bzrlib.bzrdir as bzrdir
21
import bzrlib.errors as errors
22
from bzrlib.tests import TestCaseWithTransport
24
from bzrlib.tests import TestCase, TestCaseWithTransport
25
27
class TestErrors(TestCaseWithTransport):
29
def test_inventory_modified(self):
30
error = errors.InventoryModified("a tree to be repred")
31
self.assertEqualDiff("The current inventory for the tree 'a tree to "
32
"be repred' has been modified, so a clean inventory cannot be "
33
"read without data loss.",
27
36
def test_no_repo(self):
28
37
dir = bzrdir.BzrDir.create(self.get_url())
29
38
error = errors.NoRepositoryPresent(dir)
30
self.assertNotEqual(-1, str(error).find(repr(dir.transport.clone('..').base)))
31
self.assertEqual(-1, str(error).find(repr(dir.transport.base)))
39
self.assertNotEqual(-1, str(error).find((dir.transport.clone('..').base)))
40
self.assertEqual(-1, str(error).find((dir.transport.base)))
42
def test_no_such_id(self):
43
error = errors.NoSuchId("atree", "anid")
44
self.assertEqualDiff("The file id anid is not present in the tree "
48
def test_no_such_revision_in_tree(self):
49
error = errors.NoSuchRevisionInTree("atree", "anid")
50
self.assertEqualDiff("The revision id anid is not present in the tree "
53
self.assertIsInstance(error, errors.NoSuchRevision)
55
def test_not_write_locked(self):
56
error = errors.NotWriteLocked('a thing to repr')
57
self.assertEqualDiff("'a thing to repr' is not write locked but needs "
33
61
def test_up_to_date(self):
34
62
error = errors.UpToDateFormat(bzrdir.BzrDirFormat4())
44
72
"Please run bzr reconcile on this repository." %
45
73
repo.bzrdir.root_transport.base,
77
class PassThroughError(errors.BzrNewError):
78
"""Pass through %(foo)s and %(bar)s"""
80
def __init__(self, foo, bar):
81
errors.BzrNewError.__init__(self, foo=foo, bar=bar)
84
class ErrorWithBadFormat(errors.BzrNewError):
85
"""One format specifier: %(thing)s"""
88
class TestErrorFormatting(TestCase):
90
def test_always_str(self):
91
e = PassThroughError(u'\xb5', 'bar')
92
self.assertIsInstance(e.__str__(), str)
93
# In Python str(foo) *must* return a real byte string
94
# not a Unicode string. The following line would raise a
95
# Unicode error, because it tries to call str() on the string
96
# returned from e.__str__(), and it has non ascii characters
98
self.assertEqual('Pass through \xc2\xb5 and bar', s)
100
def test_mismatched_format_args(self):
101
# Even though ErrorWithBadFormat's format string does not match the
102
# arguments we constructing it with, we can still stringify an instance
103
# of this exception. The resulting string will say its unprintable.
104
e = ErrorWithBadFormat(not_thing='x')
105
self.assertStartsWith(
106
str(e), 'Unprintable exception ErrorWithBadFormat(')
109
class TestSpecificErrors(TestCase):
111
def test_transport_not_possible(self):
112
e = errors.TransportNotPossible('readonly', 'original error')
113
self.assertEqual('Transport operation not possible:'
114
' readonly original error', str(e))