/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) 2011, 2016 Canonical Ltd
5669.3.8 by Jelmer Vernooij
Refactor, move to bzrlib.controldir.
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
17
"""Tests for the ControlDir facility.
18
19
For interface contract tests, see tests/per_control_dir.
20
"""
21
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
22
from .. import (
5669.3.8 by Jelmer Vernooij
Refactor, move to bzrlib.controldir.
23
    controldir,
5712.3.13 by Jelmer Vernooij
Add Prober.known_formats().
24
    errors,
5669.3.11 by Jelmer Vernooij
review feedback from vila.
25
    tests,
5717.1.5 by Jelmer Vernooij
Use recommend_upgrade.
26
    ui,
5669.3.8 by Jelmer Vernooij
Refactor, move to bzrlib.controldir.
27
    )
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
28
from .scenarios import load_tests_apply_scenarios
5712.3.13 by Jelmer Vernooij
Add Prober.known_formats().
29
30
31
load_tests = load_tests_apply_scenarios
5669.3.8 by Jelmer Vernooij
Refactor, move to bzrlib.controldir.
32
33
6734.1.22 by Jelmer Vernooij
review comments.
34
class TestErrors(tests.TestCase):
6734.1.13 by Jelmer Vernooij
Move MustHaveWorkingTree.
35
36
    def test_must_have_working_tree(self):
37
        err = controldir.MustHaveWorkingTree('foo', 'bar')
38
        self.assertEqual(str(err), "Branching 'bar'(foo) must create a"
39
                                   " working tree.")
40
41
5669.3.10 by Jelmer Vernooij
Use ControlComponentFormat.
42
class SampleComponentFormat(controldir.ControlComponentFormat):
5669.3.8 by Jelmer Vernooij
Refactor, move to bzrlib.controldir.
43
44
    def get_format_string(self):
6855.2.2 by Jelmer Vernooij
Format strings are bytes.
45
        return b"Example component format."
5669.3.8 by Jelmer Vernooij
Refactor, move to bzrlib.controldir.
46
47
5669.3.10 by Jelmer Vernooij
Use ControlComponentFormat.
48
class SampleExtraComponentFormat(controldir.ControlComponentFormat):
5669.3.8 by Jelmer Vernooij
Refactor, move to bzrlib.controldir.
49
    """Extra format, no format string."""
50
51
5669.3.11 by Jelmer Vernooij
review feedback from vila.
52
class TestMetaComponentFormatRegistry(tests.TestCase):
5669.3.8 by Jelmer Vernooij
Refactor, move to bzrlib.controldir.
53
54
    def setUp(self):
55
        super(TestMetaComponentFormatRegistry, self).setUp()
5669.3.9 by Jelmer Vernooij
Consistent naming.
56
        self.registry = controldir.ControlComponentFormatRegistry()
5669.3.8 by Jelmer Vernooij
Refactor, move to bzrlib.controldir.
57
58
    def test_register_unregister_format(self):
59
        format = SampleComponentFormat()
60
        self.registry.register(format)
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
61
        self.assertEqual(format,
7143.15.2 by Jelmer Vernooij
Run autopep8.
62
                         self.registry.get(b"Example component format."))
5669.3.8 by Jelmer Vernooij
Refactor, move to bzrlib.controldir.
63
        self.registry.remove(format)
64
        self.assertRaises(KeyError, self.registry.get,
7143.15.2 by Jelmer Vernooij
Run autopep8.
65
                          b"Example component format.")
5669.3.8 by Jelmer Vernooij
Refactor, move to bzrlib.controldir.
66
67
    def test_get_all(self):
68
        format = SampleComponentFormat()
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
69
        self.assertEqual([], self.registry._get_all())
5669.3.8 by Jelmer Vernooij
Refactor, move to bzrlib.controldir.
70
        self.registry.register(format)
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
71
        self.assertEqual([format], self.registry._get_all())
5669.3.8 by Jelmer Vernooij
Refactor, move to bzrlib.controldir.
72
5676.1.7 by Jelmer Vernooij
Add test for ControlComponentFormatRegistry._get_all_modules.
73
    def test_get_all_modules(self):
74
        format = SampleComponentFormat()
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
75
        self.assertEqual(set(), self.registry._get_all_modules())
5676.1.7 by Jelmer Vernooij
Add test for ControlComponentFormatRegistry._get_all_modules.
76
        self.registry.register(format)
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
77
        self.assertEqual(
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
78
            {"breezy.tests.test_controldir"},
5676.1.7 by Jelmer Vernooij
Add test for ControlComponentFormatRegistry._get_all_modules.
79
            self.registry._get_all_modules())
80
5669.3.8 by Jelmer Vernooij
Refactor, move to bzrlib.controldir.
81
    def test_register_extra(self):
82
        format = SampleExtraComponentFormat()
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
83
        self.assertEqual([], self.registry._get_all())
5669.3.8 by Jelmer Vernooij
Refactor, move to bzrlib.controldir.
84
        self.registry.register_extra(format)
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
85
        self.assertEqual([format], self.registry._get_all())
5669.3.8 by Jelmer Vernooij
Refactor, move to bzrlib.controldir.
86
87
    def test_register_extra_lazy(self):
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
88
        self.assertEqual([], self.registry._get_all())
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
89
        self.registry.register_extra_lazy("breezy.tests.test_controldir",
7143.15.2 by Jelmer Vernooij
Run autopep8.
90
                                          "SampleExtraComponentFormat")
5669.3.8 by Jelmer Vernooij
Refactor, move to bzrlib.controldir.
91
        formats = self.registry._get_all()
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
92
        self.assertEqual(1, len(formats))
5669.3.8 by Jelmer Vernooij
Refactor, move to bzrlib.controldir.
93
        self.assertIsInstance(formats[0], SampleExtraComponentFormat)
5712.3.3 by Jelmer Vernooij
Support lazy registration of ControlDirFormat.
94
95
5712.3.13 by Jelmer Vernooij
Add Prober.known_formats().
96
class TestProber(tests.TestCaseWithTransport):
5712.3.14 by Jelmer Vernooij
Add Prober.known_formats.
97
    """Per-prober tests."""
5712.3.13 by Jelmer Vernooij
Add Prober.known_formats().
98
99
    scenarios = [
100
        (prober_cls.__name__, {'prober_cls': prober_cls})
101
        for prober_cls in controldir.ControlDirFormat._probers]
102
103
    def setUp(self):
104
        super(TestProber, self).setUp()
105
        self.prober = self.prober_cls()
106
107
    def test_probe_transport_empty(self):
108
        transport = self.get_transport(".")
109
        self.assertRaises(errors.NotBranchError,
7143.15.2 by Jelmer Vernooij
Run autopep8.
110
                          self.prober.probe_transport, transport)
5712.3.13 by Jelmer Vernooij
Add Prober.known_formats().
111
112
    def test_known_formats(self):
5712.3.15 by Jelmer Vernooij
Remove unused register format functions.
113
        known_formats = self.prober_cls.known_formats()
6973.12.10 by Jelmer Vernooij
Fix remaining tests.
114
        self.assertIsInstance(known_formats, list)
5712.3.13 by Jelmer Vernooij
Add Prober.known_formats().
115
        for format in known_formats:
116
            self.assertIsInstance(format, controldir.ControlDirFormat,
7143.15.2 by Jelmer Vernooij
Run autopep8.
117
                                  repr(format))
5712.3.18 by Jelmer Vernooij
Some more test fixes.
118
119
120
class NotBzrDir(controldir.ControlDir):
121
    """A non .bzr based control directory."""
122
123
    def __init__(self, transport, format):
124
        self._format = format
125
        self.root_transport = transport
126
        self.transport = transport.clone('.not')
127
128
129
class NotBzrDirFormat(controldir.ControlDirFormat):
130
    """A test class representing any non-.bzr based disk format."""
131
132
    def initialize_on_transport(self, transport):
133
        """Initialize a new .not dir in the base directory of a Transport."""
134
        transport.mkdir('.not')
135
        return self.open(transport)
136
137
    def open(self, transport):
138
        """Open this directory."""
139
        return NotBzrDir(transport, self)
140
141
142
class NotBzrDirProber(controldir.Prober):
143
144
    def probe_transport(self, transport):
145
        """Our format is present if the transport ends in '.not/'."""
146
        if transport.has('.not'):
147
            return NotBzrDirFormat()
148
149
    @classmethod
150
    def known_formats(cls):
6973.12.9 by Jelmer Vernooij
More fixes.
151
        return [NotBzrDirFormat()]
5712.3.18 by Jelmer Vernooij
Some more test fixes.
152
153
154
class TestNotBzrDir(tests.TestCaseWithTransport):
155
    """Tests for using the controldir api with a non .bzr based disk format.
156
157
    If/when one of these is in the core, we can let the implementation tests
158
    verify this works.
159
    """
160
161
    def test_create_and_find_format(self):
162
        # create a .notbzr dir
163
        format = NotBzrDirFormat()
164
        dir = format.initialize(self.get_url())
165
        self.assertIsInstance(dir, NotBzrDir)
166
        # now probe for it.
167
        controldir.ControlDirFormat.register_prober(NotBzrDirProber)
168
        try:
7143.15.2 by Jelmer Vernooij
Run autopep8.
169
            found = controldir.ControlDirFormat.find_format(
170
                self.get_transport())
5712.3.18 by Jelmer Vernooij
Some more test fixes.
171
            self.assertIsInstance(found, NotBzrDirFormat)
172
        finally:
173
            controldir.ControlDirFormat.unregister_prober(NotBzrDirProber)
174
175
    def test_included_in_known_formats(self):
176
        controldir.ControlDirFormat.register_prober(NotBzrDirProber)
7143.15.2 by Jelmer Vernooij
Run autopep8.
177
        self.addCleanup(
178
            controldir.ControlDirFormat.unregister_prober, NotBzrDirProber)
5712.3.18 by Jelmer Vernooij
Some more test fixes.
179
        formats = controldir.ControlDirFormat.known_formats()
6973.12.10 by Jelmer Vernooij
Fix remaining tests.
180
        self.assertIsInstance(formats, list)
5712.3.18 by Jelmer Vernooij
Some more test fixes.
181
        for format in formats:
182
            if isinstance(format, NotBzrDirFormat):
183
                break
184
        else:
185
            self.fail("No NotBzrDirFormat in %s" % formats)
5717.1.4 by Jelmer Vernooij
Test default control component format implementation.
186
187
188
class UnsupportedControlComponentFormat(controldir.ControlComponentFormat):
189
190
    def is_supported(self):
191
        return False
192
193
5717.1.5 by Jelmer Vernooij
Use recommend_upgrade.
194
class OldControlComponentFormat(controldir.ControlComponentFormat):
195
196
    def get_format_description(self):
197
        return "An old format that is slow"
198
199
    upgrade_recommended = True
200
201
5717.1.4 by Jelmer Vernooij
Test default control component format implementation.
202
class DefaultControlComponentFormatTests(tests.TestCase):
203
    """Tests for default ControlComponentFormat implementation."""
204
5717.1.7 by Jelmer Vernooij
Rename check_status -> check_support_status.
205
    def test_check_support_status_unsupported(self):
5717.1.4 by Jelmer Vernooij
Test default control component format implementation.
206
        self.assertRaises(errors.UnsupportedFormatError,
7143.15.2 by Jelmer Vernooij
Run autopep8.
207
                          UnsupportedControlComponentFormat().check_support_status,
208
                          allow_unsupported=False)
5717.1.7 by Jelmer Vernooij
Rename check_status -> check_support_status.
209
        UnsupportedControlComponentFormat().check_support_status(
5717.1.4 by Jelmer Vernooij
Test default control component format implementation.
210
            allow_unsupported=True)
211
5717.1.7 by Jelmer Vernooij
Rename check_status -> check_support_status.
212
    def test_check_support_status_supported(self):
213
        controldir.ControlComponentFormat().check_support_status(
5717.1.4 by Jelmer Vernooij
Test default control component format implementation.
214
            allow_unsupported=False)
5717.1.7 by Jelmer Vernooij
Rename check_status -> check_support_status.
215
        controldir.ControlComponentFormat().check_support_status(
5717.1.4 by Jelmer Vernooij
Test default control component format implementation.
216
            allow_unsupported=True)
5717.1.5 by Jelmer Vernooij
Use recommend_upgrade.
217
218
    def test_recommend_upgrade_current_format(self):
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
219
        ui.ui_factory = tests.TestUIFactory()
5717.1.5 by Jelmer Vernooij
Use recommend_upgrade.
220
        format = controldir.ControlComponentFormat()
5717.1.7 by Jelmer Vernooij
Rename check_status -> check_support_status.
221
        format.check_support_status(allow_unsupported=False,
7143.15.2 by Jelmer Vernooij
Run autopep8.
222
                                    recommend_upgrade=True)
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
223
        self.assertEqual("", ui.ui_factory.stderr.getvalue())
5717.1.5 by Jelmer Vernooij
Use recommend_upgrade.
224
225
    def test_recommend_upgrade_old_format(self):
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
226
        ui.ui_factory = tests.TestUIFactory()
5717.1.5 by Jelmer Vernooij
Use recommend_upgrade.
227
        format = OldControlComponentFormat()
5717.1.7 by Jelmer Vernooij
Rename check_status -> check_support_status.
228
        format.check_support_status(allow_unsupported=False,
7143.15.2 by Jelmer Vernooij
Run autopep8.
229
                                    recommend_upgrade=False)
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
230
        self.assertEqual("", ui.ui_factory.stderr.getvalue())
5717.1.7 by Jelmer Vernooij
Rename check_status -> check_support_status.
231
        format.check_support_status(allow_unsupported=False,
7143.15.2 by Jelmer Vernooij
Run autopep8.
232
                                    recommend_upgrade=True, basedir='apath')
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
233
        self.assertEqual(
5717.1.5 by Jelmer Vernooij
Use recommend_upgrade.
234
            'An old format that is slow is deprecated and a better format '
235
            'is available.\nIt is recommended that you upgrade by running '
6622.1.30 by Jelmer Vernooij
Some more test fixes.
236
            'the command\n  brz upgrade apath\n',
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
237
            ui.ui_factory.stderr.getvalue())
6681.2.4 by Jelmer Vernooij
More renames.
238
239
240
class IsControlFilenameTest(tests.TestCase):
241
242
    def test_is_bzrdir(self):
243
        self.assertTrue(controldir.is_control_filename('.bzr'))
244
245
    def test_is_not_bzrdir(self):
246
        self.assertFalse(controldir.is_control_filename('.git'))
247
        self.assertFalse(controldir.is_control_filename('bla'))