~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to doc/developers/testing.txt

  • Committer: Jelmer Vernooij
  • Date: 2010-03-12 19:59:50 UTC
  • mto: This revision was merged to the branch mainline in revision 5089.
  • Revision ID: jelmer@samba.org-20100312195950-wwufs49rlkf0s471
``bzrlib.merge_directive._BaseMergeDirective`` has been renamed to 
``bzrlib.merge_directive.BaseMergeDirective`` and is now public.

Show diffs side-by-side

added added

removed removed

Lines of Context:
455
455
  unless there is a good reason
456
456
 
457
457
 
458
 
Testing locking behaviour
459
 
-------------------------
460
 
 
461
 
In order to test the locking behaviour of commands, it is possible to install
462
 
a hook that is called when a write lock is: acquired, released or broken.
463
 
(Read locks also exist, they cannot be discovered in this way.)
464
 
 
465
 
A hook can be installed by calling bzrlib.lock.Lock.hooks.install_named_hook.
466
 
The three valid hooks are: `lock_acquired`, `lock_released` and `lock_broken`.
467
 
 
468
 
Example::
469
 
 
470
 
    locks_acquired = []
471
 
    locks_released = []
472
 
 
473
 
    lock.Lock.hooks.install_named_hook('lock_acquired',
474
 
        locks_acquired.append, None)
475
 
    lock.Lock.hooks.install_named_hook('lock_released',
476
 
        locks_released.append, None)
477
 
 
478
 
`locks_acquired` will now receive a LockResult instance for all locks acquired
479
 
since the time the hook is installed.
480
 
 
481
 
The last part of the `lock_url` allows you to identify the type of object that is locked.
482
 
 
483
 
- BzrDir: `/branch-lock`
484
 
- Working tree: `/checkout/lock`
485
 
- Branch: `/branch/lock`
486
 
- Repository: `/repository/lock`
487
 
 
488
 
To test if a lock is a write lock on a working tree, one can do the following::
489
 
 
490
 
    self.assertEndsWith(locks_acquired[0].lock_url, "/checkout/lock")
491
 
 
492
 
See bzrlib/tests/commands/test_revert.py for an example of how to use this for
493
 
testing locks.
494
 
 
495
 
 
496
458
Skipping tests
497
459
--------------
498
460
 
614
576
 - UnicodeFilenameFeature
615
577
 - FTPServerFeature
616
578
 - CaseInsensitiveFilesystemFeature.
617
 
 - chown_feature: The test can rely on OS being POSIX and python
618
 
   supporting os.chown.
619
 
 - posix_permissions_feature: The test can use POSIX-style
620
 
   user/group/other permission bits.
621
579
 
622
580
 
623
581
Defining a new feature that tests can require
772
730
 
773
731
TestCase
774
732
    A base TestCase that extends the Python standard library's
775
 
    TestCase in several ways.  TestCase is build on
776
 
    ``testtools.TestCase``, which gives it support for more assertion
777
 
    methods (e.g.  ``assertContainsRe``), ``addCleanup``, and other
778
 
    features (see its API docs for details).  It also has a ``setUp`` that
779
 
    makes sure that global state like registered hooks and loggers won't
780
 
    interfere with your test.  All tests should use this base class
781
 
    (whether directly or via a subclass).  Note that we are trying not to
782
 
    add more assertions at this point, and instead to build up a library
783
 
    of ``bzrlib.tests.matchers``.
 
733
    TestCase in several ways.  It adds more assertion methods (e.g.
 
734
    ``assertContainsRe``), ``addCleanup``, and other features (see its API
 
735
    docs for details).  It also has a ``setUp`` that makes sure that
 
736
    global state like registered hooks and loggers won't interfere with
 
737
    your test.  All tests should use this base class (whether directly or
 
738
    via a subclass).
784
739
 
785
740
TestCaseWithMemoryTransport
786
741
    Extends TestCase and adds methods like ``get_transport``,