@@ -8487,6 +8487,36 @@ class Child(Base1, Base2):
84878487 self .assertEqual (Child .__required_keys__ , frozenset (['a' ]))
84888488 self .assertEqual (Child .__optional_keys__ , frozenset ())
84898489
8490+ def test_inheritance_pep563 (self ):
8491+ def _make_td (future , class_name , annos , base , extra_names = None ):
8492+ lines = []
8493+ if future :
8494+ lines .append ('from __future__ import annotations' )
8495+ lines .append ('from typing import TypedDict' )
8496+ lines .append (f'class { class_name } ({ base } ):' )
8497+ for name , anno in annos .items ():
8498+ lines .append (f' { name } : { anno } ' )
8499+ code = '\n ' .join (lines )
8500+ ns = run_code (code , extra_names )
8501+ return ns [class_name ]
8502+
8503+ for base_future in (True , False ):
8504+ for child_future in (True , False ):
8505+ with self .subTest (base_future = base_future , child_future = child_future ):
8506+ base = _make_td (
8507+ base_future , "Base" , {"base" : "int" }, "TypedDict"
8508+ )
8509+ self .assertIsNotNone (base .__annotate__ )
8510+ child = _make_td (
8511+ child_future , "Child" , {"child" : "int" }, "Base" , {"Base" : base }
8512+ )
8513+ base_anno = ForwardRef ("int" , module = "builtins" ) if base_future else int
8514+ child_anno = ForwardRef ("int" , module = "builtins" ) if child_future else int
8515+ self .assertEqual (base .__annotations__ , {'base' : base_anno })
8516+ self .assertEqual (
8517+ child .__annotations__ , {'child' : child_anno , 'base' : base_anno }
8518+ )
8519+
84908520 def test_required_notrequired_keys (self ):
84918521 self .assertEqual (NontotalMovie .__required_keys__ ,
84928522 frozenset ({"title" }))
0 commit comments