@@ -735,6 +735,37 @@ def test_bad_case() -> None:
735
735
[builtins fixtures/tuple.pyi]
736
736
737
737
738
+ [case testStarArgsWithUnionSameTupleLengthsOverload]
739
+ from typing import Union, overload
740
+
741
+ class A: pass
742
+ class B: pass
743
+ class C: pass
744
+ class D: pass
745
+
746
+ @overload
747
+ def f(a: A, b: B, c: C) -> None: ...
748
+ @overload
749
+ def f(a: None, b: None, c: None) -> None: ...
750
+ def f(a: Union[A, None], b: Union[B, None], c: Union[C, None]) -> None: pass
751
+
752
+ def test_case(
753
+ good: Union[tuple[A, B, C], tuple[None, None, None]],
754
+ bad1: Union[tuple[None, B, C], tuple[A, None, None]],
755
+ bad2: tuple[Union[A, None], Union[B, None], Union[C, None]],
756
+ ) -> None:
757
+ f(*good)
758
+ f(*bad1) # E: Argument 1 to "f" has incompatible type "*Union[tuple[None, B, C], tuple[A, None, None]]"; expected "A" \
759
+ # E: Argument 1 to "f" has incompatible type "*Union[tuple[None, B, C], tuple[A, None, None]]"; expected "B" \
760
+ # E: Argument 1 to "f" has incompatible type "*Union[tuple[None, B, C], tuple[A, None, None]]"; expected "C"
761
+ f(*bad2) # E: Argument 1 to "f" has incompatible type "*tuple[Optional[A], Optional[B], Optional[C]]"; expected "A" \
762
+ # E: Argument 1 to "f" has incompatible type "*tuple[Optional[A], Optional[B], Optional[C]]"; expected "B" \
763
+ # E: Argument 1 to "f" has incompatible type "*tuple[Optional[A], Optional[B], Optional[C]]"; expected "C"
764
+
765
+ [builtins fixtures/tuple.pyi]
766
+
767
+
768
+
738
769
[case testStarArgsWithUnionDifferentTupleLengths]
739
770
from typing import Union
740
771
0 commit comments