/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,
6855.2.2 by Jelmer Vernooij
Format strings are bytes.
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,
6855.2.2 by Jelmer Vernooij
Format strings are bytes.
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",
5669.3.8 by Jelmer Vernooij
Refactor, move to bzrlib.controldir.
90
            "SampleExtraComponentFormat")
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,
110
            self.prober.probe_transport, transport)
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,
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:
169
            found = controldir.ControlDirFormat.find_format(self.get_transport())
170
            self.assertIsInstance(found, NotBzrDirFormat)
171
        finally:
172
            controldir.ControlDirFormat.unregister_prober(NotBzrDirProber)
173
174
    def test_included_in_known_formats(self):
175
        controldir.ControlDirFormat.register_prober(NotBzrDirProber)
176
        self.addCleanup(controldir.ControlDirFormat.unregister_prober, NotBzrDirProber)
177
        formats = controldir.ControlDirFormat.known_formats()
6973.12.10 by Jelmer Vernooij
Fix remaining tests.
178
        self.assertIsInstance(formats, list)
5712.3.18 by Jelmer Vernooij
Some more test fixes.
179
        for format in formats:
180
            if isinstance(format, NotBzrDirFormat):
181
                break
182
        else:
183
            self.fail("No NotBzrDirFormat in %s" % formats)
5717.1.4 by Jelmer Vernooij
Test default control component format implementation.
184
185
186
class UnsupportedControlComponentFormat(controldir.ControlComponentFormat):
187
188
    def is_supported(self):
189
        return False
190
191
5717.1.5 by Jelmer Vernooij
Use recommend_upgrade.
192
class OldControlComponentFormat(controldir.ControlComponentFormat):
193
194
    def get_format_description(self):
195
        return "An old format that is slow"
196
197
    upgrade_recommended = True
198
199
5717.1.4 by Jelmer Vernooij
Test default control component format implementation.
200
class DefaultControlComponentFormatTests(tests.TestCase):
201
    """Tests for default ControlComponentFormat implementation."""
202
5717.1.7 by Jelmer Vernooij
Rename check_status -> check_support_status.
203
    def test_check_support_status_unsupported(self):
5717.1.4 by Jelmer Vernooij
Test default control component format implementation.
204
        self.assertRaises(errors.UnsupportedFormatError,
5717.1.7 by Jelmer Vernooij
Rename check_status -> check_support_status.
205
            UnsupportedControlComponentFormat().check_support_status,
5717.1.4 by Jelmer Vernooij
Test default control component format implementation.
206
            allow_unsupported=False)
5717.1.7 by Jelmer Vernooij
Rename check_status -> check_support_status.
207
        UnsupportedControlComponentFormat().check_support_status(
5717.1.4 by Jelmer Vernooij
Test default control component format implementation.
208
            allow_unsupported=True)
209
5717.1.7 by Jelmer Vernooij
Rename check_status -> check_support_status.
210
    def test_check_support_status_supported(self):
211
        controldir.ControlComponentFormat().check_support_status(
5717.1.4 by Jelmer Vernooij
Test default control component format implementation.
212
            allow_unsupported=False)
5717.1.7 by Jelmer Vernooij
Rename check_status -> check_support_status.
213
        controldir.ControlComponentFormat().check_support_status(
5717.1.4 by Jelmer Vernooij
Test default control component format implementation.
214
            allow_unsupported=True)
5717.1.5 by Jelmer Vernooij
Use recommend_upgrade.
215
216
    def test_recommend_upgrade_current_format(self):
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
217
        ui.ui_factory = tests.TestUIFactory()
5717.1.5 by Jelmer Vernooij
Use recommend_upgrade.
218
        format = controldir.ControlComponentFormat()
5717.1.7 by Jelmer Vernooij
Rename check_status -> check_support_status.
219
        format.check_support_status(allow_unsupported=False,
220
            recommend_upgrade=True)
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
221
        self.assertEqual("", ui.ui_factory.stderr.getvalue())
5717.1.5 by Jelmer Vernooij
Use recommend_upgrade.
222
223
    def test_recommend_upgrade_old_format(self):
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
224
        ui.ui_factory = tests.TestUIFactory()
5717.1.5 by Jelmer Vernooij
Use recommend_upgrade.
225
        format = OldControlComponentFormat()
5717.1.7 by Jelmer Vernooij
Rename check_status -> check_support_status.
226
        format.check_support_status(allow_unsupported=False,
227
            recommend_upgrade=False)
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
228
        self.assertEqual("", ui.ui_factory.stderr.getvalue())
5717.1.7 by Jelmer Vernooij
Rename check_status -> check_support_status.
229
        format.check_support_status(allow_unsupported=False,
230
            recommend_upgrade=True, basedir='apath')
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
231
        self.assertEqual(
5717.1.5 by Jelmer Vernooij
Use recommend_upgrade.
232
            'An old format that is slow is deprecated and a better format '
233
            'is available.\nIt is recommended that you upgrade by running '
6622.1.30 by Jelmer Vernooij
Some more test fixes.
234
            'the command\n  brz upgrade apath\n',
6621.22.2 by Martin
Use BytesIO or StringIO from bzrlib.sixish
235
            ui.ui_factory.stderr.getvalue())
6681.2.4 by Jelmer Vernooij
More renames.
236
237
238
class IsControlFilenameTest(tests.TestCase):
239
240
    def test_is_bzrdir(self):
241
        self.assertTrue(controldir.is_control_filename('.bzr'))
242
243
    def test_is_not_bzrdir(self):
244
        self.assertFalse(controldir.is_control_filename('.git'))
245
        self.assertFalse(controldir.is_control_filename('bla'))