diff options
author | Victor Stinner <vstinner@python.org> | 2020-06-17 19:09:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-17 19:09:49 +0200 |
commit | 3d974b2fc681ddd0ec722cf631008d5941da52b8 (patch) | |
tree | a95d07129031b90350b62f956bed5a07b55d6968 | |
parent | 071bed842eeff9673bc5c4f64e3916a151132d2a (diff) | |
download | cpython-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__.py | 14 | ||||
-rw-r--r-- | Lib/test/pickletester.py | 16 | ||||
-rw-r--r-- | Lib/test/support/__init__.py | 9 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Tests/2020-06-17-15-07-14.bpo-41003.tiH_Fy.rst | 3 |
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``. |