/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_workingtree.py

Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
from bzrlib.bzrdir import BzrDir
26
26
from bzrlib.errors import NotBranchError, NotVersionedError
27
27
from bzrlib.lockdir import LockDir
 
28
from bzrlib.mutabletree import needs_tree_write_lock
28
29
from bzrlib.osutils import pathjoin, getcwd, has_symlinks
29
 
from bzrlib.tests import TestCaseWithTransport, TestSkipped
 
30
from bzrlib.tests import TestCase, TestCaseWithTransport, TestSkipped
30
31
from bzrlib.trace import mutter
31
32
from bzrlib.transport import get_transport
32
 
from bzrlib.workingtree import (TreeEntry, TreeDirectory, TreeFile, TreeLink,
33
 
                                WorkingTree)
 
33
from bzrlib.workingtree import (
 
34
    TreeEntry,
 
35
    TreeDirectory,
 
36
    TreeFile,
 
37
    TreeLink,
 
38
    WorkingTree,
 
39
    )
34
40
 
35
41
class TestTreeDirectory(TestCaseWithTransport):
36
42
 
167
173
        t = control.get_workingtree_transport(None)
168
174
        self.assertEqualDiff('Bazaar-NG Working Tree format 3',
169
175
                             t.get('format').read())
170
 
        self.assertEqualDiff('<inventory format="5">\n'
171
 
                             '</inventory>\n',
172
 
                             t.get('inventory').read())
 
176
        self.assertContainsRe(t.get('inventory').read(), 
 
177
                              '<inventory file_id="[^"]*" format="5">\n'
 
178
                              '</inventory>\n',
 
179
                             )
173
180
        self.assertEqualDiff('### bzr hashcache v5\n',
174
181
                             t.get('stat-cache').read())
175
182
        self.assertFalse(t.has('inventory.basis'))
364
371
        finally:
365
372
            bzrlib.DEFAULT_IGNORE = orig_default
366
373
            ignores._runtime_ignores = orig_runtime
 
374
 
 
375
 
 
376
class InstrumentedTree(object):
 
377
    """A instrumented tree to check the needs_tree_write_lock decorator."""
 
378
 
 
379
    def __init__(self):
 
380
        self._locks = []
 
381
 
 
382
    def lock_tree_write(self):
 
383
        self._locks.append('t')
 
384
 
 
385
    @needs_tree_write_lock
 
386
    def method_with_tree_write_lock(self, *args, **kwargs):
 
387
        """A lock_tree_write decorated method that returns its arguments."""
 
388
        return args, kwargs
 
389
 
 
390
    @needs_tree_write_lock
 
391
    def method_that_raises(self):
 
392
        """This method causes an exception when called with parameters.
 
393
        
 
394
        This allows the decorator code to be checked - it should still call
 
395
        unlock.
 
396
        """
 
397
 
 
398
    def unlock(self):
 
399
        self._locks.append('u')
 
400
 
 
401
 
 
402
class TestInstrumentedTree(TestCase):
 
403
 
 
404
    def test_needs_tree_write_lock(self):
 
405
        """@needs_tree_write_lock should be semantically transparent."""
 
406
        tree = InstrumentedTree()
 
407
        self.assertEqual(
 
408
            'method_with_tree_write_lock',
 
409
            tree.method_with_tree_write_lock.__name__)
 
410
        self.assertEqual(
 
411
            "A lock_tree_write decorated method that returns its arguments.",
 
412
            tree.method_with_tree_write_lock.__doc__)
 
413
        args = (1, 2, 3)
 
414
        kwargs = {'a':'b'}
 
415
        result = tree.method_with_tree_write_lock(1,2,3, a='b')
 
416
        self.assertEqual((args, kwargs), result)
 
417
        self.assertEqual(['t', 'u'], tree._locks)
 
418
        self.assertRaises(TypeError, tree.method_that_raises, 'foo')
 
419
        self.assertEqual(['t', 'u', 't', 'u'], tree._locks)