summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2020-06-17 19:09:49 +0200
committerGitHub <noreply@github.com>2020-06-17 19:09:49 +0200
commit3d974b2fc681ddd0ec722cf631008d5941da52b8 (patch)
treea95d07129031b90350b62f956bed5a07b55d6968
parent071bed842eeff9673bc5c4f64e3916a151132d2a (diff)
downloadcpython-git-3d974b2fc681ddd0ec722cf631008d5941da52b8.tar.gz
bpo-41003: Fix test_copyreg when numpy is installed (GH-20935) (GH-20945) (GH-20946)
Fix test_copyreg when numpy is installed: test.pickletester now saves/restores warnings.filters when importing numpy, to ignore filters installed by numpy. Add the save_restore_warnings_filters() function to the test.support.warnings_helper module. (cherry picked from commit 8362893e3fe083df2ec8bb94c28b1a78383eadbf) (cherry picked from commit b39d41ba1b77f7bc51c4d6f6d0e336693192cb3a)
-rw-r--r--Lib/distutils/tests/__init__.py14
-rw-r--r--Lib/test/pickletester.py16
-rw-r--r--Lib/test/support/__init__.py9
-rw-r--r--Misc/NEWS.d/next/Tests/2020-06-17-15-07-14.bpo-41003.tiH_Fy.rst3
4 files changed, 29 insertions, 13 deletions
diff --git a/Lib/distutils/tests/__init__.py b/Lib/distutils/tests/__init__.py
index 5d2e69e3e6..68037216c7 100644
--- a/Lib/distutils/tests/__init__.py
+++ b/Lib/distutils/tests/__init__.py
@@ -15,26 +15,24 @@ by import rather than matching pre-defined names.
import os
import sys
import unittest
-import warnings
-from test.support import run_unittest
+from test.support import run_unittest, save_restore_warnings_filters
here = os.path.dirname(__file__) or os.curdir
def test_suite():
- old_filters = warnings.filters[:]
suite = unittest.TestSuite()
for fn in os.listdir(here):
if fn.startswith("test") and fn.endswith(".py"):
modname = "distutils.tests." + fn[:-3]
- __import__(modname)
+ # bpo-40055: Save/restore warnings filters to leave them unchanged.
+ # Importing tests imports docutils which imports pkg_resources
+ # which adds a warnings filter.
+ with save_restore_warnings_filters():
+ __import__(modname)
module = sys.modules[modname]
suite.addTest(module.test_suite())
- # bpo-40055: Save/restore warnings filters to leave them unchanged.
- # Importing tests imports docutils which imports pkg_resources which adds a
- # warnings filter.
- warnings.filters[:] = old_filters
return suite
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index 7c8383f3ea..9401043d78 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -21,19 +21,25 @@ try:
except ImportError:
_testbuffer = None
-try:
- import numpy as np
-except ImportError:
- np = None
-
from test import support
from test.support import (
TestFailed, TESTFN, run_with_locale, no_tracing,
_2G, _4G, bigmemtest, reap_threads, forget,
+ save_restore_warnings_filters
)
from pickle import bytes_types
+
+# bpo-41003: Save/restore warnings filters to leave them unchanged.
+# Ignore filters installed by numpy.
+try:
+ with save_restore_warnings_filters():
+ import numpy as np
+except ImportError:
+ np = None
+
+
requires_32b = unittest.skipUnless(sys.maxsize < 2**32,
"test is only meaningful on 32-bit builds")
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index 08d53ec706..0906e7adba 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -3368,3 +3368,12 @@ class catch_threading_exception:
del self.exc_value
del self.exc_traceback
del self.thread
+
+
+@contextlib.contextmanager
+def save_restore_warnings_filters():
+ old_filters = warnings.filters[:]
+ try:
+ yield
+ finally:
+ warnings.filters[:] = old_filters
diff --git a/Misc/NEWS.d/next/Tests/2020-06-17-15-07-14.bpo-41003.tiH_Fy.rst b/Misc/NEWS.d/next/Tests/2020-06-17-15-07-14.bpo-41003.tiH_Fy.rst
new file mode 100644
index 0000000000..6f908d99fe
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2020-06-17-15-07-14.bpo-41003.tiH_Fy.rst
@@ -0,0 +1,3 @@
+Fix ``test_copyreg`` when ``numpy`` is installed: ``test.pickletester`` now
+saves/restores warnings filters when importing ``numpy``, to ignore filters
+installed by ``numpy``.