47
46
fmt_pattern = re.compile("%\(message\)[sir]")
48
subclasses_present = getattr(errors.BzrError, '__subclasses__', None)
49
if not subclasses_present:
50
raise TestSkipped('__subclasses__ attribute required for classes. '
51
'Requires Python 2.5 or later.')
52
47
for c in errors.BzrError.__subclasses__():
53
48
init = getattr(c, '__init__', None)
54
49
fmt = getattr(c, '_fmt', None)
62
57
'"errors.%s._fmt"' % c.__name__))
64
59
def test_bad_filename_encoding(self):
65
error = errors.BadFilenameEncoding('bad/filen\xe5me', 'UTF-8')
67
"Filename 'bad/filen\\xe5me' is not valid in your current"
68
" filesystem encoding UTF-8",
60
error = errors.BadFilenameEncoding(b'bad/filen\xe5me', 'UTF-8')
61
self.assertContainsRe(
63
"^Filename b?'bad/filen\\\\xe5me' is not valid in your current"
64
" filesystem encoding UTF-8$")
71
66
def test_corrupt_dirstate(self):
72
67
error = errors.CorruptDirstate('path/to/dirstate', 'the reason why')
199
194
self.assertEqualDiff(
200
195
"The medium 'a medium' is not connected.", str(error))
202
def test_no_public_branch(self):
203
b = self.make_branch('.')
204
error = errors.NoPublicBranch(b)
205
url = urlutils.unescape_for_display(b.base, 'ascii')
206
self.assertEqualDiff(
207
'There is no public branch set for "%s".' % url, str(error))
209
def test_no_repo(self):
210
dir = controldir.ControlDir.create(self.get_url())
211
error = errors.NoRepositoryPresent(dir)
212
self.assertNotEqual(-1, str(error).find((dir.transport.clone('..').base)))
213
self.assertEqual(-1, str(error).find((dir.transport.base)))
215
197
def test_no_smart_medium(self):
216
198
error = errors.NoSmartMedium("a transport")
217
199
self.assertEqualDiff("The transport 'a transport' cannot tunnel the "
305
287
"The branch format someformat is already at the most "
306
288
"recent format.", str(error))
308
def test_corrupt_repository(self):
309
repo = self.make_repository('.')
310
error = errors.CorruptRepository(repo)
311
self.assertEqualDiff("An error has been detected in the repository %s.\n"
312
"Please run brz reconcile on this repository." %
313
repo.bzrdir.root_transport.base,
316
290
def test_read_error(self):
317
291
# a unicode path to check that %r is being used.
319
293
error = errors.ReadError(path)
320
self.assertEqualDiff("Error reading from u'a path'.", str(error))
294
self.assertContainsRe(str(error), "^Error reading from u?'a path'.$")
322
296
def test_bad_index_format_signature(self):
323
297
error = errors.BadIndexFormatSignature("foo", "bar")
445
419
'See "brz help bugs" for more information on this feature.',
448
def test_unknown_bug_tracker_abbreviation(self):
449
"""Test the formatting of UnknownBugTrackerAbbreviation."""
450
branch = self.make_branch('some_branch')
451
error = errors.UnknownBugTrackerAbbreviation('xxx', branch)
453
"Cannot find registered bug tracker called xxx on %s" % branch,
456
422
def test_unexpected_smart_server_response(self):
457
423
e = errors.UnexpectedSmartServerResponse(('not yes',))
458
424
self.assertEqual(
496
462
def test_duplicate_record_name_error(self):
497
463
"""Test the formatting of DuplicateRecordNameError."""
498
e = errors.DuplicateRecordNameError(u"n\xe5me".encode('utf-8'))
464
e = errors.DuplicateRecordNameError(b"n\xc3\xa5me")
499
465
self.assertEqual(
500
"Container has multiple records with the same name: n\xc3\xa5me",
466
u"Container has multiple records with the same name: n\xe5me",
503
469
def test_check_error(self):
504
# This has a member called 'message', which is problematic in
505
# python2.5 because that is a slot on the base Exception class
506
470
e = errors.BzrCheckError('example check failure')
507
471
self.assertEqual(
508
472
"Internal check failed: example check failure",
647
608
err = errors.NotBranchError('path')
648
609
self.assertEqual('Not a branch: "path".', str(err))
650
def test_not_branch_bzrdir_with_repo(self):
651
bzrdir = self.make_repository('repo').bzrdir
652
err = errors.NotBranchError('path', bzrdir=bzrdir)
654
'Not a branch: "path": location is a repository.', str(err))
656
def test_not_branch_bzrdir_without_repo(self):
657
bzrdir = self.make_bzrdir('bzrdir')
658
err = errors.NotBranchError('path', bzrdir=bzrdir)
659
self.assertEqual('Not a branch: "path".', str(err))
661
611
def test_not_branch_bzrdir_with_recursive_not_branch_error(self):
662
612
class FakeBzrDir(object):
663
613
def open_repository(self):
665
615
# which in turn will another, identical NotBranchError.
666
616
raise errors.NotBranchError('path', bzrdir=FakeBzrDir())
667
617
err = errors.NotBranchError('path', bzrdir=FakeBzrDir())
668
self.assertEqual('Not a branch: "path".', str(err))
670
def test_not_branch_laziness(self):
671
real_bzrdir = self.make_bzrdir('path')
672
class FakeBzrDir(object):
675
def open_repository(self):
676
self.calls.append('open_repository')
677
raise errors.NoRepositoryPresent(real_bzrdir)
678
fake_bzrdir = FakeBzrDir()
679
err = errors.NotBranchError('path', bzrdir=fake_bzrdir)
680
self.assertEqual([], fake_bzrdir.calls)
682
self.assertEqual(['open_repository'], fake_bzrdir.calls)
683
# Stringifying twice doesn't try to open a repository twice.
685
self.assertEqual(['open_repository'], fake_bzrdir.calls)
618
self.assertEqual('Not a branch: "path": NotBranchError.', str(err))
687
620
def test_invalid_pattern(self):
688
621
error = errors.InvalidPattern('Bad pattern msg.')
764
697
self.assertEqual(
765
698
u"Failed to rename from to to: readonly file",
702
class TestErrorsUsingTransport(tests.TestCaseWithMemoryTransport):
703
"""Tests for errors that need to use a branch or repo."""
705
def test_no_public_branch(self):
706
b = self.make_branch('.')
707
error = errors.NoPublicBranch(b)
708
url = urlutils.unescape_for_display(b.base, 'ascii')
709
self.assertEqualDiff(
710
'There is no public branch set for "%s".' % url, str(error))
712
def test_no_repo(self):
713
dir = controldir.ControlDir.create(self.get_url())
714
error = errors.NoRepositoryPresent(dir)
715
self.assertNotEqual(-1, str(error).find((dir.transport.clone('..').base)))
716
self.assertEqual(-1, str(error).find((dir.transport.base)))
718
def test_corrupt_repository(self):
719
repo = self.make_repository('.')
720
error = errors.CorruptRepository(repo)
721
self.assertEqualDiff("An error has been detected in the repository %s.\n"
722
"Please run brz reconcile on this repository." %
723
repo.bzrdir.root_transport.base,
726
def test_unknown_bug_tracker_abbreviation(self):
727
"""Test the formatting of UnknownBugTrackerAbbreviation."""
728
branch = self.make_branch('some_branch')
729
error = errors.UnknownBugTrackerAbbreviation('xxx', branch)
731
"Cannot find registered bug tracker called xxx on %s" % branch,
734
def test_not_branch_bzrdir_with_repo(self):
735
bzrdir = self.make_repository('repo').bzrdir
736
err = errors.NotBranchError('path', bzrdir=bzrdir)
738
'Not a branch: "path": location is a repository.', str(err))
740
def test_not_branch_bzrdir_without_repo(self):
741
bzrdir = self.make_bzrdir('bzrdir')
742
err = errors.NotBranchError('path', bzrdir=bzrdir)
743
self.assertEqual('Not a branch: "path".', str(err))
745
def test_not_branch_laziness(self):
746
real_bzrdir = self.make_bzrdir('path')
747
class FakeBzrDir(object):
750
def open_repository(self):
751
self.calls.append('open_repository')
752
raise errors.NoRepositoryPresent(real_bzrdir)
753
fake_bzrdir = FakeBzrDir()
754
err = errors.NotBranchError('path', bzrdir=fake_bzrdir)
755
self.assertEqual([], fake_bzrdir.calls)
757
self.assertEqual(['open_repository'], fake_bzrdir.calls)
758
# Stringifying twice doesn't try to open a repository twice.
760
self.assertEqual(['open_repository'], fake_bzrdir.calls)