@@ -8988,23 +8988,50 @@ def test_evaluate_forward_ref_undefined(self):
89888988 )
89898989
89908990 def test_evaluate_forward_ref_nested (self ):
8991+ ref = typing_extensions .ForwardRef ("Union[int, list['str']]" )
8992+ ns = {"Union" : Union }
8993+ if sys .version_info >= (3 , 11 ):
8994+ expected = Union [int , list [str ]]
8995+ else :
8996+ expected = Union [int , list ['str' ]] # TODO: evaluate nested forward refs in Python < 3.11
8997+ self .assertEqual (
8998+ typing_extensions .evaluate_forward_ref (ref , globals = ns ),
8999+ expected ,
9000+ )
9001+ self .assertEqual (
9002+ typing_extensions .evaluate_forward_ref (
9003+ ref , globals = ns , format = typing_extensions .Format .FORWARDREF
9004+ ),
9005+ expected ,
9006+ )
9007+ self .assertEqual (
9008+ typing_extensions .evaluate_forward_ref (ref , format = typing_extensions .Format .STRING ),
9009+ "Union[int, list['str']]" ,
9010+ )
9011+
9012+ why = typing_extensions .ForwardRef ('"\' str\' "' )
9013+ self .assertIs (typing_extensions .evaluate_forward_ref (why ), str )
9014+
9015+ @skipUnless (sys .version_info >= (3 , 10 ), "Relies on PEP 604" )
9016+ def test_evaluate_forward_ref_nested_pep604 (self ):
89919017 ref = typing_extensions .ForwardRef ("int | list['str']" )
9018+ if sys .version_info >= (3 , 11 ):
9019+ expected = int | list [str ]
9020+ else :
9021+ expected = int | list ['str' ] # TODO: evaluate nested forward refs in Python < 3.11
89929022 self .assertEqual (
89939023 typing_extensions .evaluate_forward_ref (ref ),
8994- int | list [ str ] ,
9024+ expected ,
89959025 )
89969026 self .assertEqual (
89979027 typing_extensions .evaluate_forward_ref (ref , format = typing_extensions .Format .FORWARDREF ),
8998- int | list [ str ] ,
9028+ expected ,
89999029 )
90009030 self .assertEqual (
90019031 typing_extensions .evaluate_forward_ref (ref , format = typing_extensions .Format .STRING ),
90029032 "int | list['str']" ,
90039033 )
90049034
9005- why = typing_extensions .ForwardRef ('"\' str\' "' )
9006- self .assertIs (typing_extensions .evaluate_forward_ref (why ), str )
9007-
90089035 def test_evaluate_forward_ref_none (self ):
90099036 none_ref = typing_extensions .ForwardRef ('None' )
90109037 self .assertIs (typing_extensions .evaluate_forward_ref (none_ref ), None )
@@ -9016,7 +9043,7 @@ def test_globals(self):
90169043 typing_extensions .evaluate_forward_ref (ref )
90179044 self .assertEqual (
90189045 typing_extensions .evaluate_forward_ref (ref , globals = {'A' : A }),
9019- list [str ],
9046+ list [str ] if sys . version_info >= ( 3 , 11 ) else list [ 'str' ] ,
90209047 )
90219048
90229049 def test_owner (self ):
0 commit comments