~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/tree_implementations/__init__.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2007-03-07 10:45:44 UTC
  • mfrom: (2321.1.2 integration)
  • Revision ID: pqm@pqm.ubuntu.com-20070307104544-59e3e6358e4bdb29
(robertc) Merge dirstate and subtrees. (Robert Collins, Martin Pool, Aaaron Bentley, John A Meinel, James Westby)

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
                          default_transport,
38
38
                          TestCaseWithTransport,
39
39
                          TestLoader,
 
40
                          TestSkipped,
40
41
                          TestSuite,
41
42
                          )
42
43
from bzrlib.tests.bzrdir_implementations.test_bzrdir import TestCaseWithBzrDir
43
44
from bzrlib.revisiontree import RevisionTree
44
 
from bzrlib.workingtree import (WorkingTreeFormat,
45
 
                                WorkingTreeTestProviderAdapter,
46
 
                                _legacy_formats,
47
 
                                )
 
45
from bzrlib.workingtree import (
 
46
    WorkingTreeFormat,
 
47
    WorkingTreeFormat3,
 
48
    WorkingTreeTestProviderAdapter,
 
49
    _legacy_formats,
 
50
    )
 
51
from bzrlib.workingtree_4 import (
 
52
    DirStateRevisionTree,
 
53
    WorkingTreeFormat4,
 
54
    )
48
55
 
49
56
 
50
57
def return_parameter(something):
54
61
 
55
62
def revision_tree_from_workingtree(tree):
56
63
    """Create a revision tree from a working tree."""
 
64
    revid = tree.commit('save tree', allow_pointless=True, recursive=None)
 
65
    return tree.branch.repository.revision_tree(revid)
 
66
 
 
67
 
 
68
def _dirstate_tree_from_workingtree(tree):
57
69
    revid = tree.commit('save tree', allow_pointless=True)
58
 
    return tree.branch.repository.revision_tree(revid)
 
70
    return tree.basis_tree()
59
71
 
60
72
 
61
73
class TestTreeImplementationSupport(TestCaseWithTransport):
94
106
    def _make_abc_tree(self, tree):
95
107
        """setup an abc content tree."""
96
108
        files = ['a', 'b/', 'b/c']
97
 
        self.build_tree(files, line_endings='binary', 
 
109
        self.build_tree(files, line_endings='binary',
98
110
                        transport=tree.bzrdir.root_transport)
99
111
        tree.set_root_id('root-id')
100
112
        tree.add(files, ['a-id', 'b-id', 'c-id'])
166
178
        tt.apply()
167
179
        return self._convert_tree(tree, converter)
168
180
 
 
181
    def get_tree_with_subdirs_and_all_content_types(self):
 
182
        """Return a test tree with subdirs and all content types.
 
183
 
 
184
        The returned tree has the following inventory:
 
185
            [('', inventory.ROOT_ID),
 
186
             ('0file', '2file'),
 
187
             ('1top-dir', '1top-dir'),
 
188
             (u'2utf\u1234file', u'0utf\u1234file'),
 
189
             ('symlink', 'symlink'),
 
190
             ('1top-dir/0file-in-1topdir', '1file-in-1topdir'),
 
191
             ('1top-dir/1dir-in-1topdir', '0dir-in-1topdir')]
 
192
        where each component has the type of its name - i.e. '1file..' is afile.
 
193
 
 
194
        note that the order of the paths and fileids is deliberately 
 
195
        mismatched to ensure that the result order is path based.
 
196
        """
 
197
        tree = self.make_branch_and_tree('.')
 
198
        paths = ['0file',
 
199
            '1top-dir/',
 
200
            u'2utf\u1234file',
 
201
            '1top-dir/0file-in-1topdir',
 
202
            '1top-dir/1dir-in-1topdir/'
 
203
            ]
 
204
        ids = [
 
205
            '2file',
 
206
            '1top-dir',
 
207
            u'0utf\u1234file'.encode('utf8'),
 
208
            '1file-in-1topdir',
 
209
            '0dir-in-1topdir'
 
210
            ]
 
211
        try:
 
212
            self.build_tree(paths)
 
213
        except UnicodeError:
 
214
            raise TestSkipped(
 
215
                'This platform does not support unicode file paths.')
 
216
        tree.add(paths, ids)
 
217
        tt = transform.TreeTransform(tree)
 
218
        root_transaction_id = tt.trans_id_tree_path('')
 
219
        tt.new_symlink('symlink',
 
220
            root_transaction_id, 'link-target', 'symlink')
 
221
        tt.apply()
 
222
        return self.workingtree_to_test_tree(tree)
 
223
 
169
224
    def get_tree_with_utf8(self, tree):
170
225
        """Generate a tree with a utf8 revision and unicode paths."""
171
226
        self._create_tree_with_utf8(tree)
189
244
            self.build_tree(paths[1:])
190
245
        except UnicodeError:
191
246
            raise tests.TestSkipped('filesystem does not support unicode.')
192
 
        tree.add(paths, file_ids)
 
247
        if tree.path2id('') is None:
 
248
            # Some trees do not have a root yet.
 
249
            tree.add(paths, file_ids)
 
250
        else:
 
251
            # Some trees will already have a root
 
252
            tree.set_root_id(file_ids[0])
 
253
            tree.add(paths[1:], file_ids[1:])
193
254
        try:
194
255
            tree.commit(u'in\xedtial', rev_id=u'r\xe9v-1'.encode('utf8'))
195
256
        except errors.NonAsciiRevisionId:
221
282
        for adapted_test in result:
222
283
            # for working tree adapted tests, preserve the tree
223
284
            adapted_test.workingtree_to_test_tree = return_parameter
224
 
        default_format = WorkingTreeFormat.get_default_format()
 
285
        # this is the default in that it's used to test the generic InterTree
 
286
        # code.
 
287
        default_format = WorkingTreeFormat3()
225
288
        revision_tree_test = self._clone_test(
226
289
            test,
227
290
            default_format._matchingbzrdir, 
229
292
            RevisionTree.__name__)
230
293
        revision_tree_test.workingtree_to_test_tree = revision_tree_from_workingtree
231
294
        result.addTest(revision_tree_test)
 
295
        # also explicity test WorkingTree4 against everything
 
296
        dirstate_format = WorkingTreeFormat4()
 
297
        dirstate_revision_tree_test = self._clone_test(
 
298
            test,
 
299
            dirstate_format._matchingbzrdir,
 
300
            dirstate_format,
 
301
            DirStateRevisionTree.__name__)
 
302
        dirstate_revision_tree_test.workingtree_to_test_tree = _dirstate_tree_from_workingtree
 
303
        result.addTest(dirstate_revision_tree_test)
232
304
        return result
233
305
 
234
306
 
235
307
def test_suite():
236
308
    result = TestSuite()
237
309
    test_tree_implementations = [
 
310
        'bzrlib.tests.tree_implementations.test_get_file_mtime',
 
311
        'bzrlib.tests.tree_implementations.test_get_symlink_target',
 
312
        'bzrlib.tests.tree_implementations.test_list_files',
 
313
        'bzrlib.tests.tree_implementations.test_revision_tree',
238
314
        'bzrlib.tests.tree_implementations.test_test_trees',
239
315
        'bzrlib.tests.tree_implementations.test_tree',
 
316
        'bzrlib.tests.tree_implementations.test_walkdirs',
240
317
        ]
241
318
    adapter = TreeTestProviderAdapter(
242
319
        default_transport,