14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport sys 24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport textwrap 34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom StringIO import StringIO 44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom test import test_support 54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport traceback 74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest 84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass Test_TestResult(unittest.TestCase): 114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Note: there are not separate tests for TestResult.wasSuccessful(), 124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # TestResult.errors, TestResult.failures, TestResult.testsRun or 134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # TestResult.shouldStop because these only have meaning in terms of 144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # other TestResult methods. 154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # 164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Accordingly, tests for the aforenamed attributes are incorporated 174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # in with the tests for the defining methods. 184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ################################################################ 194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_init(self): 214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(result.wasSuccessful()) 244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.errors), 0) 254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.failures), 0) 264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result.testsRun, 0) 274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result.shouldStop, False) 284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIsNone(result._stdout_buffer) 294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIsNone(result._stderr_buffer) 304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "This method can be called to signal that the set of tests being 334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # run should be aborted by setting the TestResult's shouldStop 344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # attribute to True." 354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_stop(self): 364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.stop() 394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result.shouldStop, True) 414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "Called when the test case test is about to be run. The default 434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # implementation simply increments the instance's testsRun counter." 444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_startTest(self): 454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Foo(unittest.TestCase): 464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_1(self): 474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test = Foo('test_1') 504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.startTest(test) 544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(result.wasSuccessful()) 564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.errors), 0) 574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.failures), 0) 584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result.testsRun, 1) 594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result.shouldStop, False) 604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.stopTest(test) 624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "Called after the test case test has been executed, regardless of 644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # the outcome. The default implementation does nothing." 654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_stopTest(self): 664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Foo(unittest.TestCase): 674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_1(self): 684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test = Foo('test_1') 714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.startTest(test) 754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(result.wasSuccessful()) 774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.errors), 0) 784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.failures), 0) 794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result.testsRun, 1) 804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result.shouldStop, False) 814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.stopTest(test) 834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Same tests as above; make sure nothing has changed 854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(result.wasSuccessful()) 864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.errors), 0) 874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.failures), 0) 884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result.testsRun, 1) 894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result.shouldStop, False) 904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "Called before and after tests are run. The default implementation does nothing." 924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_startTestRun_stopTestRun(self): 934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.startTestRun() 954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.stopTestRun() 964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "addSuccess(test)" 984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ... 994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "Called when the test case test succeeds" 1004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ... 1014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "wasSuccessful() - Returns True if all tests run so far have passed, 1024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # otherwise returns False" 1034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ... 1044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "testsRun - The total number of tests run so far." 1054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ... 1064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "errors - A list containing 2-tuples of TestCase instances and 1074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # formatted tracebacks. Each tuple represents a test which raised an 1084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # unexpected exception. Contains formatted 1094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # tracebacks instead of sys.exc_info() results." 1104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ... 1114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "failures - A list containing 2-tuples of TestCase instances and 1124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # formatted tracebacks. Each tuple represents a test where a failure was 1134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # explicitly signalled using the TestCase.fail*() or TestCase.assert*() 1144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # methods. Contains formatted tracebacks instead 1154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # of sys.exc_info() results." 1164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_addSuccess(self): 1174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Foo(unittest.TestCase): 1184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_1(self): 1194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 1204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test = Foo('test_1') 1224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 1244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.startTest(test) 1264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.addSuccess(test) 1274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.stopTest(test) 1284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(result.wasSuccessful()) 1304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.errors), 0) 1314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.failures), 0) 1324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result.testsRun, 1) 1334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result.shouldStop, False) 1344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "addFailure(test, err)" 1364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ... 1374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "Called when the test case test signals a failure. err is a tuple of 1384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # the form returned by sys.exc_info(): (type, value, traceback)" 1394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ... 1404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "wasSuccessful() - Returns True if all tests run so far have passed, 1414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # otherwise returns False" 1424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ... 1434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "testsRun - The total number of tests run so far." 1444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ... 1454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "errors - A list containing 2-tuples of TestCase instances and 1464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # formatted tracebacks. Each tuple represents a test which raised an 1474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # unexpected exception. Contains formatted 1484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # tracebacks instead of sys.exc_info() results." 1494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ... 1504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "failures - A list containing 2-tuples of TestCase instances and 1514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # formatted tracebacks. Each tuple represents a test where a failure was 1524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # explicitly signalled using the TestCase.fail*() or TestCase.assert*() 1534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # methods. Contains formatted tracebacks instead 1544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # of sys.exc_info() results." 1554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_addFailure(self): 1564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Foo(unittest.TestCase): 1574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_1(self): 1584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 1594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test = Foo('test_1') 1614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 1624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test.fail("foo") 1634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except: 1644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exc_info_tuple = sys.exc_info() 1654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 1674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.startTest(test) 1694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.addFailure(test, exc_info_tuple) 1704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.stopTest(test) 1714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertFalse(result.wasSuccessful()) 1734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.errors), 0) 1744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.failures), 1) 1754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result.testsRun, 1) 1764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result.shouldStop, False) 1774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_case, formatted_exc = result.failures[0] 1794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(test_case is test) 1804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIsInstance(formatted_exc, str) 1814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "addError(test, err)" 1834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ... 1844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "Called when the test case test raises an unexpected exception err 1854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # is a tuple of the form returned by sys.exc_info(): 1864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # (type, value, traceback)" 1874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ... 1884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "wasSuccessful() - Returns True if all tests run so far have passed, 1894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # otherwise returns False" 1904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ... 1914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "testsRun - The total number of tests run so far." 1924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ... 1934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "errors - A list containing 2-tuples of TestCase instances and 1944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # formatted tracebacks. Each tuple represents a test which raised an 1954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # unexpected exception. Contains formatted 1964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # tracebacks instead of sys.exc_info() results." 1974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # ... 1984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # "failures - A list containing 2-tuples of TestCase instances and 1994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # formatted tracebacks. Each tuple represents a test where a failure was 2004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # explicitly signalled using the TestCase.fail*() or TestCase.assert*() 2014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # methods. Contains formatted tracebacks instead 2024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # of sys.exc_info() results." 2034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_addError(self): 2044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Foo(unittest.TestCase): 2054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_1(self): 2064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 2074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test = Foo('test_1') 2094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 2104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise TypeError() 2114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except: 2124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exc_info_tuple = sys.exc_info() 2134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 2154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.startTest(test) 2174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.addError(test, exc_info_tuple) 2184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.stopTest(test) 2194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertFalse(result.wasSuccessful()) 2214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.errors), 1) 2224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.failures), 0) 2234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result.testsRun, 1) 2244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result.shouldStop, False) 2254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_case, formatted_exc = result.errors[0] 2274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(test_case is test) 2284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIsInstance(formatted_exc, str) 2294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testGetDescriptionWithoutDocstring(self): 2314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TextTestResult(None, True, 1) 2324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual( 2334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.getDescription(self), 2344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'testGetDescriptionWithoutDocstring (' + __name__ + 2354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '.Test_TestResult)') 2364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @unittest.skipIf(sys.flags.optimize >= 2, 2384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "Docstrings are omitted with -O2 and above") 2394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testGetDescriptionWithOneLineDocstring(self): 2404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests getDescription() for a method with a docstring.""" 2414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TextTestResult(None, True, 1) 2424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual( 2434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.getDescription(self), 2444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('testGetDescriptionWithOneLineDocstring ' 2454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '(' + __name__ + '.Test_TestResult)\n' 2464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'Tests getDescription() for a method with a docstring.')) 2474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @unittest.skipIf(sys.flags.optimize >= 2, 2494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "Docstrings are omitted with -O2 and above") 2504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testGetDescriptionWithMultiLineDocstring(self): 2514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Tests getDescription() for a method with a longer docstring. 2524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm The second line of the docstring. 2534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 2544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TextTestResult(None, True, 1) 2554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual( 2564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.getDescription(self), 2574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('testGetDescriptionWithMultiLineDocstring ' 2584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '(' + __name__ + '.Test_TestResult)\n' 2594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'Tests getDescription() for a method with a longer ' 2604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'docstring.')) 2614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testStackFrameTrimming(self): 2634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Frame(object): 2644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class tb_frame(object): 2654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f_globals = {} 2664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 2674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertFalse(result._is_relevant_tb_level(Frame)) 2684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Frame.tb_frame.f_globals['__unittest'] = True 2704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(result._is_relevant_tb_level(Frame)) 2714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testFailFast(self): 2734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 2744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result._exc_info_to_string = lambda *_: '' 2754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.failfast = True 2764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.addError(None, None) 2774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(result.shouldStop) 2784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 2804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result._exc_info_to_string = lambda *_: '' 2814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.failfast = True 2824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.addFailure(None, None) 2834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(result.shouldStop) 2844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 2864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result._exc_info_to_string = lambda *_: '' 2874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.failfast = True 2884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.addUnexpectedSuccess(None) 2894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(result.shouldStop) 2904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testFailFastSetByRunner(self): 2924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runner = unittest.TextTestRunner(stream=StringIO(), failfast=True) 2934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test(result): 2944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(result.failfast) 2954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runner.run(test) 2964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 2984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclassDict = dict(unittest.TestResult.__dict__) 2994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfor m in ('addSkip', 'addExpectedFailure', 'addUnexpectedSuccess', 3004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm '__init__'): 3014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm del classDict[m] 3024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef __init__(self, stream=None, descriptions=None, verbosity=None): 3044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.failures = [] 3054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.errors = [] 3064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.testsRun = 0 3074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.shouldStop = False 3084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.buffer = False 3094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclassDict['__init__'] = __init__ 3114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmOldResult = type('OldResult', (object,), classDict) 3124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass Test_OldTestResult(unittest.TestCase): 3144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def assertOldResultWarning(self, test, failures): 3164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with test_support.check_warnings(("TestResult has no add.+ method,", 3174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm RuntimeWarning)): 3184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = OldResult() 3194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test.run(result) 3204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.failures), failures) 3214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testOldTestResult(self): 3234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Test(unittest.TestCase): 3244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testSkip(self): 3254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.skipTest('foobar') 3264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @unittest.expectedFailure 3274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testExpectedFail(self): 3284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise TypeError 3294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @unittest.expectedFailure 3304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testUnexpectedSuccess(self): 3314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 3324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for test_name, should_pass in (('testSkip', True), 3344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('testExpectedFail', True), 3354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('testUnexpectedSuccess', False)): 3364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test = Test(test_name) 3374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertOldResultWarning(test, int(not should_pass)) 3384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testOldTestTesultSetup(self): 3404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Test(unittest.TestCase): 3414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def setUp(self): 3424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.skipTest('no reason') 3434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testFoo(self): 3444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 3454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertOldResultWarning(Test('testFoo'), 0) 3464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testOldTestResultClass(self): 3484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @unittest.skip('no reason') 3494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Test(unittest.TestCase): 3504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testFoo(self): 3514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 3524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertOldResultWarning(Test('testFoo'), 0) 3534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testOldResultWithRunner(self): 3554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Test(unittest.TestCase): 3564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testFoo(self): 3574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 3584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runner = unittest.TextTestRunner(resultclass=OldResult, 3594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm stream=StringIO()) 3604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # This will raise an exception if TextTestRunner can't handle old 3614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # test result objects 3624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm runner.run(Test('testFoo')) 3634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass MockTraceback(object): 3664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @staticmethod 3674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def format_exception(*_): 3684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return ['A traceback'] 3694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef restore_traceback(): 3714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm unittest.result.traceback = traceback 3724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestOutputBuffering(unittest.TestCase): 3754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def setUp(self): 3774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._real_out = sys.stdout 3784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self._real_err = sys.stderr 3794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def tearDown(self): 3814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sys.stdout = self._real_out 3824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sys.stderr = self._real_err 3834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testBufferOutputOff(self): 3854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm real_out = self._real_out 3864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm real_err = self._real_err 3874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 3894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertFalse(result.buffer) 3904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIs(real_out, sys.stdout) 3924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIs(real_err, sys.stderr) 3934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.startTest(self) 3954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIs(real_out, sys.stdout) 3974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIs(real_err, sys.stderr) 3984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 3994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testBufferOutputStartTestAddSuccess(self): 4004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm real_out = self._real_out 4014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm real_err = self._real_err 4024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 4044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertFalse(result.buffer) 4054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.buffer = True 4074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIs(real_out, sys.stdout) 4094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIs(real_err, sys.stderr) 4104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.startTest(self) 4124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIsNot(real_out, sys.stdout) 4144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIsNot(real_err, sys.stderr) 4154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIsInstance(sys.stdout, StringIO) 4164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIsInstance(sys.stderr, StringIO) 4174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIsNot(sys.stdout, sys.stderr) 4184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm out_stream = sys.stdout 4204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm err_stream = sys.stderr 4214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result._original_stdout = StringIO() 4234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result._original_stderr = StringIO() 4244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print 'foo' 4264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print >> sys.stderr, 'bar' 4274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(out_stream.getvalue(), 'foo\n') 4294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(err_stream.getvalue(), 'bar\n') 4304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result._original_stdout.getvalue(), '') 4324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result._original_stderr.getvalue(), '') 4334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.addSuccess(self) 4354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.stopTest(self) 4364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIs(sys.stdout, result._original_stdout) 4384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIs(sys.stderr, result._original_stderr) 4394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result._original_stdout.getvalue(), '') 4414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result._original_stderr.getvalue(), '') 4424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(out_stream.getvalue(), '') 4444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(err_stream.getvalue(), '') 4454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def getStartedResult(self): 4484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 4494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.buffer = True 4504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.startTest(self) 4514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return result 4524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testBufferOutputAddErrorOrFailure(self): 4544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm unittest.result.traceback = MockTraceback 4554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.addCleanup(restore_traceback) 4564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for message_attr, add_attr, include_error in [ 4584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('errors', 'addError', True), 4594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('failures', 'addFailure', False), 4604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('errors', 'addError', True), 4614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ('failures', 'addFailure', False) 4624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ]: 4634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = self.getStartedResult() 4644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm buffered_out = sys.stdout 4654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm buffered_err = sys.stderr 4664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result._original_stdout = StringIO() 4674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result._original_stderr = StringIO() 4684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print >> sys.stdout, 'foo' 4704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if include_error: 4714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm print >> sys.stderr, 'bar' 4724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm addFunction = getattr(result, add_attr) 4754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm addFunction(self, (None, None, None)) 4764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.stopTest(self) 4774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result_list = getattr(result, message_attr) 4794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result_list), 1) 4804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test, message = result_list[0] 4824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expectedOutMessage = textwrap.dedent(""" 4834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Stdout: 4844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm foo 4854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """) 4864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expectedErrMessage = '' 4874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if include_error: 4884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expectedErrMessage = textwrap.dedent(""" 4894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Stderr: 4904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm bar 4914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """) 4924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm expectedFullMessage = 'A traceback%s%s' % (expectedOutMessage, expectedErrMessage) 4934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIs(test, self) 4954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result._original_stdout.getvalue(), expectedOutMessage) 4964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(result._original_stderr.getvalue(), expectedErrMessage) 4974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertMultiLineEqual(message, expectedFullMessage) 4984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 4994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testBufferSetupClass(self): 5004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 5014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.buffer = True 5024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Foo(unittest.TestCase): 5044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @classmethod 5054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def setUpClass(cls): 5064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1//0 5074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_foo(self): 5084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 5094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite([Foo('test_foo')]) 5104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite(result) 5114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.errors), 1) 5124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testBufferTearDownClass(self): 5144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 5154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.buffer = True 5164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Foo(unittest.TestCase): 5184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @classmethod 5194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def tearDownClass(cls): 5204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1//0 5214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_foo(self): 5224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 5234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite([Foo('test_foo')]) 5244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite(result) 5254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.errors), 1) 5264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testBufferSetUpModule(self): 5284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 5294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.buffer = True 5304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Foo(unittest.TestCase): 5324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_foo(self): 5334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 5344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Module(object): 5354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @staticmethod 5364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def setUpModule(): 5374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1//0 5384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Foo.__module__ = 'Module' 5404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sys.modules['Module'] = Module 5414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.addCleanup(sys.modules.pop, 'Module') 5424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite([Foo('test_foo')]) 5434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite(result) 5444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.errors), 1) 5454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def testBufferTearDownModule(self): 5474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result = unittest.TestResult() 5484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm result.buffer = True 5494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Foo(unittest.TestCase): 5514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_foo(self): 5524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 5534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Module(object): 5544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm @staticmethod 5554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def tearDownModule(): 5564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1//0 5574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm Foo.__module__ = 'Module' 5594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm sys.modules['Module'] = Module 5604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.addCleanup(sys.modules.pop, 'Module') 5614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite = unittest.TestSuite([Foo('test_foo')]) 5624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm suite(result) 5634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(result.errors), 1) 5644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 5664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == '__main__': 5674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm unittest.main() 568