o
    tBh                     @  s   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZmZmZ d dlZd dlmZmZ d dlmZ ejd%d
dZdZdZdZ	d&d'ddZG dd dZd(ddZG dd de
jZd)d!d"ZG d#d$ d$e
jZ dS )*    )annotationsN)AnyCallableIterator)parse_options
test_stubs)root_dirmod_namestrreturnIterator[str]c              
   c  s    t  }tjd d  }t M}z-t | tjd |kr%tjd| |V  W |d d  t_| tjv r9tj| = t | n|d d  t_| tjv rOtj| = t | w W d    d S 1 s`w   Y  d S )Nr   )	osgetcwdsyspathtempfileTemporaryDirectorychdirinsertmodules)r	   currentcurrent_syspathtmp r   m/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypy/test/teststubtest.pyuse_tmp_dir   s$   



"r   test_moduleaP  
Any = object()

class _SpecialForm:
    def __getitem__(self, typeargs: Any) -> object: ...

Callable: _SpecialForm = ...
Generic: _SpecialForm = ...
Protocol: _SpecialForm = ...
Union: _SpecialForm = ...

class TypeVar:
    def __init__(self, name, covariant: bool = ..., contravariant: bool = ...) -> None: ...

class ParamSpec:
    def __init__(self, name: str) -> None: ...

AnyStr = TypeVar("AnyStr", str, bytes)
_T = TypeVar("_T")
_T_co = TypeVar("_T_co", covariant=True)
_K = TypeVar("_K")
_V = TypeVar("_V")
_S = TypeVar("_S", contravariant=True)
_R = TypeVar("_R", covariant=True)

class Coroutine(Generic[_T_co, _S, _R]): ...
class Iterable(Generic[_T_co]): ...
class Mapping(Generic[_K, _V]): ...
class Match(Generic[AnyStr]): ...
class Sequence(Iterable[_T_co]): ...
class Tuple(Sequence[_T_co]): ...
def overload(func: _T) -> _T: ...
aI  
from typing import Generic, Mapping, Sequence, TypeVar, overload

T = TypeVar('T')
T_co = TypeVar('T_co', covariant=True)
KT = TypeVar('KT')
VT = TypeVar('VT')

class object:
    __module__: str
    def __init__(self) -> None: pass
class type: ...

class tuple(Sequence[T_co], Generic[T_co]): ...
class dict(Mapping[KT, VT]): ...

class function: pass
class ellipsis: pass

class int: ...
class float: ...
class bool(int): ...
class str: ...
class bytes: ...

class list(Sequence[T]): ...

def property(f: T) -> T: ...
def classmethod(f: T) -> T: ...
def staticmethod(f: T) -> T: ...
stubruntimeoptions	list[str]config_file
str | Nonec              	   C  s  t t}tdd}|t W d    n1 sw   Y  tdd}|t W d    n1 s4w   Y  tt dd}||  W d    n1 sQw   Y  tt dd}|| W d    n1 snw   Y  |rtt dd}|| W d    n1 sw   Y  |dt dg }t }t	| t
ttg| dd	 W d    n1 sw   Y  | tj|tj d
|tj d
	 W  d    S 1 sw   Y  d S )Nzbuiltins.pyiwz
typing.pyiz.pyi.pyz_config.iniz--mypy-config-fileT)use_builtins_fixtures )r   TEST_MODULE_NAMEopenwritestubtest_builtins_stubstubtest_typing_stubioStringIO
contextlibredirect_stdoutr   r   getvaluereplacer   r   realpathsep)r   r   r   r!   tmp_dirfoutputr   r   r   run_stubtestk   s6   
$r7   c                   @  s   e Zd Zd	ddZdS )
Caser   r
   r   errorr"   c                 C  s   || _ || _|| _d S Nr   r   r9   )selfr   r   r9   r   r   r   __init__   s   
zCase.__init__N)r   r
   r   r
   r9   r"   )__name__
__module____qualname__r=   r   r   r   r   r8      s    r8   fnCallable[..., Iterator[Case]]Callable[..., None]c                   s   d	 fdd}|S )
zrun_stubtest used to be slow, so we used this decorator to combine cases.

    If you're reading this and bored, feel free to refactor this and make it more like
    other mypy tests.

    argsr   kwargsr   Nonec                    s   t  | i |}t }|D ]1}|jd u rq|j}|dkr t}n|t ds/t d| }||vs:J d||| qtddd |D ddd |D dgd	}t|	 }||ksfJ |d S )
Nr&   .z_collect_cases merges cases into a single stubtest invocation; we already expect an error for {}z

c                 s  "    | ]}t |jd V  qdS 
N)textwrapdedentr   lstrip.0cr   r   r   	<genexpr>        z.collect_cases.<locals>.test.<locals>.<genexpr>c                 s  rH   rI   )rK   rL   r   rM   rN   r   r   r   rQ      rR   --generate-allowlistr   r   r   )
listsetr9   r'   
startswithformataddr7   join
splitlines)rD   rE   casesexpected_errorsrP   expected_errorr6   actual_errorsrA   r   r   test   s,   

zcollect_cases.<locals>.testN)rD   r   rE   r   r   rF   r   )rA   ra   r   r`   r   collect_cases   s   rb   c                   @  s  e Zd ZedFddZedFddZedFddZedFd	d
ZedFddZedFddZ	edFddZ
edFddZedFddZedFddZedFddZedFddZedFddZedFddZedFdd ZedFd!d"ZedFd#d$ZedFd%d&ZedFd'd(ZedFd)d*ZedFd+d,ZedFd-d.ZedFd/d0ZedFd1d2ZedFd3d4ZedFd5d6ZedFd7d8ZedFd9d:ZedFd;d<Z edFd=d>Z!edFd?d@Z"edFdAdBZ#edFdCdDZ$dES )GStubtestUnitr   Iterator[Case]c                 c  s&    t ddd dV  t ddd dV  d S )Nz*def f(number: int, text: str) -> None: ...zdef f(number, text): passr;   zc
            class X:
                def f(self, number: int, text: str) -> None: ...
            zR
            class X:
                def f(self, number, text): pass
            r8   r<   r   r   r   test_basic_good   s   zStubtestUnit.test_basic_goodc                 c  s6    t ddddV  t ddddV  t dd	d
dV  d S )Nz!def mistyped_class() -> None: ...zclass mistyped_class: passmistyped_classr;   zclass mistyped_fn: ...zdef mistyped_fn(): passmistyped_fnzU
            class X:
                def mistyped_var(self) -> int: ...
            zC
            class X:
                mistyped_var = 1
            zX.mistyped_varre   rf   r   r   r   
test_types   s   zStubtestUnit.test_typesc                 c  sF    t ddddV  t ddd dV  t ddd dV  t d	d
d dV  d S )Nzdef bar() -> int: ...zasync def bar(): return 5barr;   zasync def foo() -> int: ...zdef foo(): return 5zdef baz() -> int: ...zdef baz(): return 5zasync def bingo() -> int: ...zasync def bingo(): return 5re   rf   r   r   r   test_coroutines   s   zStubtestUnit.test_coroutinesc                 c  s`    t ddddV  tjdkrt ddd dV  t dd	d
dV  t ddddV  t ddd dV  d S )N,def bad(number: int, text: str) -> None: ...z def bad(num, text) -> None: passbadr;         7def good_posonly(__number: int, text: str) -> None: ...z$def good_posonly(num, /, text): passz6def bad_posonly(__number: int, text: str) -> None: ...z$def bad_posonly(flag, /, text): passbad_posonlyzk
            class BadMethod:
                def f(self, number: int, text: str) -> None: ...
            zU
            class BadMethod:
                def f(self, n, text): pass
            zBadMethod.fze
            class GoodDunder:
                def __exit__(self, t, v, tb) -> None: ...
            zo
            class GoodDunder:
                def __exit__(self, exc_type, exc_val, exc_tb): pass
            r8   r   version_inforf   r   r   r   test_arg_name   s6   
zStubtestUnit.test_arg_namec                 c  st    t ddddV  t ddddV  t dd	d
dV  tjdkr8t ddd dV  t ddddV  t ddddV  d S d S )Nz7def runtime_kwonly(number: int, text: str) -> None: ...z)def runtime_kwonly(number, *, text): passruntime_kwonlyr;   z7def stub_kwonly(number: int, *, text: str) -> None: ...z#def stub_kwonly(number, text): passstub_kwonlyz7def stub_posonly(__number: int, text: str) -> None: ...z$def stub_posonly(number, text): passstub_posonlyro   rr   z'def good_posonly(number, /, text): passz8def runtime_posonly(number: int, text: str) -> None: ...z*def runtime_posonly(number, /, text): passruntime_posonlyz<def stub_posonly_570(number: int, /, text: str) -> None: ...z(def stub_posonly_570(number, text): passstub_posonly_570rt   rf   r   r   r   test_arg_kind  sB   
zStubtestUnit.test_arg_kindc                 c  sf    t ddd dV  t ddddV  t ddd	dV  t d
dddV  t ddddV  t ddddV  d S )Nz$def f1(text: str = ...) -> None: ...zdef f1(text = 'asdf'): passr;   z$def f2(text: str = ...) -> None: ...zdef f2(text): passf2zdef f3(text: str) -> None: ...zdef f3(text = 'asdf'): passf3z$def f4(text: str = ...) -> None: ...zdef f4(text = None): passf4z&def f5(data: bytes = ...) -> None: ...zdef f5(data = 'asdf'): passf5z
            from typing import TypeVar
            _T = TypeVar("_T", bound=str)
            def f6(text: _T = ...) -> None: ...
            zdef f6(text = None): passf6re   rf   r   r   r   test_default_value0  s:   zStubtestUnit.test_default_valuec                 c  sV    t ddd dV  t ddddV  t ddd	dV  t d
dddV  t ddd dV  d S )Nz
            class Good:
                @classmethod
                def f(cls, number: int, text: str) -> None: ...
            zq
            class Good:
                @classmethod
                def f(cls, number, text): pass
            r;   ze
            class Bad1:
                def f(cls, number: int, text: str) -> None: ...
            zq
            class Bad1:
                @classmethod
                def f(cls, number, text): pass
            zBad1.fz
            class Bad2:
                @classmethod
                def f(cls, number: int, text: str) -> None: ...
            zs
            class Bad2:
                @staticmethod
                def f(self, number, text): pass
            zBad2.fz
            class Bad3:
                @staticmethod
                def f(cls, number: int, text: str) -> None: ...
            zr
            class Bad3:
                @classmethod
                def f(self, number, text): pass
            zBad3.fz_
            class GoodNew:
                def __new__(cls, *args, **kwargs): ...
            z`
            class GoodNew:
                def __new__(cls, *args, **kwargs): pass
            re   rf   r   r   r   test_static_class_methodS  s4   z%StubtestUnit.test_static_class_methodc                 c  sV    t ddd dV  t ddddV  t ddd	dV  t d
dddV  t ddddV  d S )Nzdef f1(a, *, b, c) -> None: ...zdef f1(a, *, b, c): passr;   zdef f2(a, *, b) -> None: ...zdef f2(a, *, b, c): passr}   zdef f3(a, *, b, c) -> None: ...zdef f3(a, *, b): passr~   zdef f4(a, *, b, c) -> None: ...zdef f4(a, b, *, c): passr   zdef f5(a, b, *, c) -> None: ...zdef f5(a, *, b, c): passr   re   rf   r   r   r   test_arg_mismatch  s    zStubtestUnit.test_arg_mismatchc                 c  s   t ddd dV  t ddddV  t ddd dV  t d	d
ddV  t ddd dV  t ddddV  t ddddV  t ddddV  t ddddV  t ddddV  t ddddV  t d d!d"dV  t d#d$d dV  t d%d&d'dV  t d(d)d dV  t d*d+d,dV  t d-d.d/dV  d S )0Nz$def f1(*args, **kwargs) -> None: ...zdef f1(*args, **kwargs): passr;   z$def f2(*args, **kwargs) -> None: ...zdef f2(**kwargs): passr}   zdef g1(a, b, c, d) -> None: ...zdef g1(a, *args): passz&def g2(a, b, c, d, *args) -> None: ...zdef g2(a): passg2z&def g3(a, b, c, d, *args) -> None: ...zdef g3(a, *args): passzdef h1(a) -> None: ...zdef h1(a, b, c, d, *args): passh1zdef h2(a, *args) -> None: ...zdef h2(a, b, c, d): passh2zdef h3(a, *args) -> None: ...zdef h3(a, b, c, d, *args): passh3z"def j1(a: int, *args) -> None: ...zdef j1(a): passj1zdef j2(a: int) -> None: ...zdef j2(a, *args): passj2zdef j3(a, b, c) -> None: ...zdef j3(a, *args, c): passj3z def k1(a, **kwargs) -> None: ...zdef k1(a): passk1zdef k2(a) -> None: ...zdef k2(a, **kwargs): passzdef k3(a, b) -> None: ...zdef k3(a, **kwargs): passk3zdef k4(a, *, b) -> None: ...zdef k4(a, **kwargs): passzdef k5(a, *, b) -> None: ...z"def k5(a, *, b, c, **kwargs): passk5z&def k6(a, *, b, **kwargs) -> None: ...z"def k6(a, *, b, c, **kwargs): passk6re   rf   r   r   r   test_varargs_varkwargs  s   z#StubtestUnit.test_varargs_varkwargsc                 c  sd    t ddd dV  t ddddV  t ddd	dV  t d
dd dV  tjdkr0t ddd dV  d S d S )Nz
            from typing import overload

            @overload
            def f1(a: int, *, c: int = ...) -> int: ...
            @overload
            def f1(a: int, b: int, c: int = ...) -> str: ...
            zdef f1(a, b = 0, c = 0): passr;   z
            @overload
            def f2(a: int, *, c: int = ...) -> int: ...
            @overload
            def f2(a: int, b: int, c: int = ...) -> str: ...
            zdef f2(a, b, c = 0): passr}   z
            @overload
            def f3(a: int) -> int: ...
            @overload
            def f3(a: int, b: str) -> str: ...
            zdef f3(a, b = None): passr~   z
            @overload
            def f4(a: int, *args, b: int, **kwargs) -> int: ...
            @overload
            def f4(a: str, *args, b: int, **kwargs) -> str: ...
            z#def f4(a, *args, b, **kwargs): passro   z
                @overload
                def f5(__a: int) -> int: ...
                @overload
                def f5(__b: str) -> str: ...
                zdef f5(x, /): passrt   rf   r   r   r   test_overload  s8   



zStubtestUnit.test_overloadc                 c  sv    t ddd dV  t ddddV  t ddd dV  t d	d
ddV  t ddddV  t ddd dV  t ddd dV  d S )Nzt
            class Good:
                @property
                def read_only_attr(self) -> int: ...
            zr
            class Good:
                @property
                def read_only_attr(self): return 1
            r;   zf
            class Bad:
                @property
                def f(self) -> int: ...
            zQ
            class Bad:
                def f(self) -> int: return 1
            zBad.fzo
            class GoodReadOnly:
                @property
                def f(self) -> int: ...
            zC
            class GoodReadOnly:
                f = 1
            zn
            class BadReadOnly:
                @property
                def f(self) -> str: ...
            zB
            class BadReadOnly:
                f = 1
            zBadReadOnly.fz
            class Y:
                @property
                def read_only_attr(self) -> int: ...
                @read_only_attr.setter
                def read_only_attr(self, val: int) -> None: ...
            o
            class Y:
                @property
                def read_only_attr(self): return 5
            Y.read_only_attrz
            class Z:
                @property
                def read_write_attr(self) -> int: ...
                @read_write_attr.setter
                def read_write_attr(self, val: int) -> None: ...
            
            class Z:
                @property
                def read_write_attr(self): return self._val
                @read_write_attr.setter
                def read_write_attr(self, val): self._val = val
            zr
            class FineAndDandy:
                @property
                def attr(self) -> int: ...
            a  
            class _EvilDescriptor:
                def __get__(self, instance, ownerclass=None):
                    if instance is None:
                        raise AttributeError('no')
                    return 42
                def __set__(self, instance, value):
                    raise AttributeError('no')

            class FineAndDandy:
                attr = _EvilDescriptor()
            re   rf   r   r   r   test_property!  sH   zStubtestUnit.test_propertyc                 c  s    t ddd dV  t ddddV  t ddd V  t d	d
d dV  t ddddV  t ddddV  t ddddV  t ddd dV  t ddddV  t ddd dV  d S )Nzx1: intzx1 = 5r;   zx2: strzx2 = 5x2zfrom typing import Tupler&   z-
            x3: Tuple[int, int]
            zx3 = (1, 3)z-
            x4: Tuple[int, int]
            zx4 = (1, 3, 5)x4zx5: intzdef x5(a, b): passx5z-def foo(a: int, b: int) -> None: ...
x6 = fooz&def foo(a, b): pass
def x6(c, d): passx6z9
            class X:
                f: int
            zj
            class X:
                def __init__(self):
                    self.f = "asdf"
            zF
            class Y:
                read_only_attr: int
            r   r   zG
            class Z:
                read_write_attr: int
            r   re   rf   r   r   r   test_var  sF   zStubtestUnit.test_varc                 c  s   t ddddV  t ddddV  t dd	d
dV  t dd	d dV  t ddddV  t ddddV  t ddd dV  t ddddV  t ddddV  t ddddV  t ddd dV  t dd d dV  t d!d!d dV  t d"d#d dV  t d$d%d dV  tjd&krt d'd(d dV  d S d S ))Nz]
            class X:
                def f(self) -> None: ...
            Y = X
            zd
            class X:
                def f(self) -> None: ...
            class Y: ...
            zY.fr;   zR
            from typing import Tuple
            A = Tuple[int, str]
            zA = (int, str)AzB = strr&   Bz_C = intz
            from typing import Tuple
            D = tuple[str, str]
            E = Tuple[int, int, int]
            F = Tuple[str, int]
            z
            from typing import List, Tuple
            D = Tuple[str, str]
            E = Tuple[int, int, int]
            F = List[str]
            Fz
            from typing import Union
            G = str | int
            H = Union[str, bool]
            I = str | int
            z
            from typing import Union
            G = Union[str, int]
            H = Union[str, bool]
            I = str
            Iz
            import typing
            from collections.abc import Iterable
            from typing import Dict
            K = dict[str, str]
            L = Dict[int, int]
            KK = Iterable[str]
            LL = typing.Iterable[str]
            z
            from typing import Iterable, Dict
            K = Dict[str, str]
            L = Dict[int, int]
            KK = Iterable[str]
            LL = Iterable[str]
            z
            from typing import Generic, TypeVar
            _T = TypeVar("_T")
            class _Spam(Generic[_T]):
                def foo(self) -> None: ...
            IntFood = _Spam[int]
            z
            from typing import Generic, TypeVar
            _T = TypeVar("_T")
            class _Bacon(Generic[_T]):
                def foo(self, arg): pass
            IntFood = _Bacon[int]
            zIntFood.foozStrList = list[str]zStrList = ['foo', 'bar']StrListz
            import collections.abc
            from typing import Callable
            N = Callable[[str], bool]
            O = collections.abc.Callable[[int], str]
            P = Callable[[str], bool]
            z
            from typing import Callable
            N = Callable[[str], bool]
            O = Callable[[int], str]
            P = int
            Pzb
            class Foo:
                class Bar: ...
            BarAlias = Foo.Bar
            zc
            class Foo:
                class Bar: pass
            BarAlias = Foo.Bar
            zV
            from io import StringIO
            StringIOAlias = StringIO
            zW
            from _io import StringIO
            StringIOAlias = StringIO
            zM
            from typing import Match
            M = Match[str]
            zk
            class Baz:
                def fizz(self) -> None: ...
            BazAlias = Baz
            z
            class Baz:
                def fizz(self): pass
            BazAlias = Baz
            Baz.__name__ = Baz.__qualname__ = Baz.__module__ = "New"
            z
            class FooBar:
                __module__: None  # type: ignore
                def fizz(self) -> None: ...
            FooBarAlias = FooBar
            z
            class FooBar:
                def fizz(self): pass
            FooBarAlias = FooBar
            FooBar.__module__ = None
            rp   
   aq  
                import collections.abc
                import re
                from typing import Callable, Dict, Match, Iterable, Tuple, Union
                Q = Dict[str, str]
                R = dict[int, int]
                S = Tuple[int, int]
                T = tuple[str, str]
                U = int | str
                V = Union[int, str]
                W = Callable[[str], bool]
                Z = collections.abc.Callable[[str], bool]
                QQ = Iterable[str]
                RR = collections.abc.Iterable[str]
                MM = Match[str]
                MMM = re.Match[str]
                a  
                from collections.abc import Callable, Iterable
                from re import Match
                Q = dict[str, str]
                R = dict[int, int]
                S = tuple[int, int]
                T = tuple[str, str]
                U = int | str
                V = int | str
                W = Callable[[str], bool]
                Z = Callable[[str], bool]
                QQ = Iterable[str]
                RR = Iterable[str]
                MM = Match[str]
                MMM = Match[str]
                rt   rf   r   r   r   test_type_alias  s   		
zStubtestUnit.test_type_aliasc                 c      t ddddV  d S )Nz
            import enum
            class X(enum.Enum):
                a: int
                b: str
                c: str
            z
            import enum
            class X(enum.Enum):
                a = 1
                b = "asdf"
                c = 2
            zX.cr;   re   rf   r   r   r   	test_enum     zStubtestUnit.test_enumc                 c      t ddd dV  d S )Nz
            from typing import Any, Callable
            def decorator(f: Callable[[], int]) -> Callable[..., Any]: ...
            @decorator
            def f() -> Any: ...
            zi
            def decorator(f): return f
            @decorator
            def f(): return 3
            r;   re   rf   r   r   r   test_decorator  s   zStubtestUnit.test_decoratorc                 c  r   )NzZ: intz+
            __all__ = []
            Z = 5r;   re   rf   r   r   r   test_all_at_runtime_not_stub  s   z)StubtestUnit.test_all_at_runtime_not_stubc                 c  r   )Nz__all__ = ()r&   __all__r;   re   rf   r   r   r   test_all_in_stub_not_at_runtime  s   z,StubtestUnit.test_all_in_stub_not_at_runtimec                 c  r   )Nz@
            __all__ = ['foo']
            foo: str
            z>
            __all__ = []
            foo = 'foo'
            r&   r;   re   rf   r   r   r   ,test_all_in_stub_different_to_all_at_runtime  s   z9StubtestUnit.test_all_in_stub_different_to_all_at_runtimec                 c  s    t ddddV  t ddddV  t ddddV  t d	dd
dV  t ddd dV  t ddddV  t ddddV  t ddddV  t ddddV  t ddd dV  d S )Nzx = 5r&   xr;   def f(): ...r5   zclass X: ...Xz
            from typing import overload
            @overload
            def h(x: int): ...
            @overload
            def h(x: str): ...
            hz__all__ = []z__all__ += ['y']
y = 5yz__all__ += ['g']
def g(): passgz5from mystery import A, B as B, C as D  # type: ignorer   zclass Y: ...zF__all__ += ['Y']
class Y:
  def __or__(self, other): return self|otherzY.__or__zclass Z: ...z=__all__ += ['Z']
class Z:
  def __reduce__(self): return (Z,)re   rf   r   r   r   test_missing  s2   zStubtestUnit.test_missingc                 c  s6    t ddd dV  t ddddV  t ddddV  d S )Nr&   z
import sysr;   def g(): ...r   zCONSTANT = 0CONSTANTre   rf   r   r   r   test_missing_no_runtime_all     z(StubtestUnit.test_missing_no_runtime_allc                 c  s,    t ddt ddV  t ddddV  d S )Nz__all__: list[str]r&   z.__all__r;   z_f: intzdef _f(): ..._f)r8   r'   rf   r   r   r   test_non_public_1	  s
   zStubtestUnit.test_non_public_1c                 c  s6    t ddd dV  t ddddV  t ddd	dV  d S )
Nz__all__: list[str] = ['f']z__all__ = ['f']r;   zf: intr   r5   zg: intr   r   re   rf   r   r   r   test_non_public_2  r   zStubtestUnit.test_non_public_2c                 c  sT    t ddddV  t ddddV  t dd	d dV  tjd
kr(t ddd dV  d S d S )Nz:class A:
  def __init__(self, a: int, b: int) -> None: ...z*class A:
  def __init__(self, a, bx): passz
A.__init__r;   z:class B:
  def __call__(self, c: int, d: int) -> None: ...z*class B:
  def __call__(self, c, dx): passz
B.__call__zXclass C:
  def __init_subclass__(
    cls, e: int = ..., **kwargs: int
  ) -> None: ...
z:class C:
  def __init_subclass__(cls, e=1, **kwargs): pass)rp   	   z>class D:
  def __class_getitem__(cls, type: type) -> type: ...z0class D:
  def __class_getitem__(cls, type): ...rt   rf   r   r   r   test_dunders  s.   

zStubtestUnit.test_dundersc                 c  s&    t ddd dV  t ddddV  d S )Nzclass CanBeSubclassed: ...r;   zCclass CannotBeSubclassed:
  def __init_subclass__(cls) -> None: ...zGclass CannotBeSubclassed:
  def __init_subclass__(cls): raise TypeErrorCannotBeSubclassedre   rf   r   r   r   test_not_subclassable3  s   z"StubtestUnit.test_not_subclassablec                 c  r   )Nz
            class X:
                def __mangle_good(self, text: str) -> None: ...
                def __mangle_bad(self, number: int) -> None: ...
            z
            class X:
                def __mangle_good(self, text): pass
                def __mangle_bad(self, text): pass
            zX.__mangle_badr;   re   rf   r   r   r   test_name_mangling>  s   zStubtestUnit.test_name_manglingc                 c  &    t ddddV  t ddddV  d S )Nz
            class A:
                def foo(self, x: int) -> None: ...
            class B(A):
                pass
            class C(A):
                pass
            z
            class A:
                def foo(self, x: int) -> None: ...
            class B(A):
                def foo(self, x: int) -> None: ...
            class C(A):
                def foo(self, y: int) -> None: ...
            zC.foor;   z&
            class X: ...
            zN
            class X:
                def __init__(self, x): pass
            z
X.__init__re   rf   r   r   r   test_mroN  s   zStubtestUnit.test_mroc                 c  r   )Naz  
            from typing_extensions import Literal

            import enum
            class Color(enum.Enum):
                RED: int

            NUM: Literal[1]
            CHAR: Literal['a']
            FLAG: Literal[True]
            NON: Literal[None]
            BYT1: Literal[b'abc']
            BYT2: Literal[b'\x90']
            ENUM: Literal[Color.RED]
            a  
            import enum
            class Color(enum.Enum):
                RED = 3

            NUM = 1
            CHAR = 'a'
            NON = None
            FLAG = True
            BYT1 = b"abc"
            BYT2 = b'\x90'
            ENUM = Color.RED
            r;   re   rf   r   r   r   test_good_literaln  s   zStubtestUnit.test_good_literalc                 c  s    t ddd V  t ddddV  t ddd	dV  t d
dddV  t ddddV  t ddddV  t ddddV  t ddddV  t ddddV  d S )Nz%from typing_extensions import Literalr&   zINT_FLOAT_MISMATCH: Literal[1]zINT_FLOAT_MISMATCH = 1.0INT_FLOAT_MISMATCHr;   zWRONG_INT: Literal[1]zWRONG_INT = 2	WRONG_INTzWRONG_STR: Literal['a']zWRONG_STR = 'b'	WRONG_STRz%BYTES_STR_MISMATCH: Literal[b'value']zBYTES_STR_MISMATCH = 'value'BYTES_STR_MISMATCHz$STR_BYTES_MISMATCH: Literal['value']zSTR_BYTES_MISMATCH = b'value'STR_BYTES_MISMATCHzWRONG_BYTES: Literal[b'abc']zWRONG_BYTES = b'xyz'WRONG_BYTESzWRONG_BOOL_1: Literal[True]zWRONG_BOOL_1 = FalseWRONG_BOOL_1zWRONG_BOOL_2: Literal[False]zWRONG_BOOL_2 = TrueWRONG_BOOL_2re   rf   r   r   r   test_bad_literal  sD   zStubtestUnit.test_bad_literalc                 c  r   )NzL
            b1: bool
            b2: bool
            b3: bool
            zF
            b1 = 0
            b2 = 1
            b3 = 2
            b3r;   z
            from typing_extensions import TypedDict

            class _Options(TypedDict):
                a: str
                b: int

            opt1: _Options
            opt2: _Options
            opt3: _Options
            z
            opt1 = {"a": "3.", "b": 14}
            opt2 = {"some": "stuff"}  # false negative
            opt3 = 0
            opt3re   rf   r   r   r   test_special_subtype  s   z!StubtestUnit.test_special_subtypec                 c  s    t ddd dV  d S )Nz
            from typing_extensions import Protocol

            class X(Protocol):
                bar: int
                def foo(self, x: int, y: bytes = ...) -> str: ...
            r;   re   rf   r   r   r   test_protocol  r   zStubtestUnit.test_protocolc                 c  sd    t ddd dV  t ddd dV  t ddddV  tjdkr0t ddd dV  t d	d	d dV  d S d S )
Nzfrom typing import TypeVarr;   zA = TypeVar('A')zB = TypeVar('B')zB = 5r   r   zfrom typing import ParamSpeczC = ParamSpec('C')rt   rf   r   r   r   test_type_var  s   
zStubtestUnit.test_type_varc                 c  F    t ddd dV  t ddddV  t ddd dV  t ddd dV  d S )	Nfrom abc import abstractmethodr;   zO
            class A1:
                def some(self) -> None: ...
            zo
            class A1:
                @abstractmethod
                def some(self) -> None: ...
            zA1.somezo
            class A2:
                @abstractmethod
                def some(self) -> None: ...
            zo
            class A3:
                @abstractmethod
                def some(self) -> None: ...
            zO
            class A3:
                def some(self) -> None: ...
            re   rf   r   r   r   test_abstract_methods  s*   z"StubtestUnit.test_abstract_methodsc                 c  r   )	Nr   r;   zO
            class AP1:
                def some(self) -> int: ...
            z
            class AP1:
                @property
                @abstractmethod
                def some(self) -> int: ...
            zAP1.somez
            class AP2:
                @property
                @abstractmethod
                def some(self) -> int: ...
            z
            class AP3:
                @property
                @abstractmethod
                def some(self) -> int: ...
            zi
            class AP3:
                @property
                def some(self) -> int: ...
            re   rf   r   r   r   test_abstract_properties(  s*   z%StubtestUnit.test_abstract_propertiesN)r   rd   )%r>   r?   r@   rb   rg   rj   rl   rv   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rc      s    	(!"@B7g? T	!
!#"-rc   sc                 C  s   t dd| S )Nz\x1b.*?mr&   )resub)r   r   r   r   remove_color_code]  s   r   c                   @  sz   e Zd ZdddZdddZdddZdd	d
ZdddZdddZdddZ	dddZ
dddZdddZdddZdS )StubtestMiscUnitr   rF   c                 C  sd   t ddg d}dt dt dt d}t||ksJ t dddgd}d	t}t||ks0J d S )
Nrm   zdef bad(num, text): passrT   error: zi.bad is inconsistent, stub argument "number" differs from runtime argument "num"
Stub: at line 1 in file zO.pyi
def (number: builtins.int, text: builtins.str)
Runtime: at line 1 in file z6.py
def (num, text)

Found 1 error (checked 1 module)
z	--concisezS{}.bad is inconsistent, stub argument "number" differs from runtime argument "num"
)r7   r'   r   rX   )r<   r6   expectedr   r   r   test_outputb  s*   zStubtestMiscUnit.test_outputc                 C  sX   t dddgd}|dksJ t dddgd}|dksJ t ddd	gd}|dks*J d S )
Nr&   z__all__ = ['f']
def f(): passz--ignore-missing-stubrT   %Success: no issues found in 1 module
zdef f(): passzdef f(__a): ...zdef f(a): passz--ignore-positional-only)r7   r<   r6   r   r   r   test_ignore_flags}  s   z"StubtestMiscUnit.test_ignore_flagsc              	   C  sb  t jddd}z| |t d W d    n1 sw   Y  tddd|jgd}|d	ks2J td
d
d|jgd}|dt dksFJ td
d
d|jdgd}|d	ksWJ t|jdd}|t d |d |d W d    n1 s{w   Y  ttd	dtd	dd|jdgd}|dt dksJ W t
|j d S t
|j w )Nzw+F)modedeletez.bad  # comment
# commentrm   zdef bad(asdf, text): passz--allowlistrT   r   r&   znote: unused allowlist entry z&.bad
Found 1 error (checked 1 module)
z--ignore-unused-allowlist)r   z.b.*
z(unused_missing)?
z	unused.*
z
                    def good() -> None: ...
                    def bad(number: int) -> None: ...
                    def also_bad(number: int) -> None: ...
                    rJ   z
                    def good(): pass
                    def bad(asdf): pass
                    def also_bad(asdf): pass
                    rS   z&note: unused allowlist entry unused.*
z
.also_bad
)r   NamedTemporaryFiler)   r'   r7   namer(   rK   rL   rM   r   unlink)r<   	allowlistr6   r5   r   r   r   test_allowlist  sZ   


	
	

zStubtestMiscUnit.test_allowlistc                 C  sL   t ddg d}t|dtksJ t ddg d}t|dtks$J d S )N+r&   rT   zVerror: not checking stubs due to failed mypy compile:
{}.pyi:1: error: invalid syntax
zdef f(): ...
def f(): ...zherror: not checking stubs due to mypy build errors:
{}.pyi:2: error: Name "f" already defined on line 1
)r7   r   rX   r'   r   r   r   r   test_mypy_build  s   z StubtestMiscUnit.test_mypy_buildc                 C  sX   t  }t| ttdg W d    n1 sw   Y  t| dks*J d S )Nnot_a_modulezferror: not_a_module failed to find stubs
Stub:
MISSING
Runtime:
N/A

Found 1 error (checked 1 module)
r,   r-   r.   r/   r   r   r   r0   r   r   r   r   test_missing_stubs  s   
z#StubtestMiscUnit.test_missing_stubsc              	   C  s   t tR tt dd}|d W d    n1 sw   Y  t }t| tt	tg W d    n1 s=w   Y  t
| }|dksNJ W d    d S 1 sYw   Y  d S )Nr$   r#   za = 1r   )r   r'   r(   r)   r,   r-   r.   r/   r   r   r   r0   )r<   r5   r6   
output_strr   r   r   test_only_py  s   
"zStubtestMiscUnit.test_only_pyc                 C  s   t jd d}d|v sJ d|v sJ d|v sJ d|v sJ d|vs%J d|v s+J d|v s1J d	|vs7J t jd d
}d|v sDJ d|vsJJ d	|v sPJ d S )N)rp      builtinsr   zos.pathasynciographlib	formattercontextvarszimportlib.metadatar   )mypystubtestget_typeshed_stdlib_modules)r<   stdlibr   r   r    test_get_typeshed_stdlib_modules  s   z1StubtestMiscUnit.test_get_typeshed_stdlib_modulesc                 C  s4   ddddd}t tjjt|dksJ d S )Nr   )daintbrP   r   rE   r   r   rF   c                [  s   d S r:   r   )r   r   rP   r   rE   r   r   r   r5     s   z*StubtestMiscUnit.test_signature.<locals>.fz#def (a, b, *, c, d = ..., **kwargs))r   r   r   r   rP   r   r   r   rE   r   r   rF   )r
   r   r   	Signaturefrom_inspect_signatureinspect	signature)r<   r5   r   r   r   test_signature  s   zStubtestMiscUnit.test_signaturec                 C  s`   d}d}dt  d}t||g d}t|dt dt dks J t||g |d	}|d
ks.J d S )Nz	temp = 5
z*from decimal import Decimal
temp: Decimal
z[mypy]
plugins=z*/test-data/unit/plugins/decimal_to_int.py
rT   r   zL.temp variable differs from runtime type Literal[5]
Stub: at line 2 in file zC.pyi
_decimal.Decimal
Runtime:
5

Found 1 error (checked 1 module)
)r   r   r   r!   r   )r   r7   r   r'   )r<   r   r   r!   r6   r   r   r   test_config_file  s   z!StubtestMiscUnit.test_config_filec                 C  sV   t  }t| ttg  W d    n1 sw   Y  t| dks)J d S )Nzerror: no modules to check
r   r   r   r   r   test_no_modules  s
   z StubtestMiscUnit.test_no_modulesc                 C  sZ   t  }t| ttddg W d    n1 sw   Y  t| dks+J d S )Nz--check-typeshedsome_modulez?error: cannot pass both --check-typeshed and a list of modules
r   r   r   r   r   test_module_and_typeshed  s   
z)StubtestMiscUnit.test_module_and_typeshedN)r   rF   )r>   r?   r@   r   r   r   r   r   r   r   r  r  r  r  r   r   r   r   r   a  s    



=





	
r   )r	   r
   r   r   r:   )
r   r
   r   r
   r   r    r!   r"   r   r
   )rA   rB   r   rC   )r   r
   r   r
   )!
__future__r   r.   r   r,   r   r   r   r   rK   unittesttypingr   r   r   mypy.stubtestr   r   r   mypy.test.datar   contextmanagerr   r'   r+   r*   r7   r8   rb   TestCaserc   r   r   r   r   r   r   <module>   sF    ""
$         
5