17db96d56Sopenharmony_ciimport io
27db96d56Sopenharmony_ciimport sys
37db96d56Sopenharmony_ciimport textwrap
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_cifrom test.support import warnings_helper, captured_stdout, captured_stderr
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ciimport traceback
87db96d56Sopenharmony_ciimport unittest
97db96d56Sopenharmony_cifrom unittest.util import strclass
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ciclass MockTraceback(object):
137db96d56Sopenharmony_ci    class TracebackException:
147db96d56Sopenharmony_ci        def __init__(self, *args, **kwargs):
157db96d56Sopenharmony_ci            self.capture_locals = kwargs.get('capture_locals', False)
167db96d56Sopenharmony_ci        def format(self):
177db96d56Sopenharmony_ci            result = ['A traceback']
187db96d56Sopenharmony_ci            if self.capture_locals:
197db96d56Sopenharmony_ci                result.append('locals')
207db96d56Sopenharmony_ci            return result
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_cidef restore_traceback():
237db96d56Sopenharmony_ci    unittest.result.traceback = traceback
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_cidef bad_cleanup1():
277db96d56Sopenharmony_ci    print('do cleanup1')
287db96d56Sopenharmony_ci    raise TypeError('bad cleanup1')
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_cidef bad_cleanup2():
327db96d56Sopenharmony_ci    print('do cleanup2')
337db96d56Sopenharmony_ci    raise ValueError('bad cleanup2')
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ciclass BufferedWriter:
377db96d56Sopenharmony_ci    def __init__(self):
387db96d56Sopenharmony_ci        self.result = ''
397db96d56Sopenharmony_ci        self.buffer = ''
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ci    def write(self, arg):
427db96d56Sopenharmony_ci        self.buffer += arg
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ci    def flush(self):
457db96d56Sopenharmony_ci        self.result += self.buffer
467db96d56Sopenharmony_ci        self.buffer = ''
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci    def getvalue(self):
497db96d56Sopenharmony_ci        return self.result
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_ciclass Test_TestResult(unittest.TestCase):
537db96d56Sopenharmony_ci    # Note: there are not separate tests for TestResult.wasSuccessful(),
547db96d56Sopenharmony_ci    # TestResult.errors, TestResult.failures, TestResult.testsRun or
557db96d56Sopenharmony_ci    # TestResult.shouldStop because these only have meaning in terms of
567db96d56Sopenharmony_ci    # other TestResult methods.
577db96d56Sopenharmony_ci    #
587db96d56Sopenharmony_ci    # Accordingly, tests for the aforenamed attributes are incorporated
597db96d56Sopenharmony_ci    # in with the tests for the defining methods.
607db96d56Sopenharmony_ci    ################################################################
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci    def test_init(self):
637db96d56Sopenharmony_ci        result = unittest.TestResult()
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ci        self.assertTrue(result.wasSuccessful())
667db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 0)
677db96d56Sopenharmony_ci        self.assertEqual(len(result.failures), 0)
687db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 0)
697db96d56Sopenharmony_ci        self.assertEqual(result.shouldStop, False)
707db96d56Sopenharmony_ci        self.assertIsNone(result._stdout_buffer)
717db96d56Sopenharmony_ci        self.assertIsNone(result._stderr_buffer)
727db96d56Sopenharmony_ci
737db96d56Sopenharmony_ci    # "This method can be called to signal that the set of tests being
747db96d56Sopenharmony_ci    # run should be aborted by setting the TestResult's shouldStop
757db96d56Sopenharmony_ci    # attribute to True."
767db96d56Sopenharmony_ci    def test_stop(self):
777db96d56Sopenharmony_ci        result = unittest.TestResult()
787db96d56Sopenharmony_ci
797db96d56Sopenharmony_ci        result.stop()
807db96d56Sopenharmony_ci
817db96d56Sopenharmony_ci        self.assertEqual(result.shouldStop, True)
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ci    # "Called when the test case test is about to be run. The default
847db96d56Sopenharmony_ci    # implementation simply increments the instance's testsRun counter."
857db96d56Sopenharmony_ci    def test_startTest(self):
867db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
877db96d56Sopenharmony_ci            def test_1(self):
887db96d56Sopenharmony_ci                pass
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci        test = Foo('test_1')
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_ci        result = unittest.TestResult()
937db96d56Sopenharmony_ci
947db96d56Sopenharmony_ci        result.startTest(test)
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ci        self.assertTrue(result.wasSuccessful())
977db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 0)
987db96d56Sopenharmony_ci        self.assertEqual(len(result.failures), 0)
997db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 1)
1007db96d56Sopenharmony_ci        self.assertEqual(result.shouldStop, False)
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_ci        result.stopTest(test)
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ci    # "Called after the test case test has been executed, regardless of
1057db96d56Sopenharmony_ci    # the outcome. The default implementation does nothing."
1067db96d56Sopenharmony_ci    def test_stopTest(self):
1077db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
1087db96d56Sopenharmony_ci            def test_1(self):
1097db96d56Sopenharmony_ci                pass
1107db96d56Sopenharmony_ci
1117db96d56Sopenharmony_ci        test = Foo('test_1')
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci        result = unittest.TestResult()
1147db96d56Sopenharmony_ci
1157db96d56Sopenharmony_ci        result.startTest(test)
1167db96d56Sopenharmony_ci
1177db96d56Sopenharmony_ci        self.assertTrue(result.wasSuccessful())
1187db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 0)
1197db96d56Sopenharmony_ci        self.assertEqual(len(result.failures), 0)
1207db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 1)
1217db96d56Sopenharmony_ci        self.assertEqual(result.shouldStop, False)
1227db96d56Sopenharmony_ci
1237db96d56Sopenharmony_ci        result.stopTest(test)
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ci        # Same tests as above; make sure nothing has changed
1267db96d56Sopenharmony_ci        self.assertTrue(result.wasSuccessful())
1277db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 0)
1287db96d56Sopenharmony_ci        self.assertEqual(len(result.failures), 0)
1297db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 1)
1307db96d56Sopenharmony_ci        self.assertEqual(result.shouldStop, False)
1317db96d56Sopenharmony_ci
1327db96d56Sopenharmony_ci    # "Called before and after tests are run. The default implementation does nothing."
1337db96d56Sopenharmony_ci    def test_startTestRun_stopTestRun(self):
1347db96d56Sopenharmony_ci        result = unittest.TestResult()
1357db96d56Sopenharmony_ci        result.startTestRun()
1367db96d56Sopenharmony_ci        result.stopTestRun()
1377db96d56Sopenharmony_ci
1387db96d56Sopenharmony_ci    # "addSuccess(test)"
1397db96d56Sopenharmony_ci    # ...
1407db96d56Sopenharmony_ci    # "Called when the test case test succeeds"
1417db96d56Sopenharmony_ci    # ...
1427db96d56Sopenharmony_ci    # "wasSuccessful() - Returns True if all tests run so far have passed,
1437db96d56Sopenharmony_ci    # otherwise returns False"
1447db96d56Sopenharmony_ci    # ...
1457db96d56Sopenharmony_ci    # "testsRun - The total number of tests run so far."
1467db96d56Sopenharmony_ci    # ...
1477db96d56Sopenharmony_ci    # "errors - A list containing 2-tuples of TestCase instances and
1487db96d56Sopenharmony_ci    # formatted tracebacks. Each tuple represents a test which raised an
1497db96d56Sopenharmony_ci    # unexpected exception. Contains formatted
1507db96d56Sopenharmony_ci    # tracebacks instead of sys.exc_info() results."
1517db96d56Sopenharmony_ci    # ...
1527db96d56Sopenharmony_ci    # "failures - A list containing 2-tuples of TestCase instances and
1537db96d56Sopenharmony_ci    # formatted tracebacks. Each tuple represents a test where a failure was
1547db96d56Sopenharmony_ci    # explicitly signalled using the TestCase.fail*() or TestCase.assert*()
1557db96d56Sopenharmony_ci    # methods. Contains formatted tracebacks instead
1567db96d56Sopenharmony_ci    # of sys.exc_info() results."
1577db96d56Sopenharmony_ci    def test_addSuccess(self):
1587db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
1597db96d56Sopenharmony_ci            def test_1(self):
1607db96d56Sopenharmony_ci                pass
1617db96d56Sopenharmony_ci
1627db96d56Sopenharmony_ci        test = Foo('test_1')
1637db96d56Sopenharmony_ci
1647db96d56Sopenharmony_ci        result = unittest.TestResult()
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ci        result.startTest(test)
1677db96d56Sopenharmony_ci        result.addSuccess(test)
1687db96d56Sopenharmony_ci        result.stopTest(test)
1697db96d56Sopenharmony_ci
1707db96d56Sopenharmony_ci        self.assertTrue(result.wasSuccessful())
1717db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 0)
1727db96d56Sopenharmony_ci        self.assertEqual(len(result.failures), 0)
1737db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 1)
1747db96d56Sopenharmony_ci        self.assertEqual(result.shouldStop, False)
1757db96d56Sopenharmony_ci
1767db96d56Sopenharmony_ci    # "addFailure(test, err)"
1777db96d56Sopenharmony_ci    # ...
1787db96d56Sopenharmony_ci    # "Called when the test case test signals a failure. err is a tuple of
1797db96d56Sopenharmony_ci    # the form returned by sys.exc_info(): (type, value, traceback)"
1807db96d56Sopenharmony_ci    # ...
1817db96d56Sopenharmony_ci    # "wasSuccessful() - Returns True if all tests run so far have passed,
1827db96d56Sopenharmony_ci    # otherwise returns False"
1837db96d56Sopenharmony_ci    # ...
1847db96d56Sopenharmony_ci    # "testsRun - The total number of tests run so far."
1857db96d56Sopenharmony_ci    # ...
1867db96d56Sopenharmony_ci    # "errors - A list containing 2-tuples of TestCase instances and
1877db96d56Sopenharmony_ci    # formatted tracebacks. Each tuple represents a test which raised an
1887db96d56Sopenharmony_ci    # unexpected exception. Contains formatted
1897db96d56Sopenharmony_ci    # tracebacks instead of sys.exc_info() results."
1907db96d56Sopenharmony_ci    # ...
1917db96d56Sopenharmony_ci    # "failures - A list containing 2-tuples of TestCase instances and
1927db96d56Sopenharmony_ci    # formatted tracebacks. Each tuple represents a test where a failure was
1937db96d56Sopenharmony_ci    # explicitly signalled using the TestCase.fail*() or TestCase.assert*()
1947db96d56Sopenharmony_ci    # methods. Contains formatted tracebacks instead
1957db96d56Sopenharmony_ci    # of sys.exc_info() results."
1967db96d56Sopenharmony_ci    def test_addFailure(self):
1977db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
1987db96d56Sopenharmony_ci            def test_1(self):
1997db96d56Sopenharmony_ci                pass
2007db96d56Sopenharmony_ci
2017db96d56Sopenharmony_ci        test = Foo('test_1')
2027db96d56Sopenharmony_ci        try:
2037db96d56Sopenharmony_ci            test.fail("foo")
2047db96d56Sopenharmony_ci        except:
2057db96d56Sopenharmony_ci            exc_info_tuple = sys.exc_info()
2067db96d56Sopenharmony_ci
2077db96d56Sopenharmony_ci        result = unittest.TestResult()
2087db96d56Sopenharmony_ci
2097db96d56Sopenharmony_ci        result.startTest(test)
2107db96d56Sopenharmony_ci        result.addFailure(test, exc_info_tuple)
2117db96d56Sopenharmony_ci        result.stopTest(test)
2127db96d56Sopenharmony_ci
2137db96d56Sopenharmony_ci        self.assertFalse(result.wasSuccessful())
2147db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 0)
2157db96d56Sopenharmony_ci        self.assertEqual(len(result.failures), 1)
2167db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 1)
2177db96d56Sopenharmony_ci        self.assertEqual(result.shouldStop, False)
2187db96d56Sopenharmony_ci
2197db96d56Sopenharmony_ci        test_case, formatted_exc = result.failures[0]
2207db96d56Sopenharmony_ci        self.assertIs(test_case, test)
2217db96d56Sopenharmony_ci        self.assertIsInstance(formatted_exc, str)
2227db96d56Sopenharmony_ci
2237db96d56Sopenharmony_ci    def test_addFailure_filter_traceback_frames(self):
2247db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
2257db96d56Sopenharmony_ci            def test_1(self):
2267db96d56Sopenharmony_ci                pass
2277db96d56Sopenharmony_ci
2287db96d56Sopenharmony_ci        test = Foo('test_1')
2297db96d56Sopenharmony_ci        def get_exc_info():
2307db96d56Sopenharmony_ci            try:
2317db96d56Sopenharmony_ci                test.fail("foo")
2327db96d56Sopenharmony_ci            except:
2337db96d56Sopenharmony_ci                return sys.exc_info()
2347db96d56Sopenharmony_ci
2357db96d56Sopenharmony_ci        exc_info_tuple = get_exc_info()
2367db96d56Sopenharmony_ci
2377db96d56Sopenharmony_ci        full_exc = traceback.format_exception(*exc_info_tuple)
2387db96d56Sopenharmony_ci
2397db96d56Sopenharmony_ci        result = unittest.TestResult()
2407db96d56Sopenharmony_ci        result.startTest(test)
2417db96d56Sopenharmony_ci        result.addFailure(test, exc_info_tuple)
2427db96d56Sopenharmony_ci        result.stopTest(test)
2437db96d56Sopenharmony_ci
2447db96d56Sopenharmony_ci        formatted_exc = result.failures[0][1]
2457db96d56Sopenharmony_ci        dropped = [l for l in full_exc if l not in formatted_exc]
2467db96d56Sopenharmony_ci        self.assertEqual(len(dropped), 1)
2477db96d56Sopenharmony_ci        self.assertIn("raise self.failureException(msg)", dropped[0])
2487db96d56Sopenharmony_ci
2497db96d56Sopenharmony_ci    def test_addFailure_filter_traceback_frames_context(self):
2507db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
2517db96d56Sopenharmony_ci            def test_1(self):
2527db96d56Sopenharmony_ci                pass
2537db96d56Sopenharmony_ci
2547db96d56Sopenharmony_ci        test = Foo('test_1')
2557db96d56Sopenharmony_ci        def get_exc_info():
2567db96d56Sopenharmony_ci            try:
2577db96d56Sopenharmony_ci                try:
2587db96d56Sopenharmony_ci                    test.fail("foo")
2597db96d56Sopenharmony_ci                except:
2607db96d56Sopenharmony_ci                    raise ValueError(42)
2617db96d56Sopenharmony_ci            except:
2627db96d56Sopenharmony_ci                return sys.exc_info()
2637db96d56Sopenharmony_ci
2647db96d56Sopenharmony_ci        exc_info_tuple = get_exc_info()
2657db96d56Sopenharmony_ci
2667db96d56Sopenharmony_ci        full_exc = traceback.format_exception(*exc_info_tuple)
2677db96d56Sopenharmony_ci
2687db96d56Sopenharmony_ci        result = unittest.TestResult()
2697db96d56Sopenharmony_ci        result.startTest(test)
2707db96d56Sopenharmony_ci        result.addFailure(test, exc_info_tuple)
2717db96d56Sopenharmony_ci        result.stopTest(test)
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_ci        formatted_exc = result.failures[0][1]
2747db96d56Sopenharmony_ci        dropped = [l for l in full_exc if l not in formatted_exc]
2757db96d56Sopenharmony_ci        self.assertEqual(len(dropped), 1)
2767db96d56Sopenharmony_ci        self.assertIn("raise self.failureException(msg)", dropped[0])
2777db96d56Sopenharmony_ci
2787db96d56Sopenharmony_ci    def test_addFailure_filter_traceback_frames_chained_exception_self_loop(self):
2797db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
2807db96d56Sopenharmony_ci            def test_1(self):
2817db96d56Sopenharmony_ci                pass
2827db96d56Sopenharmony_ci
2837db96d56Sopenharmony_ci        def get_exc_info():
2847db96d56Sopenharmony_ci            try:
2857db96d56Sopenharmony_ci                loop = Exception("Loop")
2867db96d56Sopenharmony_ci                loop.__cause__ = loop
2877db96d56Sopenharmony_ci                loop.__context__ = loop
2887db96d56Sopenharmony_ci                raise loop
2897db96d56Sopenharmony_ci            except:
2907db96d56Sopenharmony_ci                return sys.exc_info()
2917db96d56Sopenharmony_ci
2927db96d56Sopenharmony_ci        exc_info_tuple = get_exc_info()
2937db96d56Sopenharmony_ci
2947db96d56Sopenharmony_ci        test = Foo('test_1')
2957db96d56Sopenharmony_ci        result = unittest.TestResult()
2967db96d56Sopenharmony_ci        result.startTest(test)
2977db96d56Sopenharmony_ci        result.addFailure(test, exc_info_tuple)
2987db96d56Sopenharmony_ci        result.stopTest(test)
2997db96d56Sopenharmony_ci
3007db96d56Sopenharmony_ci        formatted_exc = result.failures[0][1]
3017db96d56Sopenharmony_ci        self.assertEqual(formatted_exc.count("Exception: Loop\n"), 1)
3027db96d56Sopenharmony_ci
3037db96d56Sopenharmony_ci    def test_addFailure_filter_traceback_frames_chained_exception_cycle(self):
3047db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
3057db96d56Sopenharmony_ci            def test_1(self):
3067db96d56Sopenharmony_ci                pass
3077db96d56Sopenharmony_ci
3087db96d56Sopenharmony_ci        def get_exc_info():
3097db96d56Sopenharmony_ci            try:
3107db96d56Sopenharmony_ci                # Create two directionally opposed cycles
3117db96d56Sopenharmony_ci                # __cause__ in one direction, __context__ in the other
3127db96d56Sopenharmony_ci                A, B, C = Exception("A"), Exception("B"), Exception("C")
3137db96d56Sopenharmony_ci                edges = [(C, B), (B, A), (A, C)]
3147db96d56Sopenharmony_ci                for ex1, ex2 in edges:
3157db96d56Sopenharmony_ci                    ex1.__cause__ = ex2
3167db96d56Sopenharmony_ci                    ex2.__context__ = ex1
3177db96d56Sopenharmony_ci                raise C
3187db96d56Sopenharmony_ci            except:
3197db96d56Sopenharmony_ci                return sys.exc_info()
3207db96d56Sopenharmony_ci
3217db96d56Sopenharmony_ci        exc_info_tuple = get_exc_info()
3227db96d56Sopenharmony_ci
3237db96d56Sopenharmony_ci        test = Foo('test_1')
3247db96d56Sopenharmony_ci        result = unittest.TestResult()
3257db96d56Sopenharmony_ci        result.startTest(test)
3267db96d56Sopenharmony_ci        result.addFailure(test, exc_info_tuple)
3277db96d56Sopenharmony_ci        result.stopTest(test)
3287db96d56Sopenharmony_ci
3297db96d56Sopenharmony_ci        formatted_exc = result.failures[0][1]
3307db96d56Sopenharmony_ci        self.assertEqual(formatted_exc.count("Exception: A\n"), 1)
3317db96d56Sopenharmony_ci        self.assertEqual(formatted_exc.count("Exception: B\n"), 1)
3327db96d56Sopenharmony_ci        self.assertEqual(formatted_exc.count("Exception: C\n"), 1)
3337db96d56Sopenharmony_ci
3347db96d56Sopenharmony_ci    # "addError(test, err)"
3357db96d56Sopenharmony_ci    # ...
3367db96d56Sopenharmony_ci    # "Called when the test case test raises an unexpected exception err
3377db96d56Sopenharmony_ci    # is a tuple of the form returned by sys.exc_info():
3387db96d56Sopenharmony_ci    # (type, value, traceback)"
3397db96d56Sopenharmony_ci    # ...
3407db96d56Sopenharmony_ci    # "wasSuccessful() - Returns True if all tests run so far have passed,
3417db96d56Sopenharmony_ci    # otherwise returns False"
3427db96d56Sopenharmony_ci    # ...
3437db96d56Sopenharmony_ci    # "testsRun - The total number of tests run so far."
3447db96d56Sopenharmony_ci    # ...
3457db96d56Sopenharmony_ci    # "errors - A list containing 2-tuples of TestCase instances and
3467db96d56Sopenharmony_ci    # formatted tracebacks. Each tuple represents a test which raised an
3477db96d56Sopenharmony_ci    # unexpected exception. Contains formatted
3487db96d56Sopenharmony_ci    # tracebacks instead of sys.exc_info() results."
3497db96d56Sopenharmony_ci    # ...
3507db96d56Sopenharmony_ci    # "failures - A list containing 2-tuples of TestCase instances and
3517db96d56Sopenharmony_ci    # formatted tracebacks. Each tuple represents a test where a failure was
3527db96d56Sopenharmony_ci    # explicitly signalled using the TestCase.fail*() or TestCase.assert*()
3537db96d56Sopenharmony_ci    # methods. Contains formatted tracebacks instead
3547db96d56Sopenharmony_ci    # of sys.exc_info() results."
3557db96d56Sopenharmony_ci    def test_addError(self):
3567db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
3577db96d56Sopenharmony_ci            def test_1(self):
3587db96d56Sopenharmony_ci                pass
3597db96d56Sopenharmony_ci
3607db96d56Sopenharmony_ci        test = Foo('test_1')
3617db96d56Sopenharmony_ci        try:
3627db96d56Sopenharmony_ci            raise TypeError()
3637db96d56Sopenharmony_ci        except:
3647db96d56Sopenharmony_ci            exc_info_tuple = sys.exc_info()
3657db96d56Sopenharmony_ci
3667db96d56Sopenharmony_ci        result = unittest.TestResult()
3677db96d56Sopenharmony_ci
3687db96d56Sopenharmony_ci        result.startTest(test)
3697db96d56Sopenharmony_ci        result.addError(test, exc_info_tuple)
3707db96d56Sopenharmony_ci        result.stopTest(test)
3717db96d56Sopenharmony_ci
3727db96d56Sopenharmony_ci        self.assertFalse(result.wasSuccessful())
3737db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 1)
3747db96d56Sopenharmony_ci        self.assertEqual(len(result.failures), 0)
3757db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 1)
3767db96d56Sopenharmony_ci        self.assertEqual(result.shouldStop, False)
3777db96d56Sopenharmony_ci
3787db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[0]
3797db96d56Sopenharmony_ci        self.assertIs(test_case, test)
3807db96d56Sopenharmony_ci        self.assertIsInstance(formatted_exc, str)
3817db96d56Sopenharmony_ci
3827db96d56Sopenharmony_ci    def test_addError_locals(self):
3837db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
3847db96d56Sopenharmony_ci            def test_1(self):
3857db96d56Sopenharmony_ci                1/0
3867db96d56Sopenharmony_ci
3877db96d56Sopenharmony_ci        test = Foo('test_1')
3887db96d56Sopenharmony_ci        result = unittest.TestResult()
3897db96d56Sopenharmony_ci        result.tb_locals = True
3907db96d56Sopenharmony_ci
3917db96d56Sopenharmony_ci        unittest.result.traceback = MockTraceback
3927db96d56Sopenharmony_ci        self.addCleanup(restore_traceback)
3937db96d56Sopenharmony_ci        result.startTestRun()
3947db96d56Sopenharmony_ci        test.run(result)
3957db96d56Sopenharmony_ci        result.stopTestRun()
3967db96d56Sopenharmony_ci
3977db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 1)
3987db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[0]
3997db96d56Sopenharmony_ci        self.assertEqual('A tracebacklocals', formatted_exc)
4007db96d56Sopenharmony_ci
4017db96d56Sopenharmony_ci    def test_addSubTest(self):
4027db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
4037db96d56Sopenharmony_ci            def test_1(self):
4047db96d56Sopenharmony_ci                nonlocal subtest
4057db96d56Sopenharmony_ci                with self.subTest(foo=1):
4067db96d56Sopenharmony_ci                    subtest = self._subtest
4077db96d56Sopenharmony_ci                    try:
4087db96d56Sopenharmony_ci                        1/0
4097db96d56Sopenharmony_ci                    except ZeroDivisionError:
4107db96d56Sopenharmony_ci                        exc_info_tuple = sys.exc_info()
4117db96d56Sopenharmony_ci                    # Register an error by hand (to check the API)
4127db96d56Sopenharmony_ci                    result.addSubTest(test, subtest, exc_info_tuple)
4137db96d56Sopenharmony_ci                    # Now trigger a failure
4147db96d56Sopenharmony_ci                    self.fail("some recognizable failure")
4157db96d56Sopenharmony_ci
4167db96d56Sopenharmony_ci        subtest = None
4177db96d56Sopenharmony_ci        test = Foo('test_1')
4187db96d56Sopenharmony_ci        result = unittest.TestResult()
4197db96d56Sopenharmony_ci
4207db96d56Sopenharmony_ci        test.run(result)
4217db96d56Sopenharmony_ci
4227db96d56Sopenharmony_ci        self.assertFalse(result.wasSuccessful())
4237db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 1)
4247db96d56Sopenharmony_ci        self.assertEqual(len(result.failures), 1)
4257db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 1)
4267db96d56Sopenharmony_ci        self.assertEqual(result.shouldStop, False)
4277db96d56Sopenharmony_ci
4287db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[0]
4297db96d56Sopenharmony_ci        self.assertIs(test_case, subtest)
4307db96d56Sopenharmony_ci        self.assertIn("ZeroDivisionError", formatted_exc)
4317db96d56Sopenharmony_ci        test_case, formatted_exc = result.failures[0]
4327db96d56Sopenharmony_ci        self.assertIs(test_case, subtest)
4337db96d56Sopenharmony_ci        self.assertIn("some recognizable failure", formatted_exc)
4347db96d56Sopenharmony_ci
4357db96d56Sopenharmony_ci    def testStackFrameTrimming(self):
4367db96d56Sopenharmony_ci        class Frame(object):
4377db96d56Sopenharmony_ci            class tb_frame(object):
4387db96d56Sopenharmony_ci                f_globals = {}
4397db96d56Sopenharmony_ci        result = unittest.TestResult()
4407db96d56Sopenharmony_ci        self.assertFalse(result._is_relevant_tb_level(Frame))
4417db96d56Sopenharmony_ci
4427db96d56Sopenharmony_ci        Frame.tb_frame.f_globals['__unittest'] = True
4437db96d56Sopenharmony_ci        self.assertTrue(result._is_relevant_tb_level(Frame))
4447db96d56Sopenharmony_ci
4457db96d56Sopenharmony_ci    def testFailFast(self):
4467db96d56Sopenharmony_ci        result = unittest.TestResult()
4477db96d56Sopenharmony_ci        result._exc_info_to_string = lambda *_: ''
4487db96d56Sopenharmony_ci        result.failfast = True
4497db96d56Sopenharmony_ci        result.addError(None, None)
4507db96d56Sopenharmony_ci        self.assertTrue(result.shouldStop)
4517db96d56Sopenharmony_ci
4527db96d56Sopenharmony_ci        result = unittest.TestResult()
4537db96d56Sopenharmony_ci        result._exc_info_to_string = lambda *_: ''
4547db96d56Sopenharmony_ci        result.failfast = True
4557db96d56Sopenharmony_ci        result.addFailure(None, None)
4567db96d56Sopenharmony_ci        self.assertTrue(result.shouldStop)
4577db96d56Sopenharmony_ci
4587db96d56Sopenharmony_ci        result = unittest.TestResult()
4597db96d56Sopenharmony_ci        result._exc_info_to_string = lambda *_: ''
4607db96d56Sopenharmony_ci        result.failfast = True
4617db96d56Sopenharmony_ci        result.addUnexpectedSuccess(None)
4627db96d56Sopenharmony_ci        self.assertTrue(result.shouldStop)
4637db96d56Sopenharmony_ci
4647db96d56Sopenharmony_ci    def testFailFastSetByRunner(self):
4657db96d56Sopenharmony_ci        stream = BufferedWriter()
4667db96d56Sopenharmony_ci        runner = unittest.TextTestRunner(stream=stream, failfast=True)
4677db96d56Sopenharmony_ci        def test(result):
4687db96d56Sopenharmony_ci            self.assertTrue(result.failfast)
4697db96d56Sopenharmony_ci        result = runner.run(test)
4707db96d56Sopenharmony_ci        stream.flush()
4717db96d56Sopenharmony_ci        self.assertTrue(stream.getvalue().endswith('\n\nOK\n'))
4727db96d56Sopenharmony_ci
4737db96d56Sopenharmony_ci
4747db96d56Sopenharmony_ciclass Test_TextTestResult(unittest.TestCase):
4757db96d56Sopenharmony_ci    maxDiff = None
4767db96d56Sopenharmony_ci
4777db96d56Sopenharmony_ci    def testGetDescriptionWithoutDocstring(self):
4787db96d56Sopenharmony_ci        result = unittest.TextTestResult(None, True, 1)
4797db96d56Sopenharmony_ci        self.assertEqual(
4807db96d56Sopenharmony_ci                result.getDescription(self),
4817db96d56Sopenharmony_ci                'testGetDescriptionWithoutDocstring (' + __name__ +
4827db96d56Sopenharmony_ci                '.Test_TextTestResult.testGetDescriptionWithoutDocstring)')
4837db96d56Sopenharmony_ci
4847db96d56Sopenharmony_ci    def testGetSubTestDescriptionWithoutDocstring(self):
4857db96d56Sopenharmony_ci        with self.subTest(foo=1, bar=2):
4867db96d56Sopenharmony_ci            result = unittest.TextTestResult(None, True, 1)
4877db96d56Sopenharmony_ci            self.assertEqual(
4887db96d56Sopenharmony_ci                    result.getDescription(self._subtest),
4897db96d56Sopenharmony_ci                    'testGetSubTestDescriptionWithoutDocstring (' + __name__ +
4907db96d56Sopenharmony_ci                    '.Test_TextTestResult.testGetSubTestDescriptionWithoutDocstring) (foo=1, bar=2)')
4917db96d56Sopenharmony_ci
4927db96d56Sopenharmony_ci        with self.subTest('some message'):
4937db96d56Sopenharmony_ci            result = unittest.TextTestResult(None, True, 1)
4947db96d56Sopenharmony_ci            self.assertEqual(
4957db96d56Sopenharmony_ci                    result.getDescription(self._subtest),
4967db96d56Sopenharmony_ci                    'testGetSubTestDescriptionWithoutDocstring (' + __name__ +
4977db96d56Sopenharmony_ci                    '.Test_TextTestResult.testGetSubTestDescriptionWithoutDocstring) [some message]')
4987db96d56Sopenharmony_ci
4997db96d56Sopenharmony_ci    def testGetSubTestDescriptionWithoutDocstringAndParams(self):
5007db96d56Sopenharmony_ci        with self.subTest():
5017db96d56Sopenharmony_ci            result = unittest.TextTestResult(None, True, 1)
5027db96d56Sopenharmony_ci            self.assertEqual(
5037db96d56Sopenharmony_ci                    result.getDescription(self._subtest),
5047db96d56Sopenharmony_ci                    'testGetSubTestDescriptionWithoutDocstringAndParams '
5057db96d56Sopenharmony_ci                    '(' + __name__ + '.Test_TextTestResult.testGetSubTestDescriptionWithoutDocstringAndParams) '
5067db96d56Sopenharmony_ci                    '(<subtest>)')
5077db96d56Sopenharmony_ci
5087db96d56Sopenharmony_ci    def testGetSubTestDescriptionForFalsyValues(self):
5097db96d56Sopenharmony_ci        expected = 'testGetSubTestDescriptionForFalsyValues (%s.Test_TextTestResult.testGetSubTestDescriptionForFalsyValues) [%s]'
5107db96d56Sopenharmony_ci        result = unittest.TextTestResult(None, True, 1)
5117db96d56Sopenharmony_ci        for arg in [0, None, []]:
5127db96d56Sopenharmony_ci            with self.subTest(arg):
5137db96d56Sopenharmony_ci                self.assertEqual(
5147db96d56Sopenharmony_ci                    result.getDescription(self._subtest),
5157db96d56Sopenharmony_ci                    expected % (__name__, arg)
5167db96d56Sopenharmony_ci                )
5177db96d56Sopenharmony_ci
5187db96d56Sopenharmony_ci    def testGetNestedSubTestDescriptionWithoutDocstring(self):
5197db96d56Sopenharmony_ci        with self.subTest(foo=1):
5207db96d56Sopenharmony_ci            with self.subTest(baz=2, bar=3):
5217db96d56Sopenharmony_ci                result = unittest.TextTestResult(None, True, 1)
5227db96d56Sopenharmony_ci                self.assertEqual(
5237db96d56Sopenharmony_ci                        result.getDescription(self._subtest),
5247db96d56Sopenharmony_ci                        'testGetNestedSubTestDescriptionWithoutDocstring '
5257db96d56Sopenharmony_ci                        '(' + __name__ + '.Test_TextTestResult.testGetNestedSubTestDescriptionWithoutDocstring) '
5267db96d56Sopenharmony_ci                        '(baz=2, bar=3, foo=1)')
5277db96d56Sopenharmony_ci
5287db96d56Sopenharmony_ci    def testGetDuplicatedNestedSubTestDescriptionWithoutDocstring(self):
5297db96d56Sopenharmony_ci        with self.subTest(foo=1, bar=2):
5307db96d56Sopenharmony_ci            with self.subTest(baz=3, bar=4):
5317db96d56Sopenharmony_ci                result = unittest.TextTestResult(None, True, 1)
5327db96d56Sopenharmony_ci                self.assertEqual(
5337db96d56Sopenharmony_ci                        result.getDescription(self._subtest),
5347db96d56Sopenharmony_ci                        'testGetDuplicatedNestedSubTestDescriptionWithoutDocstring '
5357db96d56Sopenharmony_ci                        '(' + __name__ + '.Test_TextTestResult.testGetDuplicatedNestedSubTestDescriptionWithoutDocstring) (baz=3, bar=4, foo=1)')
5367db96d56Sopenharmony_ci
5377db96d56Sopenharmony_ci    @unittest.skipIf(sys.flags.optimize >= 2,
5387db96d56Sopenharmony_ci                     "Docstrings are omitted with -O2 and above")
5397db96d56Sopenharmony_ci    def testGetDescriptionWithOneLineDocstring(self):
5407db96d56Sopenharmony_ci        """Tests getDescription() for a method with a docstring."""
5417db96d56Sopenharmony_ci        result = unittest.TextTestResult(None, True, 1)
5427db96d56Sopenharmony_ci        self.assertEqual(
5437db96d56Sopenharmony_ci                result.getDescription(self),
5447db96d56Sopenharmony_ci               ('testGetDescriptionWithOneLineDocstring '
5457db96d56Sopenharmony_ci                '(' + __name__ + '.Test_TextTestResult.testGetDescriptionWithOneLineDocstring)\n'
5467db96d56Sopenharmony_ci                'Tests getDescription() for a method with a docstring.'))
5477db96d56Sopenharmony_ci
5487db96d56Sopenharmony_ci    @unittest.skipIf(sys.flags.optimize >= 2,
5497db96d56Sopenharmony_ci                     "Docstrings are omitted with -O2 and above")
5507db96d56Sopenharmony_ci    def testGetSubTestDescriptionWithOneLineDocstring(self):
5517db96d56Sopenharmony_ci        """Tests getDescription() for a method with a docstring."""
5527db96d56Sopenharmony_ci        result = unittest.TextTestResult(None, True, 1)
5537db96d56Sopenharmony_ci        with self.subTest(foo=1, bar=2):
5547db96d56Sopenharmony_ci            self.assertEqual(
5557db96d56Sopenharmony_ci                result.getDescription(self._subtest),
5567db96d56Sopenharmony_ci               ('testGetSubTestDescriptionWithOneLineDocstring '
5577db96d56Sopenharmony_ci                '(' + __name__ + '.Test_TextTestResult.testGetSubTestDescriptionWithOneLineDocstring) '
5587db96d56Sopenharmony_ci                '(foo=1, bar=2)\n'
5597db96d56Sopenharmony_ci
5607db96d56Sopenharmony_ci                'Tests getDescription() for a method with a docstring.'))
5617db96d56Sopenharmony_ci
5627db96d56Sopenharmony_ci    @unittest.skipIf(sys.flags.optimize >= 2,
5637db96d56Sopenharmony_ci                     "Docstrings are omitted with -O2 and above")
5647db96d56Sopenharmony_ci    def testGetDescriptionWithMultiLineDocstring(self):
5657db96d56Sopenharmony_ci        """Tests getDescription() for a method with a longer docstring.
5667db96d56Sopenharmony_ci        The second line of the docstring.
5677db96d56Sopenharmony_ci        """
5687db96d56Sopenharmony_ci        result = unittest.TextTestResult(None, True, 1)
5697db96d56Sopenharmony_ci        self.assertEqual(
5707db96d56Sopenharmony_ci                result.getDescription(self),
5717db96d56Sopenharmony_ci               ('testGetDescriptionWithMultiLineDocstring '
5727db96d56Sopenharmony_ci                '(' + __name__ + '.Test_TextTestResult.testGetDescriptionWithMultiLineDocstring)\n'
5737db96d56Sopenharmony_ci                'Tests getDescription() for a method with a longer '
5747db96d56Sopenharmony_ci                'docstring.'))
5757db96d56Sopenharmony_ci
5767db96d56Sopenharmony_ci    @unittest.skipIf(sys.flags.optimize >= 2,
5777db96d56Sopenharmony_ci                     "Docstrings are omitted with -O2 and above")
5787db96d56Sopenharmony_ci    def testGetSubTestDescriptionWithMultiLineDocstring(self):
5797db96d56Sopenharmony_ci        """Tests getDescription() for a method with a longer docstring.
5807db96d56Sopenharmony_ci        The second line of the docstring.
5817db96d56Sopenharmony_ci        """
5827db96d56Sopenharmony_ci        result = unittest.TextTestResult(None, True, 1)
5837db96d56Sopenharmony_ci        with self.subTest(foo=1, bar=2):
5847db96d56Sopenharmony_ci            self.assertEqual(
5857db96d56Sopenharmony_ci                result.getDescription(self._subtest),
5867db96d56Sopenharmony_ci               ('testGetSubTestDescriptionWithMultiLineDocstring '
5877db96d56Sopenharmony_ci                '(' + __name__ + '.Test_TextTestResult.testGetSubTestDescriptionWithMultiLineDocstring) '
5887db96d56Sopenharmony_ci                '(foo=1, bar=2)\n'
5897db96d56Sopenharmony_ci                'Tests getDescription() for a method with a longer '
5907db96d56Sopenharmony_ci                'docstring.'))
5917db96d56Sopenharmony_ci
5927db96d56Sopenharmony_ci    class Test(unittest.TestCase):
5937db96d56Sopenharmony_ci        def testSuccess(self):
5947db96d56Sopenharmony_ci            pass
5957db96d56Sopenharmony_ci        def testSkip(self):
5967db96d56Sopenharmony_ci            self.skipTest('skip')
5977db96d56Sopenharmony_ci        def testFail(self):
5987db96d56Sopenharmony_ci            self.fail('fail')
5997db96d56Sopenharmony_ci        def testError(self):
6007db96d56Sopenharmony_ci            raise Exception('error')
6017db96d56Sopenharmony_ci        @unittest.expectedFailure
6027db96d56Sopenharmony_ci        def testExpectedFailure(self):
6037db96d56Sopenharmony_ci            self.fail('fail')
6047db96d56Sopenharmony_ci        @unittest.expectedFailure
6057db96d56Sopenharmony_ci        def testUnexpectedSuccess(self):
6067db96d56Sopenharmony_ci            pass
6077db96d56Sopenharmony_ci        def testSubTestSuccess(self):
6087db96d56Sopenharmony_ci            with self.subTest('one', a=1):
6097db96d56Sopenharmony_ci                pass
6107db96d56Sopenharmony_ci            with self.subTest('two', b=2):
6117db96d56Sopenharmony_ci                pass
6127db96d56Sopenharmony_ci        def testSubTestMixed(self):
6137db96d56Sopenharmony_ci            with self.subTest('success', a=1):
6147db96d56Sopenharmony_ci                pass
6157db96d56Sopenharmony_ci            with self.subTest('skip', b=2):
6167db96d56Sopenharmony_ci                self.skipTest('skip')
6177db96d56Sopenharmony_ci            with self.subTest('fail', c=3):
6187db96d56Sopenharmony_ci                self.fail('fail')
6197db96d56Sopenharmony_ci            with self.subTest('error', d=4):
6207db96d56Sopenharmony_ci                raise Exception('error')
6217db96d56Sopenharmony_ci
6227db96d56Sopenharmony_ci        tearDownError = None
6237db96d56Sopenharmony_ci        def tearDown(self):
6247db96d56Sopenharmony_ci            if self.tearDownError is not None:
6257db96d56Sopenharmony_ci                raise self.tearDownError
6267db96d56Sopenharmony_ci
6277db96d56Sopenharmony_ci    def _run_test(self, test_name, verbosity, tearDownError=None):
6287db96d56Sopenharmony_ci        stream = BufferedWriter()
6297db96d56Sopenharmony_ci        stream = unittest.runner._WritelnDecorator(stream)
6307db96d56Sopenharmony_ci        result = unittest.TextTestResult(stream, True, verbosity)
6317db96d56Sopenharmony_ci        test = self.Test(test_name)
6327db96d56Sopenharmony_ci        test.tearDownError = tearDownError
6337db96d56Sopenharmony_ci        test.run(result)
6347db96d56Sopenharmony_ci        return stream.getvalue()
6357db96d56Sopenharmony_ci
6367db96d56Sopenharmony_ci    def testDotsOutput(self):
6377db96d56Sopenharmony_ci        self.assertEqual(self._run_test('testSuccess', 1), '.')
6387db96d56Sopenharmony_ci        self.assertEqual(self._run_test('testSkip', 1), 's')
6397db96d56Sopenharmony_ci        self.assertEqual(self._run_test('testFail', 1), 'F')
6407db96d56Sopenharmony_ci        self.assertEqual(self._run_test('testError', 1), 'E')
6417db96d56Sopenharmony_ci        self.assertEqual(self._run_test('testExpectedFailure', 1), 'x')
6427db96d56Sopenharmony_ci        self.assertEqual(self._run_test('testUnexpectedSuccess', 1), 'u')
6437db96d56Sopenharmony_ci
6447db96d56Sopenharmony_ci    def testLongOutput(self):
6457db96d56Sopenharmony_ci        classname = f'{__name__}.{self.Test.__qualname__}'
6467db96d56Sopenharmony_ci        self.assertEqual(self._run_test('testSuccess', 2),
6477db96d56Sopenharmony_ci                         f'testSuccess ({classname}.testSuccess) ... ok\n')
6487db96d56Sopenharmony_ci        self.assertEqual(self._run_test('testSkip', 2),
6497db96d56Sopenharmony_ci                         f"testSkip ({classname}.testSkip) ... skipped 'skip'\n")
6507db96d56Sopenharmony_ci        self.assertEqual(self._run_test('testFail', 2),
6517db96d56Sopenharmony_ci                         f'testFail ({classname}.testFail) ... FAIL\n')
6527db96d56Sopenharmony_ci        self.assertEqual(self._run_test('testError', 2),
6537db96d56Sopenharmony_ci                         f'testError ({classname}.testError) ... ERROR\n')
6547db96d56Sopenharmony_ci        self.assertEqual(self._run_test('testExpectedFailure', 2),
6557db96d56Sopenharmony_ci                         f'testExpectedFailure ({classname}.testExpectedFailure) ... expected failure\n')
6567db96d56Sopenharmony_ci        self.assertEqual(self._run_test('testUnexpectedSuccess', 2),
6577db96d56Sopenharmony_ci                         f'testUnexpectedSuccess ({classname}.testUnexpectedSuccess) ... unexpected success\n')
6587db96d56Sopenharmony_ci
6597db96d56Sopenharmony_ci    def testDotsOutputSubTestSuccess(self):
6607db96d56Sopenharmony_ci        self.assertEqual(self._run_test('testSubTestSuccess', 1), '.')
6617db96d56Sopenharmony_ci
6627db96d56Sopenharmony_ci    def testLongOutputSubTestSuccess(self):
6637db96d56Sopenharmony_ci        classname = f'{__name__}.{self.Test.__qualname__}'
6647db96d56Sopenharmony_ci        self.assertEqual(self._run_test('testSubTestSuccess', 2),
6657db96d56Sopenharmony_ci                         f'testSubTestSuccess ({classname}.testSubTestSuccess) ... ok\n')
6667db96d56Sopenharmony_ci
6677db96d56Sopenharmony_ci    def testDotsOutputSubTestMixed(self):
6687db96d56Sopenharmony_ci        self.assertEqual(self._run_test('testSubTestMixed', 1), 'sFE')
6697db96d56Sopenharmony_ci
6707db96d56Sopenharmony_ci    def testLongOutputSubTestMixed(self):
6717db96d56Sopenharmony_ci        classname = f'{__name__}.{self.Test.__qualname__}'
6727db96d56Sopenharmony_ci        self.assertEqual(self._run_test('testSubTestMixed', 2),
6737db96d56Sopenharmony_ci                f'testSubTestMixed ({classname}.testSubTestMixed) ... \n'
6747db96d56Sopenharmony_ci                f"  testSubTestMixed ({classname}.testSubTestMixed) [skip] (b=2) ... skipped 'skip'\n"
6757db96d56Sopenharmony_ci                f'  testSubTestMixed ({classname}.testSubTestMixed) [fail] (c=3) ... FAIL\n'
6767db96d56Sopenharmony_ci                f'  testSubTestMixed ({classname}.testSubTestMixed) [error] (d=4) ... ERROR\n')
6777db96d56Sopenharmony_ci
6787db96d56Sopenharmony_ci    def testDotsOutputTearDownFail(self):
6797db96d56Sopenharmony_ci        out = self._run_test('testSuccess', 1, AssertionError('fail'))
6807db96d56Sopenharmony_ci        self.assertEqual(out, 'F')
6817db96d56Sopenharmony_ci        out = self._run_test('testError', 1, AssertionError('fail'))
6827db96d56Sopenharmony_ci        self.assertEqual(out, 'EF')
6837db96d56Sopenharmony_ci        out = self._run_test('testFail', 1, Exception('error'))
6847db96d56Sopenharmony_ci        self.assertEqual(out, 'FE')
6857db96d56Sopenharmony_ci        out = self._run_test('testSkip', 1, AssertionError('fail'))
6867db96d56Sopenharmony_ci        self.assertEqual(out, 'sF')
6877db96d56Sopenharmony_ci
6887db96d56Sopenharmony_ci    def testLongOutputTearDownFail(self):
6897db96d56Sopenharmony_ci        classname = f'{__name__}.{self.Test.__qualname__}'
6907db96d56Sopenharmony_ci        out = self._run_test('testSuccess', 2, AssertionError('fail'))
6917db96d56Sopenharmony_ci        self.assertEqual(out,
6927db96d56Sopenharmony_ci                         f'testSuccess ({classname}.testSuccess) ... FAIL\n')
6937db96d56Sopenharmony_ci        out = self._run_test('testError', 2, AssertionError('fail'))
6947db96d56Sopenharmony_ci        self.assertEqual(out,
6957db96d56Sopenharmony_ci                         f'testError ({classname}.testError) ... ERROR\n'
6967db96d56Sopenharmony_ci                         f'testError ({classname}.testError) ... FAIL\n')
6977db96d56Sopenharmony_ci        out = self._run_test('testFail', 2, Exception('error'))
6987db96d56Sopenharmony_ci        self.assertEqual(out,
6997db96d56Sopenharmony_ci                         f'testFail ({classname}.testFail) ... FAIL\n'
7007db96d56Sopenharmony_ci                         f'testFail ({classname}.testFail) ... ERROR\n')
7017db96d56Sopenharmony_ci        out = self._run_test('testSkip', 2, AssertionError('fail'))
7027db96d56Sopenharmony_ci        self.assertEqual(out,
7037db96d56Sopenharmony_ci                         f"testSkip ({classname}.testSkip) ... skipped 'skip'\n"
7047db96d56Sopenharmony_ci                         f'testSkip ({classname}.testSkip) ... FAIL\n')
7057db96d56Sopenharmony_ci
7067db96d56Sopenharmony_ci
7077db96d56Sopenharmony_ciclassDict = dict(unittest.TestResult.__dict__)
7087db96d56Sopenharmony_cifor m in ('addSkip', 'addExpectedFailure', 'addUnexpectedSuccess',
7097db96d56Sopenharmony_ci           '__init__'):
7107db96d56Sopenharmony_ci    del classDict[m]
7117db96d56Sopenharmony_ci
7127db96d56Sopenharmony_cidef __init__(self, stream=None, descriptions=None, verbosity=None):
7137db96d56Sopenharmony_ci    self.failures = []
7147db96d56Sopenharmony_ci    self.errors = []
7157db96d56Sopenharmony_ci    self.testsRun = 0
7167db96d56Sopenharmony_ci    self.shouldStop = False
7177db96d56Sopenharmony_ci    self.buffer = False
7187db96d56Sopenharmony_ci    self.tb_locals = False
7197db96d56Sopenharmony_ci
7207db96d56Sopenharmony_ciclassDict['__init__'] = __init__
7217db96d56Sopenharmony_ciOldResult = type('OldResult', (object,), classDict)
7227db96d56Sopenharmony_ci
7237db96d56Sopenharmony_ciclass Test_OldTestResult(unittest.TestCase):
7247db96d56Sopenharmony_ci
7257db96d56Sopenharmony_ci    def assertOldResultWarning(self, test, failures):
7267db96d56Sopenharmony_ci        with warnings_helper.check_warnings(
7277db96d56Sopenharmony_ci                ("TestResult has no add.+ method,", RuntimeWarning)):
7287db96d56Sopenharmony_ci            result = OldResult()
7297db96d56Sopenharmony_ci            test.run(result)
7307db96d56Sopenharmony_ci            self.assertEqual(len(result.failures), failures)
7317db96d56Sopenharmony_ci
7327db96d56Sopenharmony_ci    def testOldTestResult(self):
7337db96d56Sopenharmony_ci        class Test(unittest.TestCase):
7347db96d56Sopenharmony_ci            def testSkip(self):
7357db96d56Sopenharmony_ci                self.skipTest('foobar')
7367db96d56Sopenharmony_ci            @unittest.expectedFailure
7377db96d56Sopenharmony_ci            def testExpectedFail(self):
7387db96d56Sopenharmony_ci                raise TypeError
7397db96d56Sopenharmony_ci            @unittest.expectedFailure
7407db96d56Sopenharmony_ci            def testUnexpectedSuccess(self):
7417db96d56Sopenharmony_ci                pass
7427db96d56Sopenharmony_ci
7437db96d56Sopenharmony_ci        for test_name, should_pass in (('testSkip', True),
7447db96d56Sopenharmony_ci                                       ('testExpectedFail', True),
7457db96d56Sopenharmony_ci                                       ('testUnexpectedSuccess', False)):
7467db96d56Sopenharmony_ci            test = Test(test_name)
7477db96d56Sopenharmony_ci            self.assertOldResultWarning(test, int(not should_pass))
7487db96d56Sopenharmony_ci
7497db96d56Sopenharmony_ci    def testOldTestTesultSetup(self):
7507db96d56Sopenharmony_ci        class Test(unittest.TestCase):
7517db96d56Sopenharmony_ci            def setUp(self):
7527db96d56Sopenharmony_ci                self.skipTest('no reason')
7537db96d56Sopenharmony_ci            def testFoo(self):
7547db96d56Sopenharmony_ci                pass
7557db96d56Sopenharmony_ci        self.assertOldResultWarning(Test('testFoo'), 0)
7567db96d56Sopenharmony_ci
7577db96d56Sopenharmony_ci    def testOldTestResultClass(self):
7587db96d56Sopenharmony_ci        @unittest.skip('no reason')
7597db96d56Sopenharmony_ci        class Test(unittest.TestCase):
7607db96d56Sopenharmony_ci            def testFoo(self):
7617db96d56Sopenharmony_ci                pass
7627db96d56Sopenharmony_ci        self.assertOldResultWarning(Test('testFoo'), 0)
7637db96d56Sopenharmony_ci
7647db96d56Sopenharmony_ci    def testOldResultWithRunner(self):
7657db96d56Sopenharmony_ci        class Test(unittest.TestCase):
7667db96d56Sopenharmony_ci            def testFoo(self):
7677db96d56Sopenharmony_ci                pass
7687db96d56Sopenharmony_ci        runner = unittest.TextTestRunner(resultclass=OldResult,
7697db96d56Sopenharmony_ci                                          stream=io.StringIO())
7707db96d56Sopenharmony_ci        # This will raise an exception if TextTestRunner can't handle old
7717db96d56Sopenharmony_ci        # test result objects
7727db96d56Sopenharmony_ci        runner.run(Test('testFoo'))
7737db96d56Sopenharmony_ci
7747db96d56Sopenharmony_ci
7757db96d56Sopenharmony_ciclass TestOutputBuffering(unittest.TestCase):
7767db96d56Sopenharmony_ci
7777db96d56Sopenharmony_ci    def setUp(self):
7787db96d56Sopenharmony_ci        self._real_out = sys.stdout
7797db96d56Sopenharmony_ci        self._real_err = sys.stderr
7807db96d56Sopenharmony_ci
7817db96d56Sopenharmony_ci    def tearDown(self):
7827db96d56Sopenharmony_ci        sys.stdout = self._real_out
7837db96d56Sopenharmony_ci        sys.stderr = self._real_err
7847db96d56Sopenharmony_ci
7857db96d56Sopenharmony_ci    def testBufferOutputOff(self):
7867db96d56Sopenharmony_ci        real_out = self._real_out
7877db96d56Sopenharmony_ci        real_err = self._real_err
7887db96d56Sopenharmony_ci
7897db96d56Sopenharmony_ci        result = unittest.TestResult()
7907db96d56Sopenharmony_ci        self.assertFalse(result.buffer)
7917db96d56Sopenharmony_ci
7927db96d56Sopenharmony_ci        self.assertIs(real_out, sys.stdout)
7937db96d56Sopenharmony_ci        self.assertIs(real_err, sys.stderr)
7947db96d56Sopenharmony_ci
7957db96d56Sopenharmony_ci        result.startTest(self)
7967db96d56Sopenharmony_ci
7977db96d56Sopenharmony_ci        self.assertIs(real_out, sys.stdout)
7987db96d56Sopenharmony_ci        self.assertIs(real_err, sys.stderr)
7997db96d56Sopenharmony_ci
8007db96d56Sopenharmony_ci    def testBufferOutputStartTestAddSuccess(self):
8017db96d56Sopenharmony_ci        real_out = self._real_out
8027db96d56Sopenharmony_ci        real_err = self._real_err
8037db96d56Sopenharmony_ci
8047db96d56Sopenharmony_ci        result = unittest.TestResult()
8057db96d56Sopenharmony_ci        self.assertFalse(result.buffer)
8067db96d56Sopenharmony_ci
8077db96d56Sopenharmony_ci        result.buffer = True
8087db96d56Sopenharmony_ci
8097db96d56Sopenharmony_ci        self.assertIs(real_out, sys.stdout)
8107db96d56Sopenharmony_ci        self.assertIs(real_err, sys.stderr)
8117db96d56Sopenharmony_ci
8127db96d56Sopenharmony_ci        result.startTest(self)
8137db96d56Sopenharmony_ci
8147db96d56Sopenharmony_ci        self.assertIsNot(real_out, sys.stdout)
8157db96d56Sopenharmony_ci        self.assertIsNot(real_err, sys.stderr)
8167db96d56Sopenharmony_ci        self.assertIsInstance(sys.stdout, io.StringIO)
8177db96d56Sopenharmony_ci        self.assertIsInstance(sys.stderr, io.StringIO)
8187db96d56Sopenharmony_ci        self.assertIsNot(sys.stdout, sys.stderr)
8197db96d56Sopenharmony_ci
8207db96d56Sopenharmony_ci        out_stream = sys.stdout
8217db96d56Sopenharmony_ci        err_stream = sys.stderr
8227db96d56Sopenharmony_ci
8237db96d56Sopenharmony_ci        result._original_stdout = io.StringIO()
8247db96d56Sopenharmony_ci        result._original_stderr = io.StringIO()
8257db96d56Sopenharmony_ci
8267db96d56Sopenharmony_ci        print('foo')
8277db96d56Sopenharmony_ci        print('bar', file=sys.stderr)
8287db96d56Sopenharmony_ci
8297db96d56Sopenharmony_ci        self.assertEqual(out_stream.getvalue(), 'foo\n')
8307db96d56Sopenharmony_ci        self.assertEqual(err_stream.getvalue(), 'bar\n')
8317db96d56Sopenharmony_ci
8327db96d56Sopenharmony_ci        self.assertEqual(result._original_stdout.getvalue(), '')
8337db96d56Sopenharmony_ci        self.assertEqual(result._original_stderr.getvalue(), '')
8347db96d56Sopenharmony_ci
8357db96d56Sopenharmony_ci        result.addSuccess(self)
8367db96d56Sopenharmony_ci        result.stopTest(self)
8377db96d56Sopenharmony_ci
8387db96d56Sopenharmony_ci        self.assertIs(sys.stdout, result._original_stdout)
8397db96d56Sopenharmony_ci        self.assertIs(sys.stderr, result._original_stderr)
8407db96d56Sopenharmony_ci
8417db96d56Sopenharmony_ci        self.assertEqual(result._original_stdout.getvalue(), '')
8427db96d56Sopenharmony_ci        self.assertEqual(result._original_stderr.getvalue(), '')
8437db96d56Sopenharmony_ci
8447db96d56Sopenharmony_ci        self.assertEqual(out_stream.getvalue(), '')
8457db96d56Sopenharmony_ci        self.assertEqual(err_stream.getvalue(), '')
8467db96d56Sopenharmony_ci
8477db96d56Sopenharmony_ci
8487db96d56Sopenharmony_ci    def getStartedResult(self):
8497db96d56Sopenharmony_ci        result = unittest.TestResult()
8507db96d56Sopenharmony_ci        result.buffer = True
8517db96d56Sopenharmony_ci        result.startTest(self)
8527db96d56Sopenharmony_ci        return result
8537db96d56Sopenharmony_ci
8547db96d56Sopenharmony_ci    def testBufferOutputAddErrorOrFailure(self):
8557db96d56Sopenharmony_ci        unittest.result.traceback = MockTraceback
8567db96d56Sopenharmony_ci        self.addCleanup(restore_traceback)
8577db96d56Sopenharmony_ci
8587db96d56Sopenharmony_ci        for message_attr, add_attr, include_error in [
8597db96d56Sopenharmony_ci            ('errors', 'addError', True),
8607db96d56Sopenharmony_ci            ('failures', 'addFailure', False),
8617db96d56Sopenharmony_ci            ('errors', 'addError', True),
8627db96d56Sopenharmony_ci            ('failures', 'addFailure', False)
8637db96d56Sopenharmony_ci        ]:
8647db96d56Sopenharmony_ci            result = self.getStartedResult()
8657db96d56Sopenharmony_ci            buffered_out = sys.stdout
8667db96d56Sopenharmony_ci            buffered_err = sys.stderr
8677db96d56Sopenharmony_ci            result._original_stdout = io.StringIO()
8687db96d56Sopenharmony_ci            result._original_stderr = io.StringIO()
8697db96d56Sopenharmony_ci
8707db96d56Sopenharmony_ci            print('foo', file=sys.stdout)
8717db96d56Sopenharmony_ci            if include_error:
8727db96d56Sopenharmony_ci                print('bar', file=sys.stderr)
8737db96d56Sopenharmony_ci
8747db96d56Sopenharmony_ci
8757db96d56Sopenharmony_ci            addFunction = getattr(result, add_attr)
8767db96d56Sopenharmony_ci            addFunction(self, (None, None, None))
8777db96d56Sopenharmony_ci            result.stopTest(self)
8787db96d56Sopenharmony_ci
8797db96d56Sopenharmony_ci            result_list = getattr(result, message_attr)
8807db96d56Sopenharmony_ci            self.assertEqual(len(result_list), 1)
8817db96d56Sopenharmony_ci
8827db96d56Sopenharmony_ci            test, message = result_list[0]
8837db96d56Sopenharmony_ci            expectedOutMessage = textwrap.dedent("""
8847db96d56Sopenharmony_ci                Stdout:
8857db96d56Sopenharmony_ci                foo
8867db96d56Sopenharmony_ci            """)
8877db96d56Sopenharmony_ci            expectedErrMessage = ''
8887db96d56Sopenharmony_ci            if include_error:
8897db96d56Sopenharmony_ci                expectedErrMessage = textwrap.dedent("""
8907db96d56Sopenharmony_ci                Stderr:
8917db96d56Sopenharmony_ci                bar
8927db96d56Sopenharmony_ci            """)
8937db96d56Sopenharmony_ci
8947db96d56Sopenharmony_ci            expectedFullMessage = 'A traceback%s%s' % (expectedOutMessage, expectedErrMessage)
8957db96d56Sopenharmony_ci
8967db96d56Sopenharmony_ci            self.assertIs(test, self)
8977db96d56Sopenharmony_ci            self.assertEqual(result._original_stdout.getvalue(), expectedOutMessage)
8987db96d56Sopenharmony_ci            self.assertEqual(result._original_stderr.getvalue(), expectedErrMessage)
8997db96d56Sopenharmony_ci            self.assertMultiLineEqual(message, expectedFullMessage)
9007db96d56Sopenharmony_ci
9017db96d56Sopenharmony_ci    def testBufferSetUp(self):
9027db96d56Sopenharmony_ci        with captured_stdout() as stdout:
9037db96d56Sopenharmony_ci            result = unittest.TestResult()
9047db96d56Sopenharmony_ci        result.buffer = True
9057db96d56Sopenharmony_ci
9067db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
9077db96d56Sopenharmony_ci            def setUp(self):
9087db96d56Sopenharmony_ci                print('set up')
9097db96d56Sopenharmony_ci                1/0
9107db96d56Sopenharmony_ci            def test_foo(self):
9117db96d56Sopenharmony_ci                pass
9127db96d56Sopenharmony_ci        suite = unittest.TestSuite([Foo('test_foo')])
9137db96d56Sopenharmony_ci        suite(result)
9147db96d56Sopenharmony_ci        expected_out = '\nStdout:\nset up\n'
9157db96d56Sopenharmony_ci        self.assertEqual(stdout.getvalue(), expected_out)
9167db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 1)
9177db96d56Sopenharmony_ci        description = f'test_foo ({strclass(Foo)}.test_foo)'
9187db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[0]
9197db96d56Sopenharmony_ci        self.assertEqual(str(test_case), description)
9207db96d56Sopenharmony_ci        self.assertIn('ZeroDivisionError: division by zero', formatted_exc)
9217db96d56Sopenharmony_ci        self.assertIn(expected_out, formatted_exc)
9227db96d56Sopenharmony_ci
9237db96d56Sopenharmony_ci    def testBufferTearDown(self):
9247db96d56Sopenharmony_ci        with captured_stdout() as stdout:
9257db96d56Sopenharmony_ci            result = unittest.TestResult()
9267db96d56Sopenharmony_ci        result.buffer = True
9277db96d56Sopenharmony_ci
9287db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
9297db96d56Sopenharmony_ci            def tearDown(self):
9307db96d56Sopenharmony_ci                print('tear down')
9317db96d56Sopenharmony_ci                1/0
9327db96d56Sopenharmony_ci            def test_foo(self):
9337db96d56Sopenharmony_ci                pass
9347db96d56Sopenharmony_ci        suite = unittest.TestSuite([Foo('test_foo')])
9357db96d56Sopenharmony_ci        suite(result)
9367db96d56Sopenharmony_ci        expected_out = '\nStdout:\ntear down\n'
9377db96d56Sopenharmony_ci        self.assertEqual(stdout.getvalue(), expected_out)
9387db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 1)
9397db96d56Sopenharmony_ci        description = f'test_foo ({strclass(Foo)}.test_foo)'
9407db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[0]
9417db96d56Sopenharmony_ci        self.assertEqual(str(test_case), description)
9427db96d56Sopenharmony_ci        self.assertIn('ZeroDivisionError: division by zero', formatted_exc)
9437db96d56Sopenharmony_ci        self.assertIn(expected_out, formatted_exc)
9447db96d56Sopenharmony_ci
9457db96d56Sopenharmony_ci    def testBufferDoCleanups(self):
9467db96d56Sopenharmony_ci        with captured_stdout() as stdout:
9477db96d56Sopenharmony_ci            result = unittest.TestResult()
9487db96d56Sopenharmony_ci        result.buffer = True
9497db96d56Sopenharmony_ci
9507db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
9517db96d56Sopenharmony_ci            def setUp(self):
9527db96d56Sopenharmony_ci                print('set up')
9537db96d56Sopenharmony_ci                self.addCleanup(bad_cleanup1)
9547db96d56Sopenharmony_ci                self.addCleanup(bad_cleanup2)
9557db96d56Sopenharmony_ci            def test_foo(self):
9567db96d56Sopenharmony_ci                pass
9577db96d56Sopenharmony_ci        suite = unittest.TestSuite([Foo('test_foo')])
9587db96d56Sopenharmony_ci        suite(result)
9597db96d56Sopenharmony_ci        expected_out = '\nStdout:\nset up\ndo cleanup2\ndo cleanup1\n'
9607db96d56Sopenharmony_ci        self.assertEqual(stdout.getvalue(), expected_out)
9617db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 2)
9627db96d56Sopenharmony_ci        description = f'test_foo ({strclass(Foo)}.test_foo)'
9637db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[0]
9647db96d56Sopenharmony_ci        self.assertEqual(str(test_case), description)
9657db96d56Sopenharmony_ci        self.assertIn('ValueError: bad cleanup2', formatted_exc)
9667db96d56Sopenharmony_ci        self.assertNotIn('TypeError', formatted_exc)
9677db96d56Sopenharmony_ci        self.assertIn('\nStdout:\nset up\ndo cleanup2\n', formatted_exc)
9687db96d56Sopenharmony_ci        self.assertNotIn('\ndo cleanup1\n', formatted_exc)
9697db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[1]
9707db96d56Sopenharmony_ci        self.assertEqual(str(test_case), description)
9717db96d56Sopenharmony_ci        self.assertIn('TypeError: bad cleanup1', formatted_exc)
9727db96d56Sopenharmony_ci        self.assertNotIn('ValueError', formatted_exc)
9737db96d56Sopenharmony_ci        self.assertIn(expected_out, formatted_exc)
9747db96d56Sopenharmony_ci
9757db96d56Sopenharmony_ci    def testBufferSetUp_DoCleanups(self):
9767db96d56Sopenharmony_ci        with captured_stdout() as stdout:
9777db96d56Sopenharmony_ci            result = unittest.TestResult()
9787db96d56Sopenharmony_ci        result.buffer = True
9797db96d56Sopenharmony_ci
9807db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
9817db96d56Sopenharmony_ci            def setUp(self):
9827db96d56Sopenharmony_ci                print('set up')
9837db96d56Sopenharmony_ci                self.addCleanup(bad_cleanup1)
9847db96d56Sopenharmony_ci                self.addCleanup(bad_cleanup2)
9857db96d56Sopenharmony_ci                1/0
9867db96d56Sopenharmony_ci            def test_foo(self):
9877db96d56Sopenharmony_ci                pass
9887db96d56Sopenharmony_ci        suite = unittest.TestSuite([Foo('test_foo')])
9897db96d56Sopenharmony_ci        suite(result)
9907db96d56Sopenharmony_ci        expected_out = '\nStdout:\nset up\ndo cleanup2\ndo cleanup1\n'
9917db96d56Sopenharmony_ci        self.assertEqual(stdout.getvalue(), expected_out)
9927db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 3)
9937db96d56Sopenharmony_ci        description = f'test_foo ({strclass(Foo)}.test_foo)'
9947db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[0]
9957db96d56Sopenharmony_ci        self.assertEqual(str(test_case), description)
9967db96d56Sopenharmony_ci        self.assertIn('ZeroDivisionError: division by zero', formatted_exc)
9977db96d56Sopenharmony_ci        self.assertNotIn('ValueError', formatted_exc)
9987db96d56Sopenharmony_ci        self.assertNotIn('TypeError', formatted_exc)
9997db96d56Sopenharmony_ci        self.assertIn('\nStdout:\nset up\n', formatted_exc)
10007db96d56Sopenharmony_ci        self.assertNotIn('\ndo cleanup2\n', formatted_exc)
10017db96d56Sopenharmony_ci        self.assertNotIn('\ndo cleanup1\n', formatted_exc)
10027db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[1]
10037db96d56Sopenharmony_ci        self.assertEqual(str(test_case), description)
10047db96d56Sopenharmony_ci        self.assertIn('ValueError: bad cleanup2', formatted_exc)
10057db96d56Sopenharmony_ci        self.assertNotIn('ZeroDivisionError', formatted_exc)
10067db96d56Sopenharmony_ci        self.assertNotIn('TypeError', formatted_exc)
10077db96d56Sopenharmony_ci        self.assertIn('\nStdout:\nset up\ndo cleanup2\n', formatted_exc)
10087db96d56Sopenharmony_ci        self.assertNotIn('\ndo cleanup1\n', formatted_exc)
10097db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[2]
10107db96d56Sopenharmony_ci        self.assertEqual(str(test_case), description)
10117db96d56Sopenharmony_ci        self.assertIn('TypeError: bad cleanup1', formatted_exc)
10127db96d56Sopenharmony_ci        self.assertNotIn('ZeroDivisionError', formatted_exc)
10137db96d56Sopenharmony_ci        self.assertNotIn('ValueError', formatted_exc)
10147db96d56Sopenharmony_ci        self.assertIn(expected_out, formatted_exc)
10157db96d56Sopenharmony_ci
10167db96d56Sopenharmony_ci    def testBufferTearDown_DoCleanups(self):
10177db96d56Sopenharmony_ci        with captured_stdout() as stdout:
10187db96d56Sopenharmony_ci            result = unittest.TestResult()
10197db96d56Sopenharmony_ci        result.buffer = True
10207db96d56Sopenharmony_ci
10217db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
10227db96d56Sopenharmony_ci            def setUp(self):
10237db96d56Sopenharmony_ci                print('set up')
10247db96d56Sopenharmony_ci                self.addCleanup(bad_cleanup1)
10257db96d56Sopenharmony_ci                self.addCleanup(bad_cleanup2)
10267db96d56Sopenharmony_ci            def tearDown(self):
10277db96d56Sopenharmony_ci                print('tear down')
10287db96d56Sopenharmony_ci                1/0
10297db96d56Sopenharmony_ci            def test_foo(self):
10307db96d56Sopenharmony_ci                pass
10317db96d56Sopenharmony_ci        suite = unittest.TestSuite([Foo('test_foo')])
10327db96d56Sopenharmony_ci        suite(result)
10337db96d56Sopenharmony_ci        expected_out = '\nStdout:\nset up\ntear down\ndo cleanup2\ndo cleanup1\n'
10347db96d56Sopenharmony_ci        self.assertEqual(stdout.getvalue(), expected_out)
10357db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 3)
10367db96d56Sopenharmony_ci        description = f'test_foo ({strclass(Foo)}.test_foo)'
10377db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[0]
10387db96d56Sopenharmony_ci        self.assertEqual(str(test_case), description)
10397db96d56Sopenharmony_ci        self.assertIn('ZeroDivisionError: division by zero', formatted_exc)
10407db96d56Sopenharmony_ci        self.assertNotIn('ValueError', formatted_exc)
10417db96d56Sopenharmony_ci        self.assertNotIn('TypeError', formatted_exc)
10427db96d56Sopenharmony_ci        self.assertIn('\nStdout:\nset up\ntear down\n', formatted_exc)
10437db96d56Sopenharmony_ci        self.assertNotIn('\ndo cleanup2\n', formatted_exc)
10447db96d56Sopenharmony_ci        self.assertNotIn('\ndo cleanup1\n', formatted_exc)
10457db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[1]
10467db96d56Sopenharmony_ci        self.assertEqual(str(test_case), description)
10477db96d56Sopenharmony_ci        self.assertIn('ValueError: bad cleanup2', formatted_exc)
10487db96d56Sopenharmony_ci        self.assertNotIn('ZeroDivisionError', formatted_exc)
10497db96d56Sopenharmony_ci        self.assertNotIn('TypeError', formatted_exc)
10507db96d56Sopenharmony_ci        self.assertIn('\nStdout:\nset up\ntear down\ndo cleanup2\n', formatted_exc)
10517db96d56Sopenharmony_ci        self.assertNotIn('\ndo cleanup1\n', formatted_exc)
10527db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[2]
10537db96d56Sopenharmony_ci        self.assertEqual(str(test_case), description)
10547db96d56Sopenharmony_ci        self.assertIn('TypeError: bad cleanup1', formatted_exc)
10557db96d56Sopenharmony_ci        self.assertNotIn('ZeroDivisionError', formatted_exc)
10567db96d56Sopenharmony_ci        self.assertNotIn('ValueError', formatted_exc)
10577db96d56Sopenharmony_ci        self.assertIn(expected_out, formatted_exc)
10587db96d56Sopenharmony_ci
10597db96d56Sopenharmony_ci    def testBufferSetupClass(self):
10607db96d56Sopenharmony_ci        with captured_stdout() as stdout:
10617db96d56Sopenharmony_ci            result = unittest.TestResult()
10627db96d56Sopenharmony_ci        result.buffer = True
10637db96d56Sopenharmony_ci
10647db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
10657db96d56Sopenharmony_ci            @classmethod
10667db96d56Sopenharmony_ci            def setUpClass(cls):
10677db96d56Sopenharmony_ci                print('set up class')
10687db96d56Sopenharmony_ci                1/0
10697db96d56Sopenharmony_ci            def test_foo(self):
10707db96d56Sopenharmony_ci                pass
10717db96d56Sopenharmony_ci        suite = unittest.TestSuite([Foo('test_foo')])
10727db96d56Sopenharmony_ci        suite(result)
10737db96d56Sopenharmony_ci        expected_out = '\nStdout:\nset up class\n'
10747db96d56Sopenharmony_ci        self.assertEqual(stdout.getvalue(), expected_out)
10757db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 1)
10767db96d56Sopenharmony_ci        description = f'setUpClass ({strclass(Foo)})'
10777db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[0]
10787db96d56Sopenharmony_ci        self.assertEqual(test_case.description, description)
10797db96d56Sopenharmony_ci        self.assertIn('ZeroDivisionError: division by zero', formatted_exc)
10807db96d56Sopenharmony_ci        self.assertIn(expected_out, formatted_exc)
10817db96d56Sopenharmony_ci
10827db96d56Sopenharmony_ci    def testBufferTearDownClass(self):
10837db96d56Sopenharmony_ci        with captured_stdout() as stdout:
10847db96d56Sopenharmony_ci            result = unittest.TestResult()
10857db96d56Sopenharmony_ci        result.buffer = True
10867db96d56Sopenharmony_ci
10877db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
10887db96d56Sopenharmony_ci            @classmethod
10897db96d56Sopenharmony_ci            def tearDownClass(cls):
10907db96d56Sopenharmony_ci                print('tear down class')
10917db96d56Sopenharmony_ci                1/0
10927db96d56Sopenharmony_ci            def test_foo(self):
10937db96d56Sopenharmony_ci                pass
10947db96d56Sopenharmony_ci        suite = unittest.TestSuite([Foo('test_foo')])
10957db96d56Sopenharmony_ci        suite(result)
10967db96d56Sopenharmony_ci        expected_out = '\nStdout:\ntear down class\n'
10977db96d56Sopenharmony_ci        self.assertEqual(stdout.getvalue(), expected_out)
10987db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 1)
10997db96d56Sopenharmony_ci        description = f'tearDownClass ({strclass(Foo)})'
11007db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[0]
11017db96d56Sopenharmony_ci        self.assertEqual(test_case.description, description)
11027db96d56Sopenharmony_ci        self.assertIn('ZeroDivisionError: division by zero', formatted_exc)
11037db96d56Sopenharmony_ci        self.assertIn(expected_out, formatted_exc)
11047db96d56Sopenharmony_ci
11057db96d56Sopenharmony_ci    def testBufferDoClassCleanups(self):
11067db96d56Sopenharmony_ci        with captured_stdout() as stdout:
11077db96d56Sopenharmony_ci            result = unittest.TestResult()
11087db96d56Sopenharmony_ci        result.buffer = True
11097db96d56Sopenharmony_ci
11107db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
11117db96d56Sopenharmony_ci            @classmethod
11127db96d56Sopenharmony_ci            def setUpClass(cls):
11137db96d56Sopenharmony_ci                print('set up class')
11147db96d56Sopenharmony_ci                cls.addClassCleanup(bad_cleanup1)
11157db96d56Sopenharmony_ci                cls.addClassCleanup(bad_cleanup2)
11167db96d56Sopenharmony_ci            @classmethod
11177db96d56Sopenharmony_ci            def tearDownClass(cls):
11187db96d56Sopenharmony_ci                print('tear down class')
11197db96d56Sopenharmony_ci            def test_foo(self):
11207db96d56Sopenharmony_ci                pass
11217db96d56Sopenharmony_ci        suite = unittest.TestSuite([Foo('test_foo')])
11227db96d56Sopenharmony_ci        suite(result)
11237db96d56Sopenharmony_ci        expected_out = '\nStdout:\ntear down class\ndo cleanup2\ndo cleanup1\n'
11247db96d56Sopenharmony_ci        self.assertEqual(stdout.getvalue(), expected_out)
11257db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 2)
11267db96d56Sopenharmony_ci        description = f'tearDownClass ({strclass(Foo)})'
11277db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[0]
11287db96d56Sopenharmony_ci        self.assertEqual(test_case.description, description)
11297db96d56Sopenharmony_ci        self.assertIn('ValueError: bad cleanup2', formatted_exc)
11307db96d56Sopenharmony_ci        self.assertNotIn('TypeError', formatted_exc)
11317db96d56Sopenharmony_ci        self.assertIn(expected_out, formatted_exc)
11327db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[1]
11337db96d56Sopenharmony_ci        self.assertEqual(test_case.description, description)
11347db96d56Sopenharmony_ci        self.assertIn('TypeError: bad cleanup1', formatted_exc)
11357db96d56Sopenharmony_ci        self.assertNotIn('ValueError', formatted_exc)
11367db96d56Sopenharmony_ci        self.assertIn(expected_out, formatted_exc)
11377db96d56Sopenharmony_ci
11387db96d56Sopenharmony_ci    def testBufferSetupClass_DoClassCleanups(self):
11397db96d56Sopenharmony_ci        with captured_stdout() as stdout:
11407db96d56Sopenharmony_ci            result = unittest.TestResult()
11417db96d56Sopenharmony_ci        result.buffer = True
11427db96d56Sopenharmony_ci
11437db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
11447db96d56Sopenharmony_ci            @classmethod
11457db96d56Sopenharmony_ci            def setUpClass(cls):
11467db96d56Sopenharmony_ci                print('set up class')
11477db96d56Sopenharmony_ci                cls.addClassCleanup(bad_cleanup1)
11487db96d56Sopenharmony_ci                cls.addClassCleanup(bad_cleanup2)
11497db96d56Sopenharmony_ci                1/0
11507db96d56Sopenharmony_ci            def test_foo(self):
11517db96d56Sopenharmony_ci                pass
11527db96d56Sopenharmony_ci        suite = unittest.TestSuite([Foo('test_foo')])
11537db96d56Sopenharmony_ci        suite(result)
11547db96d56Sopenharmony_ci        expected_out = '\nStdout:\nset up class\ndo cleanup2\ndo cleanup1\n'
11557db96d56Sopenharmony_ci        self.assertEqual(stdout.getvalue(), expected_out)
11567db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 3)
11577db96d56Sopenharmony_ci        description = f'setUpClass ({strclass(Foo)})'
11587db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[0]
11597db96d56Sopenharmony_ci        self.assertEqual(test_case.description, description)
11607db96d56Sopenharmony_ci        self.assertIn('ZeroDivisionError: division by zero', formatted_exc)
11617db96d56Sopenharmony_ci        self.assertNotIn('ValueError', formatted_exc)
11627db96d56Sopenharmony_ci        self.assertNotIn('TypeError', formatted_exc)
11637db96d56Sopenharmony_ci        self.assertIn('\nStdout:\nset up class\n', formatted_exc)
11647db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[1]
11657db96d56Sopenharmony_ci        self.assertEqual(test_case.description, description)
11667db96d56Sopenharmony_ci        self.assertIn('ValueError: bad cleanup2', formatted_exc)
11677db96d56Sopenharmony_ci        self.assertNotIn('ZeroDivisionError', formatted_exc)
11687db96d56Sopenharmony_ci        self.assertNotIn('TypeError', formatted_exc)
11697db96d56Sopenharmony_ci        self.assertIn(expected_out, formatted_exc)
11707db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[2]
11717db96d56Sopenharmony_ci        self.assertEqual(test_case.description, description)
11727db96d56Sopenharmony_ci        self.assertIn('TypeError: bad cleanup1', formatted_exc)
11737db96d56Sopenharmony_ci        self.assertNotIn('ZeroDivisionError', formatted_exc)
11747db96d56Sopenharmony_ci        self.assertNotIn('ValueError', formatted_exc)
11757db96d56Sopenharmony_ci        self.assertIn(expected_out, formatted_exc)
11767db96d56Sopenharmony_ci
11777db96d56Sopenharmony_ci    def testBufferTearDownClass_DoClassCleanups(self):
11787db96d56Sopenharmony_ci        with captured_stdout() as stdout:
11797db96d56Sopenharmony_ci            result = unittest.TestResult()
11807db96d56Sopenharmony_ci        result.buffer = True
11817db96d56Sopenharmony_ci
11827db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
11837db96d56Sopenharmony_ci            @classmethod
11847db96d56Sopenharmony_ci            def setUpClass(cls):
11857db96d56Sopenharmony_ci                print('set up class')
11867db96d56Sopenharmony_ci                cls.addClassCleanup(bad_cleanup1)
11877db96d56Sopenharmony_ci                cls.addClassCleanup(bad_cleanup2)
11887db96d56Sopenharmony_ci            @classmethod
11897db96d56Sopenharmony_ci            def tearDownClass(cls):
11907db96d56Sopenharmony_ci                print('tear down class')
11917db96d56Sopenharmony_ci                1/0
11927db96d56Sopenharmony_ci            def test_foo(self):
11937db96d56Sopenharmony_ci                pass
11947db96d56Sopenharmony_ci        suite = unittest.TestSuite([Foo('test_foo')])
11957db96d56Sopenharmony_ci        suite(result)
11967db96d56Sopenharmony_ci        expected_out = '\nStdout:\ntear down class\ndo cleanup2\ndo cleanup1\n'
11977db96d56Sopenharmony_ci        self.assertEqual(stdout.getvalue(), expected_out)
11987db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 3)
11997db96d56Sopenharmony_ci        description = f'tearDownClass ({strclass(Foo)})'
12007db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[0]
12017db96d56Sopenharmony_ci        self.assertEqual(test_case.description, description)
12027db96d56Sopenharmony_ci        self.assertIn('ZeroDivisionError: division by zero', formatted_exc)
12037db96d56Sopenharmony_ci        self.assertNotIn('ValueError', formatted_exc)
12047db96d56Sopenharmony_ci        self.assertNotIn('TypeError', formatted_exc)
12057db96d56Sopenharmony_ci        self.assertIn('\nStdout:\ntear down class\n', formatted_exc)
12067db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[1]
12077db96d56Sopenharmony_ci        self.assertEqual(test_case.description, description)
12087db96d56Sopenharmony_ci        self.assertIn('ValueError: bad cleanup2', formatted_exc)
12097db96d56Sopenharmony_ci        self.assertNotIn('ZeroDivisionError', formatted_exc)
12107db96d56Sopenharmony_ci        self.assertNotIn('TypeError', formatted_exc)
12117db96d56Sopenharmony_ci        self.assertIn(expected_out, formatted_exc)
12127db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[2]
12137db96d56Sopenharmony_ci        self.assertEqual(test_case.description, description)
12147db96d56Sopenharmony_ci        self.assertIn('TypeError: bad cleanup1', formatted_exc)
12157db96d56Sopenharmony_ci        self.assertNotIn('ZeroDivisionError', formatted_exc)
12167db96d56Sopenharmony_ci        self.assertNotIn('ValueError', formatted_exc)
12177db96d56Sopenharmony_ci        self.assertIn(expected_out, formatted_exc)
12187db96d56Sopenharmony_ci
12197db96d56Sopenharmony_ci    def testBufferSetUpModule(self):
12207db96d56Sopenharmony_ci        with captured_stdout() as stdout:
12217db96d56Sopenharmony_ci            result = unittest.TestResult()
12227db96d56Sopenharmony_ci        result.buffer = True
12237db96d56Sopenharmony_ci
12247db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
12257db96d56Sopenharmony_ci            def test_foo(self):
12267db96d56Sopenharmony_ci                pass
12277db96d56Sopenharmony_ci        class Module(object):
12287db96d56Sopenharmony_ci            @staticmethod
12297db96d56Sopenharmony_ci            def setUpModule():
12307db96d56Sopenharmony_ci                print('set up module')
12317db96d56Sopenharmony_ci                1/0
12327db96d56Sopenharmony_ci
12337db96d56Sopenharmony_ci        Foo.__module__ = 'Module'
12347db96d56Sopenharmony_ci        sys.modules['Module'] = Module
12357db96d56Sopenharmony_ci        self.addCleanup(sys.modules.pop, 'Module')
12367db96d56Sopenharmony_ci        suite = unittest.TestSuite([Foo('test_foo')])
12377db96d56Sopenharmony_ci        suite(result)
12387db96d56Sopenharmony_ci        expected_out = '\nStdout:\nset up module\n'
12397db96d56Sopenharmony_ci        self.assertEqual(stdout.getvalue(), expected_out)
12407db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 1)
12417db96d56Sopenharmony_ci        description = 'setUpModule (Module)'
12427db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[0]
12437db96d56Sopenharmony_ci        self.assertEqual(test_case.description, description)
12447db96d56Sopenharmony_ci        self.assertIn('ZeroDivisionError: division by zero', formatted_exc)
12457db96d56Sopenharmony_ci        self.assertIn(expected_out, formatted_exc)
12467db96d56Sopenharmony_ci
12477db96d56Sopenharmony_ci    def testBufferTearDownModule(self):
12487db96d56Sopenharmony_ci        with captured_stdout() as stdout:
12497db96d56Sopenharmony_ci            result = unittest.TestResult()
12507db96d56Sopenharmony_ci        result.buffer = True
12517db96d56Sopenharmony_ci
12527db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
12537db96d56Sopenharmony_ci            def test_foo(self):
12547db96d56Sopenharmony_ci                pass
12557db96d56Sopenharmony_ci        class Module(object):
12567db96d56Sopenharmony_ci            @staticmethod
12577db96d56Sopenharmony_ci            def tearDownModule():
12587db96d56Sopenharmony_ci                print('tear down module')
12597db96d56Sopenharmony_ci                1/0
12607db96d56Sopenharmony_ci
12617db96d56Sopenharmony_ci        Foo.__module__ = 'Module'
12627db96d56Sopenharmony_ci        sys.modules['Module'] = Module
12637db96d56Sopenharmony_ci        self.addCleanup(sys.modules.pop, 'Module')
12647db96d56Sopenharmony_ci        suite = unittest.TestSuite([Foo('test_foo')])
12657db96d56Sopenharmony_ci        suite(result)
12667db96d56Sopenharmony_ci        expected_out = '\nStdout:\ntear down module\n'
12677db96d56Sopenharmony_ci        self.assertEqual(stdout.getvalue(), expected_out)
12687db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 1)
12697db96d56Sopenharmony_ci        description = 'tearDownModule (Module)'
12707db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[0]
12717db96d56Sopenharmony_ci        self.assertEqual(test_case.description, description)
12727db96d56Sopenharmony_ci        self.assertIn('ZeroDivisionError: division by zero', formatted_exc)
12737db96d56Sopenharmony_ci        self.assertIn(expected_out, formatted_exc)
12747db96d56Sopenharmony_ci
12757db96d56Sopenharmony_ci    def testBufferDoModuleCleanups(self):
12767db96d56Sopenharmony_ci        with captured_stdout() as stdout:
12777db96d56Sopenharmony_ci            result = unittest.TestResult()
12787db96d56Sopenharmony_ci        result.buffer = True
12797db96d56Sopenharmony_ci
12807db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
12817db96d56Sopenharmony_ci            def test_foo(self):
12827db96d56Sopenharmony_ci                pass
12837db96d56Sopenharmony_ci        class Module(object):
12847db96d56Sopenharmony_ci            @staticmethod
12857db96d56Sopenharmony_ci            def setUpModule():
12867db96d56Sopenharmony_ci                print('set up module')
12877db96d56Sopenharmony_ci                unittest.addModuleCleanup(bad_cleanup1)
12887db96d56Sopenharmony_ci                unittest.addModuleCleanup(bad_cleanup2)
12897db96d56Sopenharmony_ci
12907db96d56Sopenharmony_ci        Foo.__module__ = 'Module'
12917db96d56Sopenharmony_ci        sys.modules['Module'] = Module
12927db96d56Sopenharmony_ci        self.addCleanup(sys.modules.pop, 'Module')
12937db96d56Sopenharmony_ci        suite = unittest.TestSuite([Foo('test_foo')])
12947db96d56Sopenharmony_ci        suite(result)
12957db96d56Sopenharmony_ci        expected_out = '\nStdout:\ndo cleanup2\ndo cleanup1\n'
12967db96d56Sopenharmony_ci        self.assertEqual(stdout.getvalue(), expected_out)
12977db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 1)
12987db96d56Sopenharmony_ci        description = 'tearDownModule (Module)'
12997db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[0]
13007db96d56Sopenharmony_ci        self.assertEqual(test_case.description, description)
13017db96d56Sopenharmony_ci        self.assertIn('ValueError: bad cleanup2', formatted_exc)
13027db96d56Sopenharmony_ci        self.assertNotIn('TypeError', formatted_exc)
13037db96d56Sopenharmony_ci        self.assertIn(expected_out, formatted_exc)
13047db96d56Sopenharmony_ci
13057db96d56Sopenharmony_ci    def testBufferSetUpModule_DoModuleCleanups(self):
13067db96d56Sopenharmony_ci        with captured_stdout() as stdout:
13077db96d56Sopenharmony_ci            result = unittest.TestResult()
13087db96d56Sopenharmony_ci        result.buffer = True
13097db96d56Sopenharmony_ci
13107db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
13117db96d56Sopenharmony_ci            def test_foo(self):
13127db96d56Sopenharmony_ci                pass
13137db96d56Sopenharmony_ci        class Module(object):
13147db96d56Sopenharmony_ci            @staticmethod
13157db96d56Sopenharmony_ci            def setUpModule():
13167db96d56Sopenharmony_ci                print('set up module')
13177db96d56Sopenharmony_ci                unittest.addModuleCleanup(bad_cleanup1)
13187db96d56Sopenharmony_ci                unittest.addModuleCleanup(bad_cleanup2)
13197db96d56Sopenharmony_ci                1/0
13207db96d56Sopenharmony_ci
13217db96d56Sopenharmony_ci        Foo.__module__ = 'Module'
13227db96d56Sopenharmony_ci        sys.modules['Module'] = Module
13237db96d56Sopenharmony_ci        self.addCleanup(sys.modules.pop, 'Module')
13247db96d56Sopenharmony_ci        suite = unittest.TestSuite([Foo('test_foo')])
13257db96d56Sopenharmony_ci        suite(result)
13267db96d56Sopenharmony_ci        expected_out = '\nStdout:\nset up module\ndo cleanup2\ndo cleanup1\n'
13277db96d56Sopenharmony_ci        self.assertEqual(stdout.getvalue(), expected_out)
13287db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 2)
13297db96d56Sopenharmony_ci        description = 'setUpModule (Module)'
13307db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[0]
13317db96d56Sopenharmony_ci        self.assertEqual(test_case.description, description)
13327db96d56Sopenharmony_ci        self.assertIn('ZeroDivisionError: division by zero', formatted_exc)
13337db96d56Sopenharmony_ci        self.assertNotIn('ValueError', formatted_exc)
13347db96d56Sopenharmony_ci        self.assertNotIn('TypeError', formatted_exc)
13357db96d56Sopenharmony_ci        self.assertIn('\nStdout:\nset up module\n', formatted_exc)
13367db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[1]
13377db96d56Sopenharmony_ci        self.assertIn(expected_out, formatted_exc)
13387db96d56Sopenharmony_ci        self.assertEqual(test_case.description, description)
13397db96d56Sopenharmony_ci        self.assertIn('ValueError: bad cleanup2', formatted_exc)
13407db96d56Sopenharmony_ci        self.assertNotIn('ZeroDivisionError', formatted_exc)
13417db96d56Sopenharmony_ci        self.assertNotIn('TypeError', formatted_exc)
13427db96d56Sopenharmony_ci        self.assertIn(expected_out, formatted_exc)
13437db96d56Sopenharmony_ci
13447db96d56Sopenharmony_ci    def testBufferTearDownModule_DoModuleCleanups(self):
13457db96d56Sopenharmony_ci        with captured_stdout() as stdout:
13467db96d56Sopenharmony_ci            result = unittest.TestResult()
13477db96d56Sopenharmony_ci        result.buffer = True
13487db96d56Sopenharmony_ci
13497db96d56Sopenharmony_ci        class Foo(unittest.TestCase):
13507db96d56Sopenharmony_ci            def test_foo(self):
13517db96d56Sopenharmony_ci                pass
13527db96d56Sopenharmony_ci        class Module(object):
13537db96d56Sopenharmony_ci            @staticmethod
13547db96d56Sopenharmony_ci            def setUpModule():
13557db96d56Sopenharmony_ci                print('set up module')
13567db96d56Sopenharmony_ci                unittest.addModuleCleanup(bad_cleanup1)
13577db96d56Sopenharmony_ci                unittest.addModuleCleanup(bad_cleanup2)
13587db96d56Sopenharmony_ci            @staticmethod
13597db96d56Sopenharmony_ci            def tearDownModule():
13607db96d56Sopenharmony_ci                print('tear down module')
13617db96d56Sopenharmony_ci                1/0
13627db96d56Sopenharmony_ci
13637db96d56Sopenharmony_ci        Foo.__module__ = 'Module'
13647db96d56Sopenharmony_ci        sys.modules['Module'] = Module
13657db96d56Sopenharmony_ci        self.addCleanup(sys.modules.pop, 'Module')
13667db96d56Sopenharmony_ci        suite = unittest.TestSuite([Foo('test_foo')])
13677db96d56Sopenharmony_ci        suite(result)
13687db96d56Sopenharmony_ci        expected_out = '\nStdout:\ntear down module\ndo cleanup2\ndo cleanup1\n'
13697db96d56Sopenharmony_ci        self.assertEqual(stdout.getvalue(), expected_out)
13707db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 2)
13717db96d56Sopenharmony_ci        description = 'tearDownModule (Module)'
13727db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[0]
13737db96d56Sopenharmony_ci        self.assertEqual(test_case.description, description)
13747db96d56Sopenharmony_ci        self.assertIn('ZeroDivisionError: division by zero', formatted_exc)
13757db96d56Sopenharmony_ci        self.assertNotIn('ValueError', formatted_exc)
13767db96d56Sopenharmony_ci        self.assertNotIn('TypeError', formatted_exc)
13777db96d56Sopenharmony_ci        self.assertIn('\nStdout:\ntear down module\n', formatted_exc)
13787db96d56Sopenharmony_ci        test_case, formatted_exc = result.errors[1]
13797db96d56Sopenharmony_ci        self.assertEqual(test_case.description, description)
13807db96d56Sopenharmony_ci        self.assertIn('ValueError: bad cleanup2', formatted_exc)
13817db96d56Sopenharmony_ci        self.assertNotIn('ZeroDivisionError', formatted_exc)
13827db96d56Sopenharmony_ci        self.assertNotIn('TypeError', formatted_exc)
13837db96d56Sopenharmony_ci        self.assertIn(expected_out, formatted_exc)
13847db96d56Sopenharmony_ci
13857db96d56Sopenharmony_ci
13867db96d56Sopenharmony_ciif __name__ == '__main__':
13877db96d56Sopenharmony_ci    unittest.main()
1388