[case testIncorrectDispatchArgumentWhenDoesntMatchFallback]
from functools import singledispatch

class A: pass
class B(A): pass

@singledispatch
def fun(arg: A) -> None:
    pass
@fun.register
def fun_b(arg: B) -> None:
    pass

fun(1) # E: Argument 1 to "fun" has incompatible type "int"; expected "A"

# probably won't be required after singledispatch is special cased
[builtins fixtures/args.pyi]

[case testMultipleUnderscoreFunctionsIsntError]
from functools import singledispatch

@singledispatch
def fun(arg) -> None:
    pass
@fun.register
def _(arg: str) -> None:
    pass
@fun.register
def _(arg: int) -> None:
    pass

[builtins fixtures/args.pyi]

[case testCheckNonDispatchArgumentsWithTypeAlwaysTheSame]
from functools import singledispatch

class A: pass
class B(A): pass

@singledispatch
def f(arg: A, arg2: str) -> None:
    pass

@f.register
def g(arg: B, arg2: str) -> None:
    pass

f(A(), 'a')
f(A(), 5) # E: Argument 2 to "f" has incompatible type "int"; expected "str"

f(B(), 'a')
f(B(), 1) # E: Argument 2 to "f" has incompatible type "int"; expected "str"

[builtins fixtures/args.pyi]

[case testImplementationHasSameDispatchTypeAsFallback-xfail]
from functools import singledispatch

# TODO: differentiate between fallback and other implementations in error message
@singledispatch
def f(arg: int) -> None: # E: singledispatch implementation 1 will never be used: implementation 2's dispatch type is the same
    pass

@f.register
def g(arg: int) -> None:
    pass

[builtins fixtures/args.pyi]

[case testRegisterHasDifferentTypeThanTypeSignature-xfail]
from functools import singledispatch

@singledispatch
def f(arg) -> None: 
    pass

@f.register(str)
def g(arg: int) -> None: # E: Argument to register "str" is incompatible with type "int" in function signature
    pass

[builtins fixtures/args.pyi]

[case testDispatchBasedOnTypeAnnotationsRequires37-xfail]
# flags: --python-version 3.6
# the docs for singledispatch say that register didn't accept type annotations until python 3.7
from functools import singledispatch

@singledispatch
def f(arg) -> None:
    pass
@f.register
def g(arg: int) -> None: # E: Singledispatch based on type annotations is only supported in Python 3.7 and greater
    pass

[builtins fixtures/args.pyi]

[case testTypePassedAsArgumentToRegister]
from functools import singledispatch

@singledispatch
def f(arg: int) -> None:
    pass
@f.register(str)
def g(arg) -> None: # E: Dispatch type "str" must be subtype of fallback function first argument "int"
    pass

[builtins fixtures/args.pyi]

[case testCustomClassPassedAsTypeToRegister]
from functools import singledispatch
class A: pass

@singledispatch
def f(arg: int) -> None:
    pass
@f.register(A)
def g(arg) -> None: # E: Dispatch type "A" must be subtype of fallback function first argument "int"
    pass

[builtins fixtures/args.pyi]

[case testMultiplePossibleImplementationsForKnownType]
from functools import singledispatch
from typing import Union

class A: pass
class B(A): pass
class C: pass

@singledispatch
def f(arg: Union[A, C]) -> None:
    pass

@f.register
def g(arg: B) -> None:
    pass

@f.register
def h(arg: C) -> None:
    pass

x: Union[B, C]
f(x)

[builtins fixtures/args.pyi]

[case testOnePartOfUnionDoesNotHaveCorrespondingImplementation]
from functools import singledispatch
from typing import Union

class A: pass
class B(A): pass
class C: pass

@singledispatch
def f(arg: Union[A, C]) -> None:
    pass

@f.register
def g(arg: B) -> None:
    pass

@f.register
def h(arg: C) -> None:
    pass

x: Union[B, C, int]
f(x)  # E: Argument 1 to "f" has incompatible type "Union[B, C, int]"; expected "Union[A, C]"

[builtins fixtures/args.pyi]

[case testABCAllowedAsDispatchType]
from functools import singledispatch
from collections.abc import Mapping

@singledispatch
def f(arg) -> None:
    pass

@f.register
def g(arg: Mapping) -> None:
    pass

[builtins fixtures/args.pyi]
[builtins fixtures/list.pyi]
[builtins fixtures/dict.pyi]

[case testIncorrectArgumentsInSingledispatchFunctionDefinition]
from functools import singledispatch

@singledispatch
def f() -> None: # E: Singledispatch function requires at least one argument
    pass

@singledispatch
def g(**kwargs) -> None: # E: First argument to singledispatch function must be a positional argument
    pass

@singledispatch
def h(*, x) -> None: # E: First argument to singledispatch function must be a positional argument
    pass

@singledispatch
def i(*, x=1) -> None: # E: First argument to singledispatch function must be a positional argument
    pass

[builtins fixtures/args.pyi]

[case testDispatchTypeIsNotASubtypeOfFallbackFirstArgument]
from functools import singledispatch

class A: pass
class B(A): pass
class C: pass

@singledispatch
def f(arg: A) -> None:
    pass

@f.register
def g(arg: B) -> None:
    pass

@f.register
def h(arg: C) -> None: # E: Dispatch type "C" must be subtype of fallback function first argument "A"
    pass

[builtins fixtures/args.pyi]

[case testMultipleSingledispatchFunctionsIntermixed]
from functools import singledispatch

class A: pass
class B(A): pass
class C: pass

@singledispatch
def f(arg: A) -> None:
    pass

@singledispatch
def h(arg: C) -> None:
    pass

@f.register
def g(arg: B) -> None:
    pass

[builtins fixtures/args.pyi]

[case testAnyInConstructorArgsWithClassPassedToRegister]
from functools import singledispatch
from typing import Any

class Base: pass
class ConstExpr:
    def __init__(self, **kwargs: Any) -> None: pass

@singledispatch
def f(arg: Base) -> ConstExpr:
    pass

@f.register(ConstExpr)
def g(arg: ConstExpr) -> ConstExpr: # E: Dispatch type "ConstExpr" must be subtype of fallback function first argument "Base"
    pass


[builtins fixtures/args.pyi]

[case testRegisteredImplementationUsedBeforeDefinition]
from functools import singledispatch
from typing import Union

class Node: pass
class MypyFile(Node): pass
class Missing: pass

@singledispatch
def f(a: Union[Node, Missing]) -> None:
    pass

@f.register
def g(a: MypyFile) -> None:
    x: Missing
    f(x)

@f.register
def h(a: Missing) -> None:
    pass

[builtins fixtures/args.pyi]

[case testIncorrectArgumentTypeWhenCallingRegisteredImplDirectly]
from functools import singledispatch

@singledispatch
def f(arg, arg2: str) -> bool:
    return False

@f.register
def g(arg: int, arg2: str) -> bool:
    pass

@f.register(str)
def h(arg, arg2: str) -> bool:
    pass

g('a', 'a') # E: Argument 1 to "g" has incompatible type "str"; expected "int"
g(1, 1) # E: Argument 2 to "g" has incompatible type "int"; expected "str"

# don't show errors for incorrect first argument here, because there's no type annotation for the
# first argument
h(1, 'a')
h('a', 1) # E: Argument 2 to "h" has incompatible type "int"; expected "str"

[builtins fixtures/args.pyi]

[case testDontCrashWhenRegisteringAfterError]
import functools
a = functools.singledispatch('a') # E: Need type annotation for "a" # E: Argument 1 to "singledispatch" has incompatible type "str"; expected "Callable[..., <nothing>]"

@a.register(int)
def default(val) -> int:
    return 3

[builtins fixtures/args.pyi]
