/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_info.py

  • Committer: John Arbash Meinel
  • Date: 2008-11-25 18:51:48 UTC
  • mto: This revision was merged to the branch mainline in revision 3854.
  • Revision ID: john@arbash-meinel.com-20081125185148-jsfkqnzfjjqsleds
It seems we have some direct tests that don't use strings and expect a value error as well.

They would be sanitized later on by Revision. We could use that code, but this test
depends on the serializer, which Revision wouldn't know about.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2007 Canonical Ltd
 
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
import sys
 
18
from urllib import quote
 
19
 
 
20
from bzrlib import (
 
21
    branch as _mod_branch,
 
22
    bzrdir,
 
23
    info,
 
24
    tests,
 
25
    workingtree,
 
26
    repository as _mod_repository,
 
27
    )
 
28
 
 
29
 
 
30
class TestInfo(tests.TestCaseWithTransport):
 
31
 
 
32
    def test_describe_standalone_layout(self):
 
33
        tree = self.make_branch_and_tree('tree')
 
34
        self.assertEqual('Empty control directory', info.describe_layout())
 
35
        self.assertEqual('Unshared repository with trees',
 
36
            info.describe_layout(tree.branch.repository))
 
37
        tree.branch.repository.set_make_working_trees(False)
 
38
        self.assertEqual('Unshared repository',
 
39
            info.describe_layout(tree.branch.repository))
 
40
        self.assertEqual('Standalone branch',
 
41
            info.describe_layout(tree.branch.repository, tree.branch))
 
42
        self.assertEqual('Standalone branchless tree',
 
43
            info.describe_layout(tree.branch.repository, None, tree))
 
44
        self.assertEqual('Standalone tree',
 
45
            info.describe_layout(tree.branch.repository, tree.branch, tree))
 
46
        tree.branch.bind(tree.branch)
 
47
        self.assertEqual('Bound branch',
 
48
            info.describe_layout(tree.branch.repository, tree.branch))
 
49
        self.assertEqual('Checkout',
 
50
            info.describe_layout(tree.branch.repository, tree.branch, tree))
 
51
        checkout = tree.branch.create_checkout('checkout', lightweight=True)
 
52
        self.assertEqual('Lightweight checkout',
 
53
            info.describe_layout(checkout.branch.repository, checkout.branch,
 
54
                                 checkout))
 
55
 
 
56
    def test_describe_repository_layout(self):
 
57
        repository = self.make_repository('.', shared=True)
 
58
        tree = bzrdir.BzrDir.create_branch_convenience('tree',
 
59
            force_new_tree=True).bzrdir.open_workingtree()
 
60
        self.assertEqual('Shared repository with trees',
 
61
            info.describe_layout(tree.branch.repository))
 
62
        repository.set_make_working_trees(False)
 
63
        self.assertEqual('Shared repository',
 
64
            info.describe_layout(tree.branch.repository))
 
65
        self.assertEqual('Repository branch',
 
66
            info.describe_layout(tree.branch.repository, tree.branch))
 
67
        self.assertEqual('Repository branchless tree',
 
68
            info.describe_layout(tree.branch.repository, None, tree))
 
69
        self.assertEqual('Repository tree',
 
70
            info.describe_layout(tree.branch.repository, tree.branch, tree))
 
71
        tree.branch.bind(tree.branch)
 
72
        self.assertEqual('Repository checkout',
 
73
            info.describe_layout(tree.branch.repository, tree.branch, tree))
 
74
        checkout = tree.branch.create_checkout('checkout', lightweight=True)
 
75
        self.assertEqual('Lightweight checkout',
 
76
            info.describe_layout(checkout.branch.repository, checkout.branch,
 
77
                                 checkout))
 
78
 
 
79
    def assertTreeDescription(self, format):
 
80
        """Assert a tree's format description matches expectations"""
 
81
        self.make_branch_and_tree('%s_tree' % format, format=format)
 
82
        tree = workingtree.WorkingTree.open('%s_tree' % format)
 
83
        self.assertEqual(format, info.describe_format(tree.bzrdir,
 
84
            tree.branch.repository, tree.branch, tree))
 
85
 
 
86
    def assertCheckoutDescription(self, format, expected=None):
 
87
        """Assert a checkout's format description matches expectations"""
 
88
        if expected is None:
 
89
            expected = format
 
90
        branch = self.make_branch('%s_cobranch' % format, format=format)
 
91
        # this ought to be easier...
 
92
        branch.create_checkout('%s_co' % format,
 
93
            lightweight=True).bzrdir.destroy_workingtree()
 
94
        control = bzrdir.BzrDir.open('%s_co' % format)
 
95
        old_format = control._format.workingtree_format
 
96
        try:
 
97
            control._format.workingtree_format = \
 
98
                bzrdir.format_registry.make_bzrdir(format).workingtree_format
 
99
            control.create_workingtree()
 
100
            tree = workingtree.WorkingTree.open('%s_co' % format)
 
101
            format_description = info.describe_format(tree.bzrdir,
 
102
                    tree.branch.repository, tree.branch, tree)
 
103
            self.assertEqual(expected, format_description,
 
104
                "checkout of format called %r was described as %r" %
 
105
                (expected, format_description))
 
106
        finally:
 
107
            control._format.workingtree_format = old_format
 
108
 
 
109
    def assertBranchDescription(self, format, expected=None):
 
110
        """Assert branch's format description matches expectations"""
 
111
        if expected is None:
 
112
            expected = format
 
113
        self.make_branch('%s_branch' % format, format=format)
 
114
        branch = _mod_branch.Branch.open('%s_branch' % format)
 
115
        self.assertEqual(expected, info.describe_format(branch.bzrdir,
 
116
            branch.repository, branch, None))
 
117
 
 
118
    def assertRepoDescription(self, format, expected=None):
 
119
        """Assert repository's format description matches expectations"""
 
120
        if expected is None:
 
121
            expected = format
 
122
        self.make_repository('%s_repo' % format, format=format)
 
123
        repo = _mod_repository.Repository.open('%s_repo' % format)
 
124
        self.assertEqual(expected, info.describe_format(repo.bzrdir,
 
125
            repo, None, None))
 
126
 
 
127
    def test_describe_tree_format(self):
 
128
        for key in bzrdir.format_registry.keys():
 
129
            if key in bzrdir.format_registry.aliases():
 
130
                continue
 
131
            self.assertTreeDescription(key)
 
132
 
 
133
    def test_describe_checkout_format(self):
 
134
        for key in bzrdir.format_registry.keys():
 
135
            if key in bzrdir.format_registry.aliases():
 
136
                # Aliases will not describe correctly in the UI because the
 
137
                # real format is found.
 
138
                continue
 
139
            # legacy: weave does not support checkouts
 
140
            if key == 'weave':
 
141
                continue
 
142
            if bzrdir.format_registry.get_info(key).experimental:
 
143
                # We don't require that experimental formats support checkouts
 
144
                # or describe correctly in the UI.
 
145
                continue
 
146
            expected = None
 
147
            if key in ('dirstate', 'dirstate-tags', 'dirstate-with-subtree',
 
148
                'pack-0.92', 'pack-0.92-subtree', 'rich-root',
 
149
                'rich-root-pack', '1.6', '1.6.1-rich-root',
 
150
                '1.9', '1.9-rich-root'):
 
151
                expected = '1.6 or 1.6.1-rich-root or ' \
 
152
                    '1.9 or 1.9-rich-root or ' \
 
153
                    'dirstate or dirstate-tags or pack-0.92 or'\
 
154
                    ' rich-root or rich-root-pack'
 
155
            if key in ('knit', 'metaweave'):
 
156
                expected = 'knit or metaweave'
 
157
            self.assertCheckoutDescription(key, expected)
 
158
 
 
159
    def test_describe_branch_format(self):
 
160
        for key in bzrdir.format_registry.keys():
 
161
            if key in bzrdir.format_registry.aliases():
 
162
                continue
 
163
            expected = None
 
164
            if key in ('dirstate', 'knit'):
 
165
                expected = 'dirstate or knit'
 
166
            self.assertBranchDescription(key, expected)
 
167
 
 
168
    def test_describe_repo_format(self):
 
169
        for key in bzrdir.format_registry.keys():
 
170
            if key in bzrdir.format_registry.aliases():
 
171
                continue
 
172
            expected = None
 
173
            if key in ('dirstate', 'knit', 'dirstate-tags'):
 
174
                expected = 'dirstate or dirstate-tags or knit'
 
175
            self.assertRepoDescription(key, expected)
 
176
 
 
177
        format = bzrdir.format_registry.make_bzrdir('metaweave')
 
178
        format.set_branch_format(_mod_branch.BzrBranchFormat6())
 
179
        tree = self.make_branch_and_tree('unknown', format=format)
 
180
        self.assertEqual('unnamed', info.describe_format(tree.bzrdir,
 
181
            tree.branch.repository, tree.branch, tree))
 
182
 
 
183
    def test_gather_location_standalone(self):
 
184
        tree = self.make_branch_and_tree('tree')
 
185
        self.assertEqual([('branch root', tree.bzrdir.root_transport.base)],
 
186
            info.gather_location_info(tree.branch.repository, tree.branch,
 
187
                                      tree))
 
188
        self.assertEqual([('branch root', tree.bzrdir.root_transport.base)],
 
189
            info.gather_location_info(tree.branch.repository, tree.branch))
 
190
        return tree
 
191
 
 
192
    def test_gather_location_repo(self):
 
193
        srepo = self.make_repository('shared', shared=True)
 
194
        self.assertEqual([('shared repository',
 
195
                          srepo.bzrdir.root_transport.base)],
 
196
                          info.gather_location_info(srepo))
 
197
        urepo = self.make_repository('unshared')
 
198
        self.assertEqual([('repository',
 
199
                          urepo.bzrdir.root_transport.base)],
 
200
                          info.gather_location_info(urepo))
 
201
 
 
202
    def test_gather_location_repo_branch(self):
 
203
        srepo = self.make_repository('shared', shared=True)
 
204
        self.assertEqual([('shared repository',
 
205
                          srepo.bzrdir.root_transport.base)],
 
206
                          info.gather_location_info(srepo))
 
207
        tree = self.make_branch_and_tree('shared/tree')
 
208
        self.assertEqual([('shared repository',
 
209
                          srepo.bzrdir.root_transport.base),
 
210
                          ('repository branch', tree.branch.base)],
 
211
                          info.gather_location_info(srepo, tree.branch, tree))
 
212
 
 
213
    def test_gather_location_light_checkout(self):
 
214
        tree = self.make_branch_and_tree('tree')
 
215
        lcheckout = tree.branch.create_checkout('lcheckout', lightweight=True)
 
216
        self.assertEqual(
 
217
            [('light checkout root', lcheckout.bzrdir.root_transport.base),
 
218
             ('checkout of branch', tree.bzrdir.root_transport.base)],
 
219
            self.gather_tree_location_info(lcheckout))
 
220
 
 
221
    def test_gather_location_heavy_checkout(self):
 
222
        tree = self.make_branch_and_tree('tree')
 
223
        checkout = tree.branch.create_checkout('checkout')
 
224
        self.assertEqual(
 
225
            [('checkout root', checkout.bzrdir.root_transport.base),
 
226
             ('checkout of branch', tree.bzrdir.root_transport.base)],
 
227
            self.gather_tree_location_info(checkout))
 
228
        light_checkout = checkout.branch.create_checkout('light_checkout',
 
229
                                                         lightweight=True)
 
230
        self.assertEqual(
 
231
            [('light checkout root',
 
232
              light_checkout.bzrdir.root_transport.base),
 
233
             ('checkout root', checkout.bzrdir.root_transport.base),
 
234
             ('checkout of branch', tree.bzrdir.root_transport.base)],
 
235
             self.gather_tree_location_info(light_checkout)
 
236
             )
 
237
 
 
238
    def test_gather_location_shared_repo_checkout(self):
 
239
        tree = self.make_branch_and_tree('tree')
 
240
        srepo = self.make_repository('shared', shared=True)
 
241
        shared_checkout = tree.branch.create_checkout('shared/checkout')
 
242
        self.assertEqual(
 
243
            [('repository checkout root',
 
244
              shared_checkout.bzrdir.root_transport.base),
 
245
             ('checkout of branch', tree.bzrdir.root_transport.base),
 
246
             ('shared repository', srepo.bzrdir.root_transport.base)],
 
247
             self.gather_tree_location_info(shared_checkout))
 
248
 
 
249
    def gather_tree_location_info(self, tree):
 
250
        return info.gather_location_info(tree.branch.repository, tree.branch,
 
251
                                         tree)
 
252
 
 
253
    def test_gather_location_bound(self):
 
254
        branch = self.make_branch('branch')
 
255
        bound_branch = self.make_branch('bound_branch')
 
256
        bound_branch.bind(branch)
 
257
        self.assertEqual(
 
258
            [('branch root', bound_branch.bzrdir.root_transport.base),
 
259
             ('bound to branch', branch.bzrdir.root_transport.base)],
 
260
            info.gather_location_info(bound_branch.repository, bound_branch)
 
261
        )
 
262
 
 
263
    def test_location_list(self):
 
264
        if sys.platform == 'win32':
 
265
            raise tests.TestSkipped('Windows-unfriendly test')
 
266
        locs = info.LocationList('/home/foo')
 
267
        locs.add_url('a', 'file:///home/foo/')
 
268
        locs.add_url('b', 'file:///home/foo/bar/')
 
269
        locs.add_url('c', 'file:///home/bar/bar')
 
270
        locs.add_url('d', 'http://example.com/example/')
 
271
        locs.add_url('e', None)
 
272
        self.assertEqual(locs.locs, [('a', '.'),
 
273
                                     ('b', 'bar'),
 
274
                                     ('c', '/home/bar/bar'),
 
275
                                     ('d', 'http://example.com/example/')])
 
276
        self.assertEqualDiff('  a: .\n  b: bar\n  c: /home/bar/bar\n'
 
277
                             '  d: http://example.com/example/\n',
 
278
                             ''.join(locs.get_lines()))
 
279
 
 
280
    def test_gather_related_braches(self):
 
281
        branch = self.make_branch('.')
 
282
        branch.set_public_branch('baz')
 
283
        branch.set_push_location('bar')
 
284
        branch.set_parent('foo')
 
285
        branch.set_submit_branch('qux')
 
286
        self.assertEqual(
 
287
            [('public branch', 'baz'), ('push branch', 'bar'),
 
288
             ('parent branch', 'foo'), ('submit branch', 'qux')],
 
289
            info._gather_related_branches(branch).locs)