@@ -5301,7 +5301,6 @@ class Z(Generic[P]):
53015301 class ProtoZ (Protocol [P ]):
53025302 pass
53035303
5304- things = "arguments" if sys .version_info >= (3 , 10 ) else "parameters"
53055304 for klass in Z , ProtoZ :
53065305 with self .subTest (klass = klass .__name__ ):
53075306 # Note: For 3.10+ __args__ are nested tuples here ((int, ),) instead of (int, )
@@ -5317,6 +5316,7 @@ class ProtoZ(Protocol[P]):
53175316
53185317 G8 = klass [Concatenate [T , ...]]
53195318 self .assertEqual (G8 .__args__ , (Concatenate [T , ...], ))
5319+ self .assertEqual (G8 .__parameters__ , (T ,))
53205320
53215321 G9 = klass [Concatenate [T , P_2 ]]
53225322 self .assertEqual (G9 .__args__ , (Concatenate [T , P_2 ], ))
@@ -5326,6 +5326,25 @@ class ProtoZ(Protocol[P]):
53265326 G10args = G10 .__args__ [0 ] if sys .version_info >= (3 , 10 ) else G10 .__args__
53275327 self .assertEqual (G10args , (int , Concatenate [str , P ], ))
53285328
5329+ def test_single_argument_generic_with_parameter_expressions (self ):
5330+ P = ParamSpec ("P" )
5331+ T = TypeVar ("T" )
5332+ P_2 = ParamSpec ("P_2" )
5333+
5334+ class Z (Generic [P ]):
5335+ pass
5336+
5337+ class ProtoZ (Protocol [P ]):
5338+ pass
5339+
5340+ things = "arguments" if sys .version_info >= (3 , 10 ) else "parameters"
5341+ for klass in Z , ProtoZ :
5342+ with self .subTest (klass = klass .__name__ ):
5343+ G6 = klass [int , str , T ]
5344+ G8 = klass [Concatenate [T , ...]]
5345+ G9 = klass [Concatenate [T , P_2 ]]
5346+ G10 = klass [int , Concatenate [str , P ]]
5347+
53295348 with self .subTest ("Check generic substitution" , klass = klass .__name__ ):
53305349 if sys .version_info < (3 , 10 ):
53315350 self .skipTest ("_ConcatenateGenericAlias not subscriptable" )
@@ -5339,14 +5358,13 @@ class ProtoZ(Protocol[P]):
53395358 self .assertEqual (G5 .__args__ , ((int , str , T ),))
53405359 H9 = G9 [int , [T ]]
53415360
5361+ self .assertEqual (G9 .__parameters__ , (T , P_2 ))
53425362 with self .subTest ("Check parametrization" , klass = klass .__name__ ):
53435363 if sys .version_info [:2 ] == (3 , 10 ):
53445364 self .skipTest ("Parameter detection fails in 3.10" )
53455365 with self .assertRaisesRegex (TypeError , f"Too few { things } " ):
53465366 G9 [int ] # for python 3.10 this has no parameters
53475367 self .assertEqual (G6 .__parameters__ , (T ,))
5348- self .assertEqual (G8 .__parameters__ , (T ,))
5349- self .assertEqual (G9 .__parameters__ , (T , P_2 ))
53505368 if sys .version_info >= (3 , 10 ): # skipped above
53515369 self .assertEqual (G5 .__parameters__ , (T ,))
53525370 self .assertEqual (H9 .__parameters__ , (T ,))
0 commit comments