mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
bpo-35252: Remove FIXME from test_functools (GH-10551)
This commit is contained in:
parent
287b84de93
commit
d673810b9d
3 changed files with 11 additions and 9 deletions
|
@ -861,9 +861,11 @@ def singledispatch(func):
|
||||||
# only import typing if annotation parsing is necessary
|
# only import typing if annotation parsing is necessary
|
||||||
from typing import get_type_hints
|
from typing import get_type_hints
|
||||||
argname, cls = next(iter(get_type_hints(func).items()))
|
argname, cls = next(iter(get_type_hints(func).items()))
|
||||||
assert isinstance(cls, type), (
|
if not isinstance(cls, type):
|
||||||
f"Invalid annotation for {argname!r}. {cls!r} is not a class."
|
raise TypeError(
|
||||||
)
|
f"Invalid annotation for {argname!r}. "
|
||||||
|
f"{cls!r} is not a class."
|
||||||
|
)
|
||||||
registry[cls] = func
|
registry[cls] = func
|
||||||
if cache_token is None and hasattr(cls, '__abstractmethods__'):
|
if cache_token is None and hasattr(cls, '__abstractmethods__'):
|
||||||
cache_token = get_cache_token()
|
cache_token = get_cache_token()
|
||||||
|
|
|
@ -2355,9 +2355,6 @@ class TestSingleDispatch(unittest.TestCase):
|
||||||
))
|
))
|
||||||
self.assertTrue(str(exc.exception).endswith(msg_suffix))
|
self.assertTrue(str(exc.exception).endswith(msg_suffix))
|
||||||
|
|
||||||
# FIXME: The following will only work after PEP 560 is implemented.
|
|
||||||
return
|
|
||||||
|
|
||||||
with self.assertRaises(TypeError) as exc:
|
with self.assertRaises(TypeError) as exc:
|
||||||
@i.register
|
@i.register
|
||||||
def _(arg: typing.Iterable[str]):
|
def _(arg: typing.Iterable[str]):
|
||||||
|
@ -2366,10 +2363,12 @@ class TestSingleDispatch(unittest.TestCase):
|
||||||
# types from `typing`. Instead, annotate with regular types
|
# types from `typing`. Instead, annotate with regular types
|
||||||
# or ABCs.
|
# or ABCs.
|
||||||
return "I annotated with a generic collection"
|
return "I annotated with a generic collection"
|
||||||
self.assertTrue(str(exc.exception).startswith(msg_prefix +
|
self.assertTrue(str(exc.exception).startswith(
|
||||||
"<function TestSingleDispatch.test_invalid_registrations.<locals>._"
|
"Invalid annotation for 'arg'."
|
||||||
|
))
|
||||||
|
self.assertTrue(str(exc.exception).endswith(
|
||||||
|
'typing.Iterable[str] is not a class.'
|
||||||
))
|
))
|
||||||
self.assertTrue(str(exc.exception).endswith(msg_suffix))
|
|
||||||
|
|
||||||
def test_invalid_positional_argument(self):
|
def test_invalid_positional_argument(self):
|
||||||
@functools.singledispatch
|
@functools.singledispatch
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Throw a TypeError instead of an AssertionError when using an invalid type annotation with singledispatch.
|
Loading…
Add table
Add a link
Reference in a new issue