@@ -425,6 +425,32 @@ def func_d2(
425425 n = ClassD2[int, float, str]()
426426 reveal_type(n) # N: Revealed type is "__main__.ClassD2[builtins.int, builtins.float, builtins.str]"
427427
428+ [case testTypeVarDefaultsClassRecursive2]
429+ # flags: --disallow-any-generics
430+ from typing import Generic, ParamSpec
431+
432+ P1 = ParamSpec("P1", default=[int, str])
433+ P2 = ParamSpec("P2", default=P1)
434+ P3 = ParamSpec("P3")
435+
436+ class ClassE1(Generic[P1, P2]): ...
437+
438+ def func_e1(
439+ a: ClassE1,
440+ b: ClassE1[[float]],
441+ c: ClassE1[[float], [str]],
442+ ) -> None:
443+ reveal_type(a) # N: Revealed type is "__main__.ClassE1[[builtins.int, builtins.str], [builtins.int, builtins.str]]"
444+ reveal_type(b) # N: Revealed type is "__main__.ClassE1[[builtins.float], [builtins.float]]"
445+ reveal_type(c) # N: Revealed type is "__main__.ClassE1[[builtins.float], [builtins.str]]"
446+
447+ k = ClassE1()
448+ # reveal_type(k) # Revealed type is "__main__.ClassE1[[builtins.int, builtins.str], [builtins.int, builtins.str]]" # TODO
449+ l = ClassE1[[float]]()
450+ reveal_type(l) # N: Revealed type is "__main__.ClassE1[[builtins.float], [builtins.float]]"
451+ m = ClassE1[[float], [str]]()
452+ reveal_type(m) # N: Revealed type is "__main__.ClassE1[[builtins.float], [builtins.str]]"
453+
428454[case testTypeVarDefaultsTypeAlias1]
429455# flags: --disallow-any-generics
430456from typing import Any, Dict, List, Tuple, TypeVar, Union
0 commit comments