/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'],
7143.15.2 by Jelmer Vernooij
Run autopep8.
40
                                           universal_newlines=True,
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)
7045.3.1 by Jelmer Vernooij
Fix another ~500 tests.
43
        self.assertContainsRe(err, br'\nAssertionError: always fails\n')
7143.15.2 by Jelmer Vernooij
Run autopep8.
44
        self.assertContainsRe(
45
            err, br'Bazaar has encountered an internal error')
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
46
6352.3.1 by Martin Packman
Add test for working with non-ascii filenames under the C locale
47
    def test_utf8_default_fs_enc(self):
6622.1.29 by Jelmer Vernooij
Fix some more tests.
48
        """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
49
        if os.name != "posix":
50
            raise tests.TestNotApplicable("Needs system beholden to C locales")
51
        out, err = self.run_bzr_subprocess(["init", "file:%C2%A7"],
7143.15.2 by Jelmer Vernooij
Run autopep8.
52
                                           env_changes={"LANG": "C", "LC_ALL": "C"})
7027.10.1 by Jelmer Vernooij
Various blackbox test fixes.
53
        self.assertContainsRe(out, b"^Created a standalone tree .*$")
6352.3.1 by Martin Packman
Add test for working with non-ascii filenames under the C locale
54
5527.1.2 by Vincent Ladeuil
Report error if a non-ASCII command option is given.
55
5984.1.2 by Vincent Ladeuil
Really fix it.
56
class TestOptParseBugHandling(tests.TestCase):
5514.3.3 by Rory Yorke
Moved test to bb.test_exceptions, and test differently for Python 2.4.
57
    "Test that we handle http://bugs.python.org/issue2931"
58
59
    def test_nonascii_optparse(self):
7078.15.1 by Jelmer Vernooij
Fix some more tests.
60
        """Reasonable error raised when non-ascii in option name on Python 2"""
7479.2.1 by Jelmer Vernooij
Drop python2 support.
61
        error_re = u'no such option: -\xe4'
6809.1.1 by Martin
Apply 2to3 ws_comma fixer
62
        out = self.run_bzr_error([error_re], ['st', u'-\xe4'])
5527.1.2 by Vincent Ladeuil
Report error if a non-ASCII command option is given.
63
1904.2.5 by Martin Pool
Fix format warning inside test suite and add test
64
5675.2.1 by Jelmer Vernooij
Add RepositoryFormat.is_deprecated(). This removes the need for
65
class TestObsoleteRepoFormat(RepositoryFormat2a):
66
67
    @classmethod
68
    def get_format_string(cls):
6855.2.2 by Jelmer Vernooij
Format strings are bytes.
69
        return b"Test Obsolete Repository Format"
5675.2.1 by Jelmer Vernooij
Add RepositoryFormat.is_deprecated(). This removes the need for
70
71
    def is_deprecated(self):
72
        return True
73
74
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
75
class TestDeprecationWarning(tests.TestCaseWithTransport):
76
    """The deprecation warning is controlled via a global variable:
77
    repository._deprecation_warning_done. As such, it can be emitted only once
6622.1.29 by Jelmer Vernooij
Fix some more tests.
78
    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
79
80
    It would be better if it was a repo attribute instead but that's far more
81
    work than I want to do right now -- vila 20091215.
82
    """
83
84
    def setUp(self):
85
        super(TestDeprecationWarning, self).setUp()
5675.2.1 by Jelmer Vernooij
Add RepositoryFormat.is_deprecated(). This removes the need for
86
        self.addCleanup(repository.format_registry.remove,
7143.15.2 by Jelmer Vernooij
Run autopep8.
87
                        TestObsoleteRepoFormat)
5675.2.7 by Jelmer Vernooij
Merge bzr.dev.
88
        repository.format_registry.register(TestObsoleteRepoFormat)
5675.2.6 by Jelmer Vernooij
Fix some tests.
89
        self.addCleanup(controldir.format_registry.remove, "testobsolete")
6695.5.1 by Jelmer Vernooij
Move bzr format registration to breezy.bzr.
90
        bzr.register_metadir(controldir.format_registry, "testobsolete",
7143.15.2 by Jelmer Vernooij
Run autopep8.
91
                             "breezy.tests.blackbox.test_exceptions.TestObsoleteRepoFormat",
92
                             branch_format='breezy.bzr.branch.BzrBranchFormat7',
93
                             tree_format='breezy.bzr.workingtree_4.WorkingTreeFormat6',
94
                             deprecated=True,
95
                             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
96
        self.disable_deprecation_warning()
97
98
    def enable_deprecation_warning(self, repo=None):
99
        """repo is not used yet since _deprecation_warning_done is a global"""
100
        repository._deprecation_warning_done = False
101
102
    def disable_deprecation_warning(self, repo=None):
103
        """repo is not used yet since _deprecation_warning_done is a global"""
104
        repository._deprecation_warning_done = True
105
106
    def make_obsolete_repo(self, path):
107
        # We don't want the deprecation raising during the repo creation
6653.6.5 by Jelmer Vernooij
Rename make_bzrdir to make_controldir.
108
        format = controldir.format_registry.make_controldir("testobsolete")
5675.2.1 by Jelmer Vernooij
Add RepositoryFormat.is_deprecated(). This removes the need for
109
        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
110
        return tree
111
112
    def check_warning(self, present):
113
        if present:
114
            check = self.assertContainsRe
115
        else:
116
            check = self.assertNotContainsRe
6622.1.29 by Jelmer Vernooij
Fix some more tests.
117
        check(self.get_log(), 'WARNING.*brz upgrade')
1904.2.5 by Martin Pool
Fix format warning inside test suite and add test
118
119
    def test_repository_deprecation_warning(self):
120
        """Old formats give a warning"""
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
121
        self.make_obsolete_repo('foo')
122
        self.enable_deprecation_warning()
123
        out, err = self.run_bzr('status', working_dir='foo')
124
        self.check_warning(True)
125
126
    def test_repository_deprecation_warning_suppressed_global(self):
127
        """Old formats give a warning"""
6449.1.1 by Jelmer Vernooij
Convert 'suppress_warnings' option to config stacks.
128
        conf = config.GlobalStack()
129
        conf.set('suppress_warnings', 'format_deprecation')
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
130
        self.make_obsolete_repo('foo')
131
        self.enable_deprecation_warning()
132
        out, err = self.run_bzr('status', working_dir='foo')
133
        self.check_warning(False)
134
135
    def test_repository_deprecation_warning_suppressed_locations(self):
136
        """Old formats give a warning"""
137
        self.make_obsolete_repo('foo')
6449.1.1 by Jelmer Vernooij
Convert 'suppress_warnings' option to config stacks.
138
        conf = config.LocationStack(osutils.pathjoin(self.test_dir, 'foo'))
139
        conf.set('suppress_warnings', 'format_deprecation')
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
140
        self.enable_deprecation_warning()
141
        out, err = self.run_bzr('status', working_dir='foo')
142
        self.check_warning(False)
143
144
    def test_repository_deprecation_warning_suppressed_branch(self):
145
        """Old formats give a warning"""
146
        tree = self.make_obsolete_repo('foo')
6449.1.1 by Jelmer Vernooij
Convert 'suppress_warnings' option to config stacks.
147
        conf = tree.branch.get_config_stack()
148
        conf.set('suppress_warnings', 'format_deprecation')
4840.2.7 by Vincent Ladeuil
Move the _warn_if_deprecated call from repo.__init__ to
149
        self.enable_deprecation_warning()
150
        out, err = self.run_bzr('status', working_dir='foo')
151
        self.check_warning(False)