-- Test cases for the default plugin
--
-- Note that we have additional test cases in pythoneval.test (that use real typeshed stubs).


[case testContextManagerWithGenericFunction]
from contextlib import contextmanager
from typing import TypeVar, Iterator

T = TypeVar('T')

@contextmanager
def yield_id(item: T) -> Iterator[T]:
    yield item

reveal_type(yield_id) # E: Revealed type is 'def [T] (item: T`-1) -> contextlib.GeneratorContextManager[T`-1]'

with yield_id(1) as x:
    reveal_type(x) # E: Revealed type is 'builtins.int*'

f = yield_id
def g(x, y): pass
f = g # E: Incompatible types in assignment (expression has type "Callable[[Any, Any], Any]", variable has type "Callable[[T], GeneratorContextManager[T]]")
[typing fixtures/typing-full.pyi]

[case testContextManagerWithUnspecifiedArguments]
from contextlib import contextmanager
from typing import Callable, Iterator

c: Callable[..., Iterator[int]]
reveal_type(c) # E: Revealed type is 'def (*Any, **Any) -> typing.Iterator[builtins.int]'
reveal_type(contextmanager(c)) # E: Revealed type is 'def (*Any, **Any) -> contextlib.GeneratorContextManager[builtins.int*]'
[typing fixtures/typing-full.pyi]
