~bzr-pqm/bzr/bzr.dev

2713.2.1 by Martin Pool
Return exitcode 4 if an internal error occurs
1
# Copyright (C) 2006, 2007 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
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
"""Tests for display of exceptions."""
18
2830.2.2 by Martin Pool
Update test for report_exception to be cleaner and work with new run_bzr behavior
19
from cStringIO import StringIO
1740.5.1 by Martin Pool
When an unhandled exception occurs, write the traceback to stderr.
20
import os
21
import sys
22
2713.2.2 by Martin Pool
Add mention of exitcode 4 for internal errors
23
from bzrlib import (
24
    bzrdir,
25
    errors,
26
    repository,
2830.2.2 by Martin Pool
Update test for report_exception to be cleaner and work with new run_bzr behavior
27
    trace,
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
30
from bzrlib.tests import TestCaseInTempDir, TestCase
1740.5.6 by Martin Pool
Clean up many exception classes.
31
from bzrlib.errors import NotBranchError
1740.5.1 by Martin Pool
When an unhandled exception occurs, write the traceback to stderr.
32
2830.2.2 by Martin Pool
Update test for report_exception to be cleaner and work with new run_bzr behavior
33
1740.5.1 by Martin Pool
When an unhandled exception occurs, write the traceback to stderr.
34
class TestExceptionReporting(TestCase):
35
1740.5.2 by Martin Pool
Improved tests for display of exceptions.
36
    def test_report_exception(self):
1740.5.1 by Martin Pool
When an unhandled exception occurs, write the traceback to stderr.
37
        """When an error occurs, display bug report details to stderr"""
2830.2.2 by Martin Pool
Update test for report_exception to be cleaner and work with new run_bzr behavior
38
        try:
39
            raise AssertionError("failed")
40
        except AssertionError, e:
41
            erf = StringIO()
42
            trace.report_exception(sys.exc_info(), erf)
43
        err = erf.getvalue()
44
        self.assertContainsRe(err,
45
            r'bzr: ERROR: exceptions\.AssertionError: failed\n')
46
        self.assertContainsRe(err,
3092.2.1 by Martin Pool
Ask people to report bugs to Launchpad, and mention more support options
47
            r'Please report a bug at https://bugs\.launchpad\.net/bzr/\+filebug')
2830.2.11 by Martin Pool
Integrate testing of return codes/error reporting
48
        self.assertContainsRe(err,
49
            '(?m)^encoding: .*, fsenc: .*, lang: .*')
50
        self.assertContainsRe(err,
51
            '(?m)^plugins:$')
2830.2.7 by Martin Pool
Return exitcode 4 on internal error
52
2830.2.11 by Martin Pool
Integrate testing of return codes/error reporting
53
    def test_exception_exitcode(self):
2830.2.7 by Martin Pool
Return exitcode 4 on internal error
54
        # we must use a subprocess, because the normal in-memory mechanism
55
        # allows errors to propagate up through the test suite
2830.2.10 by Martin Pool
merge trunk
56
        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
57
            universal_newlines=True,
2830.2.7 by Martin Pool
Return exitcode 4 on internal error
58
            retcode=errors.EXIT_INTERNAL_ERROR)
2830.2.11 by Martin Pool
Integrate testing of return codes/error reporting
59
        self.assertEqual(4, errors.EXIT_INTERNAL_ERROR)
1551.9.3 by Aaron Bentley
Revert buggy apport changes
60
        self.assertContainsRe(err,
61
                r'bzr: ERROR: exceptions\.AssertionError: always fails\n')
3092.2.1 by Martin Pool
Ask people to report bugs to Launchpad, and mention more support options
62
        self.assertContainsRe(err, r'Please report a bug at')
1904.2.5 by Martin Pool
Fix format warning inside test suite and add test
63
    
64
65
class TestDeprecationWarning(TestCaseInTempDir):
66
67
    def test_repository_deprecation_warning(self):
68
        """Old formats give a warning"""
69
        # the warning's normally off for testing but we reenable it
70
        repository._deprecation_warning_done = False
71
        try:
72
            os.mkdir('foo')
73
            bzrdir.BzrDirFormat5().initialize('foo')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
74
            out, err = self.run_bzr("status foo")
1927.3.1 by Carl Friedrich Bolz
Throw away on-disk logfile when possible.
75
            self.assertContainsRe(self._get_log(keep_log_file=True),
76
                                  "bzr upgrade")
1904.2.5 by Martin Pool
Fix format warning inside test suite and add test
77
        finally:
78
            repository._deprecation_warning_done = True
79