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
31
error = errors.NoRepositoryPresent(dir)
30
32
self.assertNotEqual(-1, str(error).find((dir.transport.clone('..').base)))
31
33
self.assertEqual(-1, str(error).find((dir.transport.base)))
35
def test_no_such_id(self):
36
error = errors.NoSuchId("atree", "anid")
37
self.assertEqualDiff("The file id anid is not present in the tree "
33
41
def test_up_to_date(self):
34
42
error = errors.UpToDateFormat(bzrdir.BzrDirFormat4())
44
52
"Please run bzr reconcile on this repository." %
45
53
repo.bzrdir.root_transport.base,
57
class PassThroughError(errors.BzrNewError):
58
"""Pass through %(foo)s and %(bar)s"""
60
def __init__(self, foo, bar):
61
errors.BzrNewError.__init__(self, foo=foo, bar=bar)
64
class ErrorWithBadFormat(errors.BzrNewError):
65
"""One format specifier: %(thing)s"""
68
class TestErrorFormatting(TestCase):
70
def test_always_str(self):
71
e = PassThroughError(u'\xb5', 'bar')
72
self.assertIsInstance(e.__str__(), str)
73
# In Python str(foo) *must* return a real byte string
74
# not a Unicode string. The following line would raise a
75
# Unicode error, because it tries to call str() on the string
76
# returned from e.__str__(), and it has non ascii characters
78
self.assertEqual('Pass through \xc2\xb5 and bar', s)
80
def test_mismatched_format_args(self):
81
# Even though ErrorWithBadFormat's format string does not match the
82
# arguments we constructing it with, we can still stringify an instance
83
# of this exception. The resulting string will say its unprintable.
84
e = ErrorWithBadFormat(not_thing='x')
85
self.assertStartsWith(
86
str(e), 'Unprintable exception ErrorWithBadFormat(')
89
class TestSpecificErrors(TestCase):
91
def test_transport_not_possible(self):
92
e = errors.TransportNotPossible('readonly', 'original error')
93
self.assertEqual('Transport operation not possible:'
94
' readonly original error', str(e))