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