/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
3363.2.7 by Aaron Bentley
Implement alterntative-to-inventory tests
1
# Copyright (C) 2006, 2007, 2008 Canonical Ltd
1852.6.7 by Robert Collins
Fix up new tree_implementations __init__.py header.
2
#
1852.6.1 by Robert Collins
Start tree implementation tests.
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.
1852.6.7 by Robert Collins
Fix up new tree_implementations __init__.py header.
7
#
1852.6.1 by Robert Collins
Start tree implementation tests.
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.
1852.6.7 by Robert Collins
Fix up new tree_implementations __init__.py header.
12
#
1852.6.1 by Robert Collins
Start tree implementation tests.
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
18
"""Tree implementation tests for bzr.
19
20
These test the conformance of all the tree variations to the expected API.
21
Specific tests for individual variations are in other places such as:
22
 - tests/test_tree.py
23
 - tests/test_revision.py
24
 - tests/test_workingtree.py
25
 - tests/workingtree_implementations/*.py.
26
"""
27
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
28
from bzrlib import (
29
    errors,
2309.4.10 by John Arbash Meinel
(fixed) Fix the last few tests that were explicitly passing around unicode ids
30
    osutils,
3363.2.17 by Aaron Bentley
Start implementing post-change PreviewTree functionality
31
    progress,
2294.1.1 by John Arbash Meinel
Track down some non-ascii deficiencies in commit logic.
32
    tests,
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
33
    transform,
34
    )
1852.6.1 by Robert Collins
Start tree implementation tests.
35
from bzrlib.transport import get_transport
36
from bzrlib.tests import (
37
                          adapt_modules,
38
                          default_transport,
39
                          TestCaseWithTransport,
2321.1.2 by Robert Collins
Skip new tests that depend on unicode file paths.
40
                          TestSkipped,
1852.6.1 by Robert Collins
Start tree implementation tests.
41
                          )
42
from bzrlib.tests.bzrdir_implementations.test_bzrdir import TestCaseWithBzrDir
2553.2.10 by Robert Collins
And overhaul WorkingTreeTestProviderAdapter too.
43
from bzrlib.tests.workingtree_implementations import (
44
    WorkingTreeTestProviderAdapter,
45
    )
3363.10.2 by Aaron Bentley
Fake merge of removal of PreviewTreePost scenarios
46
from bzrlib.revision import NULL_REVISION
2079.1.1 by John Arbash Meinel
Create a deprecated bzrlib.tree.RevisionTree() in favor of bzrlib.revisiontree.RevisionTree()
47
from bzrlib.revisiontree import RevisionTree
3363.2.2 by Aaron Bentley
Add PreviewTree pre scenarios
48
from bzrlib.transform import TransformPreview
2255.2.164 by Martin Pool
Change the default format for some tests from AB1 back to WorkingTreeFormat3
49
from bzrlib.workingtree import (
50
    WorkingTreeFormat,
51
    WorkingTreeFormat3,
52
    _legacy_formats,
53
    )
2255.2.64 by John Arbash Meinel
Add the DirStateRevisionTree to the list of 'tree_implementations'
54
from bzrlib.workingtree_4 import (
55
    DirStateRevisionTree,
56
    WorkingTreeFormat4,
3907.2.3 by Ian Clatworthy
DirStateWorkingTree and DirStateWorkingTreeFormat base classes introduced
57
    WorkingTreeFormat5,
2255.2.64 by John Arbash Meinel
Add the DirStateRevisionTree to the list of 'tree_implementations'
58
    )
1852.6.1 by Robert Collins
Start tree implementation tests.
59
60
3363.1.2 by Aaron Bentley
Add TestCase as converter param
61
def return_parameter(testcase, something):
1852.6.1 by Robert Collins
Start tree implementation tests.
62
    """A trivial thunk to return its input."""
63
    return something
64
65
3363.1.2 by Aaron Bentley
Add TestCase as converter param
66
def revision_tree_from_workingtree(testcase, tree):
1852.6.1 by Robert Collins
Start tree implementation tests.
67
    """Create a revision tree from a working tree."""
2100.3.36 by Aaron Bentley
avoid subtree commit when converting a work tree into a revision tree
68
    revid = tree.commit('save tree', allow_pointless=True, recursive=None)
1852.6.1 by Robert Collins
Start tree implementation tests.
69
    return tree.branch.repository.revision_tree(revid)
70
71
3363.1.2 by Aaron Bentley
Add TestCase as converter param
72
def _dirstate_tree_from_workingtree(testcase, tree):
3504.2.1 by John Arbash Meinel
Shortcut iter_references when we know references aren't supported.
73
    revid = tree.commit('save tree', allow_pointless=True, recursive=None)
2255.2.64 by John Arbash Meinel
Add the DirStateRevisionTree to the list of 'tree_implementations'
74
    return tree.basis_tree()
75
76
3363.2.2 by Aaron Bentley
Add PreviewTree pre scenarios
77
def preview_tree_pre(testcase, tree):
78
    tt = TransformPreview(tree)
79
    testcase.addCleanup(tt.finalize)
3363.9.7 by Aaron Bentley
Fix up to use set_parent_ids
80
    preview_tree = tt.get_preview_tree()
81
    preview_tree.set_parent_ids(tree.get_parent_ids())
82
    return preview_tree
3363.2.2 by Aaron Bentley
Add PreviewTree pre scenarios
83
84
3363.10.2 by Aaron Bentley
Fake merge of removal of PreviewTreePost scenarios
85
def preview_tree_post(testcase, tree):
3363.10.13 by Aaron Bentley
Preserve past commits when converting to a PreviewTreePost
86
    basis = tree.basis_tree()
87
    tt = TransformPreview(basis)
3363.10.2 by Aaron Bentley
Fake merge of removal of PreviewTreePost scenarios
88
    testcase.addCleanup(tt.finalize)
89
    pp = progress.ProgressPhase('', 1, progress.DummyProgress())
3363.10.5 by Aaron Bentley
Fix locking issue
90
    tree.lock_read()
91
    testcase.addCleanup(tree.unlock)
3363.10.13 by Aaron Bentley
Preserve past commits when converting to a PreviewTreePost
92
    transform._prepare_revert_transform(basis, tree, tt, None, False, pp,
93
                                        basis, {})
3363.10.22 by Aaron Bentley
Fix support for plan_file_merge in PreviewTreePost
94
    preview_tree = tt.get_preview_tree()
95
    preview_tree.set_parent_ids(tree.get_parent_ids())
96
    return preview_tree
3363.10.2 by Aaron Bentley
Fake merge of removal of PreviewTreePost scenarios
97
98
1852.6.1 by Robert Collins
Start tree implementation tests.
99
class TestTreeImplementationSupport(TestCaseWithTransport):
100
101
    def test_revision_tree_from_workingtree(self):
102
        tree = self.make_branch_and_tree('.')
3363.1.3 by Aaron Bentley
Hide workingtree_to_test_tree behind a method, to get bound self
103
        tree = revision_tree_from_workingtree(self, tree)
1852.6.1 by Robert Collins
Start tree implementation tests.
104
        self.assertIsInstance(tree, RevisionTree)
105
106
107
class TestCaseWithTree(TestCaseWithBzrDir):
108
1852.8.3 by Robert Collins
Implement an InterTreeTestProvider and a trivial test_compare test case.
109
    def make_branch_and_tree(self, relpath):
110
        made_control = self.make_bzrdir(relpath, format=
111
            self.workingtree_format._matchingbzrdir)
1852.6.1 by Robert Collins
Start tree implementation tests.
112
        made_control.create_repository()
113
        made_control.create_branch()
114
        return self.workingtree_format.initialize(made_control)
115
3363.1.3 by Aaron Bentley
Hide workingtree_to_test_tree behind a method, to get bound self
116
    def workingtree_to_test_tree(self, tree):
117
        return self._workingtree_to_test_tree(self, tree)
118
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
119
    def _convert_tree(self, tree, converter=None):
120
        """helper to convert using the converter or a supplied one."""
121
        # convert that to the final shape
122
        if converter is None:
123
            converter = self.workingtree_to_test_tree
3363.1.3 by Aaron Bentley
Hide workingtree_to_test_tree behind a method, to get bound self
124
        return converter(tree)
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
125
1852.8.3 by Robert Collins
Implement an InterTreeTestProvider and a trivial test_compare test case.
126
    def get_tree_no_parents_no_content(self, empty_tree, converter=None):
127
        """Make a tree with no parents and no contents from empty_tree.
128
        
129
        :param empty_tree: A working tree with no content and no parents to
130
            modify.
131
        """
1731.1.33 by Aaron Bentley
Revert no-special-root changes
132
        empty_tree.set_root_id('empty-root-id')
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
133
        return self._convert_tree(empty_tree, converter)
1852.6.1 by Robert Collins
Start tree implementation tests.
134
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
135
    def _make_abc_tree(self, tree):
136
        """setup an abc content tree."""
137
        files = ['a', 'b/', 'b/c']
2255.2.15 by Robert Collins
Dirstate - truncate state file fixing bug in saving a smaller file, get more tree_implementation tests passing.
138
        self.build_tree(files, line_endings='binary',
1982.1.4 by Alexander Belchenko
tree_implementations tests: build_tree with binary (LF) line-endings
139
                        transport=tree.bzrdir.root_transport)
1731.1.33 by Aaron Bentley
Revert no-special-root changes
140
        tree.set_root_id('root-id')
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
141
        tree.add(files, ['a-id', 'b-id', 'c-id'])
142
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
143
    def get_tree_no_parents_abc_content(self, tree, converter=None):
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
144
        """return a test tree with a, b/, b/c contents."""
145
        self._make_abc_tree(tree)
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
146
        return self._convert_tree(tree, converter)
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
147
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
148
    def get_tree_no_parents_abc_content_2(self, tree, converter=None):
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
149
        """return a test tree with a, b/, b/c contents.
150
        
151
        This variation changes the content of 'a' to foobar\n.
152
        """
153
        self._make_abc_tree(tree)
154
        f = open(tree.basedir + '/a', 'wb')
155
        try:
156
            f.write('foobar\n')
157
        finally:
158
            f.close()
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
159
        return self._convert_tree(tree, converter)
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
160
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
161
    def get_tree_no_parents_abc_content_3(self, tree, converter=None):
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
162
        """return a test tree with a, b/, b/c contents.
163
        
164
        This variation changes the executable flag of b/c to True.
165
        """
166
        self._make_abc_tree(tree)
167
        tt = transform.TreeTransform(tree)
168
        trans_id = tt.trans_id_tree_path('b/c')
169
        tt.set_executability(True, trans_id)
170
        tt.apply()
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
171
        return self._convert_tree(tree, converter)
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
172
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
173
    def get_tree_no_parents_abc_content_4(self, tree, converter=None):
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
174
        """return a test tree with d, b/, b/c contents.
175
        
176
        This variation renames a to d.
177
        """
178
        self._make_abc_tree(tree)
179
        tree.rename_one('a', 'd')
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
180
        return self._convert_tree(tree, converter)
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
181
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
182
    def get_tree_no_parents_abc_content_5(self, tree, converter=None):
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
183
        """return a test tree with d, b/, b/c contents.
184
        
185
        This variation renames a to d and alters its content to 'bar\n'.
186
        """
187
        self._make_abc_tree(tree)
188
        tree.rename_one('a', 'd')
189
        f = open(tree.basedir + '/d', 'wb')
190
        try:
191
            f.write('bar\n')
192
        finally:
193
            f.close()
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
194
        return self._convert_tree(tree, converter)
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
195
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
196
    def get_tree_no_parents_abc_content_6(self, tree, converter=None):
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
197
        """return a test tree with a, b/, e contents.
198
        
199
        This variation renames b/c to e, and makes it executable.
200
        """
201
        self._make_abc_tree(tree)
202
        tt = transform.TreeTransform(tree)
203
        trans_id = tt.trans_id_tree_path('b/c')
204
        parent_trans_id = tt.trans_id_tree_path('')
205
        tt.adjust_path('e', parent_trans_id, trans_id)
206
        tt.set_executability(True, trans_id)
207
        tt.apply()
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
208
        return self._convert_tree(tree, converter)
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
209
1852.15.1 by Robert Collins
Add a complex test tree for use with Tree.walkdirs.
210
    def get_tree_with_subdirs_and_all_content_types(self):
211
        """Return a test tree with subdirs and all content types.
2408.1.3 by Alexander Belchenko
tree_implementations: make usage of symlinks optional
212
        See get_tree_with_subdirs_and_all_supported_content_types for details.
213
        """
2408.1.8 by Alexander Belchenko
forget to return tree
214
        return self.get_tree_with_subdirs_and_all_supported_content_types(True)
2408.1.3 by Alexander Belchenko
tree_implementations: make usage of symlinks optional
215
216
    def get_tree_with_subdirs_and_all_supported_content_types(self, symlinks):
217
        """Return a test tree with subdirs and all supported content types.
218
        Some content types may not be created on some platforms
219
        (like symlinks on native win32)
220
221
        :param  symlinks:   control is symlink should be created in the tree.
222
                            Note: if you wish to automatically set this
223
                            parameters depending on underlying system,
224
                            please use value returned
225
                            by bzrlib.osutils.has_symlinks() function.
1852.15.1 by Robert Collins
Add a complex test tree for use with Tree.walkdirs.
226
227
        The returned tree has the following inventory:
228
            [('', inventory.ROOT_ID),
229
             ('0file', '2file'),
230
             ('1top-dir', '1top-dir'),
231
             (u'2utf\u1234file', u'0utf\u1234file'),
2408.1.3 by Alexander Belchenko
tree_implementations: make usage of symlinks optional
232
             ('symlink', 'symlink'),            # only if symlinks arg is True
1852.15.1 by Robert Collins
Add a complex test tree for use with Tree.walkdirs.
233
             ('1top-dir/0file-in-1topdir', '1file-in-1topdir'),
234
             ('1top-dir/1dir-in-1topdir', '0dir-in-1topdir')]
2408.1.3 by Alexander Belchenko
tree_implementations: make usage of symlinks optional
235
        where each component has the type of its name -
236
        i.e. '1file..' is afile.
1852.15.1 by Robert Collins
Add a complex test tree for use with Tree.walkdirs.
237
238
        note that the order of the paths and fileids is deliberately 
239
        mismatched to ensure that the result order is path based.
240
        """
241
        tree = self.make_branch_and_tree('.')
242
        paths = ['0file',
243
            '1top-dir/',
244
            u'2utf\u1234file',
245
            '1top-dir/0file-in-1topdir',
246
            '1top-dir/1dir-in-1topdir/'
247
            ]
248
        ids = [
249
            '2file',
250
            '1top-dir',
2255.2.107 by John Arbash Meinel
(working), fix dirstate to use utf8 file ids.
251
            u'0utf\u1234file'.encode('utf8'),
1852.15.1 by Robert Collins
Add a complex test tree for use with Tree.walkdirs.
252
            '1file-in-1topdir',
253
            '0dir-in-1topdir'
254
            ]
2321.1.2 by Robert Collins
Skip new tests that depend on unicode file paths.
255
        try:
256
            self.build_tree(paths)
257
        except UnicodeError:
258
            raise TestSkipped(
259
                'This platform does not support unicode file paths.')
1852.15.1 by Robert Collins
Add a complex test tree for use with Tree.walkdirs.
260
        tree.add(paths, ids)
261
        tt = transform.TreeTransform(tree)
2408.1.3 by Alexander Belchenko
tree_implementations: make usage of symlinks optional
262
        if symlinks:
263
            root_transaction_id = tt.trans_id_tree_path('')
264
            tt.new_symlink('symlink',
265
                root_transaction_id, 'link-target', 'symlink')
1852.15.1 by Robert Collins
Add a complex test tree for use with Tree.walkdirs.
266
        tt.apply()
267
        return self.workingtree_to_test_tree(tree)
268
2294.1.1 by John Arbash Meinel
Track down some non-ascii deficiencies in commit logic.
269
    def get_tree_with_utf8(self, tree):
270
        """Generate a tree with a utf8 revision and unicode paths."""
2294.1.2 by John Arbash Meinel
Track down and add tests that all tree.commit() can handle
271
        self._create_tree_with_utf8(tree)
272
        return self.workingtree_to_test_tree(tree)
273
274
    def _create_tree_with_utf8(self, tree):
275
        """Generate a tree with a utf8 revision and unicode paths."""
3638.3.11 by Vincent Ladeuil
Fix failing tests by avoiding unicode combinig encodings (we test
276
        # We avoid combining characters in file names here, normalization
277
        # checks (as performed by some file systems (OSX) are outside the scope
278
        # of these tests).  We use the euro sign \N{Euro Sign} or \u20ac in
279
        # unicode strings or '\xe2\x82\ac' (its utf-8 encoding) in raw strings.
2294.1.3 by John Arbash Meinel
Make sure the inventory enrtries returned are properly formed.
280
        paths = [u'',
3638.3.11 by Vincent Ladeuil
Fix failing tests by avoiding unicode combinig encodings (we test
281
                 u'fo\N{Euro Sign}o',
282
                 u'ba\N{Euro Sign}r/',
283
                 u'ba\N{Euro Sign}r/ba\N{Euro Sign}z',
2294.1.1 by John Arbash Meinel
Track down some non-ascii deficiencies in commit logic.
284
                ]
285
        # bzr itself does not create unicode file ids, but we want them for
286
        # testing.
2309.4.10 by John Arbash Meinel
(fixed) Fix the last few tests that were explicitly passing around unicode ids
287
        file_ids = ['TREE_ROOT',
3638.3.11 by Vincent Ladeuil
Fix failing tests by avoiding unicode combinig encodings (we test
288
                    'fo\xe2\x82\xaco-id',
289
                    'ba\xe2\x82\xacr-id',
290
                    'ba\xe2\x82\xacz-id',
2294.1.1 by John Arbash Meinel
Track down some non-ascii deficiencies in commit logic.
291
                   ]
292
        try:
2294.1.3 by John Arbash Meinel
Make sure the inventory enrtries returned are properly formed.
293
            self.build_tree(paths[1:])
2294.1.1 by John Arbash Meinel
Track down some non-ascii deficiencies in commit logic.
294
        except UnicodeError:
295
            raise tests.TestSkipped('filesystem does not support unicode.')
2946.3.3 by John Arbash Meinel
Prefer tree.get_root_id() as more explicit than tree.path2id('')
296
        if tree.get_root_id() is None:
2255.2.107 by John Arbash Meinel
(working), fix dirstate to use utf8 file ids.
297
            # Some trees do not have a root yet.
298
            tree.add(paths, file_ids)
299
        else:
300
            # Some trees will already have a root
301
            tree.set_root_id(file_ids[0])
302
            tree.add(paths[1:], file_ids[1:])
2294.1.1 by John Arbash Meinel
Track down some non-ascii deficiencies in commit logic.
303
        try:
304
            tree.commit(u'in\xedtial', rev_id=u'r\xe9v-1'.encode('utf8'))
305
        except errors.NonAsciiRevisionId:
306
            raise tests.TestSkipped('non-ascii revision ids not supported')
2294.1.2 by John Arbash Meinel
Track down and add tests that all tree.commit() can handle
307
308
    def get_tree_with_merged_utf8(self, tree):
309
        """Generate a tree with utf8 ancestors."""
310
        self._create_tree_with_utf8(tree)
311
        tree2 = tree.bzrdir.sprout('tree2').open_workingtree()
3638.3.11 by Vincent Ladeuil
Fix failing tests by avoiding unicode combinig encodings (we test
312
        self.build_tree([u'tree2/ba\N{Euro Sign}r/qu\N{Euro Sign}x'])
313
        tree2.add([u'ba\N{Euro Sign}r/qu\N{Euro Sign}x'],
314
                  [u'qu\N{Euro Sign}x-id'.encode('utf-8')])
2294.1.2 by John Arbash Meinel
Track down and add tests that all tree.commit() can handle
315
        tree2.commit(u'to m\xe9rge', rev_id=u'r\xe9v-2'.encode('utf8'))
316
317
        tree.merge_from_branch(tree2.branch)
318
        tree.commit(u'm\xe9rge', rev_id=u'r\xe9v-3'.encode('utf8'))
2294.1.1 by John Arbash Meinel
Track down some non-ascii deficiencies in commit logic.
319
        return self.workingtree_to_test_tree(tree)
320
1852.6.1 by Robert Collins
Start tree implementation tests.
321
322
class TreeTestProviderAdapter(WorkingTreeTestProviderAdapter):
323
    """Generate test suites for each Tree implementation in bzrlib.
324
2553.2.10 by Robert Collins
And overhaul WorkingTreeTestProviderAdapter too.
325
    Currently this covers all working tree formats, and RevisionTree and
326
    DirStateRevisionTree by committing a working tree to create the revision
327
    tree.
1852.6.1 by Robert Collins
Start tree implementation tests.
328
    """
329
2553.2.10 by Robert Collins
And overhaul WorkingTreeTestProviderAdapter too.
330
    def __init__(self, transport_server, transport_readonly_server, formats):
3543.1.7 by Martin Pool
doc
331
        """Create a TreeTestProviderAdapter.
332
333
        :param formats: [workingtree_format]
334
        """
2553.2.10 by Robert Collins
And overhaul WorkingTreeTestProviderAdapter too.
335
        super(TreeTestProviderAdapter, self).__init__(transport_server,
336
            transport_readonly_server, formats)
337
        # now adjust the scenarios and add the non-working-tree tree scenarios.
338
        for scenario in self.scenarios:
1852.6.1 by Robert Collins
Start tree implementation tests.
339
            # for working tree adapted tests, preserve the tree
3363.1.3 by Aaron Bentley
Hide workingtree_to_test_tree behind a method, to get bound self
340
            scenario[1]["_workingtree_to_test_tree"] = return_parameter
2553.2.10 by Robert Collins
And overhaul WorkingTreeTestProviderAdapter too.
341
        # add RevisionTree scenario
3363.1.1 by Aaron Bentley
Refactor intertree scenario creation
342
        self.scenarios.append(self.create_tree_scenario(RevisionTree.__name__,
343
                              revision_tree_from_workingtree,))
344
345
        # also test WorkingTree4's RevisionTree implementation which is
346
        # specialised.
347
        self.scenarios.append(self.create_tree_scenario(
348
            DirStateRevisionTree.__name__, _dirstate_tree_from_workingtree,
349
            WorkingTreeFormat4()))
3907.2.3 by Ian Clatworthy
DirStateWorkingTree and DirStateWorkingTreeFormat base classes introduced
350
        self.scenarios.append(self.create_tree_scenario(
351
            DirStateRevisionTree.__name__, _dirstate_tree_from_workingtree,
352
            WorkingTreeFormat5()))
3363.2.2 by Aaron Bentley
Add PreviewTree pre scenarios
353
        self.scenarios.append(self.create_tree_scenario('PreviewTree',
354
            preview_tree_pre))
3363.10.2 by Aaron Bentley
Fake merge of removal of PreviewTreePost scenarios
355
        self.scenarios.append(self.create_tree_scenario('PreviewTreePost',
356
            preview_tree_post))
3363.1.1 by Aaron Bentley
Refactor intertree scenario creation
357
358
    def create_tree_scenario(self, name, converter, workingtree_format=None):
3363.1.6 by Aaron Bentley
Add docs
359
        """Create a scenario for the specified converter
360
361
        :param name: The name to append to tests using this converter
362
        :param converter: A function that converts a workingtree into the
363
            desired format.
364
        :param workingtree_format: The particular workingtree format to
365
            convert from.
366
        :return: a (name, options) tuple, where options is a dict of values
367
            to be used as members of the TestCase.
368
        """
3363.1.1 by Aaron Bentley
Refactor intertree scenario creation
369
        if workingtree_format is None:
3504.2.1 by John Arbash Meinel
Shortcut iter_references when we know references aren't supported.
370
            workingtree_format = WorkingTreeFormat._default_format
3363.1.1 by Aaron Bentley
Refactor intertree scenario creation
371
        scenario_options = WorkingTreeTestProviderAdapter.create_scenario(self,
3543.1.1 by Michael Hudson
change the scenario multiplication to get the bzrdir format from the tree and
372
            workingtree_format)[1]
3363.1.3 by Aaron Bentley
Hide workingtree_to_test_tree behind a method, to get bound self
373
        scenario_options["_workingtree_to_test_tree"] = converter
3363.1.1 by Aaron Bentley
Refactor intertree scenario creation
374
        return name, scenario_options
1852.6.1 by Robert Collins
Start tree implementation tests.
375
376
3302.9.15 by Vincent Ladeuil
bzrlib.tests.tree_implementations switched from test_suite() to
377
def load_tests(basic_tests, module, loader):
378
    result = loader.suiteClass()
379
    # add the tests for this module
380
    result.addTests(basic_tests)
381
1852.6.1 by Robert Collins
Start tree implementation tests.
382
    test_tree_implementations = [
3224.1.28 by John Arbash Meinel
Add some direct tests for Tree.annotate_iter
383
        'bzrlib.tests.tree_implementations.test_annotate_iter',
2255.7.36 by John Arbash Meinel
All trees should implement get_file_mtime()
384
        'bzrlib.tests.tree_implementations.test_get_file_mtime',
2946.3.2 by John Arbash Meinel
Add tree implementation tests for Tree.get_root_id()
385
        'bzrlib.tests.tree_implementations.test_get_root_id',
2255.2.134 by John Arbash Meinel
Add a tree-test for get_symlink_target
386
        'bzrlib.tests.tree_implementations.test_get_symlink_target',
2338.4.6 by Marien Zwart
Move some tests that do not need a working tree from workingtree_implementations to tree_implementations.
387
        'bzrlib.tests.tree_implementations.test_inv',
3398.1.24 by Ian Clatworthy
make iter_search_rules a tree method
388
        'bzrlib.tests.tree_implementations.test_iter_search_rules',
2255.2.71 by John Arbash Meinel
Add a test for list_files, and implement it for DirStateRevisionTree
389
        'bzrlib.tests.tree_implementations.test_list_files',
2776.1.7 by Robert Collins
* New method on ``bzrlib.tree.Tree`` ``path_content_summary`` provides a
390
        'bzrlib.tests.tree_implementations.test_path_content_summary',
1908.11.5 by John Arbash Meinel
[merge] bzr.dev 2240
391
        'bzrlib.tests.tree_implementations.test_revision_tree',
1852.6.1 by Robert Collins
Start tree implementation tests.
392
        'bzrlib.tests.tree_implementations.test_test_trees',
1551.9.16 by Aaron Bentley
Implement Tree.annotate_iter for RevisionTree and WorkingTree
393
        'bzrlib.tests.tree_implementations.test_tree',
1852.15.3 by Robert Collins
Add a first-cut Tree.walkdirs method.
394
        'bzrlib.tests.tree_implementations.test_walkdirs',
1852.6.1 by Robert Collins
Start tree implementation tests.
395
        ]
3302.9.15 by Vincent Ladeuil
bzrlib.tests.tree_implementations switched from test_suite() to
396
1852.6.1 by Robert Collins
Start tree implementation tests.
397
    adapter = TreeTestProviderAdapter(
398
        default_transport,
399
        # None here will cause a readonly decorator to be created
400
        # by the TestCaseWithTransport.get_readonly_transport method.
401
        None,
3543.1.1 by Michael Hudson
change the scenario multiplication to get the bzrdir format from the tree and
402
        WorkingTreeFormat._formats.values() + _legacy_formats)
3302.9.15 by Vincent Ladeuil
bzrlib.tests.tree_implementations switched from test_suite() to
403
3302.9.27 by Vincent Ladeuil
Fixed as per Ian's review.
404
    # add the tests for the sub modules
1852.6.1 by Robert Collins
Start tree implementation tests.
405
    adapt_modules(test_tree_implementations, adapter, loader, result)
406
    return result