mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 15:11:34 +00:00 
			
		
		
		
	Fix test_warnings by making the state of things more consistent for each test
when it is run.
This commit is contained in:
		
							parent
							
								
									037d829319
								
							
						
					
					
						commit
						667bb4f236
					
				
					 1 changed files with 42 additions and 29 deletions
				
			
		| 
						 | 
				
			
			@ -8,9 +8,10 @@
 | 
			
		|||
 | 
			
		||||
import warning_tests
 | 
			
		||||
 | 
			
		||||
import warnings as original_warnings
 | 
			
		||||
 | 
			
		||||
sys.modules['_warnings'] = 0
 | 
			
		||||
if 'warnings' in sys.modules:
 | 
			
		||||
    del sys.modules['warnings']
 | 
			
		||||
del sys.modules['warnings']
 | 
			
		||||
 | 
			
		||||
import warnings as py_warnings
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -19,6 +20,9 @@
 | 
			
		|||
 | 
			
		||||
import warnings as c_warnings
 | 
			
		||||
 | 
			
		||||
sys.modules['warnings'] = original_warnings
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@contextmanager
 | 
			
		||||
def warnings_state(module):
 | 
			
		||||
    """Use a specific warnings implementation in warning_tests."""
 | 
			
		||||
| 
						 | 
				
			
			@ -40,16 +44,32 @@ def warnings_state(module):
 | 
			
		|||
        warning_tests.warnings = original_warnings
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class FilterTests(unittest.TestCase):
 | 
			
		||||
class BaseTest(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
    """Testing the filtering functionality."""
 | 
			
		||||
    """Basic bookkeeping required for testing."""
 | 
			
		||||
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        global __warningregistry__
 | 
			
		||||
        try:
 | 
			
		||||
            __warningregistry__.clear()
 | 
			
		||||
        except NameError:
 | 
			
		||||
            pass
 | 
			
		||||
        # The __warningregistry__ needs to be in a pristine state for tests
 | 
			
		||||
        # to work properly.
 | 
			
		||||
        if '__warningregistry__' in globals():
 | 
			
		||||
            del globals()['__warningregistry__']
 | 
			
		||||
        if hasattr(warning_tests, '__warningregistry__'):
 | 
			
		||||
            del warning_tests.__warningregistry__
 | 
			
		||||
        if hasattr(sys, '__warningregistry__'):
 | 
			
		||||
            del sys.__warningregistry__
 | 
			
		||||
        # The 'warnings' module must be explicitly set so that the proper
 | 
			
		||||
        # interaction between _warnings and 'warnings' can be controlled.
 | 
			
		||||
        sys.modules['warnings'] = self.module
 | 
			
		||||
        super(BaseTest, self).setUp()
 | 
			
		||||
 | 
			
		||||
    def tearDown(self):
 | 
			
		||||
        sys.modules['warnings'] = original_warnings
 | 
			
		||||
        super(BaseTest, self).tearDown()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class FilterTests(object):
 | 
			
		||||
 | 
			
		||||
    """Testing the filtering functionality."""
 | 
			
		||||
 | 
			
		||||
    def test_error(self):
 | 
			
		||||
        with test_support.catch_warning(self.module) as w:
 | 
			
		||||
| 
						 | 
				
			
			@ -164,10 +184,10 @@ def test_filterwarnings(self):
 | 
			
		|||
            self.assertEqual(str(w.message), text)
 | 
			
		||||
            self.assert_(w.category is UserWarning)
 | 
			
		||||
 | 
			
		||||
class CFilterTests(FilterTests):
 | 
			
		||||
class CFilterTests(BaseTest, FilterTests):
 | 
			
		||||
    module = c_warnings
 | 
			
		||||
 | 
			
		||||
class PyFilterTests(FilterTests):
 | 
			
		||||
class PyFilterTests(BaseTest, FilterTests):
 | 
			
		||||
    module = py_warnings
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -210,10 +230,10 @@ def test_stacklevel(self):
 | 
			
		|||
                self.assertEqual(os.path.basename(w.filename), "sys")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CWarnTests(WarnTests):
 | 
			
		||||
class CWarnTests(BaseTest, WarnTests):
 | 
			
		||||
    module = c_warnings
 | 
			
		||||
 | 
			
		||||
class PyWarnTests(WarnTests):
 | 
			
		||||
class PyWarnTests(BaseTest, WarnTests):
 | 
			
		||||
    module = py_warnings
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -232,14 +252,14 @@ def test_improper_input(self):
 | 
			
		|||
            self.module._setoption('error::Warning::0')
 | 
			
		||||
            self.assertRaises(UserWarning, self.module.warn, 'convert to error')
 | 
			
		||||
 | 
			
		||||
class CWCmdLineTests(WCmdLineTests):
 | 
			
		||||
class CWCmdLineTests(BaseTest, WCmdLineTests):
 | 
			
		||||
    module = c_warnings
 | 
			
		||||
 | 
			
		||||
class PyWCmdLineTests(WCmdLineTests):
 | 
			
		||||
class PyWCmdLineTests(BaseTest, WCmdLineTests):
 | 
			
		||||
    module = py_warnings
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class _WarningsTests(unittest.TestCase):
 | 
			
		||||
class _WarningsTests(BaseTest):
 | 
			
		||||
 | 
			
		||||
    """Tests specific to the _warnings module."""
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -362,30 +382,23 @@ def test_showwarning(self):
 | 
			
		|||
                                file_object, expected_file_line)
 | 
			
		||||
        self.failUnlessEqual(expect, file_object.getvalue())
 | 
			
		||||
 | 
			
		||||
class CWarningsDisplayTests(WarningsDisplayTests):
 | 
			
		||||
class CWarningsDisplayTests(BaseTest, WarningsDisplayTests):
 | 
			
		||||
    module = c_warnings
 | 
			
		||||
 | 
			
		||||
class PyWarningsDisplayTests(WarningsDisplayTests):
 | 
			
		||||
class PyWarningsDisplayTests(BaseTest, WarningsDisplayTests):
 | 
			
		||||
    module = py_warnings
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_main():
 | 
			
		||||
    # Obscure hack so that this test passes after reloads or repeated calls
 | 
			
		||||
    # to test_main (regrtest -R).
 | 
			
		||||
    if '__warningregistry__' in globals():
 | 
			
		||||
        del globals()['__warningregistry__']
 | 
			
		||||
    if hasattr(warning_tests, '__warningregistry__'):
 | 
			
		||||
        del warning_tests.__warningregistry__
 | 
			
		||||
    if hasattr(sys, '__warningregistry__'):
 | 
			
		||||
        del sys.__warningregistry__
 | 
			
		||||
    test_support.run_unittest(CFilterTests, PyFilterTests,
 | 
			
		||||
                                CWarnTests, PyWarnTests,
 | 
			
		||||
    test_support.run_unittest(CFilterTests,
 | 
			
		||||
                                PyFilterTests,
 | 
			
		||||
                                CWarnTests,
 | 
			
		||||
                                PyWarnTests,
 | 
			
		||||
                                CWCmdLineTests, PyWCmdLineTests,
 | 
			
		||||
                                _WarningsTests,
 | 
			
		||||
                                CWarningsDisplayTests, PyWarningsDisplayTests,
 | 
			
		||||
                             )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    test_main()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue