~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/__init__.py

Merge cleanup into description

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