@@ -5873,6 +5873,77 @@ def test_subst(self):
5873
5873
with self .assertRaises (TypeError ):
5874
5874
LI [None ]
5875
5875
5876
+ def test_typevar_subst (self ):
5877
+ dec = "a decoration"
5878
+ Ts = TypeVarTuple ('Ts' )
5879
+ T = TypeVar ('T' )
5880
+ T1 = TypeVar ('T1' )
5881
+ T2 = TypeVar ('T2' )
5882
+
5883
+ A = Annotated [Tuple [Unpack [Ts ]], dec ]
5884
+ self .assertEqual (A [int ], Annotated [Tuple [int ], dec ])
5885
+ self .assertEqual (A [str , int ], Annotated [Tuple [str , int ], dec ])
5886
+ with self .assertRaises (TypeError ):
5887
+ Annotated [Unpack [Ts ], dec ]
5888
+
5889
+ B = Annotated [Tuple [T , Unpack [Ts ]], dec ]
5890
+ self .assertEqual (B [int ], Annotated [Tuple [int ], dec ])
5891
+ self .assertEqual (B [int , str ], Annotated [Tuple [int , str ], dec ])
5892
+ self .assertEqual (
5893
+ B [int , str , float ],
5894
+ Annotated [Tuple [int , str , float ], dec ]
5895
+ )
5896
+ with self .assertRaises (TypeError ):
5897
+ B [()]
5898
+
5899
+ C = Annotated [Tuple [Unpack [Ts ], T ], dec ]
5900
+ self .assertEqual (C [int ], Annotated [Tuple [int ], dec ])
5901
+ self .assertEqual (C [int , str ], Annotated [Tuple [int , str ], dec ])
5902
+ self .assertEqual (
5903
+ C [int , str , float ],
5904
+ Annotated [Tuple [int , str , float ], dec ]
5905
+ )
5906
+ with self .assertRaises (TypeError ):
5907
+ C [()]
5908
+
5909
+ D = Annotated [Tuple [T1 , Unpack [Ts ], T2 ], dec ]
5910
+ self .assertEqual (D [int , str ], Annotated [Tuple [int , str ], dec ])
5911
+ self .assertEqual (
5912
+ D [int , str , float ],
5913
+ Annotated [Tuple [int , str , float ], dec ]
5914
+ )
5915
+ self .assertEqual (
5916
+ D [int , str , bool , float ],
5917
+ Annotated [Tuple [int , str , bool , float ], dec ]
5918
+ )
5919
+ with self .assertRaises (TypeError ):
5920
+ D [int ]
5921
+
5922
+ # Now let's try creating an alias from an alias.
5923
+
5924
+ Ts2 = TypeVarTuple ('Ts2' )
5925
+ T3 = TypeVar ('T3' )
5926
+ T4 = TypeVar ('T4' )
5927
+
5928
+ E = D [T3 , Unpack [Ts2 ], T4 ]
5929
+ self .assertEqual (
5930
+ E ,
5931
+ Annotated [Tuple [T3 , Unpack [Ts2 ], T4 ], dec ]
5932
+ )
5933
+ self .assertEqual (
5934
+ E [int , str ], Annotated [Tuple [int , str ], dec ]
5935
+ )
5936
+ self .assertEqual (
5937
+ E [int , str , float ],
5938
+ Annotated [Tuple [int , str , float ], dec ]
5939
+ )
5940
+ self .assertEqual (
5941
+ E [int , str , bool , float ],
5942
+ Annotated [Tuple [int , str , bool , float ], dec ]
5943
+ )
5944
+ with self .assertRaises (TypeError ):
5945
+ E [int ]
5946
+
5876
5947
def test_annotated_in_other_types (self ):
5877
5948
X = List [Annotated [T , 5 ]]
5878
5949
self .assertEqual (X [int ], List [Annotated [int , 5 ]])
0 commit comments