@@ -4341,13 +4341,13 @@ class Unclosed(TypedDict, closed=False):
43414341 class ChildUnclosed (Closed , Unclosed ):
43424342 ...
43434343
4344- self .assertFalse (ChildUnclosed .__closed__ )
4344+ self .assertIs (ChildUnclosed .__closed__ , None )
43454345 self .assertEqual (ChildUnclosed .__extra_items__ , NoExtraItems )
43464346
43474347 class ChildClosed (Unclosed , Closed ):
43484348 ...
43494349
4350- self .assertFalse (ChildClosed .__closed__ )
4350+ self .assertIs (ChildClosed .__closed__ , None )
43514351 self .assertEqual (ChildClosed .__extra_items__ , NoExtraItems )
43524352
43534353 def test_extra_items_class_arg (self ):
@@ -4783,8 +4783,8 @@ class ExtraReadOnly(TypedDict):
47834783 self .assertEqual (ExtraReadOnly .__optional_keys__ , frozenset ({}))
47844784 self .assertEqual (ExtraReadOnly .__readonly_keys__ , frozenset ({'__extra_items__' }))
47854785 self .assertEqual (ExtraReadOnly .__mutable_keys__ , frozenset ({}))
4786- self .assertEqual (ExtraReadOnly .__extra_items__ , NoExtraItems )
4787- self .assertFalse (ExtraReadOnly .__closed__ )
4786+ self .assertIs (ExtraReadOnly .__extra_items__ , NoExtraItems )
4787+ self .assertIs (ExtraReadOnly .__closed__ , None )
47884788
47894789 class ExtraRequired (TypedDict ):
47904790 __extra_items__ : Required [str ]
@@ -4793,8 +4793,8 @@ class ExtraRequired(TypedDict):
47934793 self .assertEqual (ExtraRequired .__optional_keys__ , frozenset ({}))
47944794 self .assertEqual (ExtraRequired .__readonly_keys__ , frozenset ({}))
47954795 self .assertEqual (ExtraRequired .__mutable_keys__ , frozenset ({'__extra_items__' }))
4796- self .assertEqual (ExtraRequired .__extra_items__ , NoExtraItems )
4797- self .assertFalse (ExtraRequired .__closed__ )
4796+ self .assertIs (ExtraRequired .__extra_items__ , NoExtraItems )
4797+ self .assertIs (ExtraRequired .__closed__ , None )
47984798
47994799 class ExtraNotRequired (TypedDict ):
48004800 __extra_items__ : NotRequired [str ]
@@ -4803,8 +4803,8 @@ class ExtraNotRequired(TypedDict):
48034803 self .assertEqual (ExtraNotRequired .__optional_keys__ , frozenset ({'__extra_items__' }))
48044804 self .assertEqual (ExtraNotRequired .__readonly_keys__ , frozenset ({}))
48054805 self .assertEqual (ExtraNotRequired .__mutable_keys__ , frozenset ({'__extra_items__' }))
4806- self .assertEqual (ExtraNotRequired .__extra_items__ , NoExtraItems )
4807- self .assertFalse (ExtraNotRequired .__closed__ )
4806+ self .assertIs (ExtraNotRequired .__extra_items__ , NoExtraItems )
4807+ self .assertIs (ExtraNotRequired .__closed__ , None )
48084808
48094809 @skipIf (TYPING_3_14_0 , "Only supported on <3.14" )
48104810 def test_closed_inheritance_legacy (self ):
@@ -4817,7 +4817,7 @@ class Base(TypedDict, closed=True):
48174817 self .assertEqual (Base .__mutable_keys__ , frozenset ({}))
48184818 self .assertEqual (Base .__annotations__ , {})
48194819 self .assertEqual (Base .__extra_items__ , ReadOnly [Union [str , None ]])
4820- self .assertTrue (Base .__closed__ )
4820+ self .assertIs (Base .__closed__ , True )
48214821
48224822 class Child (Base , closed = True ):
48234823 a : int
@@ -4828,7 +4828,7 @@ class Child(Base, closed=True):
48284828 self .assertEqual (Child .__readonly_keys__ , frozenset ({}))
48294829 self .assertEqual (Child .__mutable_keys__ , frozenset ({'a' }))
48304830 self .assertEqual (Child .__annotations__ , {"a" : int })
4831- self .assertEqual (Child .__extra_items__ , int )
4831+ self .assertIs (Child .__extra_items__ , int )
48324832 self .assertIs (Child .__closed__ , True )
48334833
48344834 class GrandChild (Child , closed = True ):
@@ -4839,8 +4839,8 @@ class GrandChild(Child, closed=True):
48394839 self .assertEqual (GrandChild .__readonly_keys__ , frozenset ({}))
48404840 self .assertEqual (GrandChild .__mutable_keys__ , frozenset ({'a' }))
48414841 self .assertEqual (GrandChild .__annotations__ , {"a" : int })
4842- self .assertEqual (GrandChild .__extra_items__ , str )
4843- self .assertTrue (GrandChild .__closed__ )
4842+ self .assertIs (GrandChild .__extra_items__ , str )
4843+ self .assertIs (GrandChild .__closed__ , True )
48444844
48454845 def test_closed_inheritance (self ):
48464846 class Base (TypedDict , extra_items = ReadOnly [Union [str , None ]]):
@@ -4852,7 +4852,7 @@ class Base(TypedDict, extra_items=ReadOnly[Union[str, None]]):
48524852 self .assertEqual (Base .__mutable_keys__ , frozenset ({"a" }))
48534853 self .assertEqual (Base .__annotations__ , {"a" : int })
48544854 self .assertEqual (Base .__extra_items__ , ReadOnly [Union [str , None ]])
4855- self .assertFalse (Base .__closed__ )
4855+ self .assertIs (Base .__closed__ , None )
48564856
48574857 class Child (Base , extra_items = int ):
48584858 a : str
@@ -4862,8 +4862,8 @@ class Child(Base, extra_items=int):
48624862 self .assertEqual (Child .__readonly_keys__ , frozenset ({}))
48634863 self .assertEqual (Child .__mutable_keys__ , frozenset ({'a' }))
48644864 self .assertEqual (Child .__annotations__ , {"a" : str })
4865- self .assertEqual (Child .__extra_items__ , int )
4866- self .assertFalse (Child .__closed__ )
4865+ self .assertIs (Child .__extra_items__ , int )
4866+ self .assertIs (Child .__closed__ , None )
48674867
48684868 class GrandChild (Child , closed = True ):
48694869 a : float
@@ -4873,21 +4873,31 @@ class GrandChild(Child, closed=True):
48734873 self .assertEqual (GrandChild .__readonly_keys__ , frozenset ({}))
48744874 self .assertEqual (GrandChild .__mutable_keys__ , frozenset ({'a' }))
48754875 self .assertEqual (GrandChild .__annotations__ , {"a" : float })
4876- self .assertEqual (GrandChild .__extra_items__ , Never )
4877- self .assertTrue (GrandChild .__closed__ )
4876+ self .assertIs (GrandChild .__extra_items__ , NoExtraItems )
4877+ self .assertIs (GrandChild .__closed__ , True )
4878+
4879+ class GrandGrandChild (GrandChild ):
4880+ ...
4881+ self .assertEqual (GrandGrandChild .__required_keys__ , frozenset ({'a' }))
4882+ self .assertEqual (GrandGrandChild .__optional_keys__ , frozenset ({}))
4883+ self .assertEqual (GrandGrandChild .__readonly_keys__ , frozenset ({}))
4884+ self .assertEqual (GrandGrandChild .__mutable_keys__ , frozenset ({'a' }))
4885+ self .assertEqual (GrandGrandChild .__annotations__ , {"a" : float })
4886+ self .assertIs (GrandGrandChild .__extra_items__ , NoExtraItems )
4887+ self .assertIs (GrandGrandChild .__closed__ , None )
48784888
48794889 def test_implicit_extra_items (self ):
48804890 class Base (TypedDict ):
48814891 a : int
48824892
4883- self .assertEqual (Base .__extra_items__ , NoExtraItems )
4884- self .assertFalse (Base .__closed__ )
4893+ self .assertIs (Base .__extra_items__ , NoExtraItems )
4894+ self .assertIs (Base .__closed__ , None )
48854895
48864896 class ChildA (Base , closed = True ):
48874897 ...
48884898
4889- self .assertEqual (ChildA .__extra_items__ , Never )
4890- self .assertTrue (ChildA .__closed__ )
4899+ self .assertEqual (ChildA .__extra_items__ , NoExtraItems )
4900+ self .assertIs (ChildA .__closed__ , True )
48914901
48924902 @skipIf (TYPING_3_14_0 , "Backwards compatibility only for Python 3.13" )
48934903 def test_implicit_extra_items_before_3_14 (self ):
@@ -4896,8 +4906,8 @@ class Base(TypedDict):
48964906 class ChildB (Base , closed = True ):
48974907 __extra_items__ : None
48984908
4899- self .assertEqual (ChildB .__extra_items__ , type (None ))
4900- self .assertTrue (ChildB .__closed__ )
4909+ self .assertIs (ChildB .__extra_items__ , type (None ))
4910+ self .assertIs (ChildB .__closed__ , True )
49014911
49024912 @skipIf (
49034913 TYPING_3_13_0 ,
@@ -4907,7 +4917,7 @@ class ChildB(Base, closed=True):
49074917 def test_backwards_compatibility (self ):
49084918 with self .assertWarns (DeprecationWarning ):
49094919 TD = TypedDict ("TD" , closed = int )
4910- self .assertFalse (TD .__closed__ )
4920+ self .assertIs (TD .__closed__ , None )
49114921 self .assertEqual (TD .__annotations__ , {"closed" : int })
49124922
49134923
0 commit comments