From ccd62705b1e0a303fa079a5228ddf547b6d78558 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 3 Sep 2015 10:46:17 +0200 Subject: [PATCH] Issue #23375: Fix test_py3kwarn for modules implemented in C Don't check if importing a module emits a DeprecationWarning if the module is implemented in C and the module is already loaded. --- Lib/test/test_py3kwarn.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Lib/test/test_py3kwarn.py b/Lib/test/test_py3kwarn.py index 5aee6a5ec6..b4e4e9d711 100644 --- a/Lib/test/test_py3kwarn.py +++ b/Lib/test/test_py3kwarn.py @@ -2,6 +2,7 @@ import unittest import sys from test.test_support import check_py3k_warnings, CleanImport, run_unittest import warnings +from test import test_support if not sys.py3kwarning: raise unittest.SkipTest('%s must be run with the -3 flag' % __name__) @@ -356,6 +357,21 @@ class TestStdlibRemovals(unittest.TestCase): def check_removal(self, module_name, optional=False): """Make sure the specified module, when imported, raises a DeprecationWarning and specifies itself in the message.""" + if module_name in sys.modules: + mod = sys.modules[module_name] + filename = getattr(mod, '__file__', '') + mod = None + # the module is not implemented in C? + if not filename.endswith(('.py', '.pyc', '.pyo')): + # Issue #23375: If the module was already loaded, reimporting + # the module will not emit again the warning. The warning is + # emited when the module is loaded, but C modules cannot + # unloaded. + if test_support.verbose: + print("Cannot test the Python 3 DeprecationWarning of the " + "%s module, the C module is already loaded" + % module_name) + return with CleanImport(module_name), warnings.catch_warnings(): warnings.filterwarnings("error", ".+ (module|package) .+ removed", DeprecationWarning, __name__) -- 2.50.1