B
    u9a]:                 @   s   d dl Z d dlZd dlmZ yd dlZW n ek
r@   dZY nX d dlZd dlZd dlZd dl	Z	G dd dej
ZG dd dej
ZeG dd dej
Zd	d
 Zdd ZG dd dZe Ze ZeG dd dej
Zedkre  dS )    N)cpython_onlyc               @   s   e Zd Zdd ZdS )FunctionCallsc             C   sZ   t ddg}|d t| }dd }|f |}| |t | t| | d S )N)a   )b   r   c              [   s   | S )N )kwr   r   /usr/lib/python3.7/test_call.pyfn   s    z+FunctionCalls.test_kwargs_order.<locals>.fn)collectionsOrderedDictmove_to_endlistitemsZassertIsInstancedictassertEqual)selfZodexpectedr   Zresr   r   r
   test_kwargs_order   s    

zFunctionCalls.test_kwargs_orderN)__name__
__module____qualname__r   r   r   r   r
   r      s   r   c               @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5S )6CFunctionCallsc             C   s   |  ti j d S )N)assertRaises	TypeError__contains__)r   r   r   r
   test_varargs0%   s    zCFunctionCalls.test_varargs0c             C   s   i  d d S )Nr   )r   )r   r   r   r
   test_varargs1(   s    zCFunctionCalls.test_varargs1c             C   s   |  ti jdd d S )Nr   r   )r   r   r   )r   r   r   r
   test_varargs2+   s    zCFunctionCalls.test_varargs2c             C   s(   yi j d  W n tk
r"   Y nX d S )Nr   )r   r   )r   r   r   r
   test_varargs0_ext.   s    z CFunctionCalls.test_varargs0_extc             C   s   i j d  d S )N)r   )r   )r   r   r   r
   test_varargs1_ext4   s    z CFunctionCalls.test_varargs1_extc             C   s,   yi j d  W n tk
r"   Y nX td S )N)r   r   )r   r   RuntimeError)r   r   r   r
   test_varargs2_ext7   s
    z CFunctionCalls.test_varargs2_extc             C   s   | j ti jdd d S )Nr   )x)r   r   r   )r   r   r   r
   test_varargs1_kw?   s    zCFunctionCalls.test_varargs1_kwc             C   s   | j ti jddd d S )Nr   )r$   y)r   r   r   )r   r   r   r
   test_varargs2_kwB   s    zCFunctionCalls.test_varargs2_kwc             C   s   i    d S )N)keys)r   r   r   r
   test_oldargs0_0E   s    zCFunctionCalls.test_oldargs0_0c             C   s   |  ti jd d S )Nr   )r   r   r(   )r   r   r   r
   test_oldargs0_1H   s    zCFunctionCalls.test_oldargs0_1c             C   s   |  ti jdd d S )Nr   r   )r   r   r(   )r   r   r   r
   test_oldargs0_2K   s    zCFunctionCalls.test_oldargs0_2c             C   s   i j d  d S )Nr   )r(   )r   r   r   r
   test_oldargs0_0_extN   s    z"CFunctionCalls.test_oldargs0_0_extc             C   s,   yi j d  W n tk
r"   Y nX td S )N)r   )r(   r   r"   )r   r   r   r
   test_oldargs0_1_extQ   s
    z"CFunctionCalls.test_oldargs0_1_extc             C   s,   yi j d  W n tk
r"   Y nX td S )N)r   r   )r(   r   r"   )r   r   r   r
   test_oldargs0_2_extY   s
    z"CFunctionCalls.test_oldargs0_2_extc             C   s.   yi j dd W n tk
r$   Y nX td S )Nr   )r$   )r(   r   r"   )r   r   r   r
   test_oldargs0_0_kwa   s
    z!CFunctionCalls.test_oldargs0_0_kwc             C   s   | j ti jdd d S )Nr   )r$   )r   r   r(   )r   r   r   r
   test_oldargs0_1_kwi   s    z!CFunctionCalls.test_oldargs0_1_kwc             C   s   | j ti jddd d S )Nr   )r$   r&   )r   r   r(   )r   r   r   r
   test_oldargs0_2_kwl   s    z!CFunctionCalls.test_oldargs0_2_kwc             C   s   |  tg j d S )N)r   r   count)r   r   r   r
   test_oldargs1_0o   s    zCFunctionCalls.test_oldargs1_0c             C   s   g  d d S )Nr   )r2   )r   r   r   r
   test_oldargs1_1r   s    zCFunctionCalls.test_oldargs1_1c             C   s   |  tg jdd d S )Nr   r   )r   r   r2   )r   r   r   r
   test_oldargs1_2u   s    zCFunctionCalls.test_oldargs1_2c             C   s,   yg j d  W n tk
r"   Y nX td S )Nr   )r2   r   r"   )r   r   r   r
   test_oldargs1_0_extx   s
    z"CFunctionCalls.test_oldargs1_0_extc             C   s   g j d  d S )N)r   )r2   )r   r   r   r
   test_oldargs1_1_ext   s    z"CFunctionCalls.test_oldargs1_1_extc             C   s,   yg j d  W n tk
r"   Y nX td S )N)r   r   )r2   r   r"   )r   r   r   r
   test_oldargs1_2_ext   s
    z"CFunctionCalls.test_oldargs1_2_extc             C   s   | j tg jdd d S )Nr   )r$   )r   r   r2   )r   r   r   r
   test_oldargs1_0_kw   s    z!CFunctionCalls.test_oldargs1_0_kwc             C   s   | j tg ji dd d S )Nr   )r$   )r   r   r2   )r   r   r   r
   test_oldargs1_1_kw   s    z!CFunctionCalls.test_oldargs1_1_kwc             C   s   | j tg jddd d S )Nr   )r$   r&   )r   r   r2   )r   r   r   r
   test_oldargs1_2_kw   s    z!CFunctionCalls.test_oldargs1_2_kwN)r   r   r   r   r   r   r    r!   r#   r%   r'   r)   r*   r+   r,   r-   r.   r/   r0   r1   r3   r4   r5   r6   r7   r8   r9   r:   r;   r   r   r   r
   r   #   s4   r   c               @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;S )<CFunctionCallsErrorMessagesc             C   s   d}|  t|i j d S )Nz7__contains__\(\) takes exactly one argument \(0 given\))assertRaisesRegexr   r   )r   msgr   r   r
   r      s    z)CFunctionCallsErrorMessages.test_varargs0c             C   s   d}|  t|i jdd d S )Nz7__contains__\(\) takes exactly one argument \(2 given\)r   r   )r=   r   r   )r   r>   r   r   r
   r      s    z)CFunctionCallsErrorMessages.test_varargs2c             C   s   d}|  t|tjddd d S )Nz@^from_bytes\(\) takes at most 2 positional arguments \(3 given\)   alittleF)r=   r   int
from_bytes)r   r>   r   r   r
   test_varargs3   s    z)CFunctionCallsErrorMessages.test_varargs3c             C   s   d}| j t|i jdd d S )Nz+__contains__\(\) takes no keyword argumentsr   )r$   )r=   r   r   )r   r>   r   r   r
   r%      s    z,CFunctionCallsErrorMessages.test_varargs1_kwc             C   s   d}| j t|i jddd d S )Nz+__contains__\(\) takes no keyword argumentsr   )r$   r&   )r=   r   r   )r   r>   r   r   r
   r'      s    z,CFunctionCallsErrorMessages.test_varargs2_kwc             C   s   d}| j t|tdd d S )Nz#bool\(\) takes no keyword argumentsr   )r$   )r=   r   bool)r   r>   r   r   r
   test_varargs3_kw   s    z,CFunctionCallsErrorMessages.test_varargs3_kwc             C   s   d}| j t|g jdd d S )Nz&^index\(\) takes no keyword arguments$r   )r$   )r=   r   index)r   r>   r   r   r
   test_varargs4_kw   s    z,CFunctionCallsErrorMessages.test_varargs4_kwc             C   s   d}| j t|tdd d S )Nz(^hasattr\(\) takes no keyword arguments$r   )r$   )r=   r   hasattr)r   r>   r   r   r
   test_varargs5_kw   s    z,CFunctionCallsErrorMessages.test_varargs5_kwc             C   s   d}| j t|tdd d S )Nz(^getattr\(\) takes no keyword arguments$r   )r$   )r=   r   getattr)r   r>   r   r   r
   test_varargs6_kw   s    z,CFunctionCallsErrorMessages.test_varargs6_kwc             C   s   d}| j t|tdd d S )Nz%^next\(\) takes no keyword arguments$r   )r$   )r=   r   next)r   r>   r   r   r
   test_varargs7_kw   s    z,CFunctionCallsErrorMessages.test_varargs7_kwc             C   s   d}| j t|tjdd d S )Nz%^pack\(\) takes no keyword arguments$r   )r$   )r=   r   structpack)r   r>   r   r   r
   test_varargs8_kw   s    z,CFunctionCallsErrorMessages.test_varargs8_kwc             C   s   d}| j t|tjdd d S )Nz*^pack_into\(\) takes no keyword arguments$r   )r$   )r=   r   rN   	pack_into)r   r>   r   r   r
   test_varargs9_kw   s    z,CFunctionCallsErrorMessages.test_varargs9_kwc             C   s    d}| j t|t jdd d S )Nz&^index\(\) takes no keyword arguments$r   )r$   )r=   r   r   dequerF   )r   r>   r   r   r
   test_varargs10_kw   s    z-CFunctionCallsErrorMessages.test_varargs10_kwc             C   s&   d}| j t|tjjtddd d S )Nz%^pack\(\) takes no keyword arguments$ r   )r$   )r=   r   rN   StructrO   )r   r>   r   r   r
   test_varargs11_kw   s    z-CFunctionCallsErrorMessages.test_varargs11_kwc             C   s   d}| j t|ttd d S )Nz-^staticmethod\(\) takes no keyword arguments$)func)r=   r   staticmethodid)r   r>   r   r   r
   test_varargs12_kw   s    z-CFunctionCallsErrorMessages.test_varargs12_kwc             C   s   d}| j t|ttd d S )Nz,^classmethod\(\) takes no keyword arguments$)rX   )r=   r   classmethodrZ   )r   r>   r   r   r
   test_varargs13_kw   s    z-CFunctionCallsErrorMessages.test_varargs13_kwc             C   s    d}| j t|tjdddd d S )Nz:^product\(\) takes at most 1 keyword argument \(2 given\)$r   r   r   )repeatfoo)r=   r   	itertoolsproduct)r   r>   r   r   r
   test_varargs14_kw   s    z-CFunctionCallsErrorMessages.test_varargs14_kwc          	   C   s    d}| j t|tddddd d S )Nz?^ImportError\(\) takes at most 2 keyword arguments \(3 given\)$r   r   r      )namepathr_   )r=   r   ImportError)r   r>   r   r   r
   test_varargs15_kw   s    z-CFunctionCallsErrorMessages.test_varargs15_kwc          	   C   s    d}| j t|tddddd d S )Nz7^min\(\) takes at most 2 keyword arguments \(3 given\)$r   r   r   rc   )defaultkeyr_   )r=   r   min)r   r>   r   r   r
   test_varargs16_kw   s    z-CFunctionCallsErrorMessages.test_varargs16_kwc             C   s$   d}| j t|tddddddd	 d S )	Nz9^print\(\) takes at most 4 keyword arguments \(5 given\)$r   r   r   rc         )sependfileflushr_   )r=   r   print)r   r>   r   r   r
   test_varargs17_kw   s    z-CFunctionCallsErrorMessages.test_varargs17_kwc             C   s   d}|  t|i jd d S )Nz'keys\(\) takes no arguments \(1 given\)r   )r=   r   r(   )r   r>   r   r   r
   r*      s    z+CFunctionCallsErrorMessages.test_oldargs0_1c             C   s   d}|  t|i jdd d S )Nz'keys\(\) takes no arguments \(2 given\)r   r   )r=   r   r(   )r   r>   r   r   r
   r+      s    z+CFunctionCallsErrorMessages.test_oldargs0_2c             C   s   d}| j t|i jdd d S )Nz#keys\(\) takes no keyword argumentsr   )r$   )r=   r   r(   )r   r>   r   r   r
   r0      s    z.CFunctionCallsErrorMessages.test_oldargs0_1_kwc             C   s   d}| j t|i jddd d S )Nz#keys\(\) takes no keyword argumentsr   )r$   r&   )r=   r   r(   )r   r>   r   r   r
   r1      s    z.CFunctionCallsErrorMessages.test_oldargs0_2_kwc             C   s   d}|  t|g j d S )Nz0count\(\) takes exactly one argument \(0 given\))r=   r   r2   )r   r>   r   r   r
   r3      s    z+CFunctionCallsErrorMessages.test_oldargs1_0c             C   s   d}|  t|g jdd d S )Nz0count\(\) takes exactly one argument \(2 given\)r   r   )r=   r   r2   )r   r>   r   r   r
   r5      s    z+CFunctionCallsErrorMessages.test_oldargs1_2c             C   s   d}| j t|g jdd d S )Nz$count\(\) takes no keyword argumentsr   )r$   )r=   r   r2   )r   r>   r   r   r
   r9     s    z.CFunctionCallsErrorMessages.test_oldargs1_0_kwc             C   s   d}| j t|g ji dd d S )Nz$count\(\) takes no keyword argumentsr   )r$   )r=   r   r2   )r   r>   r   r   r
   r:     s    z.CFunctionCallsErrorMessages.test_oldargs1_1_kwc             C   s   d}| j t|g jddd d S )Nz$count\(\) takes no keyword argumentsr   )r$   r&   )r=   r   r2   )r   r>   r   r   r
   r;     s    z.CFunctionCallsErrorMessages.test_oldargs1_2_kwN) r   r   r   r   r   rC   r%   r'   rE   rG   rI   rK   rM   rP   rR   rT   rW   r[   r]   rb   rg   rk   rs   r*   r+   r0   r1   r3   r5   r9   r:   r;   r   r   r   r
   r<      s:   r<   c             C   s   | |gS )Nr   )arg1arg2r   r   r
   pyfunc  s    rv   c               C   s   dS )Nnoargr   r   r   r   r
   pyfunc_noarg  s    rx   c               @   s4   e Zd Zdd Zdd Zedd Zedd Zd	S )
PythonClassc             C   s   ||gS )Nr   )r   rt   ru   r   r   r
   method  s    zPythonClass.methodc             C   s   dS )Nrw   r   )r   r   r   r
   method_noarg  s    zPythonClass.method_noargc             C   s   dS )Nr\   r   )clsr   r   r
   class_method   s    zPythonClass.class_methodc               C   s   dS )NrY   r   r   r   r   r
   static_method$  s    zPythonClass.static_methodN)	r   r   r   rz   r{   r\   r}   rY   r~   r   r   r   r
   ry     s   ry   c               @   sP  e Zd Zedddgfeddfejddfejddfej	dddgfej
ddfejddfejddfedefedefed	efed
dfeddfejddfejjdeffZed	ddiddgfeddddddgfej	d	ddiddgfej	ddddddgfeg fddidfejdddidfejdddddffZdd Zdd Zdd Zdd Zd d! Zd"S )#FastCallTests)r   r   r   r   r   rw   r\   rY   )Zhello)r   )rm   	   rm   )i  !   )   
   )s    r@   ru   )rt   ru   rh   r   )s    	byteorderr@   s    )bytesr   c             C   s   |t krd S | || d S )N)IGNORE_RESULTr   )r   resultr   r   r   r
   check_resultp  s    zFastCallTests.check_resultc          
   C   sh   xb| j D ]X\}}}| j||d: t||}| || |sVt|d }| || W d Q R X qW d S )N)rX   args)CALLS_POSARGSsubTest	_testcapiZpyobject_fastcallr   )r   rX   r   r   r   r   r   r
   test_fastcallu  s    zFastCallTests.test_fastcallc          
   C   s   x| j D ]\}}}| j||dr t||d }| || t||i }| || |st|d d }| || t|d i }| || W d Q R X qW xL| jD ]B\}}}}| j|||d  t|||}| || W d Q R X qW d S )N)rX   r   )rX   r   kwargs)r   r   r   Zpyobject_fastcalldictr   CALLS_KWARGS)r   rX   r   r   r   r   r   r   r
   test_fastcall_dict  s    z FastCallTests.test_fastcall_dictc          
   C   s
  x| j D ]\}}}| j||dr t||d }| || t||d}| || |st|d d }| || t|d d}| || W d Q R X qW xh| jD ]^\}}}}| j|||d< t| }|t|  }t|||}| || W d Q R X qW d S )N)rX   r   r   )rX   r   r   )	r   r   r   Zpyobject_fastcallkeywordsr   r   tupler(   values)r   rX   r   r   r   r   Zkwnamesr   r   r
   test_fastcall_keywords  s"    z$FastCallTests.test_fastcall_keywordsc             C   s2   G dd d}|| d}t ddd|f|j d S )Nc               @   s"   e Zd ZdgZdd Zdd ZdS )z>FastCallTests.test_fastcall_clearing_dict.<locals>.IntWithDictr   c             [   s
   || _ d S )N)r   )r   r   r   r   r
   __init__  s    zGFastCallTests.test_fastcall_clearing_dict.<locals>.IntWithDict.__init__c             S   s   | j   t  dS )Nr   )r   cleargcZcollect)r   r   r   r
   __int__  s    
zFFastCallTests.test_fastcall_clearing_dict.<locals>.IntWithDict.__int__N)r   r   r   	__slots__r   r   r   r   r   r
   IntWithDict  s   r   )dont_inheritpassrU   exec)compiler   )r   r   r$   r   r   r
   test_fastcall_clearing_dict  s    z)FastCallTests.test_fastcall_clearing_dictN)r   r   r   rv   rx   ry   r}   r~   PYTHON_INSTANCErz   r{   globalsr   rZ   dirrj   divmodrA   rB   datetimeZnowr   maxr   r   r   r   r   r   r   r   r   r
   r   /  s6   





r   __main__)r   ZunittestZtest.supportr   r   rf   rN   r   r`   r   ZTestCaser   r   r<   rv   rx   ry   r   objectr   r   r   mainr   r   r   r
   <module>   s0   
r
{
 