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