Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 856e8fd

Browse files
committed
[3.11] typing: Add more tests for TypeVar (pythonGH-104571)
During the PEP 695 implementation at one point I made TypeVar.__name__ return garbage, and all of test_typing passed. So I decided to add a few more tests. In the process I discovered a minor incompatibility from the C implementation of TypeVar: empty constraints were returned as None instead of an empty tuple.. (cherry picked from commit 2693194) Co-authored-by: Jelle Zijlstra <[email protected]>
1 parent 133bf09 commit 856e8fd

1 file changed

Lines changed: 33 additions & 0 deletions

File tree

Lib/test/test_typing.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,32 @@ def test_basic_plain(self):
364364
self.assertEqual(T, T)
365365
# T is an instance of TypeVar
366366
self.assertIsInstance(T, TypeVar)
367+
self.assertEqual(T.__name__, 'T')
368+
self.assertEqual(T.__constraints__, ())
369+
self.assertIs(T.__bound__, None)
370+
self.assertIs(T.__covariant__, False)
371+
self.assertIs(T.__contravariant__, False)
372+
373+
def test_attributes(self):
374+
T_bound = TypeVar('T_bound', bound=int)
375+
self.assertEqual(T_bound.__name__, 'T_bound')
376+
self.assertEqual(T_bound.__constraints__, ())
377+
self.assertIs(T_bound.__bound__, int)
378+
379+
T_constraints = TypeVar('T_constraints', int, str)
380+
self.assertEqual(T_constraints.__name__, 'T_constraints')
381+
self.assertEqual(T_constraints.__constraints__, (int, str))
382+
self.assertIs(T_constraints.__bound__, None)
383+
384+
T_co = TypeVar('T_co', covariant=True)
385+
self.assertEqual(T_co.__name__, 'T_co')
386+
self.assertIs(T_co.__covariant__, True)
387+
self.assertIs(T_co.__contravariant__, False)
388+
389+
T_contra = TypeVar('T_contra', contravariant=True)
390+
self.assertEqual(T_contra.__name__, 'T_contra')
391+
self.assertIs(T_contra.__covariant__, False)
392+
self.assertIs(T_contra.__contravariant__, True)
367393

368394
def test_typevar_instance_type_error(self):
369395
T = TypeVar('T')
@@ -454,6 +480,12 @@ def test_no_bivariant(self):
454480
with self.assertRaises(ValueError):
455481
TypeVar('T', covariant=True, contravariant=True)
456482

483+
def test_cannot_combine_explicit_and_infer(self):
484+
with self.assertRaises(ValueError):
485+
TypeVar('T', covariant=True, infer_variance=True)
486+
with self.assertRaises(ValueError):
487+
TypeVar('T', contravariant=True, infer_variance=True)
488+
457489
def test_var_substitution(self):
458490
T = TypeVar('T')
459491
subst = T.__typing_subst__
@@ -7426,6 +7458,7 @@ def test_basic_plain(self):
74267458
P = ParamSpec('P')
74277459
self.assertEqual(P, P)
74287460
self.assertIsInstance(P, ParamSpec)
7461+
self.assertEqual(P.__name__, 'P')
74297462

74307463
def test_valid_uses(self):
74317464
P = ParamSpec('P')

0 commit comments

Comments
 (0)