From 830f8eda87fa06614a0328c3fce00060f4135e4c Mon Sep 17 00:00:00 2001 From: Yannick Jadoul Date: Thu, 24 Dec 2020 15:53:23 +0100 Subject: [PATCH] tests: update pytest 6.2.1 and fix test_python_alreadyset_in_destructor (#2741) * Update pytest to 6.2.1 in tests/requirements.txt * Pin pytest to last supported version for 3.5 * Suppress PytestUnraisableExceptionWarning and use sys.__unraisablehook__ instead of sys.unraisablehook * Fix filterwarnings mark on old pytest and old Python versions * Cleanup ignore_pytest_unraisable_warning decorator --- tests/requirements.txt | 3 ++- tests/test_exceptions.py | 13 ++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/tests/requirements.txt b/tests/requirements.txt index 80ed6171d..a6253e004 100644 --- a/tests/requirements.txt +++ b/tests/requirements.txt @@ -3,6 +3,7 @@ numpy==1.16.6; python_version<"3.6" and sys_platform!="win32" numpy==1.18.0; platform_python_implementation=="PyPy" and sys_platform=="darwin" and python_version>="3.6" numpy==1.19.3; (platform_python_implementation!="PyPy" or sys_platform=="linux") and python_version>="3.6" and python_version<"3.10" pytest==4.6.9; python_version<"3.5" -pytest==5.4.3; python_version>="3.5" +pytest==6.1.2; python_version=="3.5" +pytest==6.2.1; python_version>="3.6" scipy==1.2.3; (platform_python_implementation!="PyPy" or sys_platform=="linux") and python_version<"3.6" scipy==1.5.2; (platform_python_implementation!="PyPy" or sys_platform=="linux") and python_version>="3.6" and python_version<"3.9" diff --git a/tests/test_exceptions.py b/tests/test_exceptions.py index 95eac7092..c6cb65299 100644 --- a/tests/test_exceptions.py +++ b/tests/test_exceptions.py @@ -50,13 +50,24 @@ def test_python_call_in_catch(): assert d["good"] is True +def ignore_pytest_unraisable_warning(f): + unraisable = "PytestUnraisableExceptionWarning" + if hasattr(pytest, unraisable): # Python >= 3.8 and pytest >= 6 + dec = pytest.mark.filterwarnings("ignore::pytest.{}".format(unraisable)) + return dec(f) + else: + return f + + +@ignore_pytest_unraisable_warning def test_python_alreadyset_in_destructor(monkeypatch, capsys): hooked = False triggered = [False] # mutable, so Python 2.7 closure can modify it if hasattr(sys, "unraisablehook"): # Python 3.8+ hooked = True - default_hook = sys.unraisablehook + # Don't take `sys.unraisablehook`, as that's overwritten by pytest + default_hook = sys.__unraisablehook__ def hook(unraisable_hook_args): exc_type, exc_value, exc_tb, err_msg, obj = unraisable_hook_args