/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) 2006-2009, 2011, 2012, 2016 Canonical Ltd
1551.9.21 by Aaron Bentley
Fix copyright statements
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
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1551.9.21 by Aaron Bentley
Fix copyright statements
16
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
17
from breezy import (
2255.11.5 by Martin Pool
Tree.id2path should raise NoSuchId, not return None.
18
    errors,
3363.13.1 by Aaron Bentley
Implement PreviewTree.extras
19
    conflicts,
3363.15.4 by Aaron Bentley
Implement PreviewTree.get_file_sha1 properly
20
    osutils,
3363.13.1 by Aaron Bentley
Implement PreviewTree.extras
21
    revisiontree,
2255.2.180 by Martin Pool
merge dirstate
22
    tests,
6670.4.3 by Jelmer Vernooij
Fix more imports.
23
    )
24
from breezy.bzr import (
3363.13.1 by Aaron Bentley
Implement PreviewTree.extras
25
    workingtree_4,
2255.11.5 by Martin Pool
Tree.id2path should raise NoSuchId, not return None.
26
    )
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
27
from breezy.tests import TestSkipped
28
from breezy.tests.per_tree import TestCaseWithTree
5967.7.1 by Martin Pool
Deprecate __contains__ on Tree and Inventory
29
1551.9.16 by Aaron Bentley
Implement Tree.annotate_iter for RevisionTree and WorkingTree
30
31
class TestAnnotate(TestCaseWithTree):
2255.2.69 by John Arbash Meinel
Implement annotate_iter, get_revision_id, and walkdirs so that all tree_implementations now pass
32
1551.9.16 by Aaron Bentley
Implement Tree.annotate_iter for RevisionTree and WorkingTree
33
    def test_annotate(self):
34
        work_tree = self.make_branch_and_tree('wt')
35
        tree = self.get_tree_no_parents_abc_content(work_tree)
7018.3.2 by Jelmer Vernooij
Fix some git tests.
36
        tree_revision = getattr(tree, 'get_revision_id', lambda: b'current:')()
2255.2.69 by John Arbash Meinel
Implement annotate_iter, get_revision_id, and walkdirs so that all tree_implementations now pass
37
        tree.lock_read()
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
38
        self.addCleanup(tree.unlock)
6809.4.2 by Jelmer Vernooij
Swap arguments for annotate_iter.
39
        for revision, line in tree.annotate_iter('a'):
7018.3.2 by Jelmer Vernooij
Fix some git tests.
40
            self.assertEqual(b'contents of a\n', line)
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
41
            self.assertEqual(tree_revision, revision)
7018.3.2 by Jelmer Vernooij
Fix some git tests.
42
        tree_revision = getattr(tree, 'get_revision_id', lambda: b'random:')()
43
        for revision, line in tree.annotate_iter('a', default_revision=b'random:'):
44
            self.assertEqual(b'contents of a\n', line)
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
45
            self.assertEqual(tree_revision, revision)
46
47
1551.15.52 by Aaron Bentley
Tweak from review comments
48
class TestPlanFileMerge(TestCaseWithTree):
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
49
1551.15.52 by Aaron Bentley
Tweak from review comments
50
    def test_plan_file_merge(self):
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
51
        work_a = self.make_branch_and_tree('wta')
6855.3.1 by Jelmer Vernooij
Several more fixes.
52
        self.build_tree_contents([('wta/file', b'a\nb\nc\nd\n')])
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
53
        work_a.add('file')
54
        file_id = work_a.path2id('file')
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
55
        work_a.commit('base version')
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
56
        work_b = work_a.controldir.sprout('wtb').open_workingtree()
6855.3.1 by Jelmer Vernooij
Several more fixes.
57
        self.build_tree_contents([('wta/file', b'b\nc\nd\ne\n')])
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
58
        tree_a = self.workingtree_to_test_tree(work_a)
6861.2.3 by Jelmer Vernooij
Mark which merge types require plan_file_merge.
59
        if getattr(tree_a, 'plan_file_merge', None) is None:
7143.15.2 by Jelmer Vernooij
Run autopep8.
60
            raise tests.TestNotApplicable(
61
                'Tree does not support plan_file_merge')
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
62
        tree_a.lock_read()
63
        self.addCleanup(tree_a.unlock)
6855.3.1 by Jelmer Vernooij
Several more fixes.
64
        self.build_tree_contents([('wtb/file', b'a\nc\nd\nf\n')])
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
65
        tree_b = self.workingtree_to_test_tree(work_b)
66
        tree_b.lock_read()
67
        self.addCleanup(tree_b.unlock)
68
        self.assertEqual([
6973.11.7 by Jelmer Vernooij
Fix more tests.
69
            ('killed-a', b'a\n'),
70
            ('killed-b', b'b\n'),
71
            ('unchanged', b'c\n'),
72
            ('unchanged', b'd\n'),
73
            ('new-a', b'e\n'),
74
            ('new-b', b'f\n'),
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
75
        ], list(tree_a.plan_file_merge(file_id, tree_b)))
2100.3.20 by Aaron Bentley
Implement tree comparison for tree references
76
77
78
class TestReference(TestCaseWithTree):
79
80
    def skip_if_no_reference(self, tree):
81
        if not getattr(tree, 'supports_tree_reference', lambda: False)():
3504.2.1 by John Arbash Meinel
Shortcut iter_references when we know references aren't supported.
82
            raise tests.TestNotApplicable('Tree references not supported')
2100.3.20 by Aaron Bentley
Implement tree comparison for tree references
83
2100.3.27 by Aaron Bentley
Enable nested commits
84
    def create_nested(self):
2100.3.20 by Aaron Bentley
Implement tree comparison for tree references
85
        work_tree = self.make_branch_and_tree('wt')
2255.2.158 by Martin Pool
Most of the integration of dirstate and subtree
86
        work_tree.lock_write()
87
        try:
88
            self.skip_if_no_reference(work_tree)
89
            subtree = self.make_branch_and_tree('wt/subtree')
6926.2.1 by Jelmer Vernooij
Some tree reference fixes.
90
            subtree.commit('foo')
2255.2.158 by Martin Pool
Most of the integration of dirstate and subtree
91
            work_tree.add_reference(subtree)
92
        finally:
93
            work_tree.unlock()
2100.3.20 by Aaron Bentley
Implement tree comparison for tree references
94
        tree = self._convert_tree(work_tree)
95
        self.skip_if_no_reference(tree)
6926.2.1 by Jelmer Vernooij
Some tree reference fixes.
96
        return tree, subtree
2100.3.27 by Aaron Bentley
Enable nested commits
97
98
    def test_get_reference_revision(self):
6926.2.1 by Jelmer Vernooij
Some tree reference fixes.
99
        tree, subtree = self.create_nested()
3504.2.1 by John Arbash Meinel
Shortcut iter_references when we know references aren't supported.
100
        tree.lock_read()
101
        self.addCleanup(tree.unlock)
6926.2.1 by Jelmer Vernooij
Some tree reference fixes.
102
        self.assertEqual(
103
            subtree.last_revision(),
104
            tree.get_reference_revision('subtree'))
2100.3.27 by Aaron Bentley
Enable nested commits
105
2255.2.226 by Robert Collins
Get merge_nested finally working: change nested tree iterators to take file_ids, and ensure the right branch is connected to in the merge logic. May not be suitable for shared repositories yet.
106
    def test_iter_references(self):
6926.2.1 by Jelmer Vernooij
Some tree reference fixes.
107
        tree, subtree = self.create_nested()
2255.2.158 by Martin Pool
Most of the integration of dirstate and subtree
108
        tree.lock_read()
2255.2.226 by Robert Collins
Get merge_nested finally working: change nested tree iterators to take file_ids, and ensure the right branch is connected to in the merge logic. May not be suitable for shared repositories yet.
109
        self.addCleanup(tree.unlock)
6926.2.2 by Jelmer Vernooij
More fixes.
110
        self.assertEqual(
111
            [(u'subtree', subtree.get_root_id())],
2255.2.226 by Robert Collins
Get merge_nested finally working: change nested tree iterators to take file_ids, and ensure the right branch is connected to in the merge logic. May not be suitable for shared repositories yet.
112
            list(tree.iter_references()))
2255.2.166 by Martin Pool
(broken) Add Tree.get_root_id() & test
113
114
    def test_get_root_id(self):
115
        # trees should return some kind of root id; it can be none
116
        tree = self.make_branch_and_tree('tree')
117
        root_id = tree.get_root_id()
118
        if root_id is not None:
6973.11.7 by Jelmer Vernooij
Fix more tests.
119
            self.assertIsInstance(root_id, bytes)
2255.2.180 by Martin Pool
merge dirstate
120
6852.3.1 by Jelmer Vernooij
add Tree.is_versioned.
121
    def test_is_versioned(self):
6856 by Jelmer Vernooij
Merge lp:~jelmer/brz/is-versioned.
122
        tree = self.make_branch_and_tree('tree')
6852.3.1 by Jelmer Vernooij
add Tree.is_versioned.
123
        self.assertTrue(tree.is_versioned(''))
124
        self.assertFalse(tree.is_versioned('blah'))
6861.1.1 by Jelmer Vernooij
More foreign branch test fixes.
125
        self.build_tree(['tree/dir/', 'tree/dir/file'])
126
        self.assertFalse(tree.is_versioned('dir'))
127
        self.assertFalse(tree.is_versioned('dir/'))
128
        tree.add(['dir', 'dir/file'])
129
        self.assertTrue(tree.is_versioned('dir'))
130
        self.assertTrue(tree.is_versioned('dir/'))
6852.3.1 by Jelmer Vernooij
add Tree.is_versioned.
131
2255.2.180 by Martin Pool
merge dirstate
132
2255.11.5 by Martin Pool
Tree.id2path should raise NoSuchId, not return None.
133
class TestFileIds(TestCaseWithTree):
134
135
    def test_id2path(self):
136
        # translate from file-id back to path
137
        work_tree = self.make_branch_and_tree('wt')
138
        tree = self.get_tree_no_parents_abc_content(work_tree)
6793.5.1 by Jelmer Vernooij
Hardcode fileids in fewer places.
139
        a_id = tree.path2id('a')
6852.3.1 by Jelmer Vernooij
add Tree.is_versioned.
140
        with tree.lock_read():
6793.5.1 by Jelmer Vernooij
Hardcode fileids in fewer places.
141
            self.assertEqual(u'a', tree.id2path(a_id))
2255.11.5 by Martin Pool
Tree.id2path should raise NoSuchId, not return None.
142
            # other ids give an error- don't return None for this case
7045.4.1 by Jelmer Vernooij
Some brz-git fixes.
143
            self.assertRaises(errors.NoSuchId, tree.id2path, b'a')
2708.1.1 by Aaron Bentley
Implement Tree.extract_files
144
3146.8.16 by Aaron Bentley
Updates from review
145
    def test_all_file_ids(self):
3146.8.2 by Aaron Bentley
Introduce iter_all_file_ids, to avoid hitting Inventory for this case
146
        work_tree = self.make_branch_and_tree('wt')
147
        tree = self.get_tree_no_parents_abc_content(work_tree)
148
        tree.lock_read()
149
        self.addCleanup(tree.unlock)
7170.3.1 by Jelmer Vernooij
Make Tree.all_file_ids optional.
150
        try:
151
            self.assertEqual(tree.all_file_ids(),
152
                             {tree.path2id('a'), tree.path2id(''),
153
                              tree.path2id('b'), tree.path2id('b/c')})
154
        except errors.UnsupportedOperation:
155
            raise tests.TestNotApplicable(
156
                'Tree does not support all_file_ids')
3146.8.2 by Aaron Bentley
Introduce iter_all_file_ids, to avoid hitting Inventory for this case
157
2708.1.1 by Aaron Bentley
Implement Tree.extract_files
158
3146.8.4 by Aaron Bentley
Eliminate direct use of inventory from transform application
159
class TestStoredKind(TestCaseWithTree):
160
161
    def test_stored_kind(self):
162
        tree = self.make_branch_and_tree('tree')
163
        work_tree = self.make_branch_and_tree('wt')
164
        tree = self.get_tree_no_parents_abc_content(work_tree)
165
        tree.lock_read()
166
        self.addCleanup(tree.unlock)
6809.4.7 by Jelmer Vernooij
Swap arguments for get_symlink_target and kind/stored_kind.
167
        self.assertEqual('file', tree.stored_kind('a'))
168
        self.assertEqual('directory', tree.stored_kind('b'))
3146.8.4 by Aaron Bentley
Eliminate direct use of inventory from transform application
169
170
2743.3.5 by Ian Clatworthy
Incorporate feedback from abentley
171
class TestFileContent(TestCaseWithTree):
172
173
    def test_get_file(self):
174
        work_tree = self.make_branch_and_tree('wt')
175
        tree = self.get_tree_no_parents_abc_content_2(work_tree)
6793.5.1 by Jelmer Vernooij
Hardcode fileids in fewer places.
176
        a_id = tree.path2id('a')
2743.3.5 by Ian Clatworthy
Incorporate feedback from abentley
177
        tree.lock_read()
6437.20.6 by Martin Packman
Poke test_get_file in bt.per_tree.test_tree to be more careful about cleanup
178
        self.addCleanup(tree.unlock)
179
        # Test lookup without path works
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
180
        file_without_path = tree.get_file('a')
2743.3.5 by Ian Clatworthy
Incorporate feedback from abentley
181
        try:
6437.20.2 by Wouter van Heyst
close files returned by transport.get
182
            lines = file_without_path.readlines()
6973.6.1 by Jelmer Vernooij
More bees.
183
            self.assertEqual([b'foobar\n'], lines)
6437.20.6 by Martin Packman
Poke test_get_file in bt.per_tree.test_tree to be more careful about cleanup
184
        finally:
185
            file_without_path.close()
2743.3.5 by Ian Clatworthy
Incorporate feedback from abentley
186
6977.2.1 by Jelmer Vernooij
Require that get_file implementations are contect managers, simplify file handling in transform.
187
    def test_get_file_context_manager(self):
188
        work_tree = self.make_branch_and_tree('wt')
189
        tree = self.get_tree_no_parents_abc_content_2(work_tree)
190
        a_id = tree.path2id('a')
191
        tree.lock_read()
192
        self.addCleanup(tree.unlock)
193
        with tree.get_file('a') as f:
6973.6.1 by Jelmer Vernooij
More bees.
194
            self.assertEqual(b'foobar\n', f.read())
6977.2.1 by Jelmer Vernooij
Require that get_file implementations are contect managers, simplify file handling in transform.
195
3774.1.1 by Aaron Bentley
Test Tree.get_file_text() and supply default implementation.
196
    def test_get_file_text(self):
197
        work_tree = self.make_branch_and_tree('wt')
198
        tree = self.get_tree_no_parents_abc_content_2(work_tree)
6793.5.1 by Jelmer Vernooij
Hardcode fileids in fewer places.
199
        a_id = tree.path2id('a')
3774.1.1 by Aaron Bentley
Test Tree.get_file_text() and supply default implementation.
200
        tree.lock_read()
201
        self.addCleanup(tree.unlock)
202
        # test read by path
6973.7.3 by Jelmer Vernooij
Fix some more tests.
203
        self.assertEqual(b'foobar\n', tree.get_file_text('a'))
3774.1.1 by Aaron Bentley
Test Tree.get_file_text() and supply default implementation.
204
3774.1.2 by Aaron Bentley
Test Tree.get_file_lines, provide a default implementation
205
    def test_get_file_lines(self):
206
        work_tree = self.make_branch_and_tree('wt')
207
        tree = self.get_tree_no_parents_abc_content_2(work_tree)
6793.5.1 by Jelmer Vernooij
Hardcode fileids in fewer places.
208
        a_id = tree.path2id('a')
3774.1.2 by Aaron Bentley
Test Tree.get_file_lines, provide a default implementation
209
        tree.lock_read()
210
        self.addCleanup(tree.unlock)
211
        # test read by path
6973.7.3 by Jelmer Vernooij
Fix some more tests.
212
        self.assertEqual([b'foobar\n'], tree.get_file_lines('a'))
2743.3.5 by Ian Clatworthy
Incorporate feedback from abentley
213
3774.1.4 by Aaron Bentley
Use file.readlines on working trees.
214
    def test_get_file_lines_multi_line_breaks(self):
215
        work_tree = self.make_branch_and_tree('wt')
6855.3.1 by Jelmer Vernooij
Several more fixes.
216
        self.build_tree_contents([('wt/foobar', b'a\rb\nc\r\nd')])
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
217
        work_tree.add('foobar')
3774.1.4 by Aaron Bentley
Use file.readlines on working trees.
218
        tree = self._convert_tree(work_tree)
219
        tree.lock_read()
220
        self.addCleanup(tree.unlock)
6973.6.1 by Jelmer Vernooij
More bees.
221
        self.assertEqual([b'a\rb\n', b'c\r\n', b'd'],
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
222
                         tree.get_file_lines('foobar'))
3774.1.4 by Aaron Bentley
Use file.readlines on working trees.
223
224
2708.1.1 by Aaron Bentley
Implement Tree.extract_files
225
class TestExtractFilesBytes(TestCaseWithTree):
226
2708.1.7 by Aaron Bentley
Rename extract_files_bytes to iter_files_bytes
227
    def test_iter_files_bytes(self):
2708.1.1 by Aaron Bentley
Implement Tree.extract_files
228
        work_tree = self.make_branch_and_tree('wt')
6855.3.1 by Jelmer Vernooij
Several more fixes.
229
        self.build_tree_contents([('wt/foo', b'foo'),
230
                                  ('wt/bar', b'bar'),
231
                                  ('wt/baz', b'baz')])
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
232
        work_tree.add(['foo', 'bar', 'baz'])
2708.1.1 by Aaron Bentley
Implement Tree.extract_files
233
        tree = self._convert_tree(work_tree)
234
        tree.lock_read()
235
        self.addCleanup(tree.unlock)
6973.6.1 by Jelmer Vernooij
More bees.
236
        extracted = dict((i, b''.join(b)) for i, b in
6874.2.1 by Jelmer Vernooij
Make Tree.iter_files_bytes() take paths rather than file_ids.
237
                         tree.iter_files_bytes([('foo', 'id1'),
238
                                                ('bar', 'id2'),
239
                                                ('baz', 'id3')]))
6973.6.1 by Jelmer Vernooij
More bees.
240
        self.assertEqual(b'foo', extracted['id1'])
241
        self.assertEqual(b'bar', extracted['id2'])
242
        self.assertEqual(b'baz', extracted['id3'])
6874.2.1 by Jelmer Vernooij
Make Tree.iter_files_bytes() take paths rather than file_ids.
243
        self.assertRaises(errors.NoSuchFile, lambda: list(
2708.1.11 by Aaron Bentley
Test and tweak error handling
244
                          tree.iter_files_bytes(
7143.15.2 by Jelmer Vernooij
Run autopep8.
245
                              [('qux', 'file1-notpresent')])))
2748.2.2 by Lukáš Lalinsky
Add TestConflicts to tests.tree_implementations.test_tree. Update NEWS.
246
247
248
class TestConflicts(TestCaseWithTree):
249
250
    def test_conflicts(self):
251
        """Tree.conflicts() should return a ConflictList instance."""
252
        work_tree = self.make_branch_and_tree('wt')
253
        tree = self._convert_tree(work_tree)
2761.1.3 by Aaron Bentley
Update test to use assertIsInstance
254
        self.assertIsInstance(tree.conflicts(), conflicts.ConflictList)
3363.5.4 by Aaron Bentley
Fix iteration order of iter_entries_by_dir
255
256
257
class TestIterEntriesByDir(TestCaseWithTree):
258
259
    def test_iteration_order(self):
260
        work_tree = self.make_branch_and_tree('.')
261
        self.build_tree(['a/', 'a/b/', 'a/b/c', 'a/d/', 'a/d/e', 'f/', 'f/g'])
262
        work_tree.add(['a', 'a/b', 'a/b/c', 'a/d', 'a/d/e', 'f', 'f/g'])
263
        tree = self._convert_tree(work_tree)
264
        output_order = [p for p, e in tree.iter_entries_by_dir()]
265
        self.assertEqual(['', 'a', 'f', 'a/b', 'a/d', 'a/b/c', 'a/d/e', 'f/g'],
266
                         output_order)
3363.13.1 by Aaron Bentley
Implement PreviewTree.extras
267
268
6471.1.3 by Jelmer Vernooij
Add Tree.iter_child_entries.
269
class TestIterChildEntries(TestCaseWithTree):
270
271
    def test_iteration_order(self):
272
        work_tree = self.make_branch_and_tree('.')
273
        self.build_tree(['a/', 'a/b/', 'a/b/c', 'a/d/', 'a/d/e', 'f/', 'f/g'])
274
        work_tree.add(['a', 'a/b', 'a/b/c', 'a/d', 'a/d/e', 'f', 'f/g'])
275
        tree = self._convert_tree(work_tree)
7141.7.1 by Jelmer Vernooij
Get rid of file_ids in most of Tree.
276
        output = [e.name for e in tree.iter_child_entries('')]
6619.3.12 by Jelmer Vernooij
Use 2to3 set_literal fixer.
277
        self.assertEqual({'a', 'f'}, set(output))
7141.7.1 by Jelmer Vernooij
Get rid of file_ids in most of Tree.
278
        output = [e.name for e in tree.iter_child_entries('a')]
6619.3.12 by Jelmer Vernooij
Use 2to3 set_literal fixer.
279
        self.assertEqual({'b', 'd'}, set(output))
6471.1.3 by Jelmer Vernooij
Add Tree.iter_child_entries.
280
281
    def test_does_not_exist(self):
282
        work_tree = self.make_branch_and_tree('.')
283
        self.build_tree(['a/'])
284
        work_tree.add(['a'])
285
        tree = self._convert_tree(work_tree)
6844.1.1 by Jelmer Vernooij
Many more foreign branch fixes.
286
        self.assertRaises(errors.NoSuchFile, lambda:
7143.15.2 by Jelmer Vernooij
Run autopep8.
287
                          list(tree.iter_child_entries('unknown')))
6471.1.3 by Jelmer Vernooij
Add Tree.iter_child_entries.
288
289
3363.12.7 by Aaron Bentley
Add HasId test
290
class TestHasId(TestCaseWithTree):
291
292
    def test_has_id(self):
293
        work_tree = self.make_branch_and_tree('tree')
294
        self.build_tree(['tree/file'])
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
295
        work_tree.add('file')
296
        file_id = work_tree.path2id('file')
3363.12.7 by Aaron Bentley
Add HasId test
297
        tree = self._convert_tree(work_tree)
298
        tree.lock_read()
299
        self.addCleanup(tree.unlock)
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
300
        self.assertTrue(tree.has_id(file_id))
6973.7.5 by Jelmer Vernooij
s/file/open.
301
        self.assertFalse(tree.has_id(b'dir-id'))
3363.13.5 by Aaron Bentley
Merge with paths2ids
302
303
3363.13.1 by Aaron Bentley
Implement PreviewTree.extras
304
class TestExtras(TestCaseWithTree):
305
306
    def test_extras(self):
307
        work_tree = self.make_branch_and_tree('tree')
3363.13.4 by Aaron Bentley
Ensure versioned files are not listed by extras
308
        self.build_tree(['tree/file', 'tree/versioned-file'])
309
        work_tree.add(['file', 'versioned-file'])
310
        work_tree.commit('add files')
3363.13.1 by Aaron Bentley
Implement PreviewTree.extras
311
        work_tree.remove('file')
312
        tree = self._convert_tree(work_tree)
313
        if isinstance(tree,
314
                      (revisiontree.RevisionTree,
315
                       workingtree_4.DirStateRevisionTree)):
316
            expected = []
317
        else:
318
            expected = ['file']
319
        tree.lock_read()
320
        self.addCleanup(tree.unlock)
321
        self.assertEqual(expected, list(tree.extras()))
3363.15.1 by Aaron Bentley
Add test for has_id
322
3363.17.3 by Aaron Bentley
Merge with has_id
323
3363.15.4 by Aaron Bentley
Implement PreviewTree.get_file_sha1 properly
324
class TestGetFileSha1(TestCaseWithTree):
325
326
    def test_get_file_sha1(self):
327
        work_tree = self.make_branch_and_tree('tree')
6855.3.1 by Jelmer Vernooij
Several more fixes.
328
        self.build_tree_contents([('tree/file', b'file content')])
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
329
        work_tree.add('file')
3363.15.4 by Aaron Bentley
Implement PreviewTree.get_file_sha1 properly
330
        tree = self._convert_tree(work_tree)
331
        tree.lock_read()
332
        self.addCleanup(tree.unlock)
7045.4.1 by Jelmer Vernooij
Some brz-git fixes.
333
        expected = osutils.sha_string(b'file content')
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
334
        self.assertEqual(expected, tree.get_file_sha1('file'))
5906.1.8 by Jelmer Vernooij
Tests.
335
336
337
class TestGetFileVerifier(TestCaseWithTree):
338
339
    def test_get_file_verifier(self):
340
        work_tree = self.make_branch_and_tree('tree')
341
        self.build_tree_contents([
6855.3.1 by Jelmer Vernooij
Several more fixes.
342
            ('tree/file1', b'file content'),
343
            ('tree/file2', b'file content')])
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
344
        work_tree.add(['file1', 'file2'])
5906.1.8 by Jelmer Vernooij
Tests.
345
        tree = self._convert_tree(work_tree)
346
        tree.lock_read()
347
        self.addCleanup(tree.unlock)
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
348
        (kind, data) = tree.get_file_verifier('file1')
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
349
        self.assertEqual(
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
350
            tree.get_file_verifier('file1'),
351
            tree.get_file_verifier('file2'))
5906.1.10 by Jelmer Vernooij
sha1 -> SHA1
352
        if kind == "SHA1":
7045.4.34 by Jelmer Vernooij
Fix some more tests.
353
            expected = osutils.sha_string(b'file content')
5906.1.8 by Jelmer Vernooij
Tests.
354
            self.assertEqual(expected, data)
6110.6.1 by Jelmer Vernooij
Add Tree.has_versioned_directories.
355
356
357
class TestHasVersionedDirectories(TestCaseWithTree):
358
359
    def test_has_versioned_directories(self):
360
        work_tree = self.make_branch_and_tree('tree')
361
        tree = self._convert_tree(work_tree)
6883.5.22 by Jelmer Vernooij
Review comments.
362
        self.assertIn(tree.has_versioned_directories(), (True, False))
6883.5.17 by Jelmer Vernooij
Add Tree.supports_rename_tracking().
363
364
365
class TestSupportsRenameTracking(TestCaseWithTree):
366
367
    def test_supports_rename_tracking(self):
368
        work_tree = self.make_branch_and_tree('tree')
369
        tree = self._convert_tree(work_tree)
370
        self.assertSubset([tree.supports_rename_tracking()], (True, False))
6929.3.3 by Jelmer Vernooij
Add Tree.versionable_kind.
371
372
373
class TestSupportsVersionableKind(TestCaseWithTree):
374
375
    def test_file(self):
376
        work_tree = self.make_branch_and_tree('tree')
377
        tree = self._convert_tree(work_tree)
378
        self.assertTrue(tree.versionable_kind('file'))
379
380
    def test_unknown(self):
381
        work_tree = self.make_branch_and_tree('tree')
382
        tree = self._convert_tree(work_tree)
383
        self.assertFalse(tree.versionable_kind('unknown'))