Issue #7197: Allow unittest.TextTestRunner objects to be pickled and

unpickled. This fixes crashes under Windows when trying to run
test_multiprocessing in verbose mode.

Additionally, Test_TextTestRunner hadn't been enabled in test_unittest.
This commit is contained in:
Antoine Pitrou 2009-11-10 20:49:30 +00:00
parent 610326d48a
commit 0734c632d5
3 changed files with 21 additions and 1 deletions

View File

@ -17,6 +17,7 @@ from unittest import TestCase, TestProgram
import types
from copy import deepcopy
from cStringIO import StringIO
import pickle
### Support code
################################################################
@ -3477,6 +3478,19 @@ class Test_TextTestRunner(TestCase):
expected = ['startTestRun', 'stopTestRun']
self.assertEqual(events, expected)
def test_pickle_unpickle(self):
# Issue #7197: a TextTestRunner should be (un)pickleable. This is
# required by test_multiprocessing under Windows (in verbose mode).
import StringIO
# cStringIO objects are not pickleable, but StringIO objects are.
stream = StringIO.StringIO("foo")
runner = unittest.TextTestRunner(stream)
for protocol in range(pickle.HIGHEST_PROTOCOL + 1):
s = pickle.dumps(runner, protocol=protocol)
obj = pickle.loads(s)
# StringIO objects never compare equal, a cheap test instead.
self.assertEqual(obj.stream.getvalue(), stream.getvalue())
class TestDiscovery(TestCase):
@ -3766,7 +3780,7 @@ def test_main():
test_support.run_unittest(Test_TestCase, Test_TestLoader,
Test_TestSuite, Test_TestResult, Test_FunctionTestCase,
Test_TestSkipping, Test_Assertions, TestLongMessage,
Test_TestProgram, TestCleanUp, TestDiscovery)
Test_TestProgram, TestCleanUp, TestDiscovery, Test_TextTestRunner)
if __name__ == "__main__":
test_main()

View File

@ -12,6 +12,8 @@ class _WritelnDecorator(object):
self.stream = stream
def __getattr__(self, attr):
if attr == 'stream':
raise AttributeError(attr)
return getattr(self.stream,attr)
def writeln(self, arg=None):

View File

@ -426,6 +426,10 @@ Core and Builtins
Library
-------
- Issue #7197: Allow unittest.TextTestRunner objects to be pickled and
unpickled. This fixes crashes under Windows when trying to run
test_multiprocessing in verbose mode.
- Issue #7282: Fix a memory leak when an RLock was used in a thread other
than those started through `threading.Thread` (for example, using
`thread.start_new_thread()`.