@@ -4318,14 +4318,16 @@ class Closed(TypedDict, closed=True):
43184318 class Unclosed (TypedDict , closed = False ):
43194319 ...
43204320
4321- class ChildUnclosed (Closed , Unclosed ):
4322- ...
4321+ with self .assertWarns (DeprecationWarning ):
4322+ class ChildUnclosed (Closed , Unclosed ):
4323+ ...
43234324
43244325 self .assertFalse (ChildUnclosed .__closed__ )
43254326 self .assertEqual (ChildUnclosed .__extra_items__ , type (None ))
43264327
4327- class ChildClosed (Unclosed , Closed ):
4328- ...
4328+ with self .assertWarns (DeprecationWarning ):
4329+ class ChildClosed (Unclosed , Closed ):
4330+ ...
43294331
43304332 self .assertFalse (ChildClosed .__closed__ )
43314333 self .assertEqual (ChildClosed .__extra_items__ , type (None ))
@@ -4690,19 +4692,34 @@ def test_extra_keys_non_readonly_compat(self):
46904692 class Base (TypedDict , closed = True ):
46914693 __extra_items__ : str
46924694
4693- class Child (Base ):
4694- a : NotRequired [int ]
4695+ with self .assertWarns (DeprecationWarning ):
4696+ class Child (Base ):
4697+ a : NotRequired [int ]
46954698
46964699 self .assertEqual (Child .__required_keys__ , frozenset ({}))
46974700 self .assertEqual (Child .__optional_keys__ , frozenset ({'a' }))
46984701 self .assertEqual (Child .__readonly_keys__ , frozenset ({}))
46994702 self .assertEqual (Child .__mutable_keys__ , frozenset ({'a' }))
47004703
4704+ @skipIf (TYPING_3_14_0 , "Only supported on <3.14" )
47014705 def test_extra_keys_readonly (self ):
47024706 class Base (TypedDict , closed = True ):
47034707 __extra_items__ : ReadOnly [str ]
47044708
4705- class Child (Base ):
4709+ with self .assertWarns (DeprecationWarning ):
4710+ class Child (Base ):
4711+ a : NotRequired [str ]
4712+
4713+ self .assertEqual (Child .__required_keys__ , frozenset ({}))
4714+ self .assertEqual (Child .__optional_keys__ , frozenset ({'a' }))
4715+ self .assertEqual (Child .__readonly_keys__ , frozenset ({}))
4716+ self .assertEqual (Child .__mutable_keys__ , frozenset ({'a' }))
4717+
4718+ def test_extra_keys_readonly_explicit_closed (self ):
4719+ class Base (TypedDict , closed = True ):
4720+ __extra_items__ : ReadOnly [str ]
4721+
4722+ class Child (Base , closed = True ):
47064723 a : NotRequired [str ]
47074724
47084725 self .assertEqual (Child .__required_keys__ , frozenset ({}))
@@ -4766,26 +4783,26 @@ class Base(TypedDict, closed=True):
47664783 self .assertEqual (Base .__extra_items__ , ReadOnly [Union [str , None ]])
47674784 self .assertTrue (Base .__closed__ )
47684785
4769- class Child (Base ):
4786+ class Child (Base , closed = True ):
47704787 a : int
47714788 __extra_items__ : int
47724789
4773- self .assertEqual (Child .__required_keys__ , frozenset ({'a' , "__extra_items__" }))
4790+ self .assertEqual (Child .__required_keys__ , frozenset ({'a' }))
47744791 self .assertEqual (Child .__optional_keys__ , frozenset ({}))
47754792 self .assertEqual (Child .__readonly_keys__ , frozenset ({}))
4776- self .assertEqual (Child .__mutable_keys__ , frozenset ({'a' , "__extra_items__" }))
4777- self .assertEqual (Child .__annotations__ , {"__extra_items__" : int , " a" : int })
4778- self .assertEqual (Child .__extra_items__ , ReadOnly [ Union [ str , None ]] )
4779- self .assertFalse (Child .__closed__ )
4793+ self .assertEqual (Child .__mutable_keys__ , frozenset ({'a' }))
4794+ self .assertEqual (Child .__annotations__ , {"a" : int })
4795+ self .assertEqual (Child .__extra_items__ , int )
4796+ self .assertTrue (Child .__closed__ )
47804797
47814798 class GrandChild (Child , closed = True ):
47824799 __extra_items__ : str
47834800
4784- self .assertEqual (GrandChild .__required_keys__ , frozenset ({'a' , "__extra_items__" }))
4801+ self .assertEqual (GrandChild .__required_keys__ , frozenset ({'a' }))
47854802 self .assertEqual (GrandChild .__optional_keys__ , frozenset ({}))
47864803 self .assertEqual (GrandChild .__readonly_keys__ , frozenset ({}))
4787- self .assertEqual (GrandChild .__mutable_keys__ , frozenset ({'a' , "__extra_items__" }))
4788- self .assertEqual (GrandChild .__annotations__ , {"__extra_items__" : int , " a" : int })
4804+ self .assertEqual (GrandChild .__mutable_keys__ , frozenset ({'a' }))
4805+ self .assertEqual (GrandChild .__annotations__ , {"a" : int })
47894806 self .assertEqual (GrandChild .__extra_items__ , str )
47904807 self .assertTrue (GrandChild .__closed__ )
47914808
0 commit comments