/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
4988.10.5 by John Arbash Meinel
Merge bzr.dev 5021 to resolve NEWS
1
# Copyright (C) 2006-2010 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
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1852.6.1 by Robert Collins
Start tree implementation tests.
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:
4523.1.5 by Vincent Ladeuil
Fixed as asked in review.
22
 - tests/per_workingtree/*.py.
1852.6.1 by Robert Collins
Start tree implementation tests.
23
 - tests/test_tree.py
24
 - tests/test_revision.py
25
 - tests/test_workingtree.py
26
"""
27
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
28
from bzrlib import (
29
    errors,
2294.1.1 by John Arbash Meinel
Track down some non-ascii deficiencies in commit logic.
30
    tests,
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
31
    transform,
32
    )
5363.2.18 by Jelmer Vernooij
Rename TestCaseWithBzrDir -> TestCaseWithControlDir.
33
from bzrlib.tests.per_controldir.test_controldir import TestCaseWithControlDir
4523.1.4 by Martin Pool
Rename remaining *_implementations tests
34
from bzrlib.tests.per_workingtree import (
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
35
    make_scenarios as wt_make_scenarios,
36
    make_scenario as wt_make_scenario,
2553.2.10 by Robert Collins
And overhaul WorkingTreeTestProviderAdapter too.
37
    )
2079.1.1 by John Arbash Meinel
Create a deprecated bzrlib.tree.RevisionTree() in favor of bzrlib.revisiontree.RevisionTree()
38
from bzrlib.revisiontree import RevisionTree
3363.2.2 by Aaron Bentley
Add PreviewTree pre scenarios
39
from bzrlib.transform import TransformPreview
2255.2.164 by Martin Pool
Change the default format for some tests from AB1 back to WorkingTreeFormat3
40
from bzrlib.workingtree import (
41
    WorkingTreeFormat,
42
    _legacy_formats,
43
    )
2255.2.64 by John Arbash Meinel
Add the DirStateRevisionTree to the list of 'tree_implementations'
44
from bzrlib.workingtree_4 import (
45
    DirStateRevisionTree,
46
    WorkingTreeFormat4,
3907.2.3 by Ian Clatworthy
DirStateWorkingTree and DirStateWorkingTreeFormat base classes introduced
47
    WorkingTreeFormat5,
2255.2.64 by John Arbash Meinel
Add the DirStateRevisionTree to the list of 'tree_implementations'
48
    )
1852.6.1 by Robert Collins
Start tree implementation tests.
49
50
3363.1.2 by Aaron Bentley
Add TestCase as converter param
51
def return_parameter(testcase, something):
1852.6.1 by Robert Collins
Start tree implementation tests.
52
    """A trivial thunk to return its input."""
53
    return something
54
55
3363.1.2 by Aaron Bentley
Add TestCase as converter param
56
def revision_tree_from_workingtree(testcase, tree):
1852.6.1 by Robert Collins
Start tree implementation tests.
57
    """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
58
    revid = tree.commit('save tree', allow_pointless=True, recursive=None)
1852.6.1 by Robert Collins
Start tree implementation tests.
59
    return tree.branch.repository.revision_tree(revid)
60
61
3363.1.2 by Aaron Bentley
Add TestCase as converter param
62
def _dirstate_tree_from_workingtree(testcase, tree):
3504.2.1 by John Arbash Meinel
Shortcut iter_references when we know references aren't supported.
63
    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'
64
    return tree.basis_tree()
65
66
3363.2.2 by Aaron Bentley
Add PreviewTree pre scenarios
67
def preview_tree_pre(testcase, tree):
68
    tt = TransformPreview(tree)
69
    testcase.addCleanup(tt.finalize)
3363.9.7 by Aaron Bentley
Fix up to use set_parent_ids
70
    preview_tree = tt.get_preview_tree()
71
    preview_tree.set_parent_ids(tree.get_parent_ids())
72
    return preview_tree
3363.2.2 by Aaron Bentley
Add PreviewTree pre scenarios
73
74
3363.10.2 by Aaron Bentley
Fake merge of removal of PreviewTreePost scenarios
75
def preview_tree_post(testcase, tree):
3363.10.13 by Aaron Bentley
Preserve past commits when converting to a PreviewTreePost
76
    basis = tree.basis_tree()
77
    tt = TransformPreview(basis)
3363.10.2 by Aaron Bentley
Fake merge of removal of PreviewTreePost scenarios
78
    testcase.addCleanup(tt.finalize)
3363.10.5 by Aaron Bentley
Fix locking issue
79
    tree.lock_read()
80
    testcase.addCleanup(tree.unlock)
4961.2.9 by Martin Pool
Rip out most remaining uses of DummyProgressBar
81
    pp = None
82
    transform._prepare_revert_transform(basis, tree, tt, None, False, None,
3363.10.13 by Aaron Bentley
Preserve past commits when converting to a PreviewTreePost
83
                                        basis, {})
3363.10.22 by Aaron Bentley
Fix support for plan_file_merge in PreviewTreePost
84
    preview_tree = tt.get_preview_tree()
85
    preview_tree.set_parent_ids(tree.get_parent_ids())
86
    return preview_tree
3363.10.2 by Aaron Bentley
Fake merge of removal of PreviewTreePost scenarios
87
88
4285.2.1 by Vincent Ladeuil
Cleanup test imports and use features to better track skipped tests.
89
class TestTreeImplementationSupport(tests.TestCaseWithTransport):
1852.6.1 by Robert Collins
Start tree implementation tests.
90
91
    def test_revision_tree_from_workingtree(self):
92
        tree = self.make_branch_and_tree('.')
3363.1.3 by Aaron Bentley
Hide workingtree_to_test_tree behind a method, to get bound self
93
        tree = revision_tree_from_workingtree(self, tree)
1852.6.1 by Robert Collins
Start tree implementation tests.
94
        self.assertIsInstance(tree, RevisionTree)
95
96
5363.2.18 by Jelmer Vernooij
Rename TestCaseWithBzrDir -> TestCaseWithControlDir.
97
class TestCaseWithTree(TestCaseWithControlDir):
1852.6.1 by Robert Collins
Start tree implementation tests.
98
1852.8.3 by Robert Collins
Implement an InterTreeTestProvider and a trivial test_compare test case.
99
    def make_branch_and_tree(self, relpath):
100
        made_control = self.make_bzrdir(relpath, format=
101
            self.workingtree_format._matchingbzrdir)
1852.6.1 by Robert Collins
Start tree implementation tests.
102
        made_control.create_repository()
103
        made_control.create_branch()
104
        return self.workingtree_format.initialize(made_control)
105
3363.1.3 by Aaron Bentley
Hide workingtree_to_test_tree behind a method, to get bound self
106
    def workingtree_to_test_tree(self, tree):
107
        return self._workingtree_to_test_tree(self, tree)
108
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
109
    def _convert_tree(self, tree, converter=None):
110
        """helper to convert using the converter or a supplied one."""
111
        # convert that to the final shape
112
        if converter is None:
113
            converter = self.workingtree_to_test_tree
3363.1.3 by Aaron Bentley
Hide workingtree_to_test_tree behind a method, to get bound self
114
        return converter(tree)
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
115
1852.8.3 by Robert Collins
Implement an InterTreeTestProvider and a trivial test_compare test case.
116
    def get_tree_no_parents_no_content(self, empty_tree, converter=None):
117
        """Make a tree with no parents and no contents from empty_tree.
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
118
1852.8.3 by Robert Collins
Implement an InterTreeTestProvider and a trivial test_compare test case.
119
        :param empty_tree: A working tree with no content and no parents to
120
            modify.
121
        """
1731.1.33 by Aaron Bentley
Revert no-special-root changes
122
        empty_tree.set_root_id('empty-root-id')
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
123
        return self._convert_tree(empty_tree, converter)
1852.6.1 by Robert Collins
Start tree implementation tests.
124
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
125
    def _make_abc_tree(self, tree):
126
        """setup an abc content tree."""
127
        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.
128
        self.build_tree(files, line_endings='binary',
1982.1.4 by Alexander Belchenko
tree_implementations tests: build_tree with binary (LF) line-endings
129
                        transport=tree.bzrdir.root_transport)
1731.1.33 by Aaron Bentley
Revert no-special-root changes
130
        tree.set_root_id('root-id')
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
131
        tree.add(files, ['a-id', 'b-id', 'c-id'])
132
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
133
    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.
134
        """return a test tree with a, b/, b/c contents."""
135
        self._make_abc_tree(tree)
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
136
        return self._convert_tree(tree, converter)
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
137
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
138
    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.
139
        """return a test tree with a, b/, b/c contents.
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
140
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
141
        This variation changes the content of 'a' to foobar\n.
142
        """
143
        self._make_abc_tree(tree)
144
        f = open(tree.basedir + '/a', 'wb')
145
        try:
146
            f.write('foobar\n')
147
        finally:
148
            f.close()
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
149
        return self._convert_tree(tree, converter)
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
150
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
151
    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.
152
        """return a test tree with a, b/, b/c contents.
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
153
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
154
        This variation changes the executable flag of b/c to True.
155
        """
156
        self._make_abc_tree(tree)
157
        tt = transform.TreeTransform(tree)
158
        trans_id = tt.trans_id_tree_path('b/c')
159
        tt.set_executability(True, trans_id)
160
        tt.apply()
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
161
        return self._convert_tree(tree, converter)
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
162
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
163
    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.
164
        """return a test tree with d, b/, b/c contents.
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
165
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
166
        This variation renames a to d.
167
        """
168
        self._make_abc_tree(tree)
169
        tree.rename_one('a', 'd')
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
170
        return self._convert_tree(tree, converter)
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
171
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
172
    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.
173
        """return a test tree with d, b/, b/c contents.
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
174
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
175
        This variation renames a to d and alters its content to 'bar\n'.
176
        """
177
        self._make_abc_tree(tree)
178
        tree.rename_one('a', 'd')
179
        f = open(tree.basedir + '/d', 'wb')
180
        try:
181
            f.write('bar\n')
182
        finally:
183
            f.close()
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
184
        return self._convert_tree(tree, converter)
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
185
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
186
    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.
187
        """return a test tree with a, b/, e contents.
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
188
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
189
        This variation renames b/c to e, and makes it executable.
190
        """
191
        self._make_abc_tree(tree)
192
        tt = transform.TreeTransform(tree)
193
        trans_id = tt.trans_id_tree_path('b/c')
194
        parent_trans_id = tt.trans_id_tree_path('')
195
        tt.adjust_path('e', parent_trans_id, trans_id)
196
        tt.set_executability(True, trans_id)
197
        tt.apply()
1852.8.7 by Robert Collins
Update tree_implementation test tree factories to be intertree ready.
198
        return self._convert_tree(tree, converter)
1852.6.9 by Robert Collins
Add more test trees to the tree-implementations tests.
199
4570.2.3 by Robert Collins
Change the way iter_changes treats specific files to prevent InconsistentDeltas.
200
    def get_tree_no_parents_abc_content_7(self, tree, converter=None):
201
        """return a test tree with a, b/, d/e contents.
202
203
        This variation adds a dir 'd' ('d-id'), renames b to d/e.
204
        """
205
        self._make_abc_tree(tree)
206
        self.build_tree(['d/'], transport=tree.bzrdir.root_transport)
207
        tree.add(['d'], ['d-id'])
208
        tt = transform.TreeTransform(tree)
209
        trans_id = tt.trans_id_tree_path('b')
210
        parent_trans_id = tt.trans_id_tree_path('d')
211
        tt.adjust_path('e', parent_trans_id, trans_id)
212
        tt.apply()
213
        return self._convert_tree(tree, converter)
214
1852.15.1 by Robert Collins
Add a complex test tree for use with Tree.walkdirs.
215
    def get_tree_with_subdirs_and_all_content_types(self):
216
        """Return a test tree with subdirs and all content types.
2408.1.3 by Alexander Belchenko
tree_implementations: make usage of symlinks optional
217
        See get_tree_with_subdirs_and_all_supported_content_types for details.
218
        """
2408.1.8 by Alexander Belchenko
forget to return tree
219
        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
220
221
    def get_tree_with_subdirs_and_all_supported_content_types(self, symlinks):
222
        """Return a test tree with subdirs and all supported content types.
223
        Some content types may not be created on some platforms
224
        (like symlinks on native win32)
225
226
        :param  symlinks:   control is symlink should be created in the tree.
227
                            Note: if you wish to automatically set this
228
                            parameters depending on underlying system,
229
                            please use value returned
230
                            by bzrlib.osutils.has_symlinks() function.
1852.15.1 by Robert Collins
Add a complex test tree for use with Tree.walkdirs.
231
232
        The returned tree has the following inventory:
233
            [('', inventory.ROOT_ID),
234
             ('0file', '2file'),
235
             ('1top-dir', '1top-dir'),
236
             (u'2utf\u1234file', u'0utf\u1234file'),
2408.1.3 by Alexander Belchenko
tree_implementations: make usage of symlinks optional
237
             ('symlink', 'symlink'),            # only if symlinks arg is True
1852.15.1 by Robert Collins
Add a complex test tree for use with Tree.walkdirs.
238
             ('1top-dir/0file-in-1topdir', '1file-in-1topdir'),
239
             ('1top-dir/1dir-in-1topdir', '0dir-in-1topdir')]
2408.1.3 by Alexander Belchenko
tree_implementations: make usage of symlinks optional
240
        where each component has the type of its name -
241
        i.e. '1file..' is afile.
1852.15.1 by Robert Collins
Add a complex test tree for use with Tree.walkdirs.
242
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
243
        note that the order of the paths and fileids is deliberately
1852.15.1 by Robert Collins
Add a complex test tree for use with Tree.walkdirs.
244
        mismatched to ensure that the result order is path based.
245
        """
4285.2.1 by Vincent Ladeuil
Cleanup test imports and use features to better track skipped tests.
246
        self.requireFeature(tests.UnicodeFilenameFeature)
1852.15.1 by Robert Collins
Add a complex test tree for use with Tree.walkdirs.
247
        tree = self.make_branch_and_tree('.')
248
        paths = ['0file',
249
            '1top-dir/',
250
            u'2utf\u1234file',
251
            '1top-dir/0file-in-1topdir',
252
            '1top-dir/1dir-in-1topdir/'
253
            ]
254
        ids = [
255
            '2file',
256
            '1top-dir',
2255.2.107 by John Arbash Meinel
(working), fix dirstate to use utf8 file ids.
257
            u'0utf\u1234file'.encode('utf8'),
1852.15.1 by Robert Collins
Add a complex test tree for use with Tree.walkdirs.
258
            '1file-in-1topdir',
259
            '0dir-in-1topdir'
260
            ]
4285.2.1 by Vincent Ladeuil
Cleanup test imports and use features to better track skipped tests.
261
        self.build_tree(paths)
1852.15.1 by Robert Collins
Add a complex test tree for use with Tree.walkdirs.
262
        tree.add(paths, ids)
263
        tt = transform.TreeTransform(tree)
2408.1.3 by Alexander Belchenko
tree_implementations: make usage of symlinks optional
264
        if symlinks:
265
            root_transaction_id = tt.trans_id_tree_path('')
266
            tt.new_symlink('symlink',
267
                root_transaction_id, 'link-target', 'symlink')
1852.15.1 by Robert Collins
Add a complex test tree for use with Tree.walkdirs.
268
        tt.apply()
269
        return self.workingtree_to_test_tree(tree)
270
2294.1.1 by John Arbash Meinel
Track down some non-ascii deficiencies in commit logic.
271
    def get_tree_with_utf8(self, tree):
272
        """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
273
        self._create_tree_with_utf8(tree)
274
        return self.workingtree_to_test_tree(tree)
275
276
    def _create_tree_with_utf8(self, tree):
277
        """Generate a tree with a utf8 revision and unicode paths."""
4285.2.1 by Vincent Ladeuil
Cleanup test imports and use features to better track skipped tests.
278
        self.requireFeature(tests.UnicodeFilenameFeature)
3638.3.11 by Vincent Ladeuil
Fix failing tests by avoiding unicode combinig encodings (we test
279
        # We avoid combining characters in file names here, normalization
280
        # checks (as performed by some file systems (OSX) are outside the scope
281
        # of these tests).  We use the euro sign \N{Euro Sign} or \u20ac in
282
        # 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.
283
        paths = [u'',
3638.3.11 by Vincent Ladeuil
Fix failing tests by avoiding unicode combinig encodings (we test
284
                 u'fo\N{Euro Sign}o',
285
                 u'ba\N{Euro Sign}r/',
286
                 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.
287
                ]
288
        # bzr itself does not create unicode file ids, but we want them for
289
        # testing.
2309.4.10 by John Arbash Meinel
(fixed) Fix the last few tests that were explicitly passing around unicode ids
290
        file_ids = ['TREE_ROOT',
3638.3.11 by Vincent Ladeuil
Fix failing tests by avoiding unicode combinig encodings (we test
291
                    'fo\xe2\x82\xaco-id',
292
                    'ba\xe2\x82\xacr-id',
293
                    'ba\xe2\x82\xacz-id',
2294.1.1 by John Arbash Meinel
Track down some non-ascii deficiencies in commit logic.
294
                   ]
4285.2.1 by Vincent Ladeuil
Cleanup test imports and use features to better track skipped tests.
295
        self.build_tree(paths[1:])
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
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
322
def make_scenarios(transport_server, transport_readonly_server, formats):
1852.6.1 by Robert Collins
Start tree implementation tests.
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
    """
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
329
    scenarios = wt_make_scenarios(transport_server, transport_readonly_server,
330
        formats)
331
    # now adjust the scenarios and add the non-working-tree tree scenarios.
332
    for scenario in scenarios:
333
        # for working tree format tests, preserve the tree
334
        scenario[1]["_workingtree_to_test_tree"] = return_parameter
4285.2.1 by Vincent Ladeuil
Cleanup test imports and use features to better track skipped tests.
335
    # add RevisionTree scenario
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
336
    workingtree_format = WorkingTreeFormat._default_format
337
    scenarios.append((RevisionTree.__name__,
338
        create_tree_scenario(transport_server, transport_readonly_server,
339
        workingtree_format, revision_tree_from_workingtree,)))
340
341
    # also test WorkingTree4/5's RevisionTree implementation which is
342
    # specialised.
343
    # XXX: Ask igc if WT5 revision tree actually is different.
344
    scenarios.append((DirStateRevisionTree.__name__ + ",WT4",
345
        create_tree_scenario(transport_server, transport_readonly_server,
346
        WorkingTreeFormat4(), _dirstate_tree_from_workingtree)))
347
    scenarios.append((DirStateRevisionTree.__name__ + ",WT5",
348
        create_tree_scenario(transport_server, transport_readonly_server,
349
        WorkingTreeFormat5(), _dirstate_tree_from_workingtree)))
350
    scenarios.append(("PreviewTree", create_tree_scenario(transport_server,
351
        transport_readonly_server, workingtree_format, preview_tree_pre)))
352
    scenarios.append(("PreviewTreePost", create_tree_scenario(transport_server,
353
        transport_readonly_server, workingtree_format, preview_tree_post)))
354
    return scenarios
355
356
357
def create_tree_scenario(transport_server, transport_readonly_server,
358
    workingtree_format, converter):
359
    """Create a scenario for the specified converter
360
361
    :param converter: A function that converts a workingtree into the
362
        desired format.
363
    :param workingtree_format: The particular workingtree format to
364
        convert from.
365
    :return: a (name, options) tuple, where options is a dict of values
366
        to be used as members of the TestCase.
367
    """
4285.2.1 by Vincent Ladeuil
Cleanup test imports and use features to better track skipped tests.
368
    scenario_options = wt_make_scenario(transport_server,
369
                                        transport_readonly_server,
370
                                        workingtree_format)
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
371
    scenario_options["_workingtree_to_test_tree"] = converter
372
    return scenario_options
373
374
375
def load_tests(standard_tests, module, loader):
4523.1.5 by Vincent Ladeuil
Fixed as asked in review.
376
    per_tree_mod_names = [
377
        'annotate_iter',
378
        'get_file_mtime',
379
        'get_file_with_stat',
380
        'get_root_id',
381
        'get_symlink_target',
382
        'inv',
383
        'iter_search_rules',
5050.57.1 by Aaron Bentley
Make is_executable treat symlinks and directories the same across tree types.
384
        'is_executable',
4523.1.5 by Vincent Ladeuil
Fixed as asked in review.
385
        'list_files',
5200.3.3 by Robert Collins
Lock methods on ``Tree``, ``Branch`` and ``Repository`` are now
386
        'locking',
4523.1.5 by Vincent Ladeuil
Fixed as asked in review.
387
        'path_content_summary',
388
        'revision_tree',
389
        'test_trees',
390
        'tree',
391
        'walkdirs',
392
        ]
393
    submod_tests = loader.loadTestsFromModuleNames(
394
        ['bzrlib.tests.per_tree.test_' + name
395
         for name in per_tree_mod_names])
4084.5.1 by Robert Collins
Bulk update all test adaptation into a single approach, using multiply_tests rather than test adapters.
396
    scenarios = make_scenarios(
4285.2.1 by Vincent Ladeuil
Cleanup test imports and use features to better track skipped tests.
397
        tests.default_transport,
1852.6.1 by Robert Collins
Start tree implementation tests.
398
        # None here will cause a readonly decorator to be created
399
        # by the TestCaseWithTransport.get_readonly_transport method.
400
        None,
3543.1.1 by Michael Hudson
change the scenario multiplication to get the bzrdir format from the tree and
401
        WorkingTreeFormat._formats.values() + _legacy_formats)
3302.9.27 by Vincent Ladeuil
Fixed as per Ian's review.
402
    # add the tests for the sub modules
4285.2.1 by Vincent Ladeuil
Cleanup test imports and use features to better track skipped tests.
403
    return tests.multiply_tests(submod_tests, scenarios, standard_tests)