@@ -349,6 +349,84 @@ def func_c4(
349349 reveal_type(m) # N: Revealed type is "__main__.ClassC4[builtins.int, builtins.float]"
350350[builtins fixtures/tuple.pyi]
351351
352+ [case testTypeVarDefaultsClassRecursive1]
353+ # flags: --disallow-any-generics
354+ from typing import Generic, TypeVar
355+
356+ T1 = TypeVar("T1", default=str)
357+ T2 = TypeVar("T2", default=T1)
358+ T3 = TypeVar("T3", default=T2)
359+
360+ class ClassD1(Generic[T1, T2]): ...
361+
362+ def func_d1(
363+ a: ClassD1,
364+ b: ClassD1[int],
365+ c: ClassD1[int, float]
366+ ) -> None:
367+ reveal_type(a) # N: Revealed type is "__main__.ClassD1[builtins.str, builtins.str]"
368+ reveal_type(b) # N: Revealed type is "__main__.ClassD1[builtins.int, builtins.int]"
369+ reveal_type(c) # N: Revealed type is "__main__.ClassD1[builtins.int, builtins.float]"
370+
371+ k = ClassD1()
372+ reveal_type(k) # N: Revealed type is "__main__.ClassD1[builtins.str, builtins.str]"
373+ l = ClassD1[int]()
374+ reveal_type(l) # N: Revealed type is "__main__.ClassD1[builtins.int, builtins.int]"
375+ m = ClassD1[int, float]()
376+ reveal_type(m) # N: Revealed type is "__main__.ClassD1[builtins.int, builtins.float]"
377+
378+ class ClassD2(Generic[T1, T2, T3]): ...
379+
380+ def func_d2(
381+ a: ClassD2,
382+ b: ClassD2[int],
383+ c: ClassD2[int, float],
384+ d: ClassD2[int, float, str],
385+ ) -> None:
386+ reveal_type(a) # N: Revealed type is "__main__.ClassD2[builtins.str, builtins.str, builtins.str]"
387+ reveal_type(b) # N: Revealed type is "__main__.ClassD2[builtins.int, builtins.int, builtins.int]"
388+ reveal_type(c) # N: Revealed type is "__main__.ClassD2[builtins.int, builtins.float, builtins.float]"
389+ reveal_type(d) # N: Revealed type is "__main__.ClassD2[builtins.int, builtins.float, builtins.str]"
390+
391+ k = ClassD2()
392+ reveal_type(k) # N: Revealed type is "__main__.ClassD2[builtins.str, builtins.str, builtins.str]"
393+ l = ClassD2[int]()
394+ reveal_type(l) # N: Revealed type is "__main__.ClassD2[builtins.int, builtins.int, builtins.int]"
395+ m = ClassD2[int, float]()
396+ reveal_type(m) # N: Revealed type is "__main__.ClassD2[builtins.int, builtins.float, builtins.float]"
397+ n = ClassD2[int, float, str]()
398+ reveal_type(n) # N: Revealed type is "__main__.ClassD2[builtins.int, builtins.float, builtins.str]"
399+
400+ [case testTypeVarDefaultsClassRecursiveMultipleFiles]
401+ # flags: --disallow-any-generics
402+ from typing import Generic, TypeVar
403+ from file2 import T as T2
404+
405+ T = TypeVar('T', default=T2)
406+
407+ class ClassG1(Generic[T2, T]):
408+ pass
409+
410+ def func(
411+ a: ClassG1,
412+ b: ClassG1[str],
413+ c: ClassG1[str, float],
414+ ) -> None:
415+ reveal_type(a) # N: Revealed type is "__main__.ClassG1[builtins.int, builtins.int]"
416+ reveal_type(b) # N: Revealed type is "__main__.ClassG1[builtins.str, builtins.str]"
417+ reveal_type(c) # N: Revealed type is "__main__.ClassG1[builtins.str, builtins.float]"
418+
419+ k = ClassG1()
420+ reveal_type(k) # N: Revealed type is "__main__.ClassG1[builtins.int, builtins.int]"
421+ l = ClassG1[str]()
422+ reveal_type(l) # N: Revealed type is "__main__.ClassG1[builtins.str, builtins.str]"
423+ m = ClassG1[str, float]()
424+ reveal_type(m) # N: Revealed type is "__main__.ClassG1[builtins.str, builtins.float]"
425+
426+ [file file2.py]
427+ from typing import TypeVar
428+ T = TypeVar('T', default=int)
429+
352430[case testTypeVarDefaultsTypeAlias1]
353431# flags: --disallow-any-generics
354432from typing import Any, Dict, List, Tuple, TypeVar, Union
0 commit comments