@@ -823,6 +823,54 @@ def test_pickle(self):
823823 self .assertEqual (z .__bound__ , typevar .__bound__ )
824824 self .assertEqual (z .__default__ , typevar .__default__ )
825825
826+ def test_forward_reference_default_typevar (self ):
827+ ns = run_code (
828+ """
829+ class A[T, U = ForwardName]:
830+ pass
831+ """
832+ )
833+ U , A = ns ["A" ].__type_params__ [1 ], ns ["A" ]
834+ with self .assertRaises (NameError ):
835+ U .__default__
836+ result = A [int ]
837+ self .assertIsInstance (result .__args__ [0 ], type )
838+ self .assertIs (int , result .__args__ [0 ])
839+ self .assertIsInstance (result .__args__ [1 ], ForwardRef )
840+ self .assertEqual (result .__args__ [1 ].__forward_arg__ , 'ForwardName' )
841+
842+ def test_forward_reference_default_typevartuple (self ):
843+ ns = run_code (
844+ """
845+ class A[T, *Ts = ForwardName]:
846+ pass
847+ """
848+ )
849+ Ts , A = ns ["A" ].__type_params__ [1 ], ns ["A" ]
850+ with self .assertRaises (NameError ):
851+ Ts .__default__
852+ result = A [int ]
853+ self .assertIsInstance (result .__args__ [0 ], type )
854+ self .assertIs (int , result .__args__ [0 ])
855+ self .assertIsInstance (result .__args__ [1 ], ForwardRef )
856+ self .assertEqual (result .__args__ [1 ].__forward_arg__ , 'ForwardName' )
857+
858+ def test_forward_reference_default_paramspec (self ):
859+ ns = run_code (
860+ """
861+ class A[T, **P = ForwardName]:
862+ pass
863+ """
864+ )
865+ P , A = ns ["A" ].__type_params__ [1 ], ns ["A" ]
866+ with self .assertRaises (NameError ):
867+ P .__default__
868+ result = A [int ]
869+ self .assertIsInstance (result .__args__ [0 ], type )
870+ self .assertIs (int , result .__args__ [0 ])
871+ self .assertIsInstance (result .__args__ [1 ], ForwardRef )
872+ self .assertEqual (result .__args__ [1 ].__forward_arg__ , 'ForwardName' )
873+
826874
827875def template_replace (templates : list [str ], replacements : dict [str , list [str ]]) -> list [tuple [str ]]:
828876 """Renders templates with possible combinations of replacements.
0 commit comments