Skip to content

Commit 0e76d9e

Browse files
Added overload test
1 parent d6f1faa commit 0e76d9e

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

test-data/unit/check-kwargs.test

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -735,6 +735,37 @@ def test_bad_case() -> None:
735735
[builtins fixtures/tuple.pyi]
736736

737737

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+
738769
[case testStarArgsWithUnionDifferentTupleLengths]
739770
from typing import Union
740771

0 commit comments

Comments
 (0)