/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
1
# Copyright (C) 2006, 2007, 2009-2012, 2016 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
5785.1.1 by Martin
Add blackbox test for reporting of argv encoding failures
19
import os
5939.4.2 by Jelmer Vernooij
Use re.MULTILINE rather than removing the anchor.
20
import re
1740.5.1 by Martin Pool
When an unhandled exception occurs, write the traceback to stderr.
21
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
22
from breezy import (
6695.5.1 by Jelmer Vernooij
Move bzr format registration to breezy.bzr.
23
    bzr,
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
24
    config,
5675.2.1 by Jelmer Vernooij
Add RepositoryFormat.is_deprecated(). This removes the need for
25
    controldir,
2713.2.2 by Martin Pool
Add mention of exitcode 4 for internal errors
26
    errors,
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
27
    osutils,
2713.2.2 by Martin Pool
Add mention of exitcode 4 for internal errors
28
    repository,
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
29
    tests,
2713.2.2 by Martin Pool
Add mention of exitcode 4 for internal errors
30
    )
6670.4.5 by Jelmer Vernooij
Move breezy.repofmt contents to breezy.bzr.
31
from breezy.bzr.groupcompress_repo import RepositoryFormat2a
1551.9.3 by Aaron Bentley
Revert buggy apport changes
32
5984.1.1 by Vincent Ladeuil
Some cleanup and a first try at fixing bug #798698.
33
34
class TestExceptionReporting(tests.TestCaseInTempDir):
1740.5.1 by Martin Pool
When an unhandled exception occurs, write the traceback to stderr.
35
2830.2.11 by Martin Pool
Integrate testing of return codes/error reporting
36
    def test_exception_exitcode(self):
2830.2.7 by Martin Pool
Return exitcode 4 on internal error
37
        # we must use a subprocess, because the normal in-memory mechanism
38
        # allows errors to propagate up through the test suite
2830.2.10 by Martin Pool
merge trunk
39
        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
40
            universal_newlines=True,
2830.2.7 by Martin Pool
Return exitcode 4 on internal error
41
            retcode=errors.EXIT_INTERNAL_ERROR)
2830.2.11 by Martin Pool
Integrate testing of return codes/error reporting
42
        self.assertEqual(4, errors.EXIT_INTERNAL_ERROR)
6677.1.6 by Martin
Fix bb.test_exceptions after removing generic prefix
43
        self.assertContainsRe(err, r'\nAssertionError: always fails\n')
4584.3.32 by Martin Pool
Correct blackbox tests for new apport message
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
5785.1.1 by Martin
Add blackbox test for reporting of argv encoding failures
46
    def test_undecodable_argv(self):
47
        """A user error must be reported if argv is not in the locale encoding
48
49
        A subprocess with an environment ascii-only setting is used so the test
50
        can run without worrying about the locale the test suite is using.
51
        """
52
        if os.name != "posix":
5785.1.3 by Martin
Tweak argv encoding error message
53
            raise tests.TestNotApplicable("Needs system beholden to C locales")
5785.1.1 by Martin
Add blackbox test for reporting of argv encoding failures
54
        out, err = self.run_bzr_subprocess(["\xa0"],
5815.2.1 by Jelmer Vernooij
Override LC_ALL.
55
            env_changes={"LANG": "C", "LC_ALL": "C"},
5785.1.1 by Martin
Add blackbox test for reporting of argv encoding failures
56
            universal_newlines=True,
57
            retcode=errors.EXIT_ERROR)
6622.1.29 by Jelmer Vernooij
Fix some more tests.
58
        self.assertContainsRe(err, r"^brz: ERROR: .*'\\xa0'.* unsupported",
5939.4.2 by Jelmer Vernooij
Use re.MULTILINE rather than removing the anchor.
59
            flags=re.MULTILINE)
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
60
        self.assertEqual(out, "")
5785.1.1 by Martin
Add blackbox test for reporting of argv encoding failures
61
6352.3.1 by Martin Packman
Add test for working with non-ascii filenames under the C locale
62
    def test_utf8_default_fs_enc(self):
6622.1.29 by Jelmer Vernooij
Fix some more tests.
63
        """In the C locale brz treats a posix filesystem as UTF-8 encoded"""
6352.3.1 by Martin Packman
Add test for working with non-ascii filenames under the C locale
64
        if os.name != "posix":
65
            raise tests.TestNotApplicable("Needs system beholden to C locales")
66
        out, err = self.run_bzr_subprocess(["init", "file:%C2%A7"],
67
            env_changes={"LANG": "C", "LC_ALL": "C"})
68
        self.assertContainsRe(out, "^Created a standalone tree .*$")
69
5527.1.2 by Vincent Ladeuil
Report error if a non-ASCII command option is given.
70
5984.1.2 by Vincent Ladeuil
Really fix it.
71
class TestOptParseBugHandling(tests.TestCase):
5514.3.3 by Rory Yorke
Moved test to bb.test_exceptions, and test differently for Python 2.4.
72
    "Test that we handle http://bugs.python.org/issue2931"
73
74
    def test_nonascii_optparse(self):
75
        """Reasonable error raised when non-ascii in option name"""
5848.2.1 by John Arbash Meinel
Break compatibility with python <2.6.
76
        error_re = 'Only ASCII permitted in option names'
5527.1.2 by Vincent Ladeuil
Report error if a non-ASCII command option is given.
77
        out = self.run_bzr_error([error_re], ['st',u'-\xe4'])
78
1904.2.5 by Martin Pool
Fix format warning inside test suite and add test
79
5675.2.1 by Jelmer Vernooij
Add RepositoryFormat.is_deprecated(). This removes the need for
80
class TestObsoleteRepoFormat(RepositoryFormat2a):
81
82
    @classmethod
83
    def get_format_string(cls):
84
        return "Test Obsolete Repository Format"
85
86
    def is_deprecated(self):
87
        return True
88
89
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
90
class TestDeprecationWarning(tests.TestCaseWithTransport):
91
    """The deprecation warning is controlled via a global variable:
92
    repository._deprecation_warning_done. As such, it can be emitted only once
6622.1.29 by Jelmer Vernooij
Fix some more tests.
93
    during a brz invocation, no matter how many repositories are involved.
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
94
95
    It would be better if it was a repo attribute instead but that's far more
96
    work than I want to do right now -- vila 20091215.
97
    """
98
99
    def setUp(self):
100
        super(TestDeprecationWarning, self).setUp()
5675.2.1 by Jelmer Vernooij
Add RepositoryFormat.is_deprecated(). This removes the need for
101
        self.addCleanup(repository.format_registry.remove,
102
            TestObsoleteRepoFormat)
5675.2.7 by Jelmer Vernooij
Merge bzr.dev.
103
        repository.format_registry.register(TestObsoleteRepoFormat)
5675.2.6 by Jelmer Vernooij
Fix some tests.
104
        self.addCleanup(controldir.format_registry.remove, "testobsolete")
6695.5.1 by Jelmer Vernooij
Move bzr format registration to breezy.bzr.
105
        bzr.register_metadir(controldir.format_registry, "testobsolete",
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
106
            "breezy.tests.blackbox.test_exceptions.TestObsoleteRepoFormat",
6670.4.12 by Jelmer Vernooij
Move inventorytree to breezy.bzr.
107
            branch_format='breezy.bzr.branch.BzrBranchFormat7',
108
            tree_format='breezy.bzr.workingtree_4.WorkingTreeFormat6',
5675.2.1 by Jelmer Vernooij
Add RepositoryFormat.is_deprecated(). This removes the need for
109
            deprecated=True,
110
            help='Same as 2a, but with an obsolete repo format.')
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
111
        self.disable_deprecation_warning()
112
113
    def enable_deprecation_warning(self, repo=None):
114
        """repo is not used yet since _deprecation_warning_done is a global"""
115
        repository._deprecation_warning_done = False
116
117
    def disable_deprecation_warning(self, repo=None):
118
        """repo is not used yet since _deprecation_warning_done is a global"""
119
        repository._deprecation_warning_done = True
120
121
    def make_obsolete_repo(self, path):
122
        # We don't want the deprecation raising during the repo creation
6653.6.5 by Jelmer Vernooij
Rename make_bzrdir to make_controldir.
123
        format = controldir.format_registry.make_controldir("testobsolete")
5675.2.1 by Jelmer Vernooij
Add RepositoryFormat.is_deprecated(). This removes the need for
124
        tree = self.make_branch_and_tree(path, format=format)
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
125
        return tree
126
127
    def check_warning(self, present):
128
        if present:
129
            check = self.assertContainsRe
130
        else:
131
            check = self.assertNotContainsRe
6622.1.29 by Jelmer Vernooij
Fix some more tests.
132
        check(self.get_log(), 'WARNING.*brz upgrade')
1904.2.5 by Martin Pool
Fix format warning inside test suite and add test
133
134
    def test_repository_deprecation_warning(self):
135
        """Old formats give a warning"""
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
136
        self.make_obsolete_repo('foo')
137
        self.enable_deprecation_warning()
138
        out, err = self.run_bzr('status', working_dir='foo')
139
        self.check_warning(True)
140
141
    def test_repository_deprecation_warning_suppressed_global(self):
142
        """Old formats give a warning"""
6449.1.1 by Jelmer Vernooij
Convert 'suppress_warnings' option to config stacks.
143
        conf = config.GlobalStack()
144
        conf.set('suppress_warnings', 'format_deprecation')
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
145
        self.make_obsolete_repo('foo')
146
        self.enable_deprecation_warning()
147
        out, err = self.run_bzr('status', working_dir='foo')
148
        self.check_warning(False)
149
150
    def test_repository_deprecation_warning_suppressed_locations(self):
151
        """Old formats give a warning"""
152
        self.make_obsolete_repo('foo')
6449.1.1 by Jelmer Vernooij
Convert 'suppress_warnings' option to config stacks.
153
        conf = config.LocationStack(osutils.pathjoin(self.test_dir, 'foo'))
154
        conf.set('suppress_warnings', 'format_deprecation')
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
155
        self.enable_deprecation_warning()
156
        out, err = self.run_bzr('status', working_dir='foo')
157
        self.check_warning(False)
158
159
    def test_repository_deprecation_warning_suppressed_branch(self):
160
        """Old formats give a warning"""
161
        tree = self.make_obsolete_repo('foo')
6449.1.1 by Jelmer Vernooij
Convert 'suppress_warnings' option to config stacks.
162
        conf = tree.branch.get_config_stack()
163
        conf.set('suppress_warnings', 'format_deprecation')
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
164
        self.enable_deprecation_warning()
165
        out, err = self.run_bzr('status', working_dir='foo')
166
        self.check_warning(False)