]> granicus.if.org Git - python/commitdiff
Issue #23375: Fix test_py3kwarn for modules implemented in C
authorVictor Stinner <victor.stinner@gmail.com>
Thu, 3 Sep 2015 08:46:17 +0000 (10:46 +0200)
committerVictor Stinner <victor.stinner@gmail.com>
Thu, 3 Sep 2015 08:46:17 +0000 (10:46 +0200)
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

index 5aee6a5ec6e00c5efaa8337a1602d8534a3303e1..b4e4e9d7116d5e3609b853b5a94b5ed707a09c29 100644 (file)
@@ -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__)