diff options
author | Brian Quinlan <brian@sweetapp.com> | 2010-10-06 13:05:45 (GMT) |
---|---|---|
committer | Brian Quinlan <brian@sweetapp.com> | 2010-10-06 13:05:45 (GMT) |
commit | 1e2ae4f054c20f54238997987416dcff0f3b0f3a (patch) | |
tree | 3212f91cab82c64da9485eed6bcd4e9b143da0c2 /Lib | |
parent | 5ad8ed5f26d5d511c3c058c16229e35cb43ba29f (diff) | |
download | cpython-1e2ae4f054c20f54238997987416dcff0f3b0f3a.zip cpython-1e2ae4f054c20f54238997987416dcff0f3b0f3a.tar.gz cpython-1e2ae4f054c20f54238997987416dcff0f3b0f3a.tar.bz2 |
Fixes 9903: test_concurrent_futures writes on stderr
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/concurrent/futures/_base.py | 5 | ||||
-rw-r--r-- | Lib/test/test_concurrent_futures.py | 50 |
2 files changed, 33 insertions, 22 deletions
diff --git a/Lib/concurrent/futures/_base.py b/Lib/concurrent/futures/_base.py index ba4cbc7..8136d89 100644 --- a/Lib/concurrent/futures/_base.py +++ b/Lib/concurrent/futures/_base.py @@ -40,9 +40,8 @@ _STATE_TO_DESCRIPTION_MAP = { # Logger for internal use by the futures package. LOGGER = logging.getLogger("concurrent.futures") -_handler = logging.StreamHandler() -LOGGER.addHandler(_handler) -del _handler +STDERR_HANDLER = logging.StreamHandler() +LOGGER.addHandler(STDERR_HANDLER) class Error(Exception): """Base class for all future-related exceptions.""" diff --git a/Lib/test/test_concurrent_futures.py b/Lib/test/test_concurrent_futures.py index c36f123..6427368 100644 --- a/Lib/test/test_concurrent_futures.py +++ b/Lib/test/test_concurrent_futures.py @@ -9,6 +9,8 @@ test.support.import_module('multiprocessing.synchronize') # without thread support. test.support.import_module('threading') +import io +import logging import multiprocessing import sys import threading @@ -21,7 +23,8 @@ if sys.platform.startswith('win'): from concurrent import futures from concurrent.futures._base import ( - PENDING, RUNNING, CANCELLED, CANCELLED_AND_NOTIFIED, FINISHED, Future, wait) + PENDING, RUNNING, CANCELLED, CANCELLED_AND_NOTIFIED, FINISHED, Future, + LOGGER, STDERR_HANDLER, wait) import concurrent.futures.process def create_future(state=PENDING, exception=None, result=None): @@ -617,24 +620,33 @@ class FutureTests(unittest.TestCase): self.assertTrue(was_cancelled) def test_done_callback_raises(self): - raising_was_called = False - fn_was_called = False - - def raising_fn(callback_future): - nonlocal raising_was_called - raising_was_called = True - raise Exception('doh!') - - def fn(callback_future): - nonlocal fn_was_called - fn_was_called = True - - f = Future() - f.add_done_callback(raising_fn) - f.add_done_callback(fn) - f.set_result(5) - self.assertTrue(raising_was_called) - self.assertTrue(fn_was_called) + LOGGER.removeHandler(STDERR_HANDLER) + logging_stream = io.StringIO() + handler = logging.StreamHandler(logging_stream) + LOGGER.addHandler(handler) + try: + raising_was_called = False + fn_was_called = False + + def raising_fn(callback_future): + nonlocal raising_was_called + raising_was_called = True + raise Exception('doh!') + + def fn(callback_future): + nonlocal fn_was_called + fn_was_called = True + + f = Future() + f.add_done_callback(raising_fn) + f.add_done_callback(fn) + f.set_result(5) + self.assertTrue(raising_was_called) + self.assertTrue(fn_was_called) + self.assertIn('Exception: doh!', logging_stream.getvalue()) + finally: + LOGGER.removeHandler(handler) + LOGGER.addHandler(STDERR_HANDLER) def test_done_callback_already_successful(self): callback_result = None |