/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)
36
        tree_revision = getattr(tree, 'get_revision_id', lambda: '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'):
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
40
            self.assertEqual('contents of a\n', line)
41
            self.assertEqual(tree_revision, revision)
42
        tree_revision = getattr(tree, 'get_revision_id', lambda: 'random:')()
6809.4.3 by Jelmer Vernooij
Fix annotate tests.
43
        for revision, line in tree.annotate_iter('a', default_revision='random:'):
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
44
            self.assertEqual('contents of a\n', line)
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')
52
        self.build_tree_contents([('wta/file', '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()
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
57
        self.build_tree_contents([('wta/file', 'b\nc\nd\ne\n')])
58
        tree_a = self.workingtree_to_test_tree(work_a)
59
        tree_a.lock_read()
60
        self.addCleanup(tree_a.unlock)
61
        self.build_tree_contents([('wtb/file', 'a\nc\nd\nf\n')])
62
        tree_b = self.workingtree_to_test_tree(work_b)
63
        tree_b.lock_read()
64
        self.addCleanup(tree_b.unlock)
65
        self.assertEqual([
3514.2.3 by John Arbash Meinel
Fix a failing test in tree_implementations
66
            ('killed-a', 'a\n'),
1551.15.48 by Aaron Bentley
Add tests for annotate and plan_merge
67
            ('killed-b', 'b\n'),
68
            ('unchanged', 'c\n'),
69
            ('unchanged', 'd\n'),
70
            ('new-a', 'e\n'),
71
            ('new-b', 'f\n'),
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
72
        ], list(tree_a.plan_file_merge(file_id, tree_b)))
2100.3.20 by Aaron Bentley
Implement tree comparison for tree references
73
74
75
class TestReference(TestCaseWithTree):
76
77
    def skip_if_no_reference(self, tree):
78
        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.
79
            raise tests.TestNotApplicable('Tree references not supported')
2100.3.20 by Aaron Bentley
Implement tree comparison for tree references
80
2100.3.27 by Aaron Bentley
Enable nested commits
81
    def create_nested(self):
2100.3.20 by Aaron Bentley
Implement tree comparison for tree references
82
        work_tree = self.make_branch_and_tree('wt')
2255.2.158 by Martin Pool
Most of the integration of dirstate and subtree
83
        work_tree.lock_write()
84
        try:
85
            self.skip_if_no_reference(work_tree)
86
            subtree = self.make_branch_and_tree('wt/subtree')
87
            subtree.set_root_id('sub-root')
88
            subtree.commit('foo', rev_id='sub-1')
89
            work_tree.add_reference(subtree)
90
        finally:
91
            work_tree.unlock()
2100.3.20 by Aaron Bentley
Implement tree comparison for tree references
92
        tree = self._convert_tree(work_tree)
93
        self.skip_if_no_reference(tree)
2100.3.27 by Aaron Bentley
Enable nested commits
94
        return tree
95
96
    def test_get_reference_revision(self):
97
        tree = self.create_nested()
3504.2.1 by John Arbash Meinel
Shortcut iter_references when we know references aren't supported.
98
        tree.lock_read()
99
        self.addCleanup(tree.unlock)
2100.3.20 by Aaron Bentley
Implement tree comparison for tree references
100
        path = tree.id2path('sub-root')
5967.7.1 by Martin Pool
Deprecate __contains__ on Tree and Inventory
101
        self.assertEqual('sub-1',
6809.4.1 by Jelmer Vernooij
Swap file_id and path arguments for get_reference_revision and get_nested_tree.
102
            tree.get_reference_revision(path, 'sub-root'))
2100.3.27 by Aaron Bentley
Enable nested commits
103
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.
104
    def test_iter_references(self):
2100.3.27 by Aaron Bentley
Enable nested commits
105
        tree = self.create_nested()
2255.2.158 by Martin Pool
Most of the integration of dirstate and subtree
106
        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.
107
        self.addCleanup(tree.unlock)
6405.2.9 by Jelmer Vernooij
More test fixes.
108
        entry = tree.root_inventory['sub-root']
3504.2.1 by John Arbash Meinel
Shortcut iter_references when we know references aren't supported.
109
        self.assertEqual([(u'subtree', 'sub-root')],
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.
110
            list(tree.iter_references()))
2255.2.166 by Martin Pool
(broken) Add Tree.get_root_id() & test
111
112
    def test_get_root_id(self):
113
        # trees should return some kind of root id; it can be none
114
        tree = self.make_branch_and_tree('tree')
115
        root_id = tree.get_root_id()
116
        if root_id is not None:
117
            self.assertIsInstance(root_id, str)
2255.2.180 by Martin Pool
merge dirstate
118
6852.3.1 by Jelmer Vernooij
add Tree.is_versioned.
119
    def test_is_versioned(self):
6856 by Jelmer Vernooij
Merge lp:~jelmer/brz/is-versioned.
120
        tree = self.make_branch_and_tree('tree')
6852.3.1 by Jelmer Vernooij
add Tree.is_versioned.
121
        self.assertTrue(tree.is_versioned(''))
122
        self.assertFalse(tree.is_versioned('blah'))
123
2255.2.180 by Martin Pool
merge dirstate
124
2255.11.5 by Martin Pool
Tree.id2path should raise NoSuchId, not return None.
125
class TestFileIds(TestCaseWithTree):
126
127
    def test_id2path(self):
128
        # translate from file-id back to path
129
        work_tree = self.make_branch_and_tree('wt')
130
        tree = self.get_tree_no_parents_abc_content(work_tree)
6793.5.1 by Jelmer Vernooij
Hardcode fileids in fewer places.
131
        a_id = tree.path2id('a')
6852.3.1 by Jelmer Vernooij
add Tree.is_versioned.
132
        with tree.lock_read():
6793.5.1 by Jelmer Vernooij
Hardcode fileids in fewer places.
133
            self.assertEqual(u'a', tree.id2path(a_id))
2255.11.5 by Martin Pool
Tree.id2path should raise NoSuchId, not return None.
134
            # other ids give an error- don't return None for this case
135
            self.assertRaises(errors.NoSuchId, tree.id2path, 'a')
2708.1.1 by Aaron Bentley
Implement Tree.extract_files
136
3146.8.16 by Aaron Bentley
Updates from review
137
    def test_all_file_ids(self):
3146.8.2 by Aaron Bentley
Introduce iter_all_file_ids, to avoid hitting Inventory for this case
138
        work_tree = self.make_branch_and_tree('wt')
139
        tree = self.get_tree_no_parents_abc_content(work_tree)
140
        tree.lock_read()
141
        self.addCleanup(tree.unlock)
3146.8.16 by Aaron Bentley
Updates from review
142
        self.assertEqual(tree.all_file_ids(),
6793.5.1 by Jelmer Vernooij
Hardcode fileids in fewer places.
143
                         {tree.path2id('a'), tree.path2id(''),
144
                          tree.path2id('b'), tree.path2id('b/c')})
3146.8.2 by Aaron Bentley
Introduce iter_all_file_ids, to avoid hitting Inventory for this case
145
2708.1.1 by Aaron Bentley
Implement Tree.extract_files
146
3146.8.4 by Aaron Bentley
Eliminate direct use of inventory from transform application
147
class TestStoredKind(TestCaseWithTree):
148
149
    def test_stored_kind(self):
150
        tree = self.make_branch_and_tree('tree')
151
        work_tree = self.make_branch_and_tree('wt')
152
        tree = self.get_tree_no_parents_abc_content(work_tree)
153
        tree.lock_read()
154
        self.addCleanup(tree.unlock)
6809.4.7 by Jelmer Vernooij
Swap arguments for get_symlink_target and kind/stored_kind.
155
        self.assertEqual('file', tree.stored_kind('a'))
156
        self.assertEqual('directory', tree.stored_kind('b'))
3146.8.4 by Aaron Bentley
Eliminate direct use of inventory from transform application
157
158
2743.3.5 by Ian Clatworthy
Incorporate feedback from abentley
159
class TestFileContent(TestCaseWithTree):
160
161
    def test_get_file(self):
162
        work_tree = self.make_branch_and_tree('wt')
163
        tree = self.get_tree_no_parents_abc_content_2(work_tree)
6793.5.1 by Jelmer Vernooij
Hardcode fileids in fewer places.
164
        a_id = tree.path2id('a')
2743.3.5 by Ian Clatworthy
Incorporate feedback from abentley
165
        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
166
        self.addCleanup(tree.unlock)
167
        # Test lookup without path works
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
168
        file_without_path = tree.get_file('a')
2743.3.5 by Ian Clatworthy
Incorporate feedback from abentley
169
        try:
6437.20.2 by Wouter van Heyst
close files returned by transport.get
170
            lines = file_without_path.readlines()
2743.3.5 by Ian Clatworthy
Incorporate feedback from abentley
171
            self.assertEqual(['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
172
        finally:
173
            file_without_path.close()
174
        # Test lookup with path works
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
175
        file_with_path = tree.get_file('a', a_id)
6437.20.6 by Martin Packman
Poke test_get_file in bt.per_tree.test_tree to be more careful about cleanup
176
        try:
6437.20.2 by Wouter van Heyst
close files returned by transport.get
177
            lines = file_with_path.readlines()
2743.3.5 by Ian Clatworthy
Incorporate feedback from abentley
178
            self.assertEqual(['foobar\n'], lines)
179
        finally:
6437.20.2 by Wouter van Heyst
close files returned by transport.get
180
            file_with_path.close()
2743.3.5 by Ian Clatworthy
Incorporate feedback from abentley
181
3774.1.1 by Aaron Bentley
Test Tree.get_file_text() and supply default implementation.
182
    def test_get_file_text(self):
183
        work_tree = self.make_branch_and_tree('wt')
184
        tree = self.get_tree_no_parents_abc_content_2(work_tree)
6793.5.1 by Jelmer Vernooij
Hardcode fileids in fewer places.
185
        a_id = tree.path2id('a')
3774.1.1 by Aaron Bentley
Test Tree.get_file_text() and supply default implementation.
186
        tree.lock_read()
187
        self.addCleanup(tree.unlock)
188
        # test read by file-id
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
189
        self.assertEqual('foobar\n', tree.get_file_text('a', a_id))
3774.1.1 by Aaron Bentley
Test Tree.get_file_text() and supply default implementation.
190
        # test read by path
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
191
        self.assertEqual('foobar\n', tree.get_file_text('a'))
3774.1.1 by Aaron Bentley
Test Tree.get_file_text() and supply default implementation.
192
3774.1.2 by Aaron Bentley
Test Tree.get_file_lines, provide a default implementation
193
    def test_get_file_lines(self):
194
        work_tree = self.make_branch_and_tree('wt')
195
        tree = self.get_tree_no_parents_abc_content_2(work_tree)
6793.5.1 by Jelmer Vernooij
Hardcode fileids in fewer places.
196
        a_id = tree.path2id('a')
3774.1.2 by Aaron Bentley
Test Tree.get_file_lines, provide a default implementation
197
        tree.lock_read()
198
        self.addCleanup(tree.unlock)
199
        # test read by file-id
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
200
        self.assertEqual(['foobar\n'], tree.get_file_lines('a', a_id))
3774.1.2 by Aaron Bentley
Test Tree.get_file_lines, provide a default implementation
201
        # test read by path
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
202
        self.assertEqual(['foobar\n'], tree.get_file_lines('a'))
2743.3.5 by Ian Clatworthy
Incorporate feedback from abentley
203
3774.1.4 by Aaron Bentley
Use file.readlines on working trees.
204
    def test_get_file_lines_multi_line_breaks(self):
205
        work_tree = self.make_branch_and_tree('wt')
206
        self.build_tree_contents([('wt/foobar', 'a\rb\nc\r\nd')])
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
207
        work_tree.add('foobar')
3774.1.4 by Aaron Bentley
Use file.readlines on working trees.
208
        tree = self._convert_tree(work_tree)
209
        tree.lock_read()
210
        self.addCleanup(tree.unlock)
211
        self.assertEqual(['a\rb\n', 'c\r\n', 'd'],
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
212
                         tree.get_file_lines('foobar'))
3774.1.4 by Aaron Bentley
Use file.readlines on working trees.
213
214
2708.1.1 by Aaron Bentley
Implement Tree.extract_files
215
class TestExtractFilesBytes(TestCaseWithTree):
216
2708.1.7 by Aaron Bentley
Rename extract_files_bytes to iter_files_bytes
217
    def test_iter_files_bytes(self):
2708.1.1 by Aaron Bentley
Implement Tree.extract_files
218
        work_tree = self.make_branch_and_tree('wt')
219
        self.build_tree_contents([('wt/foo', 'foo'),
220
                                  ('wt/bar', 'bar'),
221
                                  ('wt/baz', 'baz')])
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
222
        work_tree.add(['foo', 'bar', 'baz'])
2708.1.1 by Aaron Bentley
Implement Tree.extract_files
223
        tree = self._convert_tree(work_tree)
224
        tree.lock_read()
225
        self.addCleanup(tree.unlock)
2708.1.6 by Aaron Bentley
Turn extract_files_bytes into an iterator
226
        extracted = dict((i, ''.join(b)) for i, b in
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
227
                         tree.iter_files_bytes([(tree.path2id('foo'), 'id1'),
228
                                                (tree.path2id('bar'), 'id2'),
229
                                                (tree.path2id('baz'), 'id3')]))
2708.1.6 by Aaron Bentley
Turn extract_files_bytes into an iterator
230
        self.assertEqual('foo', extracted['id1'])
231
        self.assertEqual('bar', extracted['id2'])
232
        self.assertEqual('baz', extracted['id3'])
2708.1.11 by Aaron Bentley
Test and tweak error handling
233
        self.assertRaises(errors.NoSuchId, lambda: list(
234
                          tree.iter_files_bytes(
235
                          [('qux-id', 'file1-notpresent')])))
2748.2.2 by Lukáš Lalinsky
Add TestConflicts to tests.tree_implementations.test_tree. Update NEWS.
236
237
238
class TestConflicts(TestCaseWithTree):
239
240
    def test_conflicts(self):
241
        """Tree.conflicts() should return a ConflictList instance."""
242
        work_tree = self.make_branch_and_tree('wt')
243
        tree = self._convert_tree(work_tree)
2761.1.3 by Aaron Bentley
Update test to use assertIsInstance
244
        self.assertIsInstance(tree.conflicts(), conflicts.ConflictList)
3363.5.4 by Aaron Bentley
Fix iteration order of iter_entries_by_dir
245
246
247
class TestIterEntriesByDir(TestCaseWithTree):
248
249
    def test_iteration_order(self):
250
        work_tree = self.make_branch_and_tree('.')
251
        self.build_tree(['a/', 'a/b/', 'a/b/c', 'a/d/', 'a/d/e', 'f/', 'f/g'])
252
        work_tree.add(['a', 'a/b', 'a/b/c', 'a/d', 'a/d/e', 'f', 'f/g'])
253
        tree = self._convert_tree(work_tree)
254
        output_order = [p for p, e in tree.iter_entries_by_dir()]
255
        self.assertEqual(['', 'a', 'f', 'a/b', 'a/d', 'a/b/c', 'a/d/e', 'f/g'],
256
                         output_order)
3363.13.1 by Aaron Bentley
Implement PreviewTree.extras
257
258
6471.1.3 by Jelmer Vernooij
Add Tree.iter_child_entries.
259
class TestIterChildEntries(TestCaseWithTree):
260
261
    def test_iteration_order(self):
262
        work_tree = self.make_branch_and_tree('.')
263
        self.build_tree(['a/', 'a/b/', 'a/b/c', 'a/d/', 'a/d/e', 'f/', 'f/g'])
264
        work_tree.add(['a', 'a/b', 'a/b/c', 'a/d', 'a/d/e', 'f', 'f/g'])
265
        tree = self._convert_tree(work_tree)
266
        output = [e.name for e in
6844.1.1 by Jelmer Vernooij
Many more foreign branch fixes.
267
            tree.iter_child_entries('', tree.get_root_id())]
6619.3.12 by Jelmer Vernooij
Use 2to3 set_literal fixer.
268
        self.assertEqual({'a', 'f'}, set(output))
6471.1.3 by Jelmer Vernooij
Add Tree.iter_child_entries.
269
        output = [e.name for e in
6844.1.1 by Jelmer Vernooij
Many more foreign branch fixes.
270
            tree.iter_child_entries('a', tree.path2id('a'))]
6619.3.12 by Jelmer Vernooij
Use 2to3 set_literal fixer.
271
        self.assertEqual({'b', 'd'}, set(output))
6471.1.3 by Jelmer Vernooij
Add Tree.iter_child_entries.
272
273
    def test_does_not_exist(self):
274
        work_tree = self.make_branch_and_tree('.')
275
        self.build_tree(['a/'])
276
        work_tree.add(['a'])
277
        tree = self._convert_tree(work_tree)
6844.1.1 by Jelmer Vernooij
Many more foreign branch fixes.
278
        self.assertRaises(errors.NoSuchFile, lambda:
6471.1.3 by Jelmer Vernooij
Add Tree.iter_child_entries.
279
            list(tree.iter_child_entries('unknown')))
280
281
3363.12.7 by Aaron Bentley
Add HasId test
282
class TestHasId(TestCaseWithTree):
283
284
    def test_has_id(self):
285
        work_tree = self.make_branch_and_tree('tree')
286
        self.build_tree(['tree/file'])
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
287
        work_tree.add('file')
288
        file_id = work_tree.path2id('file')
3363.12.7 by Aaron Bentley
Add HasId test
289
        tree = self._convert_tree(work_tree)
290
        tree.lock_read()
291
        self.addCleanup(tree.unlock)
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
292
        self.assertTrue(tree.has_id(file_id))
3363.12.7 by Aaron Bentley
Add HasId test
293
        self.assertFalse(tree.has_id('dir-id'))
3363.13.5 by Aaron Bentley
Merge with paths2ids
294
295
3363.13.1 by Aaron Bentley
Implement PreviewTree.extras
296
class TestExtras(TestCaseWithTree):
297
298
    def test_extras(self):
299
        work_tree = self.make_branch_and_tree('tree')
3363.13.4 by Aaron Bentley
Ensure versioned files are not listed by extras
300
        self.build_tree(['tree/file', 'tree/versioned-file'])
301
        work_tree.add(['file', 'versioned-file'])
302
        work_tree.commit('add files')
3363.13.1 by Aaron Bentley
Implement PreviewTree.extras
303
        work_tree.remove('file')
304
        tree = self._convert_tree(work_tree)
305
        if isinstance(tree,
306
                      (revisiontree.RevisionTree,
307
                       workingtree_4.DirStateRevisionTree)):
308
            expected = []
309
        else:
310
            expected = ['file']
311
        tree.lock_read()
312
        self.addCleanup(tree.unlock)
313
        self.assertEqual(expected, list(tree.extras()))
3363.15.1 by Aaron Bentley
Add test for has_id
314
3363.17.3 by Aaron Bentley
Merge with has_id
315
3363.15.4 by Aaron Bentley
Implement PreviewTree.get_file_sha1 properly
316
class TestGetFileSha1(TestCaseWithTree):
317
318
    def test_get_file_sha1(self):
319
        work_tree = self.make_branch_and_tree('tree')
320
        self.build_tree_contents([('tree/file', 'file content')])
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
321
        work_tree.add('file')
3363.15.4 by Aaron Bentley
Implement PreviewTree.get_file_sha1 properly
322
        tree = self._convert_tree(work_tree)
323
        tree.lock_read()
324
        self.addCleanup(tree.unlock)
325
        expected = osutils.sha_strings('file content')
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
326
        self.assertEqual(expected, tree.get_file_sha1('file'))
5906.1.8 by Jelmer Vernooij
Tests.
327
328
329
class TestGetFileVerifier(TestCaseWithTree):
330
331
    def test_get_file_verifier(self):
332
        work_tree = self.make_branch_and_tree('tree')
333
        self.build_tree_contents([
334
            ('tree/file1', 'file content'),
335
            ('tree/file2', 'file content')])
6745.1.1 by Jelmer Vernooij
Avoid explicitly setting file ids or guard it by checking
336
        work_tree.add(['file1', 'file2'])
5906.1.8 by Jelmer Vernooij
Tests.
337
        tree = self._convert_tree(work_tree)
338
        tree.lock_read()
339
        self.addCleanup(tree.unlock)
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
340
        (kind, data) = tree.get_file_verifier('file1')
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
341
        self.assertEqual(
6809.4.5 by Jelmer Vernooij
Swap arguments for get_file_*.
342
            tree.get_file_verifier('file1'),
343
            tree.get_file_verifier('file2'))
5906.1.10 by Jelmer Vernooij
sha1 -> SHA1
344
        if kind == "SHA1":
5906.1.8 by Jelmer Vernooij
Tests.
345
            expected = osutils.sha_strings('file content')
346
            self.assertEqual(expected, data)
6110.6.1 by Jelmer Vernooij
Add Tree.has_versioned_directories.
347
348
349
class TestHasVersionedDirectories(TestCaseWithTree):
350
351
    def test_has_versioned_directories(self):
352
        work_tree = self.make_branch_and_tree('tree')
353
        tree = self._convert_tree(work_tree)
354
        self.assertSubset([tree.has_versioned_directories()], (True, False))