mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
	
	
		
			406 lines
		
	
	
	
		
			13 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			406 lines
		
	
	
	
		
			13 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								import sys
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from cStringIO import StringIO
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import unittest
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def resultFactory(*_):
							 | 
						||
| 
								 | 
							
								    return unittest.TestResult()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class TestSetups(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def getRunner(self):
							 | 
						||
| 
								 | 
							
								        return unittest.TextTestRunner(resultclass=resultFactory,
							 | 
						||
| 
								 | 
							
								                                          stream=StringIO())
							 | 
						||
| 
								 | 
							
								    def runTests(self, *cases):
							 | 
						||
| 
								 | 
							
								        suite = unittest.TestSuite()
							 | 
						||
| 
								 | 
							
								        for case in cases:
							 | 
						||
| 
								 | 
							
								            tests = unittest.defaultTestLoader.loadTestsFromTestCase(case)
							 | 
						||
| 
								 | 
							
								            suite.addTests(tests)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        runner = self.getRunner()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        # creating a nested suite exposes some potential bugs
							 | 
						||
| 
								 | 
							
								        realSuite = unittest.TestSuite()
							 | 
						||
| 
								 | 
							
								        realSuite.addTest(suite)
							 | 
						||
| 
								 | 
							
								        # adding empty suites to the end exposes potential bugs
							 | 
						||
| 
								 | 
							
								        suite.addTest(unittest.TestSuite())
							 | 
						||
| 
								 | 
							
								        realSuite.addTest(unittest.TestSuite())
							 | 
						||
| 
								 | 
							
								        return runner.run(realSuite)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_setup_class(self):
							 | 
						||
| 
								 | 
							
								        class Test(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								            setUpCalled = 0
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def setUpClass(cls):
							 | 
						||
| 
								 | 
							
								                Test.setUpCalled += 1
							 | 
						||
| 
								 | 
							
								                unittest.TestCase.setUpClass()
							 | 
						||
| 
								 | 
							
								            def test_one(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								            def test_two(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        result = self.runTests(Test)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertEqual(Test.setUpCalled, 1)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(result.testsRun, 2)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(len(result.errors), 0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_teardown_class(self):
							 | 
						||
| 
								 | 
							
								        class Test(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								            tearDownCalled = 0
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def tearDownClass(cls):
							 | 
						||
| 
								 | 
							
								                Test.tearDownCalled += 1
							 | 
						||
| 
								 | 
							
								                unittest.TestCase.tearDownClass()
							 | 
						||
| 
								 | 
							
								            def test_one(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								            def test_two(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        result = self.runTests(Test)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertEqual(Test.tearDownCalled, 1)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(result.testsRun, 2)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(len(result.errors), 0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_teardown_class_two_classes(self):
							 | 
						||
| 
								 | 
							
								        class Test(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								            tearDownCalled = 0
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def tearDownClass(cls):
							 | 
						||
| 
								 | 
							
								                Test.tearDownCalled += 1
							 | 
						||
| 
								 | 
							
								                unittest.TestCase.tearDownClass()
							 | 
						||
| 
								 | 
							
								            def test_one(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								            def test_two(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        class Test2(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								            tearDownCalled = 0
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def tearDownClass(cls):
							 | 
						||
| 
								 | 
							
								                Test2.tearDownCalled += 1
							 | 
						||
| 
								 | 
							
								                unittest.TestCase.tearDownClass()
							 | 
						||
| 
								 | 
							
								            def test_one(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								            def test_two(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        result = self.runTests(Test, Test2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertEqual(Test.tearDownCalled, 1)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(Test2.tearDownCalled, 1)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(result.testsRun, 4)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(len(result.errors), 0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_error_in_setupclass(self):
							 | 
						||
| 
								 | 
							
								        class BrokenTest(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def setUpClass(cls):
							 | 
						||
| 
								 | 
							
								                raise TypeError('foo')
							 | 
						||
| 
								 | 
							
								            def test_one(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								            def test_two(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        result = self.runTests(BrokenTest)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertEqual(result.testsRun, 0)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(len(result.errors), 1)
							 | 
						||
| 
								 | 
							
								        error, _ = result.errors[0]
							 | 
						||
| 
								 | 
							
								        self.assertEqual(str(error),
							 | 
						||
| 
								 | 
							
								                    'classSetUp (%s.BrokenTest)' % __name__)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_error_in_teardown_class(self):
							 | 
						||
| 
								 | 
							
								        class Test(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								            tornDown = 0
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def tearDownClass(cls):
							 | 
						||
| 
								 | 
							
								                Test.tornDown += 1
							 | 
						||
| 
								 | 
							
								                raise TypeError('foo')
							 | 
						||
| 
								 | 
							
								            def test_one(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								            def test_two(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        class Test2(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								            tornDown = 0
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def tearDownClass(cls):
							 | 
						||
| 
								 | 
							
								                Test2.tornDown += 1
							 | 
						||
| 
								 | 
							
								                raise TypeError('foo')
							 | 
						||
| 
								 | 
							
								            def test_one(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								            def test_two(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        result = self.runTests(Test, Test2)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(result.testsRun, 4)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(len(result.errors), 2)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(Test.tornDown, 1)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(Test2.tornDown, 1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        error, _ = result.errors[0]
							 | 
						||
| 
								 | 
							
								        self.assertEqual(str(error),
							 | 
						||
| 
								 | 
							
								                    'classTearDown (%s.Test)' % __name__)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_class_not_torndown_when_setup_fails(self):
							 | 
						||
| 
								 | 
							
								        class Test(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								            tornDown = False
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def setUpClass(cls):
							 | 
						||
| 
								 | 
							
								                raise TypeError
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def tearDownClass(cls):
							 | 
						||
| 
								 | 
							
								                Test.tornDown = True
							 | 
						||
| 
								 | 
							
								                raise TypeError('foo')
							 | 
						||
| 
								 | 
							
								            def test_one(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.runTests(Test)
							 | 
						||
| 
								 | 
							
								        self.assertFalse(Test.tornDown)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_class_not_setup_or_torndown_when_skipped(self):
							 | 
						||
| 
								 | 
							
								        class Test(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								            classSetUp = False
							 | 
						||
| 
								 | 
							
								            tornDown = False
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def setUpClass(cls):
							 | 
						||
| 
								 | 
							
								                Test.classSetUp = True
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def tearDownClass(cls):
							 | 
						||
| 
								 | 
							
								                Test.tornDown = True
							 | 
						||
| 
								 | 
							
								            def test_one(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        Test = unittest.skip("hop")(Test)
							 | 
						||
| 
								 | 
							
								        self.runTests(Test)
							 | 
						||
| 
								 | 
							
								        self.assertFalse(Test.classSetUp)
							 | 
						||
| 
								 | 
							
								        self.assertFalse(Test.tornDown)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_setup_teardown_order_with_pathological_suite(self):
							 | 
						||
| 
								 | 
							
								        results = []
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        class Module1(object):
							 | 
						||
| 
								 | 
							
								            @staticmethod
							 | 
						||
| 
								 | 
							
								            def setUpModule():
							 | 
						||
| 
								 | 
							
								                results.append('Module1.setUpModule')
							 | 
						||
| 
								 | 
							
								            @staticmethod
							 | 
						||
| 
								 | 
							
								            def tearDownModule():
							 | 
						||
| 
								 | 
							
								                results.append('Module1.tearDownModule')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        class Module2(object):
							 | 
						||
| 
								 | 
							
								            @staticmethod
							 | 
						||
| 
								 | 
							
								            def setUpModule():
							 | 
						||
| 
								 | 
							
								                results.append('Module2.setUpModule')
							 | 
						||
| 
								 | 
							
								            @staticmethod
							 | 
						||
| 
								 | 
							
								            def tearDownModule():
							 | 
						||
| 
								 | 
							
								                results.append('Module2.tearDownModule')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        class Test1(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def setUpClass(cls):
							 | 
						||
| 
								 | 
							
								                results.append('setup 1')
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def tearDownClass(cls):
							 | 
						||
| 
								 | 
							
								                results.append('teardown 1')
							 | 
						||
| 
								 | 
							
								            def testOne(self):
							 | 
						||
| 
								 | 
							
								                results.append('Test1.testOne')
							 | 
						||
| 
								 | 
							
								            def testTwo(self):
							 | 
						||
| 
								 | 
							
								                results.append('Test1.testTwo')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        class Test2(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def setUpClass(cls):
							 | 
						||
| 
								 | 
							
								                results.append('setup 2')
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def tearDownClass(cls):
							 | 
						||
| 
								 | 
							
								                results.append('teardown 2')
							 | 
						||
| 
								 | 
							
								            def testOne(self):
							 | 
						||
| 
								 | 
							
								                results.append('Test2.testOne')
							 | 
						||
| 
								 | 
							
								            def testTwo(self):
							 | 
						||
| 
								 | 
							
								                results.append('Test2.testTwo')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        class Test3(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def setUpClass(cls):
							 | 
						||
| 
								 | 
							
								                results.append('setup 3')
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def tearDownClass(cls):
							 | 
						||
| 
								 | 
							
								                results.append('teardown 3')
							 | 
						||
| 
								 | 
							
								            def testOne(self):
							 | 
						||
| 
								 | 
							
								                results.append('Test3.testOne')
							 | 
						||
| 
								 | 
							
								            def testTwo(self):
							 | 
						||
| 
								 | 
							
								                results.append('Test3.testTwo')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        Test1.__module__ = Test2.__module__ = 'Module'
							 | 
						||
| 
								 | 
							
								        Test3.__module__ = 'Module2'
							 | 
						||
| 
								 | 
							
								        sys.modules['Module'] = Module1
							 | 
						||
| 
								 | 
							
								        sys.modules['Module2'] = Module2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        first = unittest.TestSuite((Test1('testOne'),))
							 | 
						||
| 
								 | 
							
								        second = unittest.TestSuite((Test1('testTwo'),))
							 | 
						||
| 
								 | 
							
								        third = unittest.TestSuite((Test2('testOne'),))
							 | 
						||
| 
								 | 
							
								        fourth = unittest.TestSuite((Test2('testTwo'),))
							 | 
						||
| 
								 | 
							
								        fifth = unittest.TestSuite((Test3('testOne'),))
							 | 
						||
| 
								 | 
							
								        sixth = unittest.TestSuite((Test3('testTwo'),))
							 | 
						||
| 
								 | 
							
								        suite = unittest.TestSuite((first, second, third, fourth, fifth, sixth))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        runner = self.getRunner()
							 | 
						||
| 
								 | 
							
								        result = runner.run(suite)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(result.testsRun, 6)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(len(result.errors), 0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.assertEqual(results,
							 | 
						||
| 
								 | 
							
								                         ['Module1.setUpModule', 'setup 1',
							 | 
						||
| 
								 | 
							
								                          'Test1.testOne', 'Test1.testTwo', 'teardown 1',
							 | 
						||
| 
								 | 
							
								                          'setup 2', 'Test2.testOne', 'Test2.testTwo',
							 | 
						||
| 
								 | 
							
								                          'teardown 2', 'Module1.tearDownModule',
							 | 
						||
| 
								 | 
							
								                          'Module2.setUpModule', 'setup 3',
							 | 
						||
| 
								 | 
							
								                          'Test3.testOne', 'Test3.testTwo',
							 | 
						||
| 
								 | 
							
								                          'teardown 3', 'Module2.tearDownModule'])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_setup_module(self):
							 | 
						||
| 
								 | 
							
								        class Module(object):
							 | 
						||
| 
								 | 
							
								            moduleSetup = 0
							 | 
						||
| 
								 | 
							
								            @staticmethod
							 | 
						||
| 
								 | 
							
								            def setUpModule():
							 | 
						||
| 
								 | 
							
								                Module.moduleSetup += 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        class Test(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								            def test_one(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								            def test_two(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								        Test.__module__ = 'Module'
							 | 
						||
| 
								 | 
							
								        sys.modules['Module'] = Module
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        result = self.runTests(Test)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(Module.moduleSetup, 1)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(result.testsRun, 2)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(len(result.errors), 0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_error_in_setup_module(self):
							 | 
						||
| 
								 | 
							
								        class Module(object):
							 | 
						||
| 
								 | 
							
								            moduleSetup = 0
							 | 
						||
| 
								 | 
							
								            moduleTornDown = 0
							 | 
						||
| 
								 | 
							
								            @staticmethod
							 | 
						||
| 
								 | 
							
								            def setUpModule():
							 | 
						||
| 
								 | 
							
								                Module.moduleSetup += 1
							 | 
						||
| 
								 | 
							
								                raise TypeError('foo')
							 | 
						||
| 
								 | 
							
								            @staticmethod
							 | 
						||
| 
								 | 
							
								            def tearDownModule():
							 | 
						||
| 
								 | 
							
								                Module.moduleTornDown += 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        class Test(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								            classSetUp = False
							 | 
						||
| 
								 | 
							
								            classTornDown = False
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def setUpClass(cls):
							 | 
						||
| 
								 | 
							
								                Test.classSetUp = True
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def tearDownClass(cls):
							 | 
						||
| 
								 | 
							
								                Test.classTornDown = True
							 | 
						||
| 
								 | 
							
								            def test_one(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								            def test_two(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        class Test2(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								            def test_one(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								            def test_two(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								        Test.__module__ = 'Module'
							 | 
						||
| 
								 | 
							
								        Test2.__module__ = 'Module'
							 | 
						||
| 
								 | 
							
								        sys.modules['Module'] = Module
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        result = self.runTests(Test, Test2)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(Module.moduleSetup, 1)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(Module.moduleTornDown, 0)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(result.testsRun, 0)
							 | 
						||
| 
								 | 
							
								        self.assertFalse(Test.classSetUp)
							 | 
						||
| 
								 | 
							
								        self.assertFalse(Test.classTornDown)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(len(result.errors), 1)
							 | 
						||
| 
								 | 
							
								        error, _ = result.errors[0]
							 | 
						||
| 
								 | 
							
								        self.assertEqual(str(error), 'setUpModule (Module)')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_testcase_with_missing_module(self):
							 | 
						||
| 
								 | 
							
								        class Test(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								            def test_one(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								            def test_two(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								        Test.__module__ = 'Module'
							 | 
						||
| 
								 | 
							
								        sys.modules.pop('Module', None)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        result = self.runTests(Test)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(result.testsRun, 2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_teardown_module(self):
							 | 
						||
| 
								 | 
							
								        class Module(object):
							 | 
						||
| 
								 | 
							
								            moduleTornDown = 0
							 | 
						||
| 
								 | 
							
								            @staticmethod
							 | 
						||
| 
								 | 
							
								            def tearDownModule():
							 | 
						||
| 
								 | 
							
								                Module.moduleTornDown += 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        class Test(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								            def test_one(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								            def test_two(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								        Test.__module__ = 'Module'
							 | 
						||
| 
								 | 
							
								        sys.modules['Module'] = Module
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        result = self.runTests(Test)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(Module.moduleTornDown, 1)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(result.testsRun, 2)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(len(result.errors), 0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def test_error_in_teardown_module(self):
							 | 
						||
| 
								 | 
							
								        class Module(object):
							 | 
						||
| 
								 | 
							
								            moduleTornDown = 0
							 | 
						||
| 
								 | 
							
								            @staticmethod
							 | 
						||
| 
								 | 
							
								            def tearDownModule():
							 | 
						||
| 
								 | 
							
								                Module.moduleTornDown += 1
							 | 
						||
| 
								 | 
							
								                raise TypeError('foo')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        class Test(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								            classSetUp = False
							 | 
						||
| 
								 | 
							
								            classTornDown = False
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def setUpClass(cls):
							 | 
						||
| 
								 | 
							
								                Test.classSetUp = True
							 | 
						||
| 
								 | 
							
								            @classmethod
							 | 
						||
| 
								 | 
							
								            def tearDownClass(cls):
							 | 
						||
| 
								 | 
							
								                Test.classTornDown = True
							 | 
						||
| 
								 | 
							
								            def test_one(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								            def test_two(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        class Test2(unittest.TestCase):
							 | 
						||
| 
								 | 
							
								            def test_one(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								            def test_two(self):
							 | 
						||
| 
								 | 
							
								                pass
							 | 
						||
| 
								 | 
							
								        Test.__module__ = 'Module'
							 | 
						||
| 
								 | 
							
								        Test2.__module__ = 'Module'
							 | 
						||
| 
								 | 
							
								        sys.modules['Module'] = Module
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        result = self.runTests(Test, Test2)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(Module.moduleTornDown, 1)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(result.testsRun, 4)
							 | 
						||
| 
								 | 
							
								        self.assertTrue(Test.classSetUp)
							 | 
						||
| 
								 | 
							
								        self.assertTrue(Test.classTornDown)
							 | 
						||
| 
								 | 
							
								        self.assertEqual(len(result.errors), 1)
							 | 
						||
| 
								 | 
							
								        error, _ = result.errors[0]
							 | 
						||
| 
								 | 
							
								        self.assertEqual(str(error), 'tearDownModule (Module)')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if __name__ == '__main__':
							 | 
						||
| 
								 | 
							
								    unittest.main()
							 |