~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/__init__.py

  • Committer: Martin Pool
  • Date: 2010-01-12 06:30:41 UTC
  • mfrom: (4634.119.3 2.0)
  • mto: This revision was merged to the branch mainline in revision 4951.
  • Revision ID: mbp@sourcefrog.net-20100112063041-qp2ei0clx5gh0e9e
merge 2.0 back to trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
126
126
 
127
127
default_transport = LocalURLServer
128
128
 
129
 
 
130
 
_unitialized_attr = object()
131
 
"""A sentinel needed to act as a default value in a method signature."""
132
 
 
133
 
 
134
129
# Subunit result codes, defined here to prevent a hard dependency on subunit.
135
130
SUBUNIT_SEEK_SET = 0
136
131
SUBUNIT_SEEK_CUR = 1
242
237
                '%d non-main threads were left active in the end.\n'
243
238
                % (TestCase._active_threads - 1))
244
239
 
245
 
    def getDescription(self, test):
246
 
        return test.id()
247
 
 
248
240
    def _extractBenchmarkTime(self, testCase, details=None):
249
241
        """Add a benchmark time for the current test case."""
250
242
        if details and 'benchtime' in details:
855
847
        Tests that want to use debug flags can just set them in the
856
848
        debug_flags set during setup/teardown.
857
849
        """
858
 
        # Start with a copy of the current debug flags we can safely modify.
859
 
        self.overrideAttr(debug, 'debug_flags', set(debug.debug_flags))
 
850
        self._preserved_debug_flags = set(debug.debug_flags)
860
851
        if 'allow_debug' not in selftest_debug_flags:
861
852
            debug.debug_flags.clear()
862
853
        if 'disable_lock_checks' not in selftest_debug_flags:
863
854
            debug.debug_flags.add('strict_locks')
 
855
        self.addCleanup(self._restore_debug_flags)
864
856
 
865
857
    def _clear_hooks(self):
866
858
        # prevent hooks affecting tests
887
879
    def _silenceUI(self):
888
880
        """Turn off UI for duration of test"""
889
881
        # by default the UI is off; tests can turn it on if they want it.
890
 
        self.overrideAttr(ui, 'ui_factory', ui.SilentUIFactory())
 
882
        saved = ui.ui_factory
 
883
        def _restore():
 
884
            ui.ui_factory = saved
 
885
        ui.ui_factory = ui.SilentUIFactory()
 
886
        self.addCleanup(_restore)
891
887
 
892
888
    def _check_locks(self):
893
889
        """Check that all lock take/release actions have been paired."""
922
918
            self._lock_check_thorough = False
923
919
        else:
924
920
            self._lock_check_thorough = True
925
 
 
 
921
            
926
922
        self.addCleanup(self._check_locks)
927
923
        _mod_lock.Lock.hooks.install_named_hook('lock_acquired',
928
924
                                                self._lock_acquired, None)
1480
1476
        """
1481
1477
        self._cleanups.append((callable, args, kwargs))
1482
1478
 
1483
 
    def overrideAttr(self, obj, attr_name, new=_unitialized_attr):
1484
 
        """Overrides an object attribute restoring it after the test.
1485
 
 
1486
 
        :param obj: The object that will be mutated.
1487
 
 
1488
 
        :param attr_name: The attribute name we want to preserve/override in
1489
 
            the object.
1490
 
 
1491
 
        :param new: The optional value we want to set the attribute to.
1492
 
 
1493
 
        :returns: The actual attr value.
1494
 
        """
1495
 
        value = getattr(obj, attr_name)
1496
 
        # The actual value is captured by the call below
1497
 
        self.addCleanup(setattr, obj, attr_name, value)
1498
 
        if new is not _unitialized_attr:
1499
 
            setattr(obj, attr_name, new)
1500
 
        return value
1501
 
 
1502
1479
    def _cleanEnvironment(self):
1503
1480
        new_env = {
1504
1481
            'BZR_HOME': None, # Don't inherit BZR_HOME to all the tests.
1550
1527
        """Set an environment variable, and reset it when finished."""
1551
1528
        self.__old_env[name] = osutils.set_or_unset_env(name, newvalue)
1552
1529
 
 
1530
    def _restore_debug_flags(self):
 
1531
        debug.debug_flags.clear()
 
1532
        debug.debug_flags.update(self._preserved_debug_flags)
 
1533
 
1553
1534
    def _restoreEnvironment(self):
1554
1535
        for name, value in self.__old_env.iteritems():
1555
1536
            osutils.set_or_unset_env(name, value)
2053
2034
 
2054
2035
        Tests that expect to provoke LockContention errors should call this.
2055
2036
        """
2056
 
        self.overrideAttr(bzrlib.lockdir, '_DEFAULT_TIMEOUT_SECONDS', 0)
 
2037
        orig_timeout = bzrlib.lockdir._DEFAULT_TIMEOUT_SECONDS
 
2038
        def resetTimeout():
 
2039
            bzrlib.lockdir._DEFAULT_TIMEOUT_SECONDS = orig_timeout
 
2040
        self.addCleanup(resetTimeout)
 
2041
        bzrlib.lockdir._DEFAULT_TIMEOUT_SECONDS = 0
2057
2042
 
2058
2043
    def make_utf8_encoded_stringio(self, encoding_type=None):
2059
2044
        """Return a StringIOWrapper instance, that will encode Unicode
2073
2058
        request_handlers = request.request_handlers
2074
2059
        orig_method = request_handlers.get(verb)
2075
2060
        request_handlers.remove(verb)
2076
 
        self.addCleanup(request_handlers.register, verb, orig_method)
 
2061
        def restoreVerb():
 
2062
            request_handlers.register(verb, orig_method)
 
2063
        self.addCleanup(restoreVerb)
2077
2064
 
2078
2065
 
2079
2066
class CapturedCall(object):
2386
2373
    def setUp(self):
2387
2374
        super(TestCaseWithMemoryTransport, self).setUp()
2388
2375
        self._make_test_root()
2389
 
        self.addCleanup(os.chdir, os.getcwdu())
 
2376
        _currentdir = os.getcwdu()
 
2377
        def _leaveDirectory():
 
2378
            os.chdir(_currentdir)
 
2379
        self.addCleanup(_leaveDirectory)
2390
2380
        self.makeAndChdirToTestDir()
2391
2381
        self.overrideEnvironmentForTesting()
2392
2382
        self.__readonly_server = None
3759
3749
    return [
3760
3750
        'bzrlib',
3761
3751
        'bzrlib.branchbuilder',
3762
 
        'bzrlib.decorators',
3763
3752
        'bzrlib.export',
3764
3753
        'bzrlib.inventory',
3765
3754
        'bzrlib.iterablefile',