gh-101562: typing: add tests for inheritance with NotRequired & Required in parent fields (#101563)

This commit is contained in:
Eclips4 2023-02-06 22:28:24 +03:00 committed by GitHub
parent 7a253103d4
commit b96b344f25
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 0 deletions

View File

@ -4892,6 +4892,18 @@ class NontotalMovie(TypedDict, total=False):
title: Required[str]
year: int
class ParentNontotalMovie(TypedDict, total=False):
title: Required[str]
class ChildTotalMovie(ParentNontotalMovie):
year: NotRequired[int]
class ParentDeeplyAnnotatedMovie(TypedDict):
title: Annotated[Annotated[Required[str], "foobar"], "another level"]
class ChildDeeplyAnnotatedMovie(ParentDeeplyAnnotatedMovie):
year: NotRequired[Annotated[int, 2000]]
class AnnotatedMovie(TypedDict):
title: Annotated[Required[str], "foobar"]
year: NotRequired[Annotated[int, 2000]]
@ -5221,6 +5233,17 @@ class GetTypeHintTests(BaseTestCase):
'a': Annotated[Required[int], "a", "b", "c"]
})
self.assertEqual(get_type_hints(ChildTotalMovie), {"title": str, "year": int})
self.assertEqual(get_type_hints(ChildTotalMovie, include_extras=True), {
"title": Required[str], "year": NotRequired[int]
})
self.assertEqual(get_type_hints(ChildDeeplyAnnotatedMovie), {"title": str, "year": int})
self.assertEqual(get_type_hints(ChildDeeplyAnnotatedMovie, include_extras=True), {
"title": Annotated[Required[str], "foobar", "another level"],
"year": NotRequired[Annotated[int, 2000]]
})
def test_get_type_hints_collections_abc_callable(self):
# https://github.com/python/cpython/issues/91621
P = ParamSpec('P')
@ -6381,6 +6404,16 @@ class TypedDictTests(BaseTestCase):
self.assertEqual(WeirdlyQuotedMovie.__optional_keys__,
frozenset({"year"}))
self.assertEqual(ChildTotalMovie.__required_keys__,
frozenset({"title"}))
self.assertEqual(ChildTotalMovie.__optional_keys__,
frozenset({"year"}))
self.assertEqual(ChildDeeplyAnnotatedMovie.__required_keys__,
frozenset({"title"}))
self.assertEqual(ChildDeeplyAnnotatedMovie.__optional_keys__,
frozenset({"year"}))
def test_multiple_inheritance(self):
class One(TypedDict):
one: int

View File

@ -1414,6 +1414,7 @@ Jean-François Piéronne
Oleg Plakhotnyuk
Anatoliy Platonov
Marcel Plch
Kirill Podoprigora
Remi Pointel
Jon Poler
Ariel Poliak