commit:     2613134d17eb6ad40f29527a35ac93d11c667f79
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Nov 11 06:48:55 2025 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Tue Nov 11 06:49:38 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2613134d

dev-python/pytest: Backport fix for SkipTest exception handling

Backport an upstream fix for handling SkipTest exceptions raised
outside unittest.TestCase, which also happens to fix unittest.skipIf()
on top-level test functions (needed for dev-python/botocore).

Bug: https://github.com/pytest-dev/pytest/issues/13895
Pull-Request: https://github.com/pytest-dev/pytest/pull/13912
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 .../pytest/files/pytest-9.0.0-skiptest.patch       | 79 ++++++++++++++++++++++
 ...{pytest-9.0.0.ebuild => pytest-9.0.0-r1.ebuild} |  5 ++
 2 files changed, 84 insertions(+)

diff --git a/dev-python/pytest/files/pytest-9.0.0-skiptest.patch 
b/dev-python/pytest/files/pytest-9.0.0-skiptest.patch
new file mode 100644
index 000000000000..2b266d8042fa
--- /dev/null
+++ b/dev-python/pytest/files/pytest-9.0.0-skiptest.patch
@@ -0,0 +1,79 @@
+From 2ef26ee296c917d1699e283863921c134866d622 Mon Sep 17 00:00:00 2001
+From: Bruno Oliveira <[email protected]>
+Date: Mon, 10 Nov 2025 08:51:35 -0300
+Subject: [PATCH] Restore skipping tests via `raise unittest.SkipTest`
+
+Revert "Remove unused code related to `nose` (#13528)"
+
+This reverts commit a620d24376eb2c4bc964f2b6efcc694a4adbbe21 and modifies it 
adding tests and docs.
+
+Fixes #13895
+--- a/src/_pytest/unittest.py
++++ b/src/_pytest/unittest.py
+@@ -476,6 +476,14 @@ def pytest_runtest_makereport(item: Item, call: 
CallInfo[None]) -> None:
+             except AttributeError:
+                 pass
+ 
++    # Convert unittest.SkipTest to pytest.skip.
++    # This covers explicit `raise unittest.SkipTest`.
++    unittest = sys.modules.get("unittest")
++    if unittest and call.excinfo and isinstance(call.excinfo.value, 
unittest.SkipTest):
++        excinfo = call.excinfo
++        call2 = CallInfo[None].from_call(lambda: skip(str(excinfo.value)), 
call.when)
++        call.excinfo = call2.excinfo
++
+ 
+ def _is_skipped(obj) -> bool:
+     """Return True if the given object has been marked with @unittest.skip."""
+--- a/testing/test_unittest.py
++++ b/testing/test_unittest.py
+@@ -1094,6 +1094,49 @@ def test_two(self):
+     result.assert_outcomes(passed=2)
+ 
+ 
++def test_skip_setup_class(pytester: Pytester) -> None:
++    """Skipping tests in a class by raising unittest.SkipTest in `setUpClass` 
(#13985)."""
++    pytester.makepyfile(
++        """
++        import unittest
++
++        class Test(unittest.TestCase):
++
++            @classmethod
++            def setUpClass(cls):
++                raise unittest.SkipTest('Skipping setupclass')
++
++            def test_foo(self):
++                assert False
++
++            def test_bar(self):
++                assert False
++        """
++    )
++    result = pytester.runpytest()
++    result.assert_outcomes(skipped=2)
++
++
++def test_unittest_skip_function(pytester: Pytester) -> None:
++    """
++    Ensure raising an explicit unittest.SkipTest skips standard pytest 
functions.
++
++    Support for this is debatable -- technically we only support 
unittest.SkipTest in TestCase subclasses,
++    but stating this support here in this test because users currently expect 
this to work,
++    so if we ever break it we at least know we are breaking this use case 
(#13985).
++    """
++    pytester.makepyfile(
++        """
++        import unittest
++
++        def test_foo():
++            raise unittest.SkipTest('Skipping test_foo')
++        """
++    )
++    result = pytester.runpytest()
++    result.assert_outcomes(skipped=1)
++
++
+ def test_testcase_handles_init_exceptions(pytester: Pytester) -> None:
+     """
+     Regression test to make sure exceptions in the __init__ method are 
bubbled up correctly.

diff --git a/dev-python/pytest/pytest-9.0.0.ebuild 
b/dev-python/pytest/pytest-9.0.0-r1.ebuild
similarity index 97%
rename from dev-python/pytest/pytest-9.0.0.ebuild
rename to dev-python/pytest/pytest-9.0.0-r1.ebuild
index fe469fcd07cf..43329010b781 100644
--- a/dev-python/pytest/pytest-9.0.0.ebuild
+++ b/dev-python/pytest/pytest-9.0.0-r1.ebuild
@@ -45,6 +45,11 @@ BDEPEND="
        )
 "
 
+PATCHES=(
+       # https://github.com/pytest-dev/pytest/pull/13912
+       "${FILESDIR}/${P}-skiptest.patch"
+)
+
 src_test() {
        # workaround new readline defaults
        echo "set enable-bracketed-paste off" > "${T}"/inputrc || die

Reply via email to