@@ -377,6 +377,54 @@ class ClassD1(Generic[T1, T2]): ...
377377# reveal_type(c)
378378[builtins fixtures/tuple.pyi]
379379
380+ [case testTypeVarDefaultsClassRecursive1]
381+ # flags: --disallow-any-generics
382+ from typing import Generic, TypeVar
383+
384+ T1 = TypeVar("T1", default=str)
385+ T2 = TypeVar("T2", default=T1)
386+ T3 = TypeVar("T3", default=T2)
387+
388+ class ClassD1(Generic[T1, T2]): ...
389+
390+ def func_d1(
391+ a: ClassD1,
392+ b: ClassD1[int],
393+ c: ClassD1[int, float]
394+ ) -> None:
395+ reveal_type(a) # N: Revealed type is "__main__.ClassD1[builtins.str, builtins.str]"
396+ reveal_type(b) # N: Revealed type is "__main__.ClassD1[builtins.int, builtins.int]"
397+ reveal_type(c) # N: Revealed type is "__main__.ClassD1[builtins.int, builtins.float]"
398+
399+ k = ClassD1()
400+ reveal_type(k) # N: Revealed type is "__main__.ClassD1[builtins.str, builtins.str]"
401+ l = ClassD1[int]()
402+ reveal_type(l) # N: Revealed type is "__main__.ClassD1[builtins.int, builtins.int]"
403+ m = ClassD1[int, float]()
404+ reveal_type(m) # N: Revealed type is "__main__.ClassD1[builtins.int, builtins.float]"
405+
406+ class ClassD2(Generic[T1, T2, T3]): ...
407+
408+ def func_d2(
409+ a: ClassD2,
410+ b: ClassD2[int],
411+ c: ClassD2[int, float],
412+ d: ClassD2[int, float, str],
413+ ) -> None:
414+ reveal_type(a) # N: Revealed type is "__main__.ClassD2[builtins.str, builtins.str, builtins.str]"
415+ reveal_type(b) # N: Revealed type is "__main__.ClassD2[builtins.int, builtins.int, builtins.int]"
416+ reveal_type(c) # N: Revealed type is "__main__.ClassD2[builtins.int, builtins.float, builtins.float]"
417+ reveal_type(d) # N: Revealed type is "__main__.ClassD2[builtins.int, builtins.float, builtins.str]"
418+
419+ k = ClassD2()
420+ reveal_type(k) # N: Revealed type is "__main__.ClassD2[builtins.str, builtins.str, builtins.str]"
421+ l = ClassD2[int]()
422+ reveal_type(l) # N: Revealed type is "__main__.ClassD2[builtins.int, builtins.int, builtins.int]"
423+ m = ClassD2[int, float]()
424+ reveal_type(m) # N: Revealed type is "__main__.ClassD2[builtins.int, builtins.float, builtins.float]"
425+ n = ClassD2[int, float, str]()
426+ reveal_type(n) # N: Revealed type is "__main__.ClassD2[builtins.int, builtins.float, builtins.str]"
427+
380428[case testTypeVarDefaultsTypeAlias1]
381429# flags: --disallow-any-generics
382430from typing import Any, Dict, List, Tuple, TypeVar, Union
0 commit comments