@@ -1726,8 +1726,9 @@ class C(Generic[T]): pass
17261726 self .assertEqual (get_args (Unpack ), ())
17271727 self .assertEqual (get_args (Callable [Concatenate [int , P ], int ]),
17281728 (Concatenate [int , P ], int ))
1729- if sys .version_info >= (3 , 9 , 2 ):
1730- # Cannot construct Callable[Concatenate[int, ...] with non-types
1729+ with self .subTest ("Concatenate[int, ...]" ):
1730+ if sys .version_info < (3 , 9 , 2 ):
1731+ self .skipTest ("arguments must be types before 3.9.2, i.e. no ..." )
17311732 self .assertEqual (get_args (Callable [Concatenate [int , ...], int ]),
17321733 (Concatenate [int , ...], int ))
17331734
@@ -5384,24 +5385,25 @@ def test_valid_uses(self):
53845385 self .assertEqual (C1 .__origin__ , C2 .__origin__ )
53855386 self .assertNotEqual (C1 , C2 )
53865387
5387- @skipUnless (TYPING_3_9_0 , "Needs PEP 585" )
5388- def test_collections_abc_callable (self ):
5388+ @skipUnless (TYPING_3_9_0 , "Needs PEP 585; no backport for 3.8 typing " )
5389+ def test_valid_uses_py39_plus (self ):
53895390 P = ParamSpec ('P' )
53905391 T = TypeVar ('T' )
5391- C3 = collections .abc .Callable [Concatenate [int , P ], int ]
5392- C4 = collections .abc .Callable [Concatenate [int , T , P ], T ]
5393- self .assertEqual (C3 .__origin__ , C4 .__origin__ )
5394- self .assertNotEqual (C3 , C4 )
53955392
5396- @skipUnless (sys .version_info >= (3 , 9 , 3 ), "Callable with Ellipsis cannot be constructed below 3.9.2" )
5397- def test_valid_uses_py39_plus (self ):
5398- T = TypeVar ('T' )
5399- C5 = Callable [Concatenate [int , ...], int ]
5400- C6 = Callable [Concatenate [int , T , ...], T ]
5393+ with self .subTest ("typing.Callable with Ellipsis" ):
5394+ if sys .version_info < (3 , 9 , 2 ):
5395+ self .skipTest ("Must use types before 3.9.2" )
5396+ C3 = Callable [Concatenate [int , ...], int ]
5397+ C4 = Callable [Concatenate [int , T , ...], T ]
5398+ self .assertEqual (C3 .__origin__ , C4 .__origin__ )
5399+ self .assertNotEqual (C3 , C4 )
5400+
5401+ # Test collections.abc.Callable too.
5402+ C5 = collections .abc .Callable [Concatenate [int , P ], int ]
5403+ C6 = collections .abc .Callable [Concatenate [int , T , P ], T ]
54015404 self .assertEqual (C5 .__origin__ , C6 .__origin__ )
54025405 self .assertNotEqual (C5 , C6 )
54035406
5404- # Test collections.abc.Callable too.
54055407 C7 = collections .abc .Callable [Concatenate [int , ...], int ]
54065408 C8 = collections .abc .Callable [Concatenate [int , T , ...], T ]
54075409 self .assertEqual (C7 .__origin__ , C8 .__origin__ )
@@ -5423,26 +5425,29 @@ def test_invalid_uses(self):
54235425 ):
54245426 Concatenate [P , T ]
54255427
5426- # Cannot construct a Callable with Ellipsis in 3.8 as args must be types
5427- if sys .version_info >= (3 , 9 , 2 ):
5428- with self .assertRaisesRegex (
5429- TypeError ,
5430- 'is not a generic class' ,
5431- ):
5432- Callable [Concatenate [int , ...], Any ][T ]
5428+ @skipIf (sys .version_info < (3 , 9 , 2 ), "Args must be types below 3.9.2" )
5429+ def test_invalid_uses_py39_2_plus (self ):
5430+ T = TypeVar ('T' )
5431+ with self .assertRaisesRegex (
5432+ TypeError ,
5433+ 'is not a generic class' ,
5434+ ):
5435+ Callable [Concatenate [int , ...], Any ][T ]
54335436
5434- if not TYPING_3_11_0 :
5435- with self .assertRaisesRegex (
5436- TypeError ,
5437- 'each arg must be a type' ,
5438- ):
5439- Concatenate [1 , P ]
5437+ @skipIf (TYPING_3_11_0 , "Args can be non-types in 3.11+" )
5438+ def test_invalid_uses_before_3_11 (self ):
5439+ P = ParamSpec ('P' )
5440+ with self .assertRaisesRegex (
5441+ TypeError ,
5442+ 'each arg must be a type' ,
5443+ ):
5444+ Concatenate [1 , P ]
54405445
5441- with self .assertRaisesRegex (
5442- TypeError ,
5443- 'each arg must be a type.' ,
5444- ):
5445- Concatenate [1 , ..., P ]
5446+ with self .assertRaisesRegex (
5447+ TypeError ,
5448+ 'each arg must be a type.' ,
5449+ ):
5450+ Concatenate [1 , ..., P ]
54465451
54475452 @skipUnless (TYPING_3_11_0 or (3 , 10 , 0 ) <= sys .version_info < (3 , 10 , 2 ),
54485453 "Cannot be backported to <=3.9"
0 commit comments