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.
diff --git a/Lib/test/test_unittest.py b/Lib/test/test_unittest.py
index 726ac85..db51f77 100644
--- a/Lib/test/test_unittest.py
+++ b/Lib/test/test_unittest.py
@@ -17,6 +17,7 @@
 import types
 from copy import deepcopy
 from cStringIO import StringIO
+import pickle
 
 ### Support code
 ################################################################
@@ -3477,6 +3478,19 @@
         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 @@
     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()