@@ -169,6 +169,24 @@ class MyList(list):
169
169
self .assertEqual (repr (list [str ]), 'list[str]' )
170
170
self .assertEqual (repr (list [()]), 'list[()]' )
171
171
self .assertEqual (repr (tuple [int , ...]), 'tuple[int, ...]' )
172
+ x1 = tuple [
173
+ tuple ( # Effectively the same as starring; TODO
174
+ tuple [int ]
175
+ )
176
+ ]
177
+ self .assertEqual (repr (x1 ), 'tuple[*tuple[int]]' )
178
+ x2 = tuple [
179
+ tuple ( # Ditto TODO
180
+ tuple [int , str ]
181
+ )
182
+ ]
183
+ self .assertEqual (repr (x2 ), 'tuple[*tuple[int, str]]' )
184
+ x3 = tuple [
185
+ tuple ( # Ditto TODO
186
+ tuple [int , ...]
187
+ )
188
+ ]
189
+ self .assertEqual (repr (x3 ), 'tuple[*tuple[int, ...]]' )
172
190
self .assertTrue (repr (MyList [int ]).endswith ('.BaseTest.test_repr.<locals>.MyList[int]' ))
173
191
self .assertEqual (repr (list [str ]()), '[]' ) # instances should keep their normal repr
174
192
@@ -182,6 +200,7 @@ def test_exposed_type(self):
182
200
183
201
def test_parameters (self ):
184
202
from typing import List , Dict , Callable
203
+
185
204
D0 = dict [str , int ]
186
205
self .assertEqual (D0 .__args__ , (str , int ))
187
206
self .assertEqual (D0 .__parameters__ , ())
@@ -197,6 +216,7 @@ def test_parameters(self):
197
216
D2b = dict [T , T ]
198
217
self .assertEqual (D2b .__args__ , (T , T ))
199
218
self .assertEqual (D2b .__parameters__ , (T ,))
219
+
200
220
L0 = list [str ]
201
221
self .assertEqual (L0 .__args__ , (str ,))
202
222
self .assertEqual (L0 .__parameters__ , ())
@@ -219,6 +239,45 @@ def test_parameters(self):
219
239
self .assertEqual (L5 .__args__ , (Callable [[K , V ], K ],))
220
240
self .assertEqual (L5 .__parameters__ , (K , V ))
221
241
242
+ T1 = tuple [
243
+ tuple ( # Ditto TODO
244
+ tuple [int ]
245
+ )
246
+ ]
247
+ self .assertEqual (
248
+ T1 .__args__ ,
249
+ tuple ( # Ditto TODO
250
+ tuple [int ]
251
+ )
252
+ )
253
+ self .assertEqual (T1 .__parameters__ , ())
254
+
255
+ T2 = tuple [
256
+ tuple ( # Ditto TODO
257
+ tuple [T ]
258
+ )
259
+ ]
260
+ self .assertEqual (
261
+ T2 .__args__ ,
262
+ tuple ( # Ditto TODO
263
+ tuple [T ]
264
+ )
265
+ )
266
+ self .assertEqual (T2 .__parameters__ , (T ,))
267
+
268
+ T4 = tuple [
269
+ tuple ( # Ditto TODO
270
+ tuple [int , str ]
271
+ )
272
+ ]
273
+ self .assertEqual (
274
+ T4 .__args__ ,
275
+ tuple ( # Ditto TODO
276
+ tuple [int , str ]
277
+ )
278
+ )
279
+ self .assertEqual (T4 .__parameters__ , ())
280
+
222
281
def test_parameter_chaining (self ):
223
282
from typing import List , Dict , Union , Callable
224
283
self .assertEqual (list [T ][int ], list [int ])
@@ -249,6 +308,19 @@ def test_parameter_chaining(self):
249
308
def test_equality (self ):
250
309
self .assertEqual (list [int ], list [int ])
251
310
self .assertEqual (dict [str , int ], dict [str , int ])
311
+ self .assertEqual ((* tuple [int ],)[0 ], (* tuple [int ],)[0 ])
312
+ self .assertEqual (
313
+ tuple [
314
+ tuple ( # Effectively the same as starring; TODO
315
+ tuple [int ]
316
+ )
317
+ ],
318
+ tuple [
319
+ tuple ( # Ditto TODO
320
+ tuple [int ]
321
+ )
322
+ ]
323
+ )
252
324
self .assertNotEqual (dict [str , int ], dict [str , str ])
253
325
self .assertNotEqual (list , list [int ])
254
326
self .assertNotEqual (list [int ], list )
@@ -346,6 +418,24 @@ def __new__(cls, *args, **kwargs):
346
418
with self .assertRaises (TypeError ):
347
419
Bad (list , int , bad = int )
348
420
421
+ def test_iter_creates_starred_tuple (self ):
422
+ t = tuple [int , str ]
423
+ iter_t = iter (t )
424
+ x = next (iter_t )
425
+ self .assertEqual (repr (x ), '*tuple[int, str]' )
426
+
427
+ def test_calling_next_twice_raises_stopiteration (self ):
428
+ t = tuple [int , str ]
429
+ iter_t = iter (t )
430
+ next (iter_t )
431
+ with self .assertRaises (StopIteration ):
432
+ next (iter_t )
433
+
434
+ def test_del_iter (self ):
435
+ t = tuple [int , str ]
436
+ iter_x = iter (t )
437
+ del iter_x
438
+
349
439
350
440
if __name__ == "__main__" :
351
441
unittest .main ()
0 commit comments