17db96d56Sopenharmony_ciimport io
27db96d56Sopenharmony_ciimport sys
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ciimport unittest
57db96d56Sopenharmony_ci
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_cidef resultFactory(*_):
87db96d56Sopenharmony_ci    return unittest.TestResult()
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ciclass TestSetups(unittest.TestCase):
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ci    def getRunner(self):
147db96d56Sopenharmony_ci        return unittest.TextTestRunner(resultclass=resultFactory,
157db96d56Sopenharmony_ci                                          stream=io.StringIO())
167db96d56Sopenharmony_ci    def runTests(self, *cases):
177db96d56Sopenharmony_ci        suite = unittest.TestSuite()
187db96d56Sopenharmony_ci        for case in cases:
197db96d56Sopenharmony_ci            tests = unittest.defaultTestLoader.loadTestsFromTestCase(case)
207db96d56Sopenharmony_ci            suite.addTests(tests)
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ci        runner = self.getRunner()
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci        # creating a nested suite exposes some potential bugs
257db96d56Sopenharmony_ci        realSuite = unittest.TestSuite()
267db96d56Sopenharmony_ci        realSuite.addTest(suite)
277db96d56Sopenharmony_ci        # adding empty suites to the end exposes potential bugs
287db96d56Sopenharmony_ci        suite.addTest(unittest.TestSuite())
297db96d56Sopenharmony_ci        realSuite.addTest(unittest.TestSuite())
307db96d56Sopenharmony_ci        return runner.run(realSuite)
317db96d56Sopenharmony_ci
327db96d56Sopenharmony_ci    def test_setup_class(self):
337db96d56Sopenharmony_ci        class Test(unittest.TestCase):
347db96d56Sopenharmony_ci            setUpCalled = 0
357db96d56Sopenharmony_ci            @classmethod
367db96d56Sopenharmony_ci            def setUpClass(cls):
377db96d56Sopenharmony_ci                Test.setUpCalled += 1
387db96d56Sopenharmony_ci                unittest.TestCase.setUpClass()
397db96d56Sopenharmony_ci            def test_one(self):
407db96d56Sopenharmony_ci                pass
417db96d56Sopenharmony_ci            def test_two(self):
427db96d56Sopenharmony_ci                pass
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ci        result = self.runTests(Test)
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ci        self.assertEqual(Test.setUpCalled, 1)
477db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 2)
487db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 0)
497db96d56Sopenharmony_ci
507db96d56Sopenharmony_ci    def test_teardown_class(self):
517db96d56Sopenharmony_ci        class Test(unittest.TestCase):
527db96d56Sopenharmony_ci            tearDownCalled = 0
537db96d56Sopenharmony_ci            @classmethod
547db96d56Sopenharmony_ci            def tearDownClass(cls):
557db96d56Sopenharmony_ci                Test.tearDownCalled += 1
567db96d56Sopenharmony_ci                unittest.TestCase.tearDownClass()
577db96d56Sopenharmony_ci            def test_one(self):
587db96d56Sopenharmony_ci                pass
597db96d56Sopenharmony_ci            def test_two(self):
607db96d56Sopenharmony_ci                pass
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci        result = self.runTests(Test)
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ci        self.assertEqual(Test.tearDownCalled, 1)
657db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 2)
667db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 0)
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ci    def test_teardown_class_two_classes(self):
697db96d56Sopenharmony_ci        class Test(unittest.TestCase):
707db96d56Sopenharmony_ci            tearDownCalled = 0
717db96d56Sopenharmony_ci            @classmethod
727db96d56Sopenharmony_ci            def tearDownClass(cls):
737db96d56Sopenharmony_ci                Test.tearDownCalled += 1
747db96d56Sopenharmony_ci                unittest.TestCase.tearDownClass()
757db96d56Sopenharmony_ci            def test_one(self):
767db96d56Sopenharmony_ci                pass
777db96d56Sopenharmony_ci            def test_two(self):
787db96d56Sopenharmony_ci                pass
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ci        class Test2(unittest.TestCase):
817db96d56Sopenharmony_ci            tearDownCalled = 0
827db96d56Sopenharmony_ci            @classmethod
837db96d56Sopenharmony_ci            def tearDownClass(cls):
847db96d56Sopenharmony_ci                Test2.tearDownCalled += 1
857db96d56Sopenharmony_ci                unittest.TestCase.tearDownClass()
867db96d56Sopenharmony_ci            def test_one(self):
877db96d56Sopenharmony_ci                pass
887db96d56Sopenharmony_ci            def test_two(self):
897db96d56Sopenharmony_ci                pass
907db96d56Sopenharmony_ci
917db96d56Sopenharmony_ci        result = self.runTests(Test, Test2)
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci        self.assertEqual(Test.tearDownCalled, 1)
947db96d56Sopenharmony_ci        self.assertEqual(Test2.tearDownCalled, 1)
957db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 4)
967db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 0)
977db96d56Sopenharmony_ci
987db96d56Sopenharmony_ci    def test_error_in_setupclass(self):
997db96d56Sopenharmony_ci        class BrokenTest(unittest.TestCase):
1007db96d56Sopenharmony_ci            @classmethod
1017db96d56Sopenharmony_ci            def setUpClass(cls):
1027db96d56Sopenharmony_ci                raise TypeError('foo')
1037db96d56Sopenharmony_ci            def test_one(self):
1047db96d56Sopenharmony_ci                pass
1057db96d56Sopenharmony_ci            def test_two(self):
1067db96d56Sopenharmony_ci                pass
1077db96d56Sopenharmony_ci
1087db96d56Sopenharmony_ci        result = self.runTests(BrokenTest)
1097db96d56Sopenharmony_ci
1107db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 0)
1117db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 1)
1127db96d56Sopenharmony_ci        error, _ = result.errors[0]
1137db96d56Sopenharmony_ci        self.assertEqual(str(error),
1147db96d56Sopenharmony_ci                    'setUpClass (%s.%s)' % (__name__, BrokenTest.__qualname__))
1157db96d56Sopenharmony_ci
1167db96d56Sopenharmony_ci    def test_error_in_teardown_class(self):
1177db96d56Sopenharmony_ci        class Test(unittest.TestCase):
1187db96d56Sopenharmony_ci            tornDown = 0
1197db96d56Sopenharmony_ci            @classmethod
1207db96d56Sopenharmony_ci            def tearDownClass(cls):
1217db96d56Sopenharmony_ci                Test.tornDown += 1
1227db96d56Sopenharmony_ci                raise TypeError('foo')
1237db96d56Sopenharmony_ci            def test_one(self):
1247db96d56Sopenharmony_ci                pass
1257db96d56Sopenharmony_ci            def test_two(self):
1267db96d56Sopenharmony_ci                pass
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci        class Test2(unittest.TestCase):
1297db96d56Sopenharmony_ci            tornDown = 0
1307db96d56Sopenharmony_ci            @classmethod
1317db96d56Sopenharmony_ci            def tearDownClass(cls):
1327db96d56Sopenharmony_ci                Test2.tornDown += 1
1337db96d56Sopenharmony_ci                raise TypeError('foo')
1347db96d56Sopenharmony_ci            def test_one(self):
1357db96d56Sopenharmony_ci                pass
1367db96d56Sopenharmony_ci            def test_two(self):
1377db96d56Sopenharmony_ci                pass
1387db96d56Sopenharmony_ci
1397db96d56Sopenharmony_ci        result = self.runTests(Test, Test2)
1407db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 4)
1417db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 2)
1427db96d56Sopenharmony_ci        self.assertEqual(Test.tornDown, 1)
1437db96d56Sopenharmony_ci        self.assertEqual(Test2.tornDown, 1)
1447db96d56Sopenharmony_ci
1457db96d56Sopenharmony_ci        error, _ = result.errors[0]
1467db96d56Sopenharmony_ci        self.assertEqual(str(error),
1477db96d56Sopenharmony_ci                    'tearDownClass (%s.%s)' % (__name__, Test.__qualname__))
1487db96d56Sopenharmony_ci
1497db96d56Sopenharmony_ci    def test_class_not_torndown_when_setup_fails(self):
1507db96d56Sopenharmony_ci        class Test(unittest.TestCase):
1517db96d56Sopenharmony_ci            tornDown = False
1527db96d56Sopenharmony_ci            @classmethod
1537db96d56Sopenharmony_ci            def setUpClass(cls):
1547db96d56Sopenharmony_ci                raise TypeError
1557db96d56Sopenharmony_ci            @classmethod
1567db96d56Sopenharmony_ci            def tearDownClass(cls):
1577db96d56Sopenharmony_ci                Test.tornDown = True
1587db96d56Sopenharmony_ci                raise TypeError('foo')
1597db96d56Sopenharmony_ci            def test_one(self):
1607db96d56Sopenharmony_ci                pass
1617db96d56Sopenharmony_ci
1627db96d56Sopenharmony_ci        self.runTests(Test)
1637db96d56Sopenharmony_ci        self.assertFalse(Test.tornDown)
1647db96d56Sopenharmony_ci
1657db96d56Sopenharmony_ci    def test_class_not_setup_or_torndown_when_skipped(self):
1667db96d56Sopenharmony_ci        class Test(unittest.TestCase):
1677db96d56Sopenharmony_ci            classSetUp = False
1687db96d56Sopenharmony_ci            tornDown = False
1697db96d56Sopenharmony_ci            @classmethod
1707db96d56Sopenharmony_ci            def setUpClass(cls):
1717db96d56Sopenharmony_ci                Test.classSetUp = True
1727db96d56Sopenharmony_ci            @classmethod
1737db96d56Sopenharmony_ci            def tearDownClass(cls):
1747db96d56Sopenharmony_ci                Test.tornDown = True
1757db96d56Sopenharmony_ci            def test_one(self):
1767db96d56Sopenharmony_ci                pass
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_ci        Test = unittest.skip("hop")(Test)
1797db96d56Sopenharmony_ci        self.runTests(Test)
1807db96d56Sopenharmony_ci        self.assertFalse(Test.classSetUp)
1817db96d56Sopenharmony_ci        self.assertFalse(Test.tornDown)
1827db96d56Sopenharmony_ci
1837db96d56Sopenharmony_ci    def test_setup_teardown_order_with_pathological_suite(self):
1847db96d56Sopenharmony_ci        results = []
1857db96d56Sopenharmony_ci
1867db96d56Sopenharmony_ci        class Module1(object):
1877db96d56Sopenharmony_ci            @staticmethod
1887db96d56Sopenharmony_ci            def setUpModule():
1897db96d56Sopenharmony_ci                results.append('Module1.setUpModule')
1907db96d56Sopenharmony_ci            @staticmethod
1917db96d56Sopenharmony_ci            def tearDownModule():
1927db96d56Sopenharmony_ci                results.append('Module1.tearDownModule')
1937db96d56Sopenharmony_ci
1947db96d56Sopenharmony_ci        class Module2(object):
1957db96d56Sopenharmony_ci            @staticmethod
1967db96d56Sopenharmony_ci            def setUpModule():
1977db96d56Sopenharmony_ci                results.append('Module2.setUpModule')
1987db96d56Sopenharmony_ci            @staticmethod
1997db96d56Sopenharmony_ci            def tearDownModule():
2007db96d56Sopenharmony_ci                results.append('Module2.tearDownModule')
2017db96d56Sopenharmony_ci
2027db96d56Sopenharmony_ci        class Test1(unittest.TestCase):
2037db96d56Sopenharmony_ci            @classmethod
2047db96d56Sopenharmony_ci            def setUpClass(cls):
2057db96d56Sopenharmony_ci                results.append('setup 1')
2067db96d56Sopenharmony_ci            @classmethod
2077db96d56Sopenharmony_ci            def tearDownClass(cls):
2087db96d56Sopenharmony_ci                results.append('teardown 1')
2097db96d56Sopenharmony_ci            def testOne(self):
2107db96d56Sopenharmony_ci                results.append('Test1.testOne')
2117db96d56Sopenharmony_ci            def testTwo(self):
2127db96d56Sopenharmony_ci                results.append('Test1.testTwo')
2137db96d56Sopenharmony_ci
2147db96d56Sopenharmony_ci        class Test2(unittest.TestCase):
2157db96d56Sopenharmony_ci            @classmethod
2167db96d56Sopenharmony_ci            def setUpClass(cls):
2177db96d56Sopenharmony_ci                results.append('setup 2')
2187db96d56Sopenharmony_ci            @classmethod
2197db96d56Sopenharmony_ci            def tearDownClass(cls):
2207db96d56Sopenharmony_ci                results.append('teardown 2')
2217db96d56Sopenharmony_ci            def testOne(self):
2227db96d56Sopenharmony_ci                results.append('Test2.testOne')
2237db96d56Sopenharmony_ci            def testTwo(self):
2247db96d56Sopenharmony_ci                results.append('Test2.testTwo')
2257db96d56Sopenharmony_ci
2267db96d56Sopenharmony_ci        class Test3(unittest.TestCase):
2277db96d56Sopenharmony_ci            @classmethod
2287db96d56Sopenharmony_ci            def setUpClass(cls):
2297db96d56Sopenharmony_ci                results.append('setup 3')
2307db96d56Sopenharmony_ci            @classmethod
2317db96d56Sopenharmony_ci            def tearDownClass(cls):
2327db96d56Sopenharmony_ci                results.append('teardown 3')
2337db96d56Sopenharmony_ci            def testOne(self):
2347db96d56Sopenharmony_ci                results.append('Test3.testOne')
2357db96d56Sopenharmony_ci            def testTwo(self):
2367db96d56Sopenharmony_ci                results.append('Test3.testTwo')
2377db96d56Sopenharmony_ci
2387db96d56Sopenharmony_ci        Test1.__module__ = Test2.__module__ = 'Module'
2397db96d56Sopenharmony_ci        Test3.__module__ = 'Module2'
2407db96d56Sopenharmony_ci        sys.modules['Module'] = Module1
2417db96d56Sopenharmony_ci        sys.modules['Module2'] = Module2
2427db96d56Sopenharmony_ci
2437db96d56Sopenharmony_ci        first = unittest.TestSuite((Test1('testOne'),))
2447db96d56Sopenharmony_ci        second = unittest.TestSuite((Test1('testTwo'),))
2457db96d56Sopenharmony_ci        third = unittest.TestSuite((Test2('testOne'),))
2467db96d56Sopenharmony_ci        fourth = unittest.TestSuite((Test2('testTwo'),))
2477db96d56Sopenharmony_ci        fifth = unittest.TestSuite((Test3('testOne'),))
2487db96d56Sopenharmony_ci        sixth = unittest.TestSuite((Test3('testTwo'),))
2497db96d56Sopenharmony_ci        suite = unittest.TestSuite((first, second, third, fourth, fifth, sixth))
2507db96d56Sopenharmony_ci
2517db96d56Sopenharmony_ci        runner = self.getRunner()
2527db96d56Sopenharmony_ci        result = runner.run(suite)
2537db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 6)
2547db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 0)
2557db96d56Sopenharmony_ci
2567db96d56Sopenharmony_ci        self.assertEqual(results,
2577db96d56Sopenharmony_ci                         ['Module1.setUpModule', 'setup 1',
2587db96d56Sopenharmony_ci                          'Test1.testOne', 'Test1.testTwo', 'teardown 1',
2597db96d56Sopenharmony_ci                          'setup 2', 'Test2.testOne', 'Test2.testTwo',
2607db96d56Sopenharmony_ci                          'teardown 2', 'Module1.tearDownModule',
2617db96d56Sopenharmony_ci                          'Module2.setUpModule', 'setup 3',
2627db96d56Sopenharmony_ci                          'Test3.testOne', 'Test3.testTwo',
2637db96d56Sopenharmony_ci                          'teardown 3', 'Module2.tearDownModule'])
2647db96d56Sopenharmony_ci
2657db96d56Sopenharmony_ci    def test_setup_module(self):
2667db96d56Sopenharmony_ci        class Module(object):
2677db96d56Sopenharmony_ci            moduleSetup = 0
2687db96d56Sopenharmony_ci            @staticmethod
2697db96d56Sopenharmony_ci            def setUpModule():
2707db96d56Sopenharmony_ci                Module.moduleSetup += 1
2717db96d56Sopenharmony_ci
2727db96d56Sopenharmony_ci        class Test(unittest.TestCase):
2737db96d56Sopenharmony_ci            def test_one(self):
2747db96d56Sopenharmony_ci                pass
2757db96d56Sopenharmony_ci            def test_two(self):
2767db96d56Sopenharmony_ci                pass
2777db96d56Sopenharmony_ci        Test.__module__ = 'Module'
2787db96d56Sopenharmony_ci        sys.modules['Module'] = Module
2797db96d56Sopenharmony_ci
2807db96d56Sopenharmony_ci        result = self.runTests(Test)
2817db96d56Sopenharmony_ci        self.assertEqual(Module.moduleSetup, 1)
2827db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 2)
2837db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 0)
2847db96d56Sopenharmony_ci
2857db96d56Sopenharmony_ci    def test_error_in_setup_module(self):
2867db96d56Sopenharmony_ci        class Module(object):
2877db96d56Sopenharmony_ci            moduleSetup = 0
2887db96d56Sopenharmony_ci            moduleTornDown = 0
2897db96d56Sopenharmony_ci            @staticmethod
2907db96d56Sopenharmony_ci            def setUpModule():
2917db96d56Sopenharmony_ci                Module.moduleSetup += 1
2927db96d56Sopenharmony_ci                raise TypeError('foo')
2937db96d56Sopenharmony_ci            @staticmethod
2947db96d56Sopenharmony_ci            def tearDownModule():
2957db96d56Sopenharmony_ci                Module.moduleTornDown += 1
2967db96d56Sopenharmony_ci
2977db96d56Sopenharmony_ci        class Test(unittest.TestCase):
2987db96d56Sopenharmony_ci            classSetUp = False
2997db96d56Sopenharmony_ci            classTornDown = False
3007db96d56Sopenharmony_ci            @classmethod
3017db96d56Sopenharmony_ci            def setUpClass(cls):
3027db96d56Sopenharmony_ci                Test.classSetUp = True
3037db96d56Sopenharmony_ci            @classmethod
3047db96d56Sopenharmony_ci            def tearDownClass(cls):
3057db96d56Sopenharmony_ci                Test.classTornDown = True
3067db96d56Sopenharmony_ci            def test_one(self):
3077db96d56Sopenharmony_ci                pass
3087db96d56Sopenharmony_ci            def test_two(self):
3097db96d56Sopenharmony_ci                pass
3107db96d56Sopenharmony_ci
3117db96d56Sopenharmony_ci        class Test2(unittest.TestCase):
3127db96d56Sopenharmony_ci            def test_one(self):
3137db96d56Sopenharmony_ci                pass
3147db96d56Sopenharmony_ci            def test_two(self):
3157db96d56Sopenharmony_ci                pass
3167db96d56Sopenharmony_ci        Test.__module__ = 'Module'
3177db96d56Sopenharmony_ci        Test2.__module__ = 'Module'
3187db96d56Sopenharmony_ci        sys.modules['Module'] = Module
3197db96d56Sopenharmony_ci
3207db96d56Sopenharmony_ci        result = self.runTests(Test, Test2)
3217db96d56Sopenharmony_ci        self.assertEqual(Module.moduleSetup, 1)
3227db96d56Sopenharmony_ci        self.assertEqual(Module.moduleTornDown, 0)
3237db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 0)
3247db96d56Sopenharmony_ci        self.assertFalse(Test.classSetUp)
3257db96d56Sopenharmony_ci        self.assertFalse(Test.classTornDown)
3267db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 1)
3277db96d56Sopenharmony_ci        error, _ = result.errors[0]
3287db96d56Sopenharmony_ci        self.assertEqual(str(error), 'setUpModule (Module)')
3297db96d56Sopenharmony_ci
3307db96d56Sopenharmony_ci    def test_testcase_with_missing_module(self):
3317db96d56Sopenharmony_ci        class Test(unittest.TestCase):
3327db96d56Sopenharmony_ci            def test_one(self):
3337db96d56Sopenharmony_ci                pass
3347db96d56Sopenharmony_ci            def test_two(self):
3357db96d56Sopenharmony_ci                pass
3367db96d56Sopenharmony_ci        Test.__module__ = 'Module'
3377db96d56Sopenharmony_ci        sys.modules.pop('Module', None)
3387db96d56Sopenharmony_ci
3397db96d56Sopenharmony_ci        result = self.runTests(Test)
3407db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 2)
3417db96d56Sopenharmony_ci
3427db96d56Sopenharmony_ci    def test_teardown_module(self):
3437db96d56Sopenharmony_ci        class Module(object):
3447db96d56Sopenharmony_ci            moduleTornDown = 0
3457db96d56Sopenharmony_ci            @staticmethod
3467db96d56Sopenharmony_ci            def tearDownModule():
3477db96d56Sopenharmony_ci                Module.moduleTornDown += 1
3487db96d56Sopenharmony_ci
3497db96d56Sopenharmony_ci        class Test(unittest.TestCase):
3507db96d56Sopenharmony_ci            def test_one(self):
3517db96d56Sopenharmony_ci                pass
3527db96d56Sopenharmony_ci            def test_two(self):
3537db96d56Sopenharmony_ci                pass
3547db96d56Sopenharmony_ci        Test.__module__ = 'Module'
3557db96d56Sopenharmony_ci        sys.modules['Module'] = Module
3567db96d56Sopenharmony_ci
3577db96d56Sopenharmony_ci        result = self.runTests(Test)
3587db96d56Sopenharmony_ci        self.assertEqual(Module.moduleTornDown, 1)
3597db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 2)
3607db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 0)
3617db96d56Sopenharmony_ci
3627db96d56Sopenharmony_ci    def test_error_in_teardown_module(self):
3637db96d56Sopenharmony_ci        class Module(object):
3647db96d56Sopenharmony_ci            moduleTornDown = 0
3657db96d56Sopenharmony_ci            @staticmethod
3667db96d56Sopenharmony_ci            def tearDownModule():
3677db96d56Sopenharmony_ci                Module.moduleTornDown += 1
3687db96d56Sopenharmony_ci                raise TypeError('foo')
3697db96d56Sopenharmony_ci
3707db96d56Sopenharmony_ci        class Test(unittest.TestCase):
3717db96d56Sopenharmony_ci            classSetUp = False
3727db96d56Sopenharmony_ci            classTornDown = False
3737db96d56Sopenharmony_ci            @classmethod
3747db96d56Sopenharmony_ci            def setUpClass(cls):
3757db96d56Sopenharmony_ci                Test.classSetUp = True
3767db96d56Sopenharmony_ci            @classmethod
3777db96d56Sopenharmony_ci            def tearDownClass(cls):
3787db96d56Sopenharmony_ci                Test.classTornDown = True
3797db96d56Sopenharmony_ci            def test_one(self):
3807db96d56Sopenharmony_ci                pass
3817db96d56Sopenharmony_ci            def test_two(self):
3827db96d56Sopenharmony_ci                pass
3837db96d56Sopenharmony_ci
3847db96d56Sopenharmony_ci        class Test2(unittest.TestCase):
3857db96d56Sopenharmony_ci            def test_one(self):
3867db96d56Sopenharmony_ci                pass
3877db96d56Sopenharmony_ci            def test_two(self):
3887db96d56Sopenharmony_ci                pass
3897db96d56Sopenharmony_ci        Test.__module__ = 'Module'
3907db96d56Sopenharmony_ci        Test2.__module__ = 'Module'
3917db96d56Sopenharmony_ci        sys.modules['Module'] = Module
3927db96d56Sopenharmony_ci
3937db96d56Sopenharmony_ci        result = self.runTests(Test, Test2)
3947db96d56Sopenharmony_ci        self.assertEqual(Module.moduleTornDown, 1)
3957db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 4)
3967db96d56Sopenharmony_ci        self.assertTrue(Test.classSetUp)
3977db96d56Sopenharmony_ci        self.assertTrue(Test.classTornDown)
3987db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 1)
3997db96d56Sopenharmony_ci        error, _ = result.errors[0]
4007db96d56Sopenharmony_ci        self.assertEqual(str(error), 'tearDownModule (Module)')
4017db96d56Sopenharmony_ci
4027db96d56Sopenharmony_ci    def test_skiptest_in_setupclass(self):
4037db96d56Sopenharmony_ci        class Test(unittest.TestCase):
4047db96d56Sopenharmony_ci            @classmethod
4057db96d56Sopenharmony_ci            def setUpClass(cls):
4067db96d56Sopenharmony_ci                raise unittest.SkipTest('foo')
4077db96d56Sopenharmony_ci            def test_one(self):
4087db96d56Sopenharmony_ci                pass
4097db96d56Sopenharmony_ci            def test_two(self):
4107db96d56Sopenharmony_ci                pass
4117db96d56Sopenharmony_ci
4127db96d56Sopenharmony_ci        result = self.runTests(Test)
4137db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 0)
4147db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 0)
4157db96d56Sopenharmony_ci        self.assertEqual(len(result.skipped), 1)
4167db96d56Sopenharmony_ci        skipped = result.skipped[0][0]
4177db96d56Sopenharmony_ci        self.assertEqual(str(skipped),
4187db96d56Sopenharmony_ci                    'setUpClass (%s.%s)' % (__name__, Test.__qualname__))
4197db96d56Sopenharmony_ci
4207db96d56Sopenharmony_ci    def test_skiptest_in_setupmodule(self):
4217db96d56Sopenharmony_ci        class Test(unittest.TestCase):
4227db96d56Sopenharmony_ci            def test_one(self):
4237db96d56Sopenharmony_ci                pass
4247db96d56Sopenharmony_ci            def test_two(self):
4257db96d56Sopenharmony_ci                pass
4267db96d56Sopenharmony_ci
4277db96d56Sopenharmony_ci        class Module(object):
4287db96d56Sopenharmony_ci            @staticmethod
4297db96d56Sopenharmony_ci            def setUpModule():
4307db96d56Sopenharmony_ci                raise unittest.SkipTest('foo')
4317db96d56Sopenharmony_ci
4327db96d56Sopenharmony_ci        Test.__module__ = 'Module'
4337db96d56Sopenharmony_ci        sys.modules['Module'] = Module
4347db96d56Sopenharmony_ci
4357db96d56Sopenharmony_ci        result = self.runTests(Test)
4367db96d56Sopenharmony_ci        self.assertEqual(result.testsRun, 0)
4377db96d56Sopenharmony_ci        self.assertEqual(len(result.errors), 0)
4387db96d56Sopenharmony_ci        self.assertEqual(len(result.skipped), 1)
4397db96d56Sopenharmony_ci        skipped = result.skipped[0][0]
4407db96d56Sopenharmony_ci        self.assertEqual(str(skipped), 'setUpModule (Module)')
4417db96d56Sopenharmony_ci
4427db96d56Sopenharmony_ci    def test_suite_debug_executes_setups_and_teardowns(self):
4437db96d56Sopenharmony_ci        ordering = []
4447db96d56Sopenharmony_ci
4457db96d56Sopenharmony_ci        class Module(object):
4467db96d56Sopenharmony_ci            @staticmethod
4477db96d56Sopenharmony_ci            def setUpModule():
4487db96d56Sopenharmony_ci                ordering.append('setUpModule')
4497db96d56Sopenharmony_ci            @staticmethod
4507db96d56Sopenharmony_ci            def tearDownModule():
4517db96d56Sopenharmony_ci                ordering.append('tearDownModule')
4527db96d56Sopenharmony_ci
4537db96d56Sopenharmony_ci        class Test(unittest.TestCase):
4547db96d56Sopenharmony_ci            @classmethod
4557db96d56Sopenharmony_ci            def setUpClass(cls):
4567db96d56Sopenharmony_ci                ordering.append('setUpClass')
4577db96d56Sopenharmony_ci            @classmethod
4587db96d56Sopenharmony_ci            def tearDownClass(cls):
4597db96d56Sopenharmony_ci                ordering.append('tearDownClass')
4607db96d56Sopenharmony_ci            def test_something(self):
4617db96d56Sopenharmony_ci                ordering.append('test_something')
4627db96d56Sopenharmony_ci
4637db96d56Sopenharmony_ci        Test.__module__ = 'Module'
4647db96d56Sopenharmony_ci        sys.modules['Module'] = Module
4657db96d56Sopenharmony_ci
4667db96d56Sopenharmony_ci        suite = unittest.defaultTestLoader.loadTestsFromTestCase(Test)
4677db96d56Sopenharmony_ci        suite.debug()
4687db96d56Sopenharmony_ci        expectedOrder = ['setUpModule', 'setUpClass', 'test_something', 'tearDownClass', 'tearDownModule']
4697db96d56Sopenharmony_ci        self.assertEqual(ordering, expectedOrder)
4707db96d56Sopenharmony_ci
4717db96d56Sopenharmony_ci    def test_suite_debug_propagates_exceptions(self):
4727db96d56Sopenharmony_ci        class Module(object):
4737db96d56Sopenharmony_ci            @staticmethod
4747db96d56Sopenharmony_ci            def setUpModule():
4757db96d56Sopenharmony_ci                if phase == 0:
4767db96d56Sopenharmony_ci                    raise Exception('setUpModule')
4777db96d56Sopenharmony_ci            @staticmethod
4787db96d56Sopenharmony_ci            def tearDownModule():
4797db96d56Sopenharmony_ci                if phase == 1:
4807db96d56Sopenharmony_ci                    raise Exception('tearDownModule')
4817db96d56Sopenharmony_ci
4827db96d56Sopenharmony_ci        class Test(unittest.TestCase):
4837db96d56Sopenharmony_ci            @classmethod
4847db96d56Sopenharmony_ci            def setUpClass(cls):
4857db96d56Sopenharmony_ci                if phase == 2:
4867db96d56Sopenharmony_ci                    raise Exception('setUpClass')
4877db96d56Sopenharmony_ci            @classmethod
4887db96d56Sopenharmony_ci            def tearDownClass(cls):
4897db96d56Sopenharmony_ci                if phase == 3:
4907db96d56Sopenharmony_ci                    raise Exception('tearDownClass')
4917db96d56Sopenharmony_ci            def test_something(self):
4927db96d56Sopenharmony_ci                if phase == 4:
4937db96d56Sopenharmony_ci                    raise Exception('test_something')
4947db96d56Sopenharmony_ci
4957db96d56Sopenharmony_ci        Test.__module__ = 'Module'
4967db96d56Sopenharmony_ci        sys.modules['Module'] = Module
4977db96d56Sopenharmony_ci
4987db96d56Sopenharmony_ci        messages = ('setUpModule', 'tearDownModule', 'setUpClass', 'tearDownClass', 'test_something')
4997db96d56Sopenharmony_ci        for phase, msg in enumerate(messages):
5007db96d56Sopenharmony_ci            _suite = unittest.defaultTestLoader.loadTestsFromTestCase(Test)
5017db96d56Sopenharmony_ci            suite = unittest.TestSuite([_suite])
5027db96d56Sopenharmony_ci            with self.assertRaisesRegex(Exception, msg):
5037db96d56Sopenharmony_ci                suite.debug()
5047db96d56Sopenharmony_ci
5057db96d56Sopenharmony_ci
5067db96d56Sopenharmony_ciif __name__ == '__main__':
5077db96d56Sopenharmony_ci    unittest.main()
508