14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest 24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom cStringIO import StringIO 44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport pickle 54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom .support import LoggingResult, ResultWithNoStartTestRunStopTestRun 74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestCleanUp(unittest.TestCase): 104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testCleanUp(self): 124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class TestableTest(unittest.TestCase): 134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testNothing(self): 144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test = TestableTest('testNothing') 174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(test._cleanups, []) 184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cleanups = [] 204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def cleanup1(*args, **kwargs): 224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cleanups.append((1, args, kwargs)) 234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def cleanup2(*args, **kwargs): 254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cleanups.append((2, args, kwargs)) 264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test.addCleanup(cleanup1, 1, 2, 3, four='hello', five='goodbye') 284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test.addCleanup(cleanup2) 294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(test._cleanups, 314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm [(cleanup1, (1, 2, 3), dict(four='hello', five='goodbye')), 324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (cleanup2, (), {})]) 334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = test.doCleanups() 354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(result) 364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(cleanups, [(2, (), {}), (1, (1, 2, 3), 384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm dict(four='hello', five='goodbye'))]) 394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testCleanUpWithErrors(self): 414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class TestableTest(unittest.TestCase): 424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testNothing(self): 434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class MockResult(object): 464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm errors = [] 474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def addError(self, test, exc_info): 484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.errors.append((test, exc_info)) 494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = MockResult() 514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test = TestableTest('testNothing') 524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test._resultForDoCleanups = result 534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exc1 = Exception('foo') 554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exc2 = Exception('bar') 564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def cleanup1(): 574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise exc1 584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def cleanup2(): 604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise exc2 614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test.addCleanup(cleanup1) 634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test.addCleanup(cleanup2) 644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertFalse(test.doCleanups()) 664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (test1, (Type1, instance1, _)), (test2, (Type2, instance2, _)) = reversed(MockResult.errors) 684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual((test1, Type1, instance1), (test, Exception, exc1)) 694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual((test2, Type2, instance2), (test, Exception, exc2)) 704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testCleanupInRun(self): 724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm blowUp = False 734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ordering = [] 744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class TestableTest(unittest.TestCase): 764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def setUp(self): 774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ordering.append('setUp') 784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if blowUp: 794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise Exception('foo') 804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testNothing(self): 824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ordering.append('test') 834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def tearDown(self): 854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ordering.append('tearDown') 864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test = TestableTest('testNothing') 884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def cleanup1(): 904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ordering.append('cleanup1') 914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def cleanup2(): 924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ordering.append('cleanup2') 934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test.addCleanup(cleanup1) 944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test.addCleanup(cleanup2) 954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def success(some_test): 974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(some_test, test) 984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ordering.append('success') 994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 1014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.addSuccess = success 1024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test.run(result) 1044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(ordering, ['setUp', 'test', 'tearDown', 1054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'cleanup2', 'cleanup1', 'success']) 1064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm blowUp = True 1084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ordering = [] 1094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test = TestableTest('testNothing') 1104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test.addCleanup(cleanup1) 1114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test.run(result) 1124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(ordering, ['setUp', 'cleanup1']) 1134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testTestCaseDebugExecutesCleanups(self): 1154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ordering = [] 1164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class TestableTest(unittest.TestCase): 1184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def setUp(self): 1194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ordering.append('setUp') 1204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.addCleanup(cleanup1) 1214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testNothing(self): 1234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ordering.append('test') 1244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def tearDown(self): 1264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ordering.append('tearDown') 1274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test = TestableTest('testNothing') 1294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def cleanup1(): 1314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ordering.append('cleanup1') 1324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test.addCleanup(cleanup2) 1334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def cleanup2(): 1344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ordering.append('cleanup2') 1354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test.debug() 1374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(ordering, ['setUp', 'test', 'tearDown', 'cleanup1', 'cleanup2']) 1384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass Test_TextTestRunner(unittest.TestCase): 1414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests for TextTestRunner.""" 1424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_init(self): 1444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runner = unittest.TextTestRunner() 1454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertFalse(runner.failfast) 1464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertFalse(runner.buffer) 1474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(runner.verbosity, 1) 1484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(runner.descriptions) 1494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(runner.resultclass, unittest.TextTestResult) 1504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testBufferAndFailfast(self): 1534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Test(unittest.TestCase): 1544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testFoo(self): 1554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 1564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 1574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runner = unittest.TextTestRunner(stream=StringIO(), failfast=True, 1584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm buffer=True) 1594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Use our result object 1604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runner._makeResult = lambda: result 1614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runner.run(Test('testFoo')) 1624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(result.failfast) 1644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(result.buffer) 1654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testRunnerRegistersResult(self): 1674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Test(unittest.TestCase): 1684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testFoo(self): 1694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 1704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm originalRegisterResult = unittest.runner.registerResult 1714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def cleanup(): 1724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm unittest.runner.registerResult = originalRegisterResult 1734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.addCleanup(cleanup) 1744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 1764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runner = unittest.TextTestRunner(stream=StringIO()) 1774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Use our result object 1784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runner._makeResult = lambda: result 1794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.wasRegistered = 0 1814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def fakeRegisterResult(thisResult): 1824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.wasRegistered += 1 1834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(thisResult, result) 1844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm unittest.runner.registerResult = fakeRegisterResult 1854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runner.run(unittest.TestSuite()) 1874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(self.wasRegistered, 1) 1884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_works_with_result_without_startTestRun_stopTestRun(self): 1904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class OldTextResult(ResultWithNoStartTestRunStopTestRun): 1914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm separator2 = '' 1924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def printErrors(self): 1934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 1944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Runner(unittest.TextTestRunner): 1964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __init__(self): 1974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm super(Runner, self).__init__(StringIO()) 1984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def _makeResult(self): 2004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return OldTextResult() 2014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runner = Runner() 2034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runner.run(unittest.TestSuite()) 2044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_startTestRun_stopTestRun_called(self): 2064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class LoggingTextResult(LoggingResult): 2074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm separator2 = '' 2084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def printErrors(self): 2094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 2104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class LoggingRunner(unittest.TextTestRunner): 2124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __init__(self, events): 2134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm super(LoggingRunner, self).__init__(StringIO()) 2144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._events = events 2154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def _makeResult(self): 2174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return LoggingTextResult(self._events) 2184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm events = [] 2204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runner = LoggingRunner(events) 2214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runner.run(unittest.TestSuite()) 2224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expected = ['startTestRun', 'stopTestRun'] 2234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(events, expected) 2244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_pickle_unpickle(self): 2264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Issue #7197: a TextTestRunner should be (un)pickleable. This is 2274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # required by test_multiprocessing under Windows (in verbose mode). 2284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm from StringIO import StringIO as PickleableIO 2294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # cStringIO objects are not pickleable, but StringIO objects are. 2304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm stream = PickleableIO("foo") 2314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runner = unittest.TextTestRunner(stream) 2324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for protocol in range(pickle.HIGHEST_PROTOCOL + 1): 2334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm s = pickle.dumps(runner, protocol=protocol) 2344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm obj = pickle.loads(s) 2354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # StringIO objects never compare equal, a cheap test instead. 2364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(obj.stream.getvalue(), stream.getvalue()) 2374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_resultclass(self): 2394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def MockResultClass(*args): 2404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return args 2414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm STREAM = object() 2424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm DESCRIPTIONS = object() 2434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm VERBOSITY = object() 2444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runner = unittest.TextTestRunner(STREAM, DESCRIPTIONS, VERBOSITY, 2454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm resultclass=MockResultClass) 2464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(runner.resultclass, MockResultClass) 2474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expectedresult = (runner.stream, DESCRIPTIONS, VERBOSITY) 2494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(runner._makeResult(), expectedresult) 2504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == '__main__': 2534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm unittest.main() 254