~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_errors.py

  • Committer: Zearin
  • Date: 2010-11-12 22:08:18 UTC
  • mto: (5570.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 5572.
  • Revision ID: zearin@users.sourceforge.net-20101112220818-mb62len4zyxr8qvd
Fixed capitalization of XML and HTTP.  Fixed by hand and only where appropriate (e.g., left http://some/url lowercase, but capitalized "When making an HTTP request…").

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""Tests for the formatting and construction of errors."""
18
18
 
 
19
import inspect
 
20
import re
19
21
import socket
20
22
import sys
21
23
 
26
28
    symbol_versioning,
27
29
    urlutils,
28
30
    )
29
 
from bzrlib.tests import TestCase, TestCaseWithTransport
 
31
from bzrlib.tests import TestCase, TestCaseWithTransport, TestSkipped
30
32
 
31
33
 
32
34
class TestErrors(TestCaseWithTransport):
33
35
 
 
36
    def test_no_arg_named_message(self):
 
37
        """Ensure the __init__ and _fmt in errors do not have "message" arg.
 
38
 
 
39
        This test fails if __init__ or _fmt in errors has an argument
 
40
        named "message" as this can cause errors in some Python versions.
 
41
        Python 2.5 uses a slot for StandardError.message.
 
42
        See bug #603461
 
43
        """
 
44
        fmt_pattern = re.compile("%\(message\)[sir]")
 
45
        subclasses_present = getattr(errors.BzrError, '__subclasses__', None)
 
46
        if not subclasses_present:
 
47
            raise TestSkipped('__subclasses__ attribute required for classes. '
 
48
                'Requires Python 2.5 or later.')
 
49
        for c in errors.BzrError.__subclasses__():
 
50
            init = getattr(c, '__init__', None)
 
51
            fmt = getattr(c, '_fmt', None)
 
52
            if init:
 
53
                args = inspect.getargspec(init)[0]
 
54
                self.assertFalse('message' in args,
 
55
                    ('Argument name "message" not allowed for '
 
56
                    '"errors.%s.__init__"' % c.__name__))
 
57
            if fmt and fmt_pattern.search(fmt):
 
58
                self.assertFalse(True, ('"message" not allowed in '
 
59
                    '"errors.%s._fmt"' % c.__name__))
 
60
 
34
61
    def test_bad_filename_encoding(self):
35
62
        error = errors.BadFilenameEncoding('bad/filen\xe5me', 'UTF-8')
36
63
        self.assertEqualDiff(
132
159
            "cannot be broken.",
133
160
            str(error))
134
161
 
 
162
    def test_lock_corrupt(self):
 
163
        error = errors.LockCorrupt("corruption info")
 
164
        self.assertEqualDiff("Lock is apparently held, but corrupted: "
 
165
            "corruption info\n"
 
166
            "Use 'bzr break-lock' to clear it",
 
167
            str(error))
 
168
 
135
169
    def test_knit_data_stream_incompatible(self):
136
170
        error = errors.KnitDataStreamIncompatible(
137
171
            'stream format', 'target format')
638
672
        err = errors.NotBranchError('path', bzrdir=bzrdir)
639
673
        self.assertEqual('Not a branch: "path".', str(err))
640
674
 
 
675
    def test_not_branch_bzrdir_with_recursive_not_branch_error(self):
 
676
        class FakeBzrDir(object):
 
677
            def open_repository(self):
 
678
                # str() on the NotBranchError will trigger a call to this,
 
679
                # which in turn will another, identical NotBranchError.
 
680
                raise errors.NotBranchError('path', bzrdir=FakeBzrDir())
 
681
        err = errors.NotBranchError('path', bzrdir=FakeBzrDir())
 
682
        self.assertEqual('Not a branch: "path".', str(err))
 
683
 
641
684
    def test_not_branch_laziness(self):
642
685
        real_bzrdir = self.make_bzrdir('path')
643
686
        class FakeBzrDir(object):
655
698
        str(err)
656
699
        self.assertEqual(['open_repository'], fake_bzrdir.calls)
657
700
 
 
701
    def test_invalid_pattern(self):
 
702
        error = errors.InvalidPattern('Bad pattern msg.')
 
703
        self.assertEqualDiff("Invalid pattern(s) found. Bad pattern msg.",
 
704
            str(error))
 
705
 
 
706
    def test_recursive_bind(self):
 
707
        error = errors.RecursiveBind('foo_bar_branch')
 
708
        msg = ('Branch "foo_bar_branch" appears to be bound to itself. '
 
709
            'Please use `bzr unbind` to fix.')
 
710
        self.assertEqualDiff(msg, str(error))
 
711
 
658
712
 
659
713
class PassThroughError(errors.BzrError):
660
714
 
703
757
            str(e), 'Unprintable exception ErrorWithBadFormat')
704
758
 
705
759
    def test_cannot_bind_address(self):
706
 
        # see <https://bugs.edge.launchpad.net/bzr/+bug/286871>
 
760
        # see <https://bugs.launchpad.net/bzr/+bug/286871>
707
761
        e = errors.CannotBindAddress('example.com', 22,
708
762
            socket.error(13, 'Permission denied'))
709
763
        self.assertContainsRe(str(e),
713
767
        e = errors.FileTimestampUnavailable("/path/foo")
714
768
        self.assertEquals("The filestamp for /path/foo is not available.",
715
769
            str(e))
 
770
            
 
771
    def test_transform_rename_failed(self):
 
772
        e = errors.TransformRenameFailed(u"from", u"to", "readonly file", 2)
 
773
        self.assertEquals(
 
774
            u"Failed to rename from to to: readonly file",
 
775
            str(e))