mirror of https://github.com/python/cpython
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:
parent
610326d48a
commit
0734c632d5
|
@ -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()
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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()`.
|
||||
|
|
Loading…
Reference in New Issue