From a92579c0b066b87d1315c669e24fe04b1625d276 Mon Sep 17 00:00:00 2001 From: Semyon Moroz Date: Sun, 11 May 2025 12:40:17 +0000 Subject: [PATCH] Bump `unittest` to 3.14 (#14012) --- stdlib/@tests/stubtest_allowlists/py314.txt | 16 ---------------- stdlib/unittest/case.pyi | 11 +++++++++++ 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/stdlib/@tests/stubtest_allowlists/py314.txt b/stdlib/@tests/stubtest_allowlists/py314.txt index c635972d4..3c5002e21 100644 --- a/stdlib/@tests/stubtest_allowlists/py314.txt +++ b/stdlib/@tests/stubtest_allowlists/py314.txt @@ -202,22 +202,6 @@ turtle.poly turtle.save types.CodeType.co_branches types.FrameType.f_generator -unittest.TestCase.assertEndsWith -unittest.TestCase.assertHasAttr -unittest.TestCase.assertIsSubclass -unittest.TestCase.assertNotEndsWith -unittest.TestCase.assertNotHasAttr -unittest.TestCase.assertNotIsSubclass -unittest.TestCase.assertNotStartsWith -unittest.TestCase.assertStartsWith -unittest.case.TestCase.assertEndsWith -unittest.case.TestCase.assertHasAttr -unittest.case.TestCase.assertIsSubclass -unittest.case.TestCase.assertNotEndsWith -unittest.case.TestCase.assertNotHasAttr -unittest.case.TestCase.assertNotIsSubclass -unittest.case.TestCase.assertNotStartsWith -unittest.case.TestCase.assertStartsWith urllib.request.__all__ urllib.request.FancyURLopener urllib.request.URLopener diff --git a/stdlib/unittest/case.pyi b/stdlib/unittest/case.pyi index 7d1a382a5..89bcabf10 100644 --- a/stdlib/unittest/case.pyi +++ b/stdlib/unittest/case.pyi @@ -18,6 +18,7 @@ _T = TypeVar("_T") _S = TypeVar("_S", bound=SupportsSub[Any, Any]) _E = TypeVar("_E", bound=BaseException) _FT = TypeVar("_FT", bound=Callable[..., Any]) +_SB = TypeVar("_SB", str, bytes, bytearray) _P = ParamSpec("_P") DIFF_OMITTED: Final[str] @@ -289,6 +290,16 @@ class TestCase: # Runtime has *args, **kwargs, but will error if any are supplied def __init_subclass__(cls, *args: Never, **kwargs: Never) -> None: ... + if sys.version_info >= (3, 14): + def assertIsSubclass(self, cls: type, superclass: type | tuple[type, ...], msg: Any = None) -> None: ... + def assertNotIsSubclass(self, cls: type, superclass: type | tuple[type, ...], msg: Any = None) -> None: ... + def assertHasAttr(self, obj: object, name: str, msg: Any = None) -> None: ... + def assertNotHasAttr(self, obj: object, name: str, msg: Any = None) -> None: ... + def assertStartsWith(self, s: _SB, prefix: _SB | tuple[_SB, ...], msg: Any = None) -> None: ... + def assertNotStartsWith(self, s: _SB, prefix: _SB | tuple[_SB, ...], msg: Any = None) -> None: ... + def assertEndsWith(self, s: _SB, suffix: _SB | tuple[_SB, ...], msg: Any = None) -> None: ... + def assertNotEndsWith(self, s: _SB, suffix: _SB | tuple[_SB, ...], msg: Any = None) -> None: ... + class FunctionTestCase(TestCase): def __init__( self,