/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
5557.1.15 by John Arbash Meinel
Merge bzr.dev 5597 to resolve NEWS, aka bzr-2.3.txt
1
# Copyright (C) 2005-2011 Canonical Ltd
1399.1.12 by Robert Collins
add new test script
2
# Authors:  Robert Collins <robert.collins@canonical.com>
3
#
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2 of the License, or
7
# (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1399.1.12 by Robert Collins
add new test script
17
2255.2.121 by John Arbash Meinel
split out the WorkingTreeFormat4 tests into a separate test file
18
from bzrlib import (
19
    bzrdir,
20
    conflicts,
21
    errors,
5662.3.3 by Jelmer Vernooij
add tests
22
    symbol_versioning,
5273.1.7 by Vincent Ladeuil
No more use of the get_transport imported *symbol*, all uses are through
23
    transport,
2255.2.121 by John Arbash Meinel
split out the WorkingTreeFormat4 tests into a separate test file
24
    workingtree,
25
    )
1553.5.74 by Martin Pool
Convert WorkingTree format3 to use LockDirs
26
from bzrlib.lockdir import LockDir
1986.1.8 by Robert Collins
Update to bzr.dev, which involves adding lock_tree_write to MutableTree and MemoryTree.
27
from bzrlib.mutabletree import needs_tree_write_lock
1997.1.1 by Robert Collins
Add WorkingTree.lock_tree_write.
28
from bzrlib.tests import TestCase, TestCaseWithTransport, TestSkipped
29
from bzrlib.workingtree import (
30
    TreeEntry,
31
    TreeDirectory,
32
    TreeFile,
33
    TreeLink,
34
    )
1399.1.12 by Robert Collins
add new test script
35
2255.2.121 by John Arbash Meinel
split out the WorkingTreeFormat4 tests into a separate test file
36
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
37
class TestTreeDirectory(TestCaseWithTransport):
1399.1.12 by Robert Collins
add new test script
38
39
    def test_kind_character(self):
40
        self.assertEqual(TreeDirectory().kind_character(), '/')
41
42
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
43
class TestTreeEntry(TestCaseWithTransport):
1399.1.12 by Robert Collins
add new test script
44
45
    def test_kind_character(self):
46
        self.assertEqual(TreeEntry().kind_character(), '???')
47
48
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
49
class TestTreeFile(TestCaseWithTransport):
1399.1.12 by Robert Collins
add new test script
50
51
    def test_kind_character(self):
52
        self.assertEqual(TreeFile().kind_character(), '')
53
54
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
55
class TestTreeLink(TestCaseWithTransport):
1399.1.12 by Robert Collins
add new test script
56
57
    def test_kind_character(self):
58
        self.assertEqual(TreeLink().kind_character(), '')
59
60
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
61
class TestDefaultFormat(TestCaseWithTransport):
62
63
    def test_get_set_default_format(self):
5662.3.3 by Jelmer Vernooij
add tests
64
        old_format = workingtree.format_registry.get_default()
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
65
        # default is 3
66
        self.assertTrue(isinstance(old_format, workingtree.WorkingTreeFormat3))
5662.3.3 by Jelmer Vernooij
add tests
67
        workingtree.format_registry.set_default(SampleTreeFormat())
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
68
        try:
69
            # the default branch format is used by the meta dir format
70
            # which is not the default bzrdir format at this point
71
            dir = bzrdir.BzrDirMetaFormat1().initialize('.')
72
            dir.create_repository()
73
            dir.create_branch()
74
            result = dir.create_workingtree()
75
            self.assertEqual(result, 'A tree')
76
        finally:
5662.3.3 by Jelmer Vernooij
add tests
77
            workingtree.format_registry.set_default(old_format)
78
        self.assertEqual(old_format, workingtree.format_registry.get_default())
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
79
3753.1.1 by John Arbash Meinel
Add some simple direct tests for WT.open and WT.open_containing.
80
    def test_open(self):
81
        tree = self.make_branch_and_tree('.')
3753.1.2 by John Arbash Meinel
Switch to using the class attribute, rather than the instance
82
        open_direct = workingtree.WorkingTree.open('.')
3753.1.1 by John Arbash Meinel
Add some simple direct tests for WT.open and WT.open_containing.
83
        self.assertEqual(tree.basedir, open_direct.basedir)
3753.1.2 by John Arbash Meinel
Switch to using the class attribute, rather than the instance
84
        open_no_args = workingtree.WorkingTree.open()
3753.1.1 by John Arbash Meinel
Add some simple direct tests for WT.open and WT.open_containing.
85
        self.assertEqual(tree.basedir, open_no_args.basedir)
86
87
    def test_open_containing(self):
88
        tree = self.make_branch_and_tree('.')
3753.1.2 by John Arbash Meinel
Switch to using the class attribute, rather than the instance
89
        open_direct, relpath = workingtree.WorkingTree.open_containing('.')
3753.1.1 by John Arbash Meinel
Add some simple direct tests for WT.open and WT.open_containing.
90
        self.assertEqual(tree.basedir, open_direct.basedir)
91
        self.assertEqual('', relpath)
3753.1.2 by John Arbash Meinel
Switch to using the class attribute, rather than the instance
92
        open_no_args, relpath = workingtree.WorkingTree.open_containing()
3753.1.1 by John Arbash Meinel
Add some simple direct tests for WT.open and WT.open_containing.
93
        self.assertEqual(tree.basedir, open_no_args.basedir)
94
        self.assertEqual('', relpath)
3753.1.2 by John Arbash Meinel
Switch to using the class attribute, rather than the instance
95
        open_subdir, relpath = workingtree.WorkingTree.open_containing('subdir')
3753.1.1 by John Arbash Meinel
Add some simple direct tests for WT.open and WT.open_containing.
96
        self.assertEqual(tree.basedir, open_subdir.basedir)
97
        self.assertEqual('subdir', relpath)
98
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
99
100
class SampleTreeFormat(workingtree.WorkingTreeFormat):
101
    """A sample format
102
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
103
    this format is initializable, unsupported to aid in testing the
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
104
    open and open_downlevel routines.
105
    """
106
107
    def get_format_string(self):
108
        """See WorkingTreeFormat.get_format_string()."""
109
        return "Sample tree format."
110
3123.5.3 by Aaron Bentley
Get tests passing with accelerator_tree
111
    def initialize(self, a_bzrdir, revision_id=None, from_branch=None,
3136.1.5 by Aaron Bentley
Fix sample workingtree format
112
                   accelerator_tree=None, hardlink=False):
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
113
        """Sample branches cannot be created."""
114
        t = a_bzrdir.get_workingtree_transport(self)
1955.3.13 by John Arbash Meinel
Run the full test suite, and fix up any deprecation warnings.
115
        t.put_bytes('format', self.get_format_string())
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
116
        return 'A tree'
117
118
    def is_supported(self):
119
        return False
120
121
    def open(self, transport, _found=False):
122
        return "opened tree."
123
124
5642.2.4 by Jelmer Vernooij
add tests.
125
class SampleExtraTreeFormat(workingtree.WorkingTreeFormat):
126
    """A sample format that does not support use in a metadir.
127
128
    """
129
130
    def get_format_string(self):
131
        # Not usable in a metadir, so no format string
132
        return None
133
134
    def initialize(self, a_bzrdir, revision_id=None, from_branch=None,
135
                   accelerator_tree=None, hardlink=False):
136
        raise NotImplementedError(self.initialize)
137
138
    def is_supported(self):
139
        return False
140
141
    def open(self, transport, _found=False):
142
        raise NotImplementedError(self.open)
143
144
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
145
class TestWorkingTreeFormat(TestCaseWithTransport):
146
    """Tests for the WorkingTreeFormat facility."""
147
148
    def test_find_format(self):
149
        # is the right format object found for a working tree?
150
        # create a branch with a few known format objects.
151
        self.build_tree(["foo/", "bar/"])
152
        def check_format(format, url):
153
            dir = format._matchingbzrdir.initialize(url)
154
            dir.create_repository()
155
            dir.create_branch()
156
            format.initialize(dir)
5273.1.7 by Vincent Ladeuil
No more use of the get_transport imported *symbol*, all uses are through
157
            t = transport.get_transport(url)
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
158
            found_format = workingtree.WorkingTreeFormat.find_format(dir)
159
            self.failUnless(isinstance(found_format, format.__class__))
160
        check_format(workingtree.WorkingTreeFormat3(), "bar")
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
161
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
162
    def test_find_format_no_tree(self):
163
        dir = bzrdir.BzrDirMetaFormat1().initialize('.')
1508.1.19 by Robert Collins
Give format3 working trees their own last-revision marker.
164
        self.assertRaises(errors.NoWorkingTree,
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
165
                          workingtree.WorkingTreeFormat.find_format,
166
                          dir)
167
168
    def test_find_format_unknown_format(self):
169
        dir = bzrdir.BzrDirMetaFormat1().initialize('.')
170
        dir.create_repository()
171
        dir.create_branch()
172
        SampleTreeFormat().initialize(dir)
173
        self.assertRaises(errors.UnknownFormatError,
174
                          workingtree.WorkingTreeFormat.find_format,
175
                          dir)
176
177
    def test_register_unregister_format(self):
178
        format = SampleTreeFormat()
179
        # make a control dir
180
        dir = bzrdir.BzrDirMetaFormat1().initialize('.')
181
        dir.create_repository()
182
        dir.create_branch()
183
        # make a branch
184
        format.initialize(dir)
185
        # register a format for it.
5662.3.3 by Jelmer Vernooij
add tests
186
        self.applyDeprecated(symbol_versioning.deprecated_in((2, 4, 0)),
187
            workingtree.WorkingTreeFormat.register_format, format)
188
        self.assertTrue(format in 
189
            self.applyDeprecated(symbol_versioning.deprecated_in((2, 4, 0)),
190
                workingtree.WorkingTreeFormat.get_formats))
1534.4.46 by Robert Collins
Nearly complete .bzr/checkout splitout.
191
        # which branch.Open will refuse (not supported)
192
        self.assertRaises(errors.UnsupportedFormatError, workingtree.WorkingTree.open, '.')
193
        # but open_downlevel will work
194
        self.assertEqual(format.open(dir), workingtree.WorkingTree.open_downlevel('.'))
195
        # unregister the format
5662.3.3 by Jelmer Vernooij
add tests
196
        self.applyDeprecated(symbol_versioning.deprecated_in((2, 4, 0)),
197
            workingtree.WorkingTreeFormat.unregister_format, format)
198
        self.assertFalse(format in
199
            self.applyDeprecated(symbol_versioning.deprecated_in((2, 4, 0)),
200
                workingtree.WorkingTreeFormat.get_formats))
201
202
203
class TestWorkingTreeFormatRegistry(TestCase):
204
205
    def setUp(self):
206
        super(TestWorkingTreeFormatRegistry, self).setUp()
207
        self.registry = workingtree.WorkingTreeFormatRegistry()
208
209
    def test_register_unregister_format(self):
210
        format = SampleTreeFormat()
211
        self.registry.register(format)
212
        self.assertEquals(format, self.registry.get("Sample tree format."))
213
        self.registry.remove(format)
214
        self.assertRaises(KeyError, self.registry.get, "Sample tree format.")
215
216
    def test_get_all(self):
217
        format = SampleTreeFormat()
218
        self.assertEquals([], self.registry._get_all())
219
        self.registry.register(format)
220
        self.assertEquals([format], self.registry._get_all())
221
222
    def test_register_extra(self):
5642.2.4 by Jelmer Vernooij
add tests.
223
        format = SampleExtraTreeFormat()
5662.3.3 by Jelmer Vernooij
add tests
224
        self.assertEquals([], self.registry._get_all())
225
        self.registry.register_extra(format)
226
        self.assertEquals([format], self.registry._get_all())
227
228
    def test_register_extra_lazy(self):
229
        self.assertEquals([], self.registry._get_all())
230
        self.registry.register_extra_lazy("bzrlib.tests.test_workingtree",
231
            "SampleExtraTreeFormat")
232
        formats = self.registry._get_all()
233
        self.assertEquals(1, len(formats))
234
        self.assertIsInstance(formats[0], SampleExtraTreeFormat)
1534.4.51 by Robert Collins
Test the disk layout of format3 working trees.
235
236
237
class TestWorkingTreeFormat3(TestCaseWithTransport):
238
    """Tests specific to WorkingTreeFormat3."""
239
240
    def test_disk_layout(self):
241
        control = bzrdir.BzrDirMetaFormat1().initialize(self.get_url())
242
        control.create_repository()
243
        control.create_branch()
244
        tree = workingtree.WorkingTreeFormat3().initialize(control)
245
        # we want:
246
        # format 'Bazaar-NG Working Tree format 3'
247
        # inventory = blank inventory
248
        # pending-merges = ''
249
        # stat-cache = ??
250
        # no inventory.basis yet
251
        t = control.get_workingtree_transport(None)
1553.5.81 by Martin Pool
Revert change to WorkingTreeFormat3 format string; too many things want it the old way
252
        self.assertEqualDiff('Bazaar-NG Working Tree format 3',
1534.4.51 by Robert Collins
Test the disk layout of format3 working trees.
253
                             t.get('format').read())
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
254
        self.assertEqualDiff(t.get('inventory').read(),
2100.3.12 by Aaron Bentley
Stop generating unique roots for WorkingTree3
255
                              '<inventory format="5">\n'
1731.1.33 by Aaron Bentley
Revert no-special-root changes
256
                              '</inventory>\n',
257
                             )
1534.4.51 by Robert Collins
Test the disk layout of format3 working trees.
258
        self.assertEqualDiff('### bzr hashcache v5\n',
259
                             t.get('stat-cache').read())
260
        self.assertFalse(t.has('inventory.basis'))
1508.1.19 by Robert Collins
Give format3 working trees their own last-revision marker.
261
        # no last-revision file means 'None' or 'NULLREVISION'
262
        self.assertFalse(t.has('last-revision'))
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
263
        # TODO RBC 20060210 do a commit, check the inventory.basis is created
1508.1.19 by Robert Collins
Give format3 working trees their own last-revision marker.
264
        # correctly and last-revision file becomes present.
1553.5.74 by Martin Pool
Convert WorkingTree format3 to use LockDirs
265
266
    def test_uses_lockdir(self):
267
        """WorkingTreeFormat3 uses its own LockDir:
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
268
1553.5.74 by Martin Pool
Convert WorkingTree format3 to use LockDirs
269
            - lock is a directory
270
            - when the WorkingTree is locked, LockDir can see that
271
        """
272
        t = self.get_transport()
273
        url = self.get_url()
274
        dir = bzrdir.BzrDirMetaFormat1().initialize(url)
275
        repo = dir.create_repository()
276
        branch = dir.create_branch()
1558.10.1 by Aaron Bentley
Handle lockdirs over NFS properly
277
        try:
278
            tree = workingtree.WorkingTreeFormat3().initialize(dir)
279
        except errors.NotLocalUrl:
280
            raise TestSkipped('Not a local URL')
1553.5.74 by Martin Pool
Convert WorkingTree format3 to use LockDirs
281
        self.assertIsDirectory('.bzr', t)
282
        self.assertIsDirectory('.bzr/checkout', t)
283
        self.assertIsDirectory('.bzr/checkout/lock', t)
284
        our_lock = LockDir(t, '.bzr/checkout/lock')
285
        self.assertEquals(our_lock.peek(), None)
1553.5.75 by Martin Pool
Additional WorkingTree LockDir test
286
        tree.lock_write()
287
        self.assertTrue(our_lock.peek())
288
        tree.unlock()
289
        self.assertEquals(our_lock.peek(), None)
1534.10.6 by Aaron Bentley
Conflict serialization working for WorkingTree3
290
1815.2.2 by Jelmer Vernooij
Move missing_pending_merges test to WorkingTreeFormat3-specific tests.
291
    def test_missing_pending_merges(self):
292
        control = bzrdir.BzrDirMetaFormat1().initialize(self.get_url())
293
        control.create_repository()
294
        control.create_branch()
295
        tree = workingtree.WorkingTreeFormat3().initialize(control)
3407.2.14 by Martin Pool
Remove more cases of getting transport via control_files
296
        tree._transport.delete("pending-merges")
1908.6.11 by Robert Collins
Remove usage of tree.pending_merges().
297
        self.assertEqual([], tree.get_parent_ids())
1815.2.2 by Jelmer Vernooij
Move missing_pending_merges test to WorkingTreeFormat3-specific tests.
298
1666.1.4 by Robert Collins
* 'Metadir' is now the default disk format. This improves behaviour in
299
1997.1.1 by Robert Collins
Add WorkingTree.lock_tree_write.
300
class InstrumentedTree(object):
301
    """A instrumented tree to check the needs_tree_write_lock decorator."""
302
303
    def __init__(self):
304
        self._locks = []
305
306
    def lock_tree_write(self):
307
        self._locks.append('t')
308
309
    @needs_tree_write_lock
310
    def method_with_tree_write_lock(self, *args, **kwargs):
311
        """A lock_tree_write decorated method that returns its arguments."""
312
        return args, kwargs
313
314
    @needs_tree_write_lock
315
    def method_that_raises(self):
316
        """This method causes an exception when called with parameters.
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
317
1997.1.1 by Robert Collins
Add WorkingTree.lock_tree_write.
318
        This allows the decorator code to be checked - it should still call
319
        unlock.
320
        """
321
322
    def unlock(self):
323
        self._locks.append('u')
324
325
326
class TestInstrumentedTree(TestCase):
327
328
    def test_needs_tree_write_lock(self):
329
        """@needs_tree_write_lock should be semantically transparent."""
330
        tree = InstrumentedTree()
331
        self.assertEqual(
332
            'method_with_tree_write_lock',
333
            tree.method_with_tree_write_lock.__name__)
5131.2.1 by Martin
Permit bzrlib to run under python -OO by explictly assigning to __doc__ for user-visible docstrings
334
        self.assertDocstring(
1997.1.1 by Robert Collins
Add WorkingTree.lock_tree_write.
335
            "A lock_tree_write decorated method that returns its arguments.",
5131.2.1 by Martin
Permit bzrlib to run under python -OO by explictly assigning to __doc__ for user-visible docstrings
336
            tree.method_with_tree_write_lock)
1997.1.1 by Robert Collins
Add WorkingTree.lock_tree_write.
337
        args = (1, 2, 3)
338
        kwargs = {'a':'b'}
339
        result = tree.method_with_tree_write_lock(1,2,3, a='b')
340
        self.assertEqual((args, kwargs), result)
341
        self.assertEqual(['t', 'u'], tree._locks)
342
        self.assertRaises(TypeError, tree.method_that_raises, 'foo')
343
        self.assertEqual(['t', 'u', 't', 'u'], tree._locks)
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
344
345
3017.2.1 by Aaron Bentley
Revert now resolves conflicts recursively (#102739)
346
class TestRevert(TestCaseWithTransport):
347
348
    def test_revert_conflicts_recursive(self):
349
        this_tree = self.make_branch_and_tree('this-tree')
350
        self.build_tree_contents([('this-tree/foo/',),
351
                                  ('this-tree/foo/bar', 'bar')])
352
        this_tree.add(['foo', 'foo/bar'])
353
        this_tree.commit('created foo/bar')
354
        other_tree = this_tree.bzrdir.sprout('other-tree').open_workingtree()
355
        self.build_tree_contents([('other-tree/foo/bar', 'baz')])
356
        other_tree.commit('changed bar')
357
        self.build_tree_contents([('this-tree/foo/bar', 'qux')])
358
        this_tree.commit('changed qux')
359
        this_tree.merge_from_branch(other_tree.branch)
360
        self.assertEqual(1, len(this_tree.conflicts()))
361
        this_tree.revert(['foo'])
362
        self.assertEqual(0, len(this_tree.conflicts()))
363
364
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
365
class TestAutoResolve(TestCaseWithTransport):
366
367
    def test_auto_resolve(self):
368
        base = self.make_branch_and_tree('base')
369
        self.build_tree_contents([('base/hello', 'Hello')])
370
        base.add('hello', 'hello_id')
371
        base.commit('Hello')
372
        other = base.bzrdir.sprout('other').open_workingtree()
373
        self.build_tree_contents([('other/hello', 'hELLO')])
374
        other.commit('Case switch')
375
        this = base.bzrdir.sprout('this').open_workingtree()
376
        self.failUnlessExists('this/hello')
377
        self.build_tree_contents([('this/hello', 'Hello World')])
378
        this.commit('Add World')
379
        this.merge_from_branch(other.branch)
5050.51.3 by Vincent Ladeuil
Fix test failing on pqm.
380
        self.assertEqual([conflicts.TextConflict('hello', 'hello_id')],
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
381
                         this.conflicts())
382
        this.auto_resolve()
5050.51.3 by Vincent Ladeuil
Fix test failing on pqm.
383
        self.assertEqual([conflicts.TextConflict('hello', 'hello_id')],
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
384
                         this.conflicts())
385
        self.build_tree_contents([('this/hello', '<<<<<<<')])
386
        this.auto_resolve()
5050.51.3 by Vincent Ladeuil
Fix test failing on pqm.
387
        self.assertEqual([conflicts.TextConflict('hello', 'hello_id')],
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
388
                         this.conflicts())
389
        self.build_tree_contents([('this/hello', '=======')])
390
        this.auto_resolve()
5050.51.3 by Vincent Ladeuil
Fix test failing on pqm.
391
        self.assertEqual([conflicts.TextConflict('hello', 'hello_id')],
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
392
                         this.conflicts())
393
        self.build_tree_contents([('this/hello', '\n>>>>>>>')])
394
        remaining, resolved = this.auto_resolve()
5050.51.3 by Vincent Ladeuil
Fix test failing on pqm.
395
        self.assertEqual([conflicts.TextConflict('hello', 'hello_id')],
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
396
                         this.conflicts())
397
        self.assertEqual([], resolved)
398
        self.build_tree_contents([('this/hello', 'hELLO wORLD')])
399
        remaining, resolved = this.auto_resolve()
400
        self.assertEqual([], this.conflicts())
5050.51.3 by Vincent Ladeuil
Fix test failing on pqm.
401
        self.assertEqual([conflicts.TextConflict('hello', 'hello_id')],
2120.7.2 by Aaron Bentley
Move autoresolve functionality to workingtree
402
                         resolved)
403
        self.failIfExists('this/hello.BASE')
2120.7.3 by Aaron Bentley
Update resolve command to automatically mark conflicts as resolved
404
405
    def test_auto_resolve_dir(self):
406
        tree = self.make_branch_and_tree('tree')
407
        self.build_tree(['tree/hello/'])
408
        tree.add('hello', 'hello-id')
5050.51.3 by Vincent Ladeuil
Fix test failing on pqm.
409
        file_conflict = conflicts.TextConflict('file', 'hello-id')
2120.7.3 by Aaron Bentley
Update resolve command to automatically mark conflicts as resolved
410
        tree.set_conflicts(conflicts.ConflictList([file_conflict]))
411
        tree.auto_resolve()
3140.1.4 by Aaron Bentley
Add WorkingTree.find_trees
412
413
414
class TestFindTrees(TestCaseWithTransport):
415
416
    def test_find_trees(self):
417
        self.make_branch_and_tree('foo')
418
        self.make_branch_and_tree('foo/bar')
419
        # Sticking a tree inside a control dir is heinous, so let's skip it
420
        self.make_branch_and_tree('foo/.bzr/baz')
421
        self.make_branch('qux')
422
        trees = workingtree.WorkingTree.find_trees('.')
423
        self.assertEqual(2, len(list(trees)))