~bzr-pqm/bzr/bzr.dev

5557.1.15 by John Arbash Meinel
Merge bzr.dev 5597 to resolve NEWS, aka bzr-2.3.txt
1
# Copyright (C) 2006, 2007, 2009, 2010, 2011 Canonical Ltd
1740.5.1 by Martin Pool
When an unhandled exception occurs, write the traceback to stderr.
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1740.5.1 by Martin Pool
When an unhandled exception occurs, write the traceback to stderr.
16
17
"""Tests for display of exceptions."""
18
19
import sys
20
2713.2.2 by Martin Pool
Add mention of exitcode 4 for internal errors
21
from bzrlib import (
22
    bzrdir,
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
23
    config,
2713.2.2 by Martin Pool
Add mention of exitcode 4 for internal errors
24
    errors,
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
25
    osutils,
2713.2.2 by Martin Pool
Add mention of exitcode 4 for internal errors
26
    repository,
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
27
    tests,
2713.2.2 by Martin Pool
Add mention of exitcode 4 for internal errors
28
    )
1551.9.3 by Aaron Bentley
Revert buggy apport changes
29
5582.4.3 by Jelmer Vernooij
remove more unused imports, avoid relying on a specific set of working tree formats that support references.
30
from bzrlib.tests import TestCase
1740.5.1 by Martin Pool
When an unhandled exception occurs, write the traceback to stderr.
31
2830.2.2 by Martin Pool
Update test for report_exception to be cleaner and work with new run_bzr behavior
32
1740.5.1 by Martin Pool
When an unhandled exception occurs, write the traceback to stderr.
33
class TestExceptionReporting(TestCase):
34
2830.2.11 by Martin Pool
Integrate testing of return codes/error reporting
35
    def test_exception_exitcode(self):
2830.2.7 by Martin Pool
Return exitcode 4 on internal error
36
        # we must use a subprocess, because the normal in-memory mechanism
37
        # allows errors to propagate up through the test suite
2830.2.10 by Martin Pool
merge trunk
38
        out, err = self.run_bzr_subprocess(['assert-fail'],
2947.3.1 by Alexander Belchenko
test_exceptions.py: run_bzr_subprocess should use universal_newlines=True
39
            universal_newlines=True,
2830.2.7 by Martin Pool
Return exitcode 4 on internal error
40
            retcode=errors.EXIT_INTERNAL_ERROR)
2830.2.11 by Martin Pool
Integrate testing of return codes/error reporting
41
        self.assertEqual(4, errors.EXIT_INTERNAL_ERROR)
1551.9.3 by Aaron Bentley
Revert buggy apport changes
42
        self.assertContainsRe(err,
4584.3.32 by Martin Pool
Correct blackbox tests for new apport message
43
                r'exceptions\.AssertionError: always fails\n')
44
        self.assertContainsRe(err, r'Bazaar has encountered an internal error')
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
45
5527.1.2 by Vincent Ladeuil
Report error if a non-ASCII command option is given.
46
5514.3.3 by Rory Yorke
Moved test to bb.test_exceptions, and test differently for Python 2.4.
47
class TestOptParseBugHandling(TestCase):
48
    "Test that we handle http://bugs.python.org/issue2931"
49
50
    def test_nonascii_optparse(self):
51
        """Reasonable error raised when non-ascii in option name"""
52
        if sys.version_info < (2,5):
5527.1.2 by Vincent Ladeuil
Report error if a non-ASCII command option is given.
53
            error_re = 'no such option'
5514.3.3 by Rory Yorke
Moved test to bb.test_exceptions, and test differently for Python 2.4.
54
        else:
5527.1.2 by Vincent Ladeuil
Report error if a non-ASCII command option is given.
55
            error_re = 'Only ASCII permitted in option names'
56
        out = self.run_bzr_error([error_re], ['st',u'-\xe4'])
57
1904.2.5 by Martin Pool
Fix format warning inside test suite and add test
58
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
59
class TestDeprecationWarning(tests.TestCaseWithTransport):
60
    """The deprecation warning is controlled via a global variable:
61
    repository._deprecation_warning_done. As such, it can be emitted only once
62
    during a bzr invocation, no matter how many repositories are involved.
63
64
    It would be better if it was a repo attribute instead but that's far more
65
    work than I want to do right now -- vila 20091215.
66
    """
67
68
    def setUp(self):
69
        super(TestDeprecationWarning, self).setUp()
70
        self.disable_deprecation_warning()
71
72
    def enable_deprecation_warning(self, repo=None):
73
        """repo is not used yet since _deprecation_warning_done is a global"""
74
        repository._deprecation_warning_done = False
75
76
    def disable_deprecation_warning(self, repo=None):
77
        """repo is not used yet since _deprecation_warning_done is a global"""
78
        repository._deprecation_warning_done = True
79
80
    def make_obsolete_repo(self, path):
81
        # We don't want the deprecation raising during the repo creation
82
        tree = self.make_branch_and_tree(path, format=bzrdir.BzrDirFormat5())
83
        return tree
84
85
    def check_warning(self, present):
86
        if present:
87
            check = self.assertContainsRe
88
        else:
89
            check = self.assertNotContainsRe
90
        check(self._get_log(keep_log_file=True), 'WARNING.*bzr upgrade')
1904.2.5 by Martin Pool
Fix format warning inside test suite and add test
91
92
    def test_repository_deprecation_warning(self):
93
        """Old formats give a warning"""
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
94
        self.make_obsolete_repo('foo')
95
        self.enable_deprecation_warning()
96
        out, err = self.run_bzr('status', working_dir='foo')
97
        self.check_warning(True)
98
99
    def test_repository_deprecation_warning_suppressed_global(self):
100
        """Old formats give a warning"""
101
        conf = config.GlobalConfig()
102
        conf.set_user_option('suppress_warnings', 'format_deprecation')
103
        self.make_obsolete_repo('foo')
104
        self.enable_deprecation_warning()
105
        out, err = self.run_bzr('status', working_dir='foo')
106
        self.check_warning(False)
107
108
    def test_repository_deprecation_warning_suppressed_locations(self):
109
        """Old formats give a warning"""
110
        self.make_obsolete_repo('foo')
111
        conf = config.LocationConfig(osutils.pathjoin(self.test_dir, 'foo'))
112
        conf.set_user_option('suppress_warnings', 'format_deprecation')
113
        self.enable_deprecation_warning()
114
        out, err = self.run_bzr('status', working_dir='foo')
115
        self.check_warning(False)
116
117
    def test_repository_deprecation_warning_suppressed_branch(self):
118
        """Old formats give a warning"""
119
        tree = self.make_obsolete_repo('foo')
120
        conf = tree.branch.get_config()
121
        conf.set_user_option('suppress_warnings', 'format_deprecation')
122
        self.enable_deprecation_warning()
123
        out, err = self.run_bzr('status', working_dir='foo')
124
        self.check_warning(False)