B
    u9aC                @   s  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
 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Zyd dlmZ W n ek
r   dZY nX d dlmZmZmZmZ d dlmZmZ d dlmZm Z  d dl!m"Z# d dl!m$Z% d d	l!m&Z& d d
l'm(Z( e#j)Z*e*+drTe*dd Z*e
e*Z*dd Z,e#- Z.dd Z/dd Z0d1 Z2G dd dej3Z4dd Z5dd Z6dd Z7ej8dd Z9G dd dZ:G d d! d!e4Z;G d"d# d#e4Z<G d$d% d%ej3Z=G d&d' d'e=Z>G d(d) d)e=Z?G d*d+ d+e=Z@G d,d- d-e=ZAG d.d/ d/e=ZBG d0d1 d1e=ZCG d2d3 d3eDZEG d4d5 d5eDZFd6d7 ZGG d8d9 d9ej3ZHeD ZIG d:d; d;ej3ZJG d<d= d=ej3ZKG d>d? d?eKZLG d@dA dAeLZMG dBdC dCej3ZNG dDdE dEej3ZOG dFdG dGej3ZPG dHdI dIejQZRG dJdK dKejSZTG dLdM dMej3ZUG dNdO dOej3ZVG dPdQ dQej3ZWG dRdS dSej3ZXG dTdU dUej3ZYG dVdW dWej3ZZG dXdY dYZ[G dZd[ d[ej3Z\G d\d] d]ej3Z]G d^d_ d_ej3Z^d`da Z_e`dbkre_  dS )c    N)normcase)ThreadPoolExecutor)run_unittestTESTFNDirsOnSysPathcpython_only)MISSING_C_DOCSTRINGSr   )assert_python_okassert_python_failure)inspect_fodder)inspect_fodder2)support)_ready_to_import)coc             G   s   t | f| S )N)r   )filenameargs r   "/usr/lib/python3.7/test_inspect.pyrevise7   s    r   c              c   s   ddddddddg} x~t d	d
t|  D ]h}g }d	}x.t t| D ]}|||> @ rB|| |  qBW dd| d }i }t||| |d V  q(W dS )z
    Yields a whole bunch of functions with only keyword-only parameters,
    where those parameters are always in lexicographically sorted order.
    abarr   ZdeltaZephraimZmagicalZyoyoz      zdef foo(*, z, z): passfooN)rangelenappendjoinexec)
parametersipbitjZfn_textZsymbolsr   r   r   5signatures_with_lexicographic_keyword_only_parameters=   s    r'   c             C   s   d S )Nr   )throwoutZtheZbabyZwith_Zthe_Z	bathwaterr   r   r   #unsorted_keyword_only_parameters_fnO   s    r*   z'throw out the baby with_ the_ bathwaterc               @   sT   e Zd Zeejejejejej	ej
ejejejejejejejejgZdd ZdS )
IsTestBasec             C   s   t |}| ||d|j|f  x\| jt|g D ]H}|tjksV|tjksV|tjkrb|tj	krbq4| 
||d|j|f  q4W d S )Nz%s(%s)z
not %s(%s))eval
assertTrue__name__
predicatessetinspectisgeneratorfunctionisasyncgenfunctioniscoroutinefunction
isfunctionassertFalse)selfZ	predicateexpobjotherr   r   r   istest]   s    



zIsTestBase.istestN)r.   
__module____qualname__r0   r1   	isbuiltinisclassiscodeisframer5   ismethodismoduleistracebackisgeneratorr2   iscoroutiner4   
isasyncgenr3   r/   r;   r   r   r   r   r+   U   s   r+   c             c   s   xt dD ]
}|V  q
W d S )Nr   )r   )r7   r#   r   r   r   generator_function_examplei   s    rH   c          	   C  s:   x4t d2 y3 d H }W n
 tk
s*X |V  q
   Y  W d S )Nr   )r   StopAsyncIteration)r7   r#   r   r   r    async_generator_function_examplem   s    "rJ   c                s   dS )Nspamr   )r7   r   r   r   coroutine_function_exampleq   s    rL   c             c   s
   d V  dS )NrK   r   )r7   r   r   r   gen_coroutine_function_examplet   s    rM   c               @   s   e Zd Zdd ZdS )EqualsToAllc             C   s   dS )NTr   )r7   r:   r   r   r   __eq__z   s    zEqualsToAll.__eq__N)r.   r<   r=   rO   r   r   r   r   rN   y   s   rN   c               @   sL   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S )TestPredicatesc          	   C   s  |  tjd |  tjd |  tjd zxydd  W nf   t d a|  tjd |  tjd t	t
d	r|  tjd
 n| tttjj Y nX W d d aX |  tjd |  tjd |  tjd |  tjd |  tjd |  tjd |  tjd |  tjd |  tjd t , td |  tjd |  tjd W d Q R X t	t
dr~|  tjd n| ttjj  d S )Nzsys.exitz	[].appendzmod.spam.__code__r   r   r   ztb.tb_frametbGetSetDescriptorTypeztype(tb.tb_frame).f_localszmod.spamzmod.StupidGit.abusez	git.arguemodz'collections.defaultdict.default_factoryz(x for x in range(2))rH   z#async_generator_function_example(1)rJ   ignorezcoroutine_function_example(1)rL   MemberDescriptorTypezdatetime.timedelta.days)!r;   r1   r>   r@   sysexc_inforQ   rA   rD   hasattrtypesZisgetsetdescriptorr6   typetb_framef_localsr5   rB   rC   isdatadescriptorrE   r2   rG   r3   warningscatch_warningssimplefilterrF   r4   ZismemberdescriptordatetimeZ	timedeltaZdays)r7   r   r   r   test_excluding_predicates   s@    
"

z(TestPredicates.test_excluding_predicatesc             C   s   t d}td}| tt  | t| | tt  | t| | tt | t| | tt | t| |	  |	  d S )Nr   )
rM   rL   r6   r1   r4   rF   r-   r2   rE   close)r7   gen_corocoror   r   r   test_iscoroutine   s      zTestPredicates.test_iscoroutinec             C   s   dd }|  t|  td}td}| t| | t| G dd d}| t|  |  t| G dd d}| }dd	 |_|  t| |  |  d S )
Nc               s   s
   d V  d S )Nr   r   r   r   r   gen       z,TestPredicates.test_isawaitable.<locals>.genr   c               @   s   e Zd Zdd ZdS )z/TestPredicates.test_isawaitable.<locals>.Futurec               S   s   d S )Nr   r   r   r   r   	__await__   s    z9TestPredicates.test_isawaitable.<locals>.Future.__await__N)r.   r<   r=   ri   r   r   r   r   Future   s   rj   c               @   s   e Zd ZdS )z2TestPredicates.test_isawaitable.<locals>.NotFutureN)r.   r<   r=   r   r   r   r   	NotFuture   s    rk   c               S   s   d S )Nr   r   r   r   r   <lambda>   rh   z1TestPredicates.test_isawaitable.<locals>.<lambda>)r6   r1   ZisawaitablerL   rM   r-   ri   rc   )r7   rg   re   rd   rj   rk   Znot_futr   r   r   test_isawaitable   s    
 zTestPredicates.test_isawaitablec             C   s(   |  ttj |  tg j d S )N)r-   r1   Z	isroutinerS   rK   count)r7   r   r   r   test_isroutine   s    zTestPredicates.test_isroutinec             C   sD   |  tjd | tt G dd dt}| t|  d S )Nzmod.StupidGitc               @   s   e Zd Zdd ZdS )z2TestPredicates.test_isclass.<locals>.CustomGetattrc             S   s   d S )Nr   )r7   attrr   r   r   __getattr__   s    z>TestPredicates.test_isclass.<locals>.CustomGetattr.__getattr__N)r.   r<   r=   rq   r   r   r   r   CustomGetattr   s   rr   )r;   r1   r?   r-   listobjectr6   )r7   rr   r   r   r   test_isclass   s    zTestPredicates.test_isclassc             C   sF   G dd dt }| }d|_tt|}| d| | d| d S )Nc               @   s   e Zd ZdZdS )z/TestPredicates.test_get_slot_members.<locals>.C)r   bN)r.   r<   r=   	__slots__r   r   r   r   C   s   rx   *   r   rv   )rt   r   dictr1   
getmembersassertInassertNotIn)r7   rx   xmembersr   r   r   test_get_slot_members   s    z$TestPredicates.test_get_slot_membersc                s   ddl m}m  G  fddd|d}G dd d|}| }| t| | t| | t| | tt | td d S )	Nr   )ABCMetaabstractmethodc                   s   e Zd Z dd ZdS )z<TestPredicates.test_isabstract.<locals>.AbstractClassExamplec             S   s   d S )Nr   )r7   r   r   r   r      s    z@TestPredicates.test_isabstract.<locals>.AbstractClassExample.fooN)r.   r<   r=   r   r   )r   r   r   AbstractClassExample   s   r   )	metaclassc               @   s   e Zd Zdd ZdS )z4TestPredicates.test_isabstract.<locals>.ClassExamplec             S   s   d S )Nr   )r7   r   r   r   r      s    z8TestPredicates.test_isabstract.<locals>.ClassExample.fooN)r.   r<   r=   r   r   r   r   r   ClassExample   s   r      )abcr   r   r-   r1   
isabstractr6   int)r7   r   r   r   r   r   )r   r   test_isabstract   s    zTestPredicates.test_isabstractc                s   ddl m}m  g G fddd|d}G  fddd|}G dd	 d	|}| d
dg   G dd d|}G dd d|}G dd d|}| d
d
dg d S )Nr   )r   r   c                   s   e Zd Z fddZdS )zLTestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractCheckerc                s     t|  d S )N)r   r1   r   )cls)isabstract_checksr   r   __init_subclass__  s    z^TestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractChecker.__init_subclass__N)r.   r<   r=   r   r   )r   r   r   AbstractChecker  s   r   )r   c                   s   e Zd Z dd ZdS )zQTestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractClassExamplec             S   s   d S )Nr   )r7   r   r   r   r     s    zUTestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractClassExample.fooN)r.   r<   r=   r   r   )r   r   r   r     s   r   c               @   s   e Zd Zdd ZdS )zITestPredicates.test_isabstract_during_init_subclass.<locals>.ClassExamplec             S   s   d S )Nr   )r7   r   r   r   r     s    zMTestPredicates.test_isabstract_during_init_subclass.<locals>.ClassExample.fooN)r.   r<   r=   r   r   r   r   r   r     s   r   TFc               @   s   e Zd ZdS )zJTestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractChildN)r.   r<   r=   r   r   r   r   AbstractChild  s   r   c               @   s   e Zd ZdS )zOTestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractGrandchildN)r.   r<   r=   r   r   r   r   AbstractGrandchild  s   r   c               @   s   e Zd ZdS )zOTestPredicates.test_isabstract_during_init_subclass.<locals>.ConcreteGrandchildN)r.   r<   r=   r   r   r   r   ConcreteGrandchild  s   r   )r   r   r   assertEqualclear)r7   r   r   r   r   r   r   r   r   )r   r   r   $test_isabstract_during_init_subclass  s    z3TestPredicates.test_isabstract_during_init_subclassN)r.   r<   r=   rb   rf   rm   ro   ru   r   r   r   r   r   r   r   rP   }   s   )		rP   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S )TestInterpreterStackc             O   s&   t jj| f|| tddd d S )N      	   )unittestTestCase__init__gitabuse)r7   r   kwargsr   r   r   r     s    zTestInterpreterStack.__init__c             C   s    |  tjd |  tjd d S )Nz	git.ex[2]zmod.fr)r;   r1   rD   rA   )r7   r   r   r   test_abuse_done   s    z$TestInterpreterStack.test_abuse_donec             C   s&  |  ttjdk | ttjd dd   tdddgdf | ttjd dd   tddd	gdf | ttjd
 dd   tdddgdf | ttjd dd   tdddgdf tjd }| |jtj	 | |j
d | |jtj | |jd | d|jd  | |jd d S )Nr   r   r      eggsz    st = inspect.stack()
r   rK   z    eggs(b + d, c + f)
r   +   arguez            spam(a, b, c)
   '   r   z        self.argue(a, b, c)
zinspect.stack())r-   r   rS   str   r   modfileassertIsframefrlinenor   __file__Zfunctionr|   code_contextindex)r7   recordr   r   r   
test_stack$  s     
zTestInterpreterStack.test_stackc             C   s   |  ttjd |  ttjd dd   tdddgdf |  ttjd dd   tddd	gdf |  ttjd
 dd   tdddgdf d S )Nr   r   r   r   r   z            spam(a, b, c)
r   rK   z    eggs(b + d, c + f)
r      r   z    q = y / 0
)r   r   r   trr   r   )r7   r   r   r   
test_trace7  s    zTestInterpreterStack.test_tracec             C   sl   t tj\}}}}| |ddg | |d  | |d  | |dddd | t ||||d d S )Nr~   y      )r~   r$   r   z(x=11, y=14))r1   getargvaluesrS   r   r   formatargvalues)r7   r   varargsvarkwlocalsr   r   r   
test_frame@  s    zTestInterpreterStack.test_framec          	   C   sb   t tjj\}}}}| |ddddddg | |d | |d | t ||||d	 d S )
Nr   rv   r   defghz-(a=7, b=8, c=9, d=3, e=4, f=5, *g=(), **h={}))r1   r   rS   r   f_backr   r   )r7   r   r   r   r   r   r   r   test_previous_frameI  s    z(TestInterpreterStack.test_previous_frameN)	r.   r<   r=   r   r   r   r   r   r   r   r   r   r   r     s   		r   c               @   s(   e Zd ZdZdd Zdd Zdd ZdS )GetSourceBaseNc          	   C   s*   t t| j}| | _W d Q R X d S )N)openr1   getsourcefilefodderModulereadsource)r7   fpr   r   r   setUpU  s    zGetSourceBase.setUpc             C   s.   | j d}d||d | |r(dnd S )N
r    )r   splitr    )r7   topbottomlinesr   r   r   sourcerangeY  s    zGetSourceBase.sourcerangec             C   s   |  t|| || d S )N)r   r1   	getsourcer   )r7   r9   r   r   r   r   r   assertSourceEqual]  s    zGetSourceBase.assertSourceEqual)r.   r<   r=   r   r   r   r   r   r   r   r   r   Q  s   r   c               @   s   e Zd ZeZdd Zdd Zee	j
jdkddd Zee	j
jdkdd	d
 Zeed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,S )-TestRetrievingSourceCodec             C   s  t tt j}| |dtjfdtjfdtjfdtjfdtjfg t 	dd |D }| |t
dftjt
fftjtjtjffgtjt
fftjtjfftjtjtjffgggg t 	d	d |D d
}| |t
dftjt
fftjt
fftjtjfftjtjtjffgggg d S )NFesteringGobMalodorousPervertParrotDroppings	StupidGitZTitc             S   s   g | ]}|d  qS )r   r   ).0r   r   r   r   
<listcomp>m  s    z<TestRetrievingSourceCode.test_getclasses.<locals>.<listcomp>r   c             S   s   g | ]}|d  qS )r   r   )r   r   r   r   r   r   |  s    T)r1   r{   rS   r?   r   r   r   r   r   Zgetclasstreert   )r7   classesZtreer   r   r   test_getclassesd  s2    




z(TestRetrievingSourceCode.test_getclassesc             C   s6   t tt j}| |dtjfdtjfdtjfg d S )Nr   lobbestrK   )r1   r{   rS   r5   r   r   r   rK   )r7   Z	functionsr   r   r   test_getfunctions  s    z*TestRetrievingSourceCode.test_getfunctionsr   z)Docstrings are omitted with -O2 and abovec             C   s>   |  ttd |  ttjd |  ttjd d S )NzA module docstring.zA longer,

indented

docstring.z$Another

docstring

containing

tabs)r   r1   getdocrS   r   r   r   )r7   r   r   r   test_getdoc  s
    z$TestRetrievingSourceCode.test_getdocc             C   s\   |  ttjd |  ttjjd |  tt jd |  ttjjd d S )NzA longer,

indented

docstring.z$Another

docstring

containing

tabszThe automatic gainsaying.)r   r1   r   rS   r   r   Zcontradiction)r7   r   r   r   test_getdoc_inherited  s    z.TestRetrievingSourceCode.test_getdoc_inheritedztest requires docstringsc             C   sv   t j}| |ttj | |tjtjj | |t jtjj | |tjtjj | |tjtjj d S )N)r1   Z_finddocr   r   __doc__to_bytes
from_bytesreal)r7   Zfinddocr   r   r   test_finddoc  s    z%TestRetrievingSourceCode.test_finddocc             C   s   |  tdd d S )NzAn
    indented
    docstring.zAn
indented
docstring.)r   r1   Zcleandoc)r7   r   r   r   test_cleandoc  s    z&TestRetrievingSourceCode.test_cleandocc             C   sV   |  ttd |  ttjd tddd}| t| | tt d S )Nz	# line 1
z
# line 20
zx=1z_non_existing_filename.pyr!   )r   r1   ZgetcommentsrS   r   compileassertIsNoners   )r7   cor   r   r   test_getcomments  s
    z)TestRetrievingSourceCode.test_getcommentsc             C   s   |  ttt |  ttjt |  ttjjt |  ttjjt |  tttjd  |  td t	t d S )Nbuiltins)
r   r1   	getmodulerS   r   r   strrV   modulesr   )r7   r   r   r   test_getmodule  s    z'TestRetrievingSourceCode.test_getmodulec             C   s8   t | jjd}| |jd d | |jd d d S )N2   r   z	# line 1
r   z'A module docstring.'
)r1   Zgetframeinfor   r   r   r   )r7   Z
frame_infor   r   r    test_getframeinfo_get_first_line  s    z9TestRetrievingSourceCode.test_getframeinfo_get_first_linec             C   s4   |  tjdd |  tjdd |  tjdd d S )N   r      3   K   L   )r   r   r   rS   r   r   )r7   r   r   r   test_getsource  s    z'TestRetrievingSourceCode.test_getsourcec             C   s   |  tttjt |  tttjt d}t	d|d}|  t|d  dd d|j
ftj|j
< z|  tt|| W d tj|j
= X d S )Nz2_non_existing_filename_used_for_sourcefile_test.pyzx=1r!   r   None)r   r   r1   r   rS   rK   r   r   r   r   co_filename	linecachecache)r7   fnr   r   r   r   test_getsourcefile  s    z+TestRetrievingSourceCode.test_getsourcefilec             C   s   |  ttjtj d S )N)r   r1   getfilerS   r   r   )r7   r   r   r   test_getfile  s    z%TestRetrievingSourceCode.test_getfilec          	   C   s:   |  t}tt W d Q R X | t|jd d S )Nz<module)	assertRaises	TypeErrorr1   r   rV   r-   r   	exception
startswith)r7   r   r   r   r   test_getfile_builtin_module  s    z4TestRetrievingSourceCode.test_getfile_builtin_modulec          	   C   s:   |  t}tt W d Q R X | t|jd d S )Nz<class)	r  r  r1   r   r   r-   r   r  r  )r7   r   r   r   r   test_getfile_builtin_class  s    z3TestRetrievingSourceCode.test_getfile_builtin_classc          	   C   sj   |  t}tt W d Q R X | dt|j |  t}ttj	 W d Q R X | dt|j d S )Nzexpected, got)
r  r  r1   r   absr|   r   r  rs   r   )r7   Ze_absZe_appendr   r   r   'test_getfile_builtin_function_or_method  s    z@TestRetrievingSourceCode.test_getfile_builtin_function_or_methodc          	   C   sF   G dd dt }G dd d|d}| t t| W d Q R X d S )Nc               @   s   e Zd Zedd ZdS )zFTestRetrievingSourceCode.test_getfile_class_without_module.<locals>.CMc             S   s   t d S )N)AttributeError)r   r   r   r   r<     s    zQTestRetrievingSourceCode.test_getfile_class_without_module.<locals>.CM.__module__N)r.   r<   r=   propertyr   r   r   r   CM  s   r  c               @   s   e Zd ZdS )zETestRetrievingSourceCode.test_getfile_class_without_module.<locals>.CN)r.   r<   r=   r   r   r   r   rx     s   rx   )r   )rZ   r  r  r1   r   )r7   r  rx   r   r   r   !test_getfile_class_without_module  s    z:TestRetrievingSourceCode.test_getfile_class_without_modulec          	   C   s8   G dd d}| }|  t t| W d Q R X d S )Nc               @   s   e Zd Zdd ZdS )zDTestRetrievingSourceCode.test_getfile_broken_repr.<locals>.ErrorReprc             S   s   t dd S )NZxyz)	Exception)r7   r   r   r   __repr__  s    zMTestRetrievingSourceCode.test_getfile_broken_repr.<locals>.ErrorRepr.__repr__N)r.   r<   r=   r  r   r   r   r   	ErrorRepr  s   r  )r  r  r1   r   )r7   r  Zerr   r   r   test_getfile_broken_repr  s    z1TestRetrievingSourceCode.test_getfile_broken_reprc             C   sn   ddl m} d}|| }tj|< d|_d|_td|j | t	
|jjd tj|= t	tddd	 d S )
Nr   )
ModuleTypeZ__inspect_dummyz<string>Zdummyzdef x(): passza=10r   single)rY   r  rV   r   r   
__loader__r!   __dict__r   r1   r   r~   __code__r   r   )r7   r  namemr   r   r   test_getmodule_recursion  s    z1TestRetrievingSourceCode.test_getmodule_recursionc                s\   d\ t jd fdd	}|t _z(i }tt d| t|d  W dt _X dS )z4doctest monkeypatches linecache to enable inspection)z<test>zdef x(): pass
Nc                s"   |  krj ddS | |S d S )NT)keepends)
splitlines)r   module_globals)r   getlinesr   r   r   monkey  s    zHTestRetrievingSourceCode.test_proceed_with_fake_filename.<locals>.monkeyr  r~   )N)r   r  r!   r   r1   r   )r7   r  nsr   )r   r  r   r   test_proceed_with_fake_filename  s    z8TestRetrievingSourceCode.test_proceed_with_fake_filenamec             C   s   |  tjjdd d S )N   r   )r   rS   r   r  )r7   r   r   r   test_getsource_on_code_object!  s    z6TestRetrievingSourceCode.test_getsource_on_code_objectN)r.   r<   r=   rS   r   r   r   r   skipIfrV   flagsoptimizer   r   r   r   r   r   r   r   r   r   r  r  r  r	  r  r  r  r   r"  r   r   r   r   r   a  s.   %		
r   c               @   s    e Zd ZeZdd Zdd ZdS )!TestGettingSourceOfToplevelFramesc             C   s   d | _ | tjdd  d S )Nr   )ZmaxDiffr   rS   Zcurrentframe)r7   r   r   r   test_range_toplevel_frame'  s    z;TestGettingSourceOfToplevelFrames.test_range_toplevel_framec             C   s   |  tjdd  d S )Nr   )r   rS   rQ   )r7   r   r   r   #test_range_traceback_toplevel_frame+  s    zETestGettingSourceOfToplevelFrames.test_range_traceback_toplevel_frameN)r.   r<   r=   rS   r   r'  r(  r   r   r   r   r&  $  s   r&  c               @   s0   e Zd ZeZdd Zdd Zdd Zdd Zd	S )
TestDecoratorsc             C   s   |  tjdd d S )Nr      )r   mod2wrapped)r7   r   r   r   test_wrapped_decorator1  s    z%TestDecorators.test_wrapped_decoratorc             C   s   |  tjdd d S )Nr   
   )r   r+  Zgone)r7   r   r   r   test_replacing_decorator4  s    z'TestDecorators.test_replacing_decoratorc             C   s   |  tjdd d S )N      )r   r+  r   )r7   r   r   r   test_getsource_unwrap7  s    z$TestDecorators.test_getsource_unwrapc             C   s   |  tjdd d S )Nq   s   )r   r+  Zfunc114)r7   r   r   r   test_decorator_with_lambda:  s    z)TestDecorators.test_decorator_with_lambdaN)	r.   r<   r=   r+  r   r-  r/  r2  r5  r   r   r   r   r)  .  s
   r)  c               @   sP   e Zd Ze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S )TestOnelinersc             C   s   |  tjdd d S )N   )r   r+  Zoll)r7   r   r   r   test_oneline_lambda?  s    z!TestOneliners.test_oneline_lambdac             C   s   |  tjdd d S )N      )r   r+  Ztll)r7   r   r   r   test_threeline_lambdaC  s    z#TestOneliners.test_threeline_lambdac             C   s   |  tjdd d S )N!   "   )r   r+  Ztlli)r7   r   r   r   test_twoline_indented_lambdaH  s    z*TestOneliners.test_twoline_indented_lambdac             C   s   |  tjdd d S )N%   )r   r+  Zonelinefunc)r7   r   r   r   test_onelinefuncM  s    zTestOneliners.test_onelinefuncc             C   s   |  tjdd d S )N(   )   )r   r+  Zmanyargs)r7   r   r   r   test_manyargsQ  s    zTestOneliners.test_manyargsc             C   s   |  tjdd d S )N,   -   )r   r+  Ztwolinefunc)r7   r   r   r   test_twolinefuncW  s    zTestOneliners.test_twolinefuncc             C   s   |  tjd dd d S )Nr   1   )r   r+  r   )r7   r   r   r   test_lambda_in_list]  s    z!TestOneliners.test_lambda_in_listc             C   s   |  tjdd d S )N7   )r   r+  Z	anonymous)r7   r   r   r   test_anonymousb  s    zTestOneliners.test_anonymousN)r.   r<   r=   r+  r   r8  r;  r>  r@  rC  rF  rH  rJ  r   r   r   r   r6  =  s   r6  c               @   s   e Zd ZeZdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zeeed p^ejdddd Zdd Zdd Zdd Zdd ZdS )TestBuggyCasesc             C   s   |  tjdd d S )N:   ;   )r   r+  Zwith_comment)r7   r   r   r   test_with_commentj  s    z TestBuggyCases.test_with_commentc             C   s   |  tjd dd d S )Nr   ?   @   )r   r+  Zmultiline_sig)r7   r   r   r   test_multiline_sigm  s    z!TestBuggyCases.test_multiline_sigc             C   s   |  t jdd d S )NG   H   )r   r+  Zfunc69Zfunc71)r7   r   r   r   test_nested_classp  s    z TestBuggyCases.test_nested_classc             C   s   |  tjdd d S )NM   )r   r+  Zfunc77)r7   r   r   r   #test_one_liner_followed_by_non_names  s    z2TestBuggyCases.test_one_liner_followed_by_non_namec             C   s   |  tjjdd d S )NS   )r   r+  Zcls82Zfunc83)r7   r   r   r   test_one_liner_dedent_non_namev  s    z-TestBuggyCases.test_one_liner_dedent_non_namec             C   s   |  tjdd d S )NX   Z   )r   r+  Zfunc88)r7   r   r   r   &test_with_comment_instead_of_docstringy  s    z5TestBuggyCases.test_with_comment_instead_of_docstringc             C   s   |  tjdd d S )N_   a   )r   r+  Zmethod_in_dynamic_class)r7   r   r   r   test_method_in_dynamic_class|  s    z+TestBuggyCases.test_method_in_dynamic_classr   z.pyz,unicodedata is not an external binary modulec             C   s$   |  ttjt |  ttjt d S )N)r  OSErrorr1   r   unicodedata
findsource)r7   r   r   r   test_findsource_binary  s    z%TestBuggyCases.test_findsource_binaryc             C   s   dg}t |d dd}| ttj| | ttj| dd ||jftj|j< z0| 	t||df | 	t||d  W d tj|j= X d S )Nzx=1r   Z_dynamically_created_filer!   r   )
r   r  r_  r1   ra  r   r   r   r   r   )r7   r   r   r   r   r   !test_findsource_code_in_linecache  s    z0TestBuggyCases.test_findsource_code_in_linecachec             C   s>   x8dD ]0}t d|d}| ttj| | ttj| qW d S )N)r   z<string>zx=1r!   )r   r  IOErrorr1   ra  r   )r7   Zfnamer   r   r   r    test_findsource_without_filename  s    
z/TestBuggyCases.test_findsource_without_filenamec             C   s   |  tjjdd d S )Nv   w   )r   r+  ZClassWithMethodmethod)r7   r   r   r   test_getsource_on_method  s    z'TestBuggyCases.test_getsource_on_methodc             C   s   |  tjjdd d S )N      )r   r+  Zcls135Zfunc136)r7   r   r   r   test_nested_func  s    zTestBuggyCases.test_nested_funcN)r.   r<   r=   r+  r   rN  rQ  rT  rV  rX  r[  r^  r   r#  rX   r`  r   endswithrb  rc  re  ri  rl  r   r   r   r   rK  g  s   
rK  c                   s,   e Zd Z fddZdd Zdd Z  ZS )	TestNoEOLc          	      sz   t d | _t| j ttj| jdtj d}|d W d Q R X t	| j dd l
}W d Q R X || _t   d S )NZ_dirzinspect_fodder3%spywzclass X:
    pass # No EOLr   )r   tempdirosmkdirr   pathr    extsepwriter   Zinspect_fodder3r   superr   )r7   r   Zmod3)	__class__r   r   r     s    
zTestNoEOL.setUpc             C   s   t | j d S )N)shutilZrmtreerp  )r7   r   r   r   tearDown  s    zTestNoEOL.tearDownc             C   s   |  | jjdd d S )Nr   r   )r   r   X)r7   r   r   r   
test_class  s    zTestNoEOL.test_class)r.   r<   r=   r   ry  r{  __classcell__r   r   )rw  r   rn    s   rn  c               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	_BrokenDataDescriptorz2
    A broken data descriptor. See bug #1785.
    c              G   s   t dd S )Nzbroken data descriptor)r
  )r   r   r   r   __get__  s    z_BrokenDataDescriptor.__get__c              G   s   t d S )N)RuntimeError)r   r   r   r   __set__  s    z_BrokenDataDescriptor.__set__c              G   s   t dd S )Nzbroken data descriptor)r
  )r   r   r   r   rq     s    z!_BrokenDataDescriptor.__getattr__N)r.   r<   r=   r   r~  r  rq   r   r   r   r   r}    s   r}  c               @   s    e Zd ZdZdd Zdd ZdS )_BrokenMethodDescriptorz4
    A broken method descriptor. See bug #1785.
    c              G   s   t dd S )Nzbroken method descriptor)r
  )r   r   r   r   r~    s    z_BrokenMethodDescriptor.__get__c              G   s   t dd S )Nzbroken method descriptor)r
  )r   r   r   r   rq     s    z#_BrokenMethodDescriptor.__getattr__N)r.   r<   r=   r   r~  rq   r   r   r   r   r    s   r  c             C   s   dd t | D S )Nc             S   s   g | ]}|d d qS )Nr   r   )r   tr   r   r   r     s    z!attrs_wo_objs.<locals>.<listcomp>)r1   classify_class_attrs)r   r   r   r   attrs_wo_objs  s    r  c               @   s  e Zd Zdd Zd5ddZdddg di dfddZdd	 Zd
d Zdd Zdd Z	dd Z
eeddd Zeeeddd Zeeed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dS )6TestClassesAndFunctionsc             C   sj   G dd dt }G dd d|}G dd d|}G dd d||}||||t f}t|}| || d S )	Nc               @   s   e Zd ZdS )z4TestClassesAndFunctions.test_newstyle_mro.<locals>.AN)r.   r<   r=   r   r   r   r   A  s    r  c               @   s   e Zd ZdS )z4TestClassesAndFunctions.test_newstyle_mro.<locals>.BN)r.   r<   r=   r   r   r   r   B  s    r  c               @   s   e Zd ZdS )z4TestClassesAndFunctions.test_newstyle_mro.<locals>.CN)r.   r<   r=   r   r   r   r   rx     s    rx   c               @   s   e Zd ZdS )z4TestClassesAndFunctions.test_newstyle_mro.<locals>.DN)r.   r<   r=   r   r   r   r   D  s    r  )rt   r1   Zgetmror   )r7   r  r  rx   r  expectedZgotr   r   r   test_newstyle_mro  s    
z)TestClassesAndFunctions.test_newstyle_mroNc          	   C   s   |  t t|\}}}	}
W d Q R X | || | || | |	| | |
| |d k	r|  t | t|||	|
| W d Q R X d S )N)assertWarnsDeprecationWarningr1   Z
getargspecr   formatargspec)r7   routineargs_e	varargs_evarkw_e
defaults_e	formattedr   r   r   defaultsr   r   r   assertArgSpecEquals  s    z+TestClassesAndFunctions.assertArgSpecEqualsc
             C   s   t |\}
}}}}}}| |
| | || | || | || | || | || | || |	d k	r| t$ | t |
|||||||	 W d Q R X d S )N)r1   getfullargspecr   r  r  r  )r7   r  r  r  r  r  kwonlyargs_ekwonlydefaults_eann_er  r   r   r   r  
kwonlyargsZkwonlydefaultsannr   r   r   assertFullArgSpecEquals  s    z/TestClassesAndFunctions.assertFullArgSpecEqualsc          	   C   sx   | j tjddgdd |  tjddddd	d
gdddd | t| j tjg  | t| j tjg  | t| j tj	g  d S )Nr~   r   z(x, y))r  r   rv   r   r   r   r   r   r   )r      r   z!(a, b, c, d=3, e=4, f=5, *g, **h))
r  rS   r   rK   r  
ValueErrorr+  	keyworded	annotatedkeyword_only_arg)r7   r   r   r   test_getargspec  s    




z'TestClassesAndFunctions.test_getargspecc             C   sR   | j tjg ddgddidd | j tjdgdtidd | j tjg dgd	d
 d S )Narg1arg2r   z(*arg1, arg2=1))r  r  r  r  z(arg1: list))r  r  argz(*, arg))r  r  )r  r+  r  r  rs   r  )r7   r   r   r   test_getfullargspec  s    
z+TestClassesAndFunctions.test_getfullargspecc                s   t tjdd } j|ddgdd  j|ddgdd  jt |ddgdd  fdd}G d	d
 d
}||  ||j || j ||j || j G dd d}|| G dd d}|| d S )Nc             S   s   d S )Nr   )r~   r   r   r   r   ham  s    zETestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.hamr~   r   z(x, y))r  c                s    j | dddgdd d S )Nr7   r~   r   z(self, x, y))r  )r  )r   )r7   r   r   check_method'  s    zNTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.check_methodc               @   s>   e Zd Zeejdd ZeeZ	eejdd Z
dS )zCTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.Cc             S   s   d S )Nr   )r7   r~   r   r   r   r   r  +  s    zGTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C.hamc             S   s   d S )Nr   )r7   r~   r   r   r   r   __call__/  s    zLTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C.__call__N)r.   r<   r=   	functoolswrapsrS   rK   r  partialmethodphamr  r   r   r   r   rx   *  s   
rx   c               @   s    e Zd Zeejdd ZdS )zGTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C_newc             S   s   d S )Nr   )r7   r~   r   r   r   r   __new__9  s    zOTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C_new.__new__N)r.   r<   r=   r  r  rS   rK   r  r   r   r   r   C_new8  s   r  c               @   s    e Zd Zeejdd ZdS )zHTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C_initc             S   s   d S )Nr   )r7   r~   r   r   r   r   r   ?  s    zQTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C_init.__init__N)r.   r<   r=   r  r  rS   rK   r   r   r   r   r   C_init>  s   r  )	r  r  rS   rK   r  r  partialr  r  )r7   r  r  rx   r  r  r   )r7   r    test_argspec_api_ignores_wrapped  s     


z8TestClassesAndFunctions.test_argspec_api_ignores_wrappedc             C   s>   dd }t dt jj}t j|fd|_| j|dgdd d S )Nc               S   s   d S )Nr   r   r   r   r   testE  s    zHTestClassesAndFunctions.test_getfullargspec_signature_attr.<locals>.testrK   )r"   z(spam))r  r  )r1   	ParameterPOSITIONAL_ONLY	Signature__signature__r  )r7   r  Z
spam_paramr   r   r   "test_getfullargspec_signature_attrD  s    z:TestClassesAndFunctions.test_getfullargspec_signature_attrc             C   sP   ddddd}t |}| |j|j dd }t |}| |j|j d S )NrK   r  )r   returnc             S   s   d S )Nr   )r   r   r   r   r  M  rh   zITestClassesAndFunctions.test_getfullargspec_signature_annos.<locals>.testc               S   s   d S )Nr   r   r   r   r   r  Q  rh   )r1   r  r   __annotations__Zannotations)r7   r  specr   r   r   #test_getfullargspec_signature_annosL  s    

z;TestClassesAndFunctions.test_getfullargspec_signature_annosz6Signature information for builtins requires docstringsc             C   s^   | j tjjddgdd | j tt jddgdd | j tjdgddgd dd	d
d d S )Nr7   r9   z(self, obj))r  r  rs  dir_fdfollow_symlinksT)r  r  z,(path, *, dir_fd=None, follow_symlinks=True))r  r  r  r  )r  _picklePicklerdumpioBytesIOrq  stat)r7   r   r   r   #test_getfullargspec_builtin_methodsU  s    
z;TestClassesAndFunctions.test_getfullargspec_builtin_methodsc             C   s.   dd l }|j}t|}| |jd d d S )Nr   avocado)	_testcapi&docstring_with_signature_with_defaultsr1   r  r   r  )r7   r  builtinr  r   r   r    test_getfullagrspec_builtin_funce  s    
z8TestClassesAndFunctions.test_getfullagrspec_builtin_funcc          	   C   s2   dd l }|j}| t t| W d Q R X d S )Nr   )r  docstring_no_signaturer  r  r1   r  )r7   r  r  r   r   r   -test_getfullagrspec_builtin_func_no_signaturen  s    zETestClassesAndFunctions.test_getfullagrspec_builtin_func_no_signaturec             C   sf   x@t  D ]6}t|}t|j}t|}| | | || qW tt}t|j}| |t	 d S )N)
r'   r1   r  rs   r  sortedr-   r   r*    unsorted_keyword_only_parameters)r7   r   	signaturelsorted_lr   r   r   8test_getfullargspec_definition_order_preserved_on_kwonlyw  s    




zPTestClassesAndFunctions.test_getfullargspec_definition_order_preserved_on_kwonlyc             C   s$   G dd dt }| |jdg d S )Nc               @   s   e Zd Zdd ZdS )z9TestClassesAndFunctions.test_getargspec_method.<locals>.Ac             S   s   d S )Nr   )r7   r   r   r   r    s    z;TestClassesAndFunctions.test_getargspec_method.<locals>.A.mN)r.   r<   r=   r  r   r   r   r   r    s   r  r7   )rt   r  r  )r7   r  r   r   r   test_getargspec_method  s    z.TestClassesAndFunctions.test_getargspec_methodc             C   s  G dd dt }t|}| ddt f|d | ddt f|d | d	d|f|d
 | dd|f|d | dd|f|d | dd|f|d|  | dd|f|d | dd|f|d | dd|f|d | dd|f|d G dd d|}t|}| d	d|f|d
 | dd|f|d | dd|f|d | dd|f|d | dd|f|d | dd|f|d | dd|f|d | dd|f|d G dd d|}t|}| d	d|f|d
 | dd|f|d | dd|f|d | dd|f|d | dd|f|d | dd|f|d | dd|f|d | dd|f|d G d d! d!||}t|}| d	d|f|d
 | dd|f|d | dd|f|d | dd|f|d | dd|f|d | dd|f|d | dd|f|d | dd|f|d d S )"Nc               @   s\   e Zd Zdd ZeeZdd ZeeZdd ZeeZ	dd Z
d	d
 ZdZe Ze ZdS )z9TestClassesAndFunctions.test_classify_newstyle.<locals>.Ac               S   s   d S )Nr   r   r   r   r   s  rh   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.A.sc             S   s   d S )Nr   )r   r   r   r   r     rh   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.A.cc             S   s   d S )Nr   )r7   r   r   r   getp  rh   z>TestClassesAndFunctions.test_classify_newstyle.<locals>.A.getpc             S   s   d S )Nr   )r7   r   r   r   r    rh   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.A.mc             S   s   d S )Nr   )r7   r   r   r   m1  rh   z<TestClassesAndFunctions.test_classify_newstyle.<locals>.A.m11N)r.   r<   r=   r  staticmethodr   classmethodr  r  r$   r  r  datablobr}  ddr  mdr   r   r   r   r    s   r  r  zstatic methodzmissing __new__r   rh  zmissing __init__r  zmissing static methodr   zclass methodzmissing class methodr$   r  zmissing propertyr  zmissing plain method: %rr  zmissing plain methodr  datazmissing datar  zmissing method descriptorr  zmissing data descriptorc               @   s   e Zd Zdd ZdS )z9TestClassesAndFunctions.test_classify_newstyle.<locals>.Bc             S   s   d S )Nr   )r7   r   r   r   r    rh   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.B.mN)r.   r<   r=   r  r   r   r   r   r    s   r  c               @   s   e Zd Zdd Zdd ZdS )z9TestClassesAndFunctions.test_classify_newstyle.<locals>.Cc             S   s   d S )Nr   )r7   r   r   r   r    rh   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.C.mc             S   s   d S )Nr   )r7   r   r   r   r     rh   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.C.cN)r.   r<   r=   r  r   r   r   r   r   rx     s   rx   c               @   s   e Zd Zdd ZdS )z9TestClassesAndFunctions.test_classify_newstyle.<locals>.Dc             S   s   d S )Nr   )r7   r   r   r   r    rh   z<TestClassesAndFunctions.test_classify_newstyle.<locals>.D.m1N)r.   r<   r=   r  r   r   r   r   r    s   r  )rt   r  r|   )r7   r  attrsr  rx   r  r   r   r   test_classify_newstyle  sX    
z.TestClassesAndFunctions.test_classify_newstylec             C   s   x.t tD ]"}tt|}t|tr
t| q
W tt}| 	ddtf|d | 	ddt
f|d | 	ddt
f|d	 | 	d
dt
f|d	 | 	ddtf|d	 d S )Nr  zstatic methodzmissing __new__r   zclass methodzmissing class methodr   rh  zmissing plain method__add____and__)dir__builtins__getattr
isinstancerZ   r1   r  r  boolr|   r   )r7   r  r  r  r   r   r   test_classify_builtin_types  s    

z3TestClassesAndFunctions.test_classify_builtin_typesc             C   sp   G dd dt }G dd d|d}tdd||jd }| |t| tdd|d}| |t| d S )	Nc                   s   e Zd Z fddZ  ZS )zITestClassesAndFunctions.test_classify_DynamicClassAttribute.<locals>.Metac                s   |dkrdS t  |S )Nr  rK   )rv  rq   )r7   r  )rw  r   r   rq     s    zUTestClassesAndFunctions.test_classify_DynamicClassAttribute.<locals>.Meta.__getattr__)r.   r<   r=   rq   r|  r   r   )rw  r   Meta  s   r  c               @   s   e Zd Zejdd ZdS )zGTestClassesAndFunctions.test_classify_DynamicClassAttribute.<locals>.VAc             S   s   dS )Nr   r   )r7   r   r   r   r    s    zKTestClassesAndFunctions.test_classify_DynamicClassAttribute.<locals>.VA.hamN)r.   r<   r=   rY   DynamicClassAttributer  r   r   r   r   VA  s   r  )r   r  r  rK   )rZ   r1   	Attributer  r|   r  )r7   r  r  Zshould_find_dcaZshould_find_gar   r   r   #test_classify_DynamicClassAttribute  s    z;TestClassesAndFunctions.test_classify_DynamicClassAttributec                sP   G  fdddt  G  fdddt }tdd||j}| |t| d S )Nc                   s    e Zd Z fddZdd ZdS )zDTestClassesAndFunctions.test_classify_overrides_bool.<locals>.NoBoolc                s     S )Nr   )r7   r:   )NoBoolr   r   rO     s    zKTestClassesAndFunctions.test_classify_overrides_bool.<locals>.NoBool.__eq__c             S   s   t dd S )Nz,This object does not specify a boolean value)NotImplementedError)r7   r   r   r   __bool__  s    zMTestClassesAndFunctions.test_classify_overrides_bool.<locals>.NoBool.__bool__N)r.   r<   r=   rO   r  r   )r  r   r   r    s   r  c                   s   e Zd Z  ZdS )zCTestClassesAndFunctions.test_classify_overrides_bool.<locals>.HasNBN)r.   r<   r=   r  r   )r  r   r   HasNB  s   r  r  r  )rt   r1   r  r  r|   r  )r7   r  Zshould_find_attrr   )r  r   test_classify_overrides_bool  s    z4TestClassesAndFunctions.test_classify_overrides_boolc             C   sH   G dd dt }G dd d|d}tdd|d}| |t| d S )	Nc               @   s   e Zd ZdZdd ZdS )zMTestClassesAndFunctions.test_classify_metaclass_class_attribute.<locals>.Metaslapc             S   s   ddddgS )Nrw  r<   r.   fishr   )r7   r   r   r   __dir__  s    zUTestClassesAndFunctions.test_classify_metaclass_class_attribute.<locals>.Meta.__dir__N)r.   r<   r=   r  r  r   r   r   r   r    s   r  c               @   s   e Zd ZdS )zNTestClassesAndFunctions.test_classify_metaclass_class_attribute.<locals>.ClassN)r.   r<   r=   r   r   r   r   Class  s   r  )r   r  r  r  )rZ   r1   r  r|   r  )r7   r  r  should_findr   r   r   'test_classify_metaclass_class_attribute  s    z?TestClassesAndFunctions.test_classify_metaclass_class_attributec             C   sH   G dd dt }G dd d|d}tdd|d}| |t| d S )	Nc                   s$   e Zd Zdd Z fddZ  ZS )zDTestClassesAndFunctions.test_classify_VirtualAttribute.<locals>.Metac             S   s   ddddgS )Nrw  r<   r.   BOOMr   )r   r   r   r   r    s    zLTestClassesAndFunctions.test_classify_VirtualAttribute.<locals>.Meta.__dir__c                s   |dkrdS t  |S )Nr  ry   )rv  Z_Meta__getattr)r7   r  )rw  r   r   rq     s    zPTestClassesAndFunctions.test_classify_VirtualAttribute.<locals>.Meta.__getattr__)r.   r<   r=   r  rq   r|  r   r   )rw  r   r    s   r  c               @   s   e Zd ZdS )zETestClassesAndFunctions.test_classify_VirtualAttribute.<locals>.ClassN)r.   r<   r=   r   r   r   r   r    s   r  )r   r  r  ry   )rZ   r1   r  r|   r  )r7   r  r  r  r   r   r   test_classify_VirtualAttribute  s    z6TestClassesAndFunctions.test_classify_VirtualAttributec       	         s   G dd dt  G dd dt G  fddd }G dd d d	}G d
d d||d	}tdd d}tddd}tdd|d}t|}x|||fD ]}| || qW d S )Nc                   s$   e Zd Zdd Z fddZ  ZS )zSTestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta1c             S   s   ddddgS )Nrw  r<   r.   oner   )r   r   r   r   r  $  s    z[TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta1.__dir__c                s   |dkrdS t  |S )Nr  r   )rv  rq   )r7   r  )rw  r   r   rq   &  s    z_TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta1.__getattr__)r.   r<   r=   r  rq   r|  r   r   )rw  r   Meta1#  s   r  c                   s$   e Zd Zdd Z fddZ  ZS )zSTestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta2c             S   s   ddddgS )Nrw  r<   r.   twor   )r   r   r   r   r  +  s    z[TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta2.__dir__c                s   |dkrdS t  |S )Nr  r   )rv  rq   )r7   r  )rw  r   r   rq   -  s    z_TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta2.__getattr__)r.   r<   r=   r  rq   r|  r   r   )rw  r   Meta2*  s   r  c                   s*   e Zd ZfddZ fddZ  ZS )zSTestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta3c                s,   t ttddddg |  |  S )Nrw  r<   r.   three)rs   r  r0   r  )r   )r  r  r   r   r  2  s    z[TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta3.__dir__c                s   |dkrdS t  |S )Nr  r   )rv  rq   )r7   r  )rw  r   r   rq   5  s    z_TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta3.__getattr__)r.   r<   r=   r  rq   r|  r   )r  r  )rw  r   Meta31  s   r  c               @   s   e Zd ZdS )zTTestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Class1N)r.   r<   r=   r   r   r   r   Class19  s   r   )r   c               @   s   e Zd ZdS )zTTestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Class2N)r.   r<   r=   r   r   r   r   Class2;  s   r  r  r  r   r  r   r  r   )rZ   r1   r  r  r|   )	r7   r  r   r  Zshould_find1Zshould_find2Zshould_find3ZccaZsfr   )r  r  r   ,test_classify_VirtualAttribute_multi_classes"  s    
zDTestClassesAndFunctions.test_classify_VirtualAttribute_multi_classesc             C   sF   G dd dt }G dd d|d}dd t|D }| d| d S )	Nc               @   s   e Zd Zdd ZdS )zKTestClassesAndFunctions.test_classify_class_attrs_with_buggy_dir.<locals>.Mc             S   s
   dddgS )Nrw  r.   missingr   )r   r   r   r   r  G  s    zSTestClassesAndFunctions.test_classify_class_attrs_with_buggy_dir.<locals>.M.__dir__N)r.   r<   r=   r  r   r   r   r   MF  s   r  c               @   s   e Zd ZdS )zKTestClassesAndFunctions.test_classify_class_attrs_with_buggy_dir.<locals>.CN)r.   r<   r=   r   r   r   r   rx   I  s   rx   )r   c             S   s   g | ]}|d  qS )r   r   )r   r   r   r   r   r   K  s    zTTestClassesAndFunctions.test_classify_class_attrs_with_buggy_dir.<locals>.<listcomp>r  )rZ   r1   r  r}   )r7   r  rx   r  r   r   r   (test_classify_class_attrs_with_buggy_dirE  s    z@TestClassesAndFunctions.test_classify_class_attrs_with_buggy_dirc             C   s   G dd dt }dd }|tj}|tj}| t||d|jd fg | t||d|jd fg G dd d|}| t||d|jd fg | t||d|jd fg d S )	Nc               @   s   e Zd Ze Ze ZdS )z>TestClassesAndFunctions.test_getmembers_descriptors.<locals>.AN)r.   r<   r=   r}  r  r  r  r   r   r   r   r  O  s   r  c                s"   G dd dt   fdd}|S )Nc               @   s   e Zd ZdS )zXTestClassesAndFunctions.test_getmembers_descriptors.<locals>.pred_wrapper.<locals>.EmptyN)r.   r<   r=   r   r   r   r   EmptyV  s   r  c                s$   dt | krt | jrdS | S )Nr.   F)r  rX   r.   )r~   )r  predr   r   r,  X  s    zZTestClassesAndFunctions.test_getmembers_descriptors.<locals>.pred_wrapper.<locals>.wrapped)rt   )r  r,  r   )r  r  r   pred_wrapperS  s    zITestClassesAndFunctions.test_getmembers_descriptors.<locals>.pred_wrapperr  r  c               @   s   e Zd ZdS )z>TestClassesAndFunctions.test_getmembers_descriptors.<locals>.BN)r.   r<   r=   r   r   r   r   r  f  s   r  )rt   r1   ismethoddescriptorr]   r   r{   r  )r7   r  r  r	  r]   r  r   r   r   test_getmembers_descriptorsN  s    

z3TestClassesAndFunctions.test_getmembers_descriptorsc             C   s   G dd d}|  d|jft| | d|jft|tj | }|  d|jft| |  d|jft|tj d S )Nc               @   s   e Zd Zdd ZdS )z9TestClassesAndFunctions.test_getmembers_method.<locals>.Bc             S   s   d S )Nr   )r7   r   r   r   r   p  s    z;TestClassesAndFunctions.test_getmembers_method.<locals>.B.fN)r.   r<   r=   r   r   r   r   r   r  o  s   r  r   )r|   r   r1   r{   r}   rB   )r7   r  rv   r   r   r   test_getmembers_methodn  s    z.TestClassesAndFunctions.test_getmembers_methodc             C   sL   G dd dt }G dd d|d}| dt| | dt|  d S )Nc                   s   e Zd Z fddZ  ZS )zCTestClassesAndFunctions.test_getmembers_VirtualAttribute.<locals>.Mc                s   |dkrdS t  |S )Nr   	scrambled)rv  rq   )r   r  )rw  r   r   rq   {  s    zOTestClassesAndFunctions.test_getmembers_VirtualAttribute.<locals>.M.__getattr__)r.   r<   r=   rq   r|  r   r   )rw  r   r  z  s   r  c               @   s   e Zd Zejdd ZdS )zCTestClassesAndFunctions.test_getmembers_VirtualAttribute.<locals>.Ac             S   s   dS )NrK   r   )r7   r   r   r   r     s    zHTestClassesAndFunctions.test_getmembers_VirtualAttribute.<locals>.A.eggsN)r.   r<   r=   rY   r  r   r   r   r   r   r    s   r  )r   )r   r  )r   rK   )rZ   r|   r1   r{   )r7   r  r  r   r   r    test_getmembers_VirtualAttributey  s    z8TestClassesAndFunctions.test_getmembers_VirtualAttributec             C   sF   G dd dt }G dd d|d}dd t|D }| d| d S )	Nc               @   s   e Zd Zdd ZdS )zATestClassesAndFunctions.test_getmembers_with_buggy_dir.<locals>.Mc             S   s
   dddgS )Nrw  r.   r  r   )r   r   r   r   r    s    zITestClassesAndFunctions.test_getmembers_with_buggy_dir.<locals>.M.__dir__N)r.   r<   r=   r  r   r   r   r   r    s   r  c               @   s   e Zd ZdS )zATestClassesAndFunctions.test_getmembers_with_buggy_dir.<locals>.CN)r.   r<   r=   r   r   r   r   rx     s   rx   )r   c             S   s   g | ]}|d  qS )r   r   )r   r   r   r   r   r     s    zJTestClassesAndFunctions.test_getmembers_with_buggy_dir.<locals>.<listcomp>r  )rZ   r1   r{   r}   )r7   r  rx   r  r   r   r   test_getmembers_with_buggy_dir  s    z6TestClassesAndFunctions.test_getmembers_with_buggy_dir)NNNN) 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   r   r   r   r    sD    
(	Q
#	 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S )TestGetClosureVarsc             C   sV   dd }t  }d|i}dti}dti}dh}t||||}| t||| d S )Nc                s    fdd}|S )Nc                s   t |  tt d S )N)print_global_refunbound_ref)	local_ref)nonlocal_refr   r   r     s    z=TestGetClosureVars.test_name_resolution.<locals>.f.<locals>.gr   )r  r   r   )r  r   r     s    z2TestGetClosureVars.test_name_resolution.<locals>.fr  r  r  r  )rt   r  r  r1   ClosureVarsr   getclosurevars)r7   r   _argnonlocal_varsglobal_varsbuiltin_varsunbound_namesr  r   r   r   test_name_resolution  s    z'TestGetClosureVars.test_name_resolutionc             C   sV   dd }t  }d|i}dti}dti}dh}t||||}| t||| d S )Nc                s    fdd}|S )Nc             3   s   t |  tt d V  d S )N)r  r  r  )r  )r  r   r   r     s    z?TestGetClosureVars.test_generator_closure.<locals>.f.<locals>.gr   )r  r   r   )r  r   r     s    z4TestGetClosureVars.test_generator_closure.<locals>.fr  r  r  r  )rt   r  r  r1   r  r   r  )r7   r   r  r  r  r  r  r  r   r   r   test_generator_closure  s    z)TestGetClosureVars.test_generator_closurec             C   s`   G dd d}t  }d|i}dti}dti}dh}t||||}| t| || d S )Nc               @   s   e Zd Zdd ZdS )z1TestGetClosureVars.test_method_closure.<locals>.Cc                s    fdd}|S )Nc                s   t |  tt d S )N)r  r  r  )r  )r  r   r   r     s    z>TestGetClosureVars.test_method_closure.<locals>.C.f.<locals>.gr   )r7   r  r   r   )r  r   r     s    z3TestGetClosureVars.test_method_closure.<locals>.C.fN)r.   r<   r=   r   r   r   r   r   rx     s   rx   r  r  r  r  )rt   r  r  r1   r  r   r  r   )r7   rx   r  r  r  r  r  r  r   r   r   test_method_closure  s    z&TestGetClosureVars.test_method_closurec                s   dd dd }dd }dd } fd	d
  fdd}|d}|d}||d} |ddi  |ddi  |d|d  dd dddi  | d S )Nc             S   s   t | jS )N)r1   r  Z	nonlocals)r   r   r   r   _nonlocal_vars  s    z=TestGetClosureVars.test_nonlocal_vars.<locals>._nonlocal_varsc                s    fdd}|S )Nc                s    |  S )Nr   )r   )r~   r   r   add  s    zFTestGetClosureVars.test_nonlocal_vars.<locals>.make_adder.<locals>.addr   )r~   r   r   )r~   r   
make_adder  s    z9TestGetClosureVars.test_nonlocal_vars.<locals>.make_adderc                s    fddS )Nc                s
    | S )Nr   )r  )r  funcr   r   rl     rh   zFTestGetClosureVars.test_nonlocal_vars.<locals>.curry.<locals>.<lambda>r   )r"  r  r   )r  r"  r   curry  s    z4TestGetClosureVars.test_nonlocal_vars.<locals>.curryc             S   s   | |k S )Nr   )r   rv   r   r   r   	less_than  s    z8TestGetClosureVars.test_nonlocal_vars.<locals>.less_thanc                s    fdd}|_ ||S )Nc                s    fddS )Nc                s     | S )Nr   )r~   )r   r   r   rl     rh   zMTestGetClosureVars.test_nonlocal_vars.<locals>.Y.<locals>.g.<locals>.<lambda>r   )r   )le)r   r   r     s    z;TestGetClosureVars.test_nonlocal_vars.<locals>.Y.<locals>.g)g_ref)r%  r   )Y)r%  r   r'    s    z0TestGetClosureVars.test_nonlocal_vars.<locals>.Yc                s    | d ji d S )Nr   )r   r&  )r"  )r'  r  r7   r   r   check_y_combinator  s    zATestGetClosureVars.test_nonlocal_vars.<locals>.check_y_combinatorr   r   r   r~   )r  r"  c                s    fddS )Nc                s    |  S )Nr   )r   )r~   r   r   rl     rh   zITestGetClosureVars.test_nonlocal_vars.<locals>.<lambda>.<locals>.<lambda>r   )r~   r   )r~   r   rl     rh   z7TestGetClosureVars.test_nonlocal_vars.<locals>.<lambda>r   )r   )r7   r!  r#  r$  r(  ZincZadd_twoZgreater_than_fiver   )r'  r  r7   r   test_nonlocal_vars  s     


z%TestGetClosureVars.test_nonlocal_varsc             C   sF   dd }t i i i t }| t dd | | t || d S )Nc               S   s   d S )Nr   r   r   r   r   r     rh   z9TestGetClosureVars.test_getclosurevars_empty.<locals>.fooc               S   s   dS )NTr   r   r   r   r   rl     rh   z>TestGetClosureVars.test_getclosurevars_empty.<locals>.<lambda>)r1   r  r0   r   r  )r7   r   Z_emptyr   r   r   test_getclosurevars_empty  s    z,TestGetClosureVars.test_getclosurevars_emptyc             C   sB   G dd d}|  ttjd |  ttjt |  ttji  d S )Nc               @   s   e Zd ZdS )z7TestGetClosureVars.test_getclosurevars_error.<locals>.TN)r.   r<   r=   r   r   r   r   T  s    r+  r   )r  r  r1   r  rs   )r7   r+  r   r   r   test_getclosurevars_error  s    z,TestGetClosureVars.test_getclosurevars_errorc             C   s   d}i }t || |d |fS )Nzdef f(): print(path)r   )r!   )r7   coder  r   r   r   _private_globals  s    
z#TestGetClosureVars._private_globalsc             C   sD   |   \}}|dd  ti i dtidh}| t|| d S )Nr  r  rs  )r.  popr1   r  r  r   r  )r7   r   r  r  r   r   r   test_builtins_fallback  s    z)TestGetClosureVars.test_builtins_fallbackc             C   sD   |   \}}ddi|d< ti i ddidh}| t|| d S )Nrs  r   r  r  )r.  r1   r  r   r  )r7   r   r  r  r   r   r   test_builtins_as_dict  s    z(TestGetClosureVars.test_builtins_as_dictc             C   sB   |   \}}t|d< ti i dtjidh}| t|| d S )Nr  rs  r  )r.  rq  r1   r  rs  r   r  )r7   r   r  r  r   r   r   test_builtins_as_module  s    z*TestGetClosureVars.test_builtins_as_moduleN)r.   r<   r=   r  r  r  r)  r*  r,  r.  r0  r1  r2  r   r   r   r   r    s   &r  c               @   s`   e Zd ZdddZd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S )TestGetcallargsFunctionsNc             C   s@   t |pi |d}td| d |}td| d |}| || d S )N)r"  zfunc(%s)zinspect.getcallargs(func, %s))rz   r,   r   )r7   r"  call_params_stringlocsZr1Zr2r   r   r   assertEqualCallArgs  s
    
z,TestGetcallargsFunctions.assertEqualCallArgsc          
   C   s   t |pi |d}ytd| d | W n& tk
rJ } z|}W d d }~X Y nX | d ytd| d | W n& tk
r } z|}W d d }~X Y nX | d | t|t| | t|t| ~~d S )N)r"  zfunc(%s)zException not raisedzinspect.getcallargs(func, %s))rz   r,   r  Zfailr   rZ   r   r   )r7   r"  Zcall_param_stringr5  r   Zex1Zex2r   r   r   assertEqualException  s    



z-TestGetcallargsFunctions.assertEqualExceptionc             C   s   d}t || S )z+Create a function that returns its locals()zlambda %s: locals())r,   )r7   r  r-  r   r   r   makeCallable'  s    z%TestGetcallargsFunctions.makeCallablec             C   s   |  d}| |d | |d | |d | |d | |d | |d | |d | |d	 | |d
 | |d | |d | |d | |d | |d | |d | |d | |d | |d d S )Nza, b=12z2, 3za=2zb=3, a=2z2, b=3z*(2,)z*[2]z*(2, 3)z*[2, 3]z	**{"a":2}zb=3, **{"a":2}z2, **{"b":3}z**{"b":3, "a":2}z*collections.UserList([2])z*collections.UserList([2, 3])z**collections.UserDict(a=2)z2, **collections.UserDict(b=3)z b=2, **collections.UserDict(a=3))r8  r6  )r7   r   r   r   r   
test_plain,  s&    
z#TestGetcallargsFunctions.test_plainc             C   sV   |  d}| |d | |d | |d | |d | |d | |d d S )Nz
a, b=1, *cr9  z2, 3z2, 3, 4z*(2,3,4)z	2, *[3,4]z 2, 3, *collections.UserList([4]))r8  r6  )r7   r   r   r   r   test_varargsC  s    
z%TestGetcallargsFunctions.test_varargsc             C   sz   |  d}| |d | |d | |d | |d | |d | |d | |d | |d	 | |d
 d S )Nza, b=1, **cza=2z2, b=3, c=4zb=3, a=2, c=4zc=4, **{"a":2, "b":3}z2, c=4, **{"b":3}zb=2, **{"a":3, "c":4}z%**collections.UserDict(a=2, b=3, c=4)z#2, c=4, **collections.UserDict(b=3)z%b=2, **collections.UserDict(a=3, c=4))r8  r6  )r7   r   r   r   r   
test_varkwL  s    
z#TestGetcallargsFunctions.test_varkwc             C   sV   |  d}| |d | |d | |d | |d | |d | |d d S )Nz**cr   za=1za=1, b=2zc=3, **{"a": 1, "b": 2}z **collections.UserDict(a=1, b=2)z%c=3, **collections.UserDict(a=1, b=2))r8  r6  )r7   r   r   r   r   test_varkw_onlyX  s    
z(TestGetcallargsFunctions.test_varkw_onlyc             C   s   |  d}| |d | |d | |d | |d | |d | |d | |d | |d	 |  d
}| |d | |d | |d d S )Nza=3, *, c, d=2zc=3zc=3, a=3za=2, c=4z4, c=4r   3za=3zd=4z	*, c, d=2zc=3, d=4zd=4, c=3)r8  r6  r7  )r7   r   r   r   r   test_keyword_onlyb  s    

z*TestGetcallargsFunctions.test_keyword_onlyc             C   s   |  d}| |d | |d | |d | |d | |d | |d | |d |  d	}| |d | |d | |d
 | |d | |d | |d d S )Nza, b=2, *f, **gz2, 3, 7z	2, 3, x=8z2, 3, x=8, *[(4,[5,6]), 7]z2, x=8, *[3, (4,[5,6]), 7], y=9zx=8, *[2, 3, (4,[5,6])], y=9z@x=8, *collections.UserList([2, 3, (4,[5,6])]), **{"y":9, "z":10}zP2, x=8, *collections.UserList([3, (4,[5,6])]), **collections.UserDict(y=9, z=10)za, b=2, *f, x, y=99, **gz%2, x=8, *[3, (4,[5,6]), 7], y=9, z=10z"x=8, *[2, 3, (4,[5,6])], y=9, z=10zEx=8, *collections.UserList([2, 3, (4,[5,6])]), q=0, **{"y":9, "z":10}zU2, x=8, *collections.UserList([3, (4,[5,6])]), q=0, **collections.UserDict(y=9, z=10))r8  r6  )r7   r   r   r   r   test_multiple_featuresr  s    

z/TestGetcallargsFunctions.test_multiple_featuresc       	   	   C   s6  |  d}|  d}|  d}| |d | |d | |d | |d | |d | |d | |d | |d | |d x||fD ]}| |d	 | |d
 | |d | |d | |d | |d | |d | |d | |d | |d | |d qW |  d}| |d | |d |  d}| |d | |d dd }| td t| W d Q R X dd }| td t| W d Q R X | td tjdtjjd d! W d Q R X | td" tjd#d$d d! W d Q R X | td% tjd&d'd( W d Q R X d S ))Nr   za, bza, b=1r  zx=1z1,x=1za=2zb=3z2, 3, 4z1, 2, 3, a=1z2, 3, 4, c=5zc=2z2, c=3z	2, 3, c=4z2, c=4, b=3u   **{u"πι": 4}z1, a=2z1, **{"a":2}z	1, 2, b=3z**cz1, 2z1, 2, a=1, b=2z	*, a, b=0c             S   s   d S )Nr   )r   r   r   r   f5  rh   z0TestGetcallargsFunctions.test_errors.<locals>.f5zmissing 1 required keyword-onlyc             S   s   d S )Nr   )r   rv   r   r   r   r   f6  s    z0TestGetcallargsFunctions.test_errors.<locals>.f6z'a', 'b' and 'c'z6variadic keyword parameters cannot have default valuesr   ry   )kinddefaultz%value 5 is not a valid Parameter.kindr   r   zname must be a str, not a int{   r  )rC  )	r8  r7  assertRaisesRegexr  r1   Zgetcallargsr  r  VAR_KEYWORD)	r7   Zf0f1f2r   f3f4rA  rB  r   r   r   test_errors  s^    




z$TestGetcallargsFunctions.test_errors)N)N)r.   r<   r=   r6  r7  r8  r:  r;  r<  r=  r?  r@  rL  r   r   r   r   r3    s   

	
r3  c                   s$   e Zd Zdd Z fddZ  ZS )TestGetcallargsMethodsc             C   s"   G dd dt }|| _| | _d S )Nc               @   s   e Zd ZdS )z)TestGetcallargsMethods.setUp.<locals>.FooN)r.   r<   r=   r   r   r   r   Foo  s   rN  )rt   r   inst)r7   rN  r   r   r   r     s    zTestGetcallargsMethods.setUpc                s$   t t| j}|d| | j_| jjS )Nzself, )rv  rM  r8  r   rh  rO  )r7   r  mk)rw  r   r   r8    s    z#TestGetcallargsMethods.makeCallable)r.   r<   r=   r   r8  r|  r   r   )rw  r   rM    s   rM  c                   sB   e Zd Z fddZd
 fdd	Zd fdd	Zddd	Z  ZS )TestGetcallargsUnboundMethodsc                s   t t| | | jjS )N)rv  rQ  r8  r   rh  )r7   r  )rw  r   r   r8    s    z*TestGetcallargsUnboundMethods.makeCallableNc                s   t t| j| ||| S )N)rv  rQ  r6  _getAssertEqualParams)r7   r"  r4  r5  )rw  r   r   r6    s    
z1TestGetcallargsUnboundMethods.assertEqualCallArgsc                s   t t| j| ||| S )N)rv  rQ  r7  rR  )r7   r"  r4  r5  )rw  r   r   r7    s    
z2TestGetcallargsUnboundMethods.assertEqualExceptionc             C   s    t |pi | jd}|d| |fS )N)rO  zinst,)rz   rO  )r7   r"  r4  r5  r   r   r   rR    s    z3TestGetcallargsUnboundMethods._getAssertEqualParams)N)N)N)r.   r<   r=   r8  r6  r7  rR  r|  r   r   )rw  r   rQ    s   rQ  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-S ).TestGetattrStaticc          	   C   s   G dd dt }| }| t|d|j | t|dd |j | t t|d W d Q R X | t|ddd d S )Nc               @   s   e Zd Ze ZdS )z+TestGetattrStatic.test_basic.<locals>.ThingN)r.   r<   r=   rt   r~   r   r   r   r   Thing  s   rT  r~   r   r   )rt   r   r1   getattr_staticr~   r  r
  )r7   rT  thingr   r   r   
test_basic  s    zTestGetattrStatic.test_basicc             C   s@   G dd dt }G dd d|}| }| t|d|j d S )Nc               @   s   e Zd Ze ZdS )z/TestGetattrStatic.test_inherited.<locals>.ThingN)r.   r<   r=   rt   r~   r   r   r   r   rT    s   rT  c               @   s   e Zd ZdS )z4TestGetattrStatic.test_inherited.<locals>.OtherThingN)r.   r<   r=   r   r   r   r   
OtherThing  s   rX  r~   )rt   r   r1   rU  r~   )r7   rT  rX  Z	somethingr   r   r   test_inherited  s    z TestGetattrStatic.test_inheritedc             C   sH   G dd dt }|d}| t|dd |`| t|dd d S )Nc               @   s   e Zd ZdZdd ZdS )z3TestGetattrStatic.test_instance_attr.<locals>.Thingr   c             S   s
   || _ d S )N)r~   )r7   r~   r   r   r   r     s    z<TestGetattrStatic.test_instance_attr.<locals>.Thing.__init__N)r.   r<   r=   r~   r   r   r   r   r   rT    s   rT  r   r~   r   )rt   r   r1   rU  r~   )r7   rT  rV  r   r   r   test_instance_attr  s
    z$TestGetattrStatic.test_instance_attrc             C   s0   G dd dt }| }| t|d|j d S )Nc               @   s   e Zd Zedd ZdS )z.TestGetattrStatic.test_property.<locals>.Thingc             S   s   t dd S )NzI'm pretending not to exist)r
  )r7   r   r   r   r~     s    z0TestGetattrStatic.test_property.<locals>.Thing.xN)r.   r<   r=   r  r~   r   r   r   r   rT    s   rT  r~   )rt   r   r1   rU  r~   )r7   rT  rV  r   r   r   test_property  s    zTestGetattrStatic.test_propertyc                sH   G dd dt }|  G  fdddt }| }| t|d  d S )Nc               @   s   e Zd Zdd ZdS )zKTestGetattrStatic.test_descriptor_raises_AttributeError.<locals>.descriptorc              W   s   t dd S )NzI'm pretending not to exist)r
  )_r   r   r   r~     s    zSTestGetattrStatic.test_descriptor_raises_AttributeError.<locals>.descriptor.__get__N)r.   r<   r=   r~  r   r   r   r   
descriptor  s   r]  c                   s   e Zd Z ZdS )zFTestGetattrStatic.test_descriptor_raises_AttributeError.<locals>.ThingN)r.   r<   r=   r~   r   )descr   r   rT  #  s   rT  r~   )rt   r   r1   rU  )r7   r]  rT  rV  r   )r^  r   %test_descriptor_raises_AttributeError  s
    z7TestGetattrStatic.test_descriptor_raises_AttributeErrorc             C   s*   G dd dt }| t|d|j d S )Nc               @   s   e Zd Ze ZdS )z4TestGetattrStatic.test_classAttribute.<locals>.ThingN)r.   r<   r=   rt   r~   r   r   r   r   rT  )  s   rT  r~   )rt   r   r1   rU  r~   )r7   rT  r   r   r   test_classAttribute(  s    z%TestGetattrStatic.test_classAttributec             C   s.   G dd dt }| t|d|jd  d S )Nc               @   s    e Zd Zejdd Ze ZdS )z;TestGetattrStatic.test_classVirtualAttribute.<locals>.Thingc             S   s   | j S )N)_x)r7   r   r   r   r~   0  s    z=TestGetattrStatic.test_classVirtualAttribute.<locals>.Thing.xN)r.   r<   r=   rY   r  r~   rt   ra  r   r   r   r   rT  /  s   rT  r~   )rt   r   r1   rU  r  )r7   rT  r   r   r   test_classVirtualAttribute.  s    z,TestGetattrStatic.test_classVirtualAttributec             C   s:   G dd dt }G dd d|}| t|d|j d S )Nc               @   s   e Zd Ze ZdS )z>TestGetattrStatic.test_inherited_classattribute.<locals>.ThingN)r.   r<   r=   rt   r~   r   r   r   r   rT  8  s   rT  c               @   s   e Zd ZdS )zCTestGetattrStatic.test_inherited_classattribute.<locals>.OtherThingN)r.   r<   r=   r   r   r   r   rX  :  s   rX  r~   )rt   r   r1   rU  r~   )r7   rT  rX  r   r   r   test_inherited_classattribute7  s    z/TestGetattrStatic.test_inherited_classattributec             C   s^   G dd dt }| }| t|d|j | t|dd |`| t|d|j d S )Nc               @   s   e Zd ZdZdgZdd ZdS )z+TestGetattrStatic.test_slots.<locals>.Thingr   r~   c             S   s
   d| _ d S )Nr   )r~   )r7   r   r   r   r   C  s    z4TestGetattrStatic.test_slots.<locals>.Thing.__init__N)r.   r<   r=   r   rw   r   r   r   r   r   rT  @  s   rT  r~   r   r   )rt   r   r1   rU  r~   )r7   rT  rV  r   r   r   
test_slots?  s    zTestGetattrStatic.test_slotsc             C   s   G dd dt }G dd dt|d}| t|dd G dd	 d	|}G d
d dt|d}| t|dd G dd d|}| t|dd d S )Nc               @   s   e Zd ZdZdS )z.TestGetattrStatic.test_metaclass.<locals>.metar   N)r.   r<   r=   rp   r   r   r   r   metaM  s   re  c               @   s   e Zd ZdS )z/TestGetattrStatic.test_metaclass.<locals>.ThingN)r.   r<   r=   r   r   r   r   rT  O  s   rT  )r   rp   r   c               @   s   e Zd ZdS )z-TestGetattrStatic.test_metaclass.<locals>.subN)r.   r<   r=   r   r   r   r   subS  s   rf  c               @   s   e Zd ZdZdS )z4TestGetattrStatic.test_metaclass.<locals>.OtherThingr   N)r.   r<   r=   r~   r   r   r   r   rX  U  s   rX  c               @   s   e Zd ZdS )z9TestGetattrStatic.test_metaclass.<locals>.OtherOtherThingN)r.   r<   r=   r   r   r   r   OtherOtherThingY  s   rg  r~   r   )rZ   rt   r   r1   rU  )r7   re  rT  rf  rX  rg  r   r   r   test_metaclassL  s    z TestGetattrStatic.test_metaclassc             C   s.   |  tddd d  | tddd  d S )Nr   r   lower)r   r1   rU  assertNotEqual)r7   r   r   r   test_no_dict_no_slots^  s    z'TestGetattrStatic.test_no_dict_no_slotsc          	   C   s2   t t }| t|dt|j W d Q R X d S )Nr  )r   r   r   r1   rU  rZ   r  )r7   Zhandler   r   r   %test_no_dict_no_slots_instance_memberb  s    
z7TestGetattrStatic.test_no_dict_no_slots_instance_memberc             C   s<   G dd dt }G dd d|}| t| d|j d S )Nc               @   s   e Zd ZdgZdd ZdS )z5TestGetattrStatic.test_inherited_slots.<locals>.Thingr~   c             S   s
   d| _ d S )Nr   )r~   )r7   r   r   r   r   k  s    z>TestGetattrStatic.test_inherited_slots.<locals>.Thing.__init__N)r.   r<   r=   rw   r   r   r   r   r   rT  i  s   rT  c               @   s   e Zd ZdS )z:TestGetattrStatic.test_inherited_slots.<locals>.OtherThingN)r.   r<   r=   r   r   r   r   rX  n  s   rX  r~   )rt   r   r1   rU  r~   )r7   rT  rX  r   r   r   test_inherited_slotsg  s    z&TestGetattrStatic.test_inherited_slotsc                sp   G dd dt  G  fdddt }| }d|jd< | t|dd dd  _| t|d|jd  d S )	Nc               @   s   e Zd Zdd ZdS )z5TestGetattrStatic.test_descriptor.<locals>.descriptorc             S   s   dS )Nr   r   )r7   instanceownerr   r   r   r~  v  s    z=TestGetattrStatic.test_descriptor.<locals>.descriptor.__get__N)r.   r<   r=   r~  r   r   r   r   r]  u  s   r]  c                   s   e Zd Z  ZdS )z.TestGetattrStatic.test_descriptor.<locals>.FooN)r.   r<   r=   r   r   )r]  r   r   rN  x  s   rN  r   r   c             S   s   d S )Nr   )r  r#   vr   r   r   rl     rh   z3TestGetattrStatic.test_descriptor.<locals>.<lambda>)rt   r  r   r1   rU  r  )r7   rN  r   r   )r]  r   test_descriptort  s    

z!TestGetattrStatic.test_descriptorc                sV   G dd dt  G  fdddt}G dd dt |d}| t|d|jd  d S )	Nc               @   s   e Zd Zdd ZdS )zDTestGetattrStatic.test_metaclass_with_descriptor.<locals>.descriptorc             S   s   dS )Nr   r   )r7   rn  ro  r   r   r   r~    s    zLTestGetattrStatic.test_metaclass_with_descriptor.<locals>.descriptor.__get__N)r.   r<   r=   r~  r   r   r   r   r]    s   r]  c                   s   e Zd Z  ZdS )z>TestGetattrStatic.test_metaclass_with_descriptor.<locals>.metaN)r.   r<   r=   r   r   )r]  r   r   re    s   re  c               @   s   e Zd ZdS )z?TestGetattrStatic.test_metaclass_with_descriptor.<locals>.ThingN)r.   r<   r=   r   r   r   r   rT    s   rT  )r   r   )rt   rZ   r   r1   rU  r  )r7   re  rT  r   )r]  r   test_metaclass_with_descriptor  s    z0TestGetattrStatic.test_metaclass_with_descriptorc             C   s^   G dd dt }G dd d|}| }| t|dd | |j | t|dd d S )Nc               @   s   e Zd ZdZdS )z6TestGetattrStatic.test_class_as_property.<locals>.Baser   N)r.   r<   r=   r   r   r   r   r   Base  s   rs  c               @   s   e Zd ZdZedd ZdS )z;TestGetattrStatic.test_class_as_property.<locals>.SomethingFc             S   s
   d| _ tS )NT)executedrt   )r7   r   r   r   rw    s    zETestGetattrStatic.test_class_as_property.<locals>.Something.__class__N)r.   r<   r=   rt  r  rw  r   r   r   r   	Something  s   ru  r   r   )rt   r   r1   rU  r6   rt  )r7   rs  ru  rn  r   r   r   test_class_as_property  s    z(TestGetattrStatic.test_class_as_propertyc             C   sb   G dd dt }G dd dt}G dd d||d}| t| dd	 | t|dd	 d S )
Nc               @   s   e Zd Zedd ZdS )z4TestGetattrStatic.test_mro_as_property.<locals>.Metac             S   s   t fS )N)rt   )r7   r   r   r   __mro__  s    z<TestGetattrStatic.test_mro_as_property.<locals>.Meta.__mro__N)r.   r<   r=   r  rw  r   r   r   r   r    s   r  c               @   s   e Zd ZdZdS )z4TestGetattrStatic.test_mro_as_property.<locals>.Baser   N)r.   r<   r=   r   r   r   r   r   rs    s   rs  c               @   s   e Zd ZdS )z9TestGetattrStatic.test_mro_as_property.<locals>.SomethingN)r.   r<   r=   r   r   r   r   ru    s   ru  )r   r   r   )rZ   rt   r   r1   rU  )r7   r  rs  ru  r   r   r   test_mro_as_property  s
    z&TestGetattrStatic.test_mro_as_propertyc                sN   |  d _ G  fdddt}| }d|_| t|dd |  j  d S )NFc                   s    e Zd ZdZe fddZdS )z4TestGetattrStatic.test_dict_as_property.<locals>.Foor   c                s
   d _ i S )NT)called)r7   )r  r   r   r    s    z=TestGetattrStatic.test_dict_as_property.<locals>.Foo.__dict__N)r.   r<   r=   r   r  r  r   )r  r   r   rN    s   rN  r  r   r   )ry  rz   r   r   r1   rU  r6   )r7   rN  r   r   )r  r   test_dict_as_property  s    z'TestGetattrStatic.test_dict_as_propertyc                s`   |  d _ G  fdddt}G dd dt}| }| |_| t|dd |  j  d S )NFc                   s    e Zd Zd fdd	Z  ZS )z9TestGetattrStatic.test_custom_object_dict.<locals>.CustomNc                s   d_ t || d S )NT)ry  rv  get)r7   keyrD  )rw  r  r   r   r{    s    z=TestGetattrStatic.test_custom_object_dict.<locals>.Custom.get)N)r.   r<   r=   r{  r|  r   )r  )rw  r   Custom  s   r}  c               @   s   e Zd ZdZdS )z6TestGetattrStatic.test_custom_object_dict.<locals>.Foor   N)r.   r<   r=   r   r   r   r   r   rN    s   rN  r   r   )ry  rz   rt   r  r   r1   rU  r6   )r7   r}  rN  r   r   )r  r   test_custom_object_dict  s    z)TestGetattrStatic.test_custom_object_dictc             C   sL   G dd dt }G dd d|d}| }| t|dd | |j d S )Nc               @   s   e Zd Zedd ZdS )z?TestGetattrStatic.test_metaclass_dict_as_property.<locals>.Metac             S   s
   d| _ d S )NT)rt  )r7   r   r   r   r    s    zHTestGetattrStatic.test_metaclass_dict_as_property.<locals>.Meta.__dict__N)r.   r<   r=   r  r  r   r   r   r   r    s   r  c               @   s   e Zd ZdZdd ZdS )z@TestGetattrStatic.test_metaclass_dict_as_property.<locals>.ThingFc             S   s
   d| _ d S )Nry   )rK   )r7   r   r   r   r     s    zITestGetattrStatic.test_metaclass_dict_as_property.<locals>.Thing.__init__N)r.   r<   r=   rt  r   r   r   r   r   rT    s   rT  )r   rK   ry   )rZ   r   r1   rU  r6   rt  )r7   r  rT  rn  r   r   r   test_metaclass_dict_as_property  s
    z1TestGetattrStatic.test_metaclass_dict_as_propertyc             C   s    t  }| ttd|| d S )Nversion)rt   assertIsNotr1   rU  rV   )r7   sentinelr   r   r   test_module  s    zTestGetattrStatic.test_modulec          	   C   sh   G dd dt }G dd dt |d}G dd d|d}| t t|d W d Q R X | |j d S )	Nc               @   s   e Zd Zedd ZdS )zWTestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_property.<locals>.MetaMetac             S   s   d| _ tddS )NTry   )rK   )rt  rz   )r7   r   r   r   r    s    z`TestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_property.<locals>.MetaMeta.__dict__N)r.   r<   r=   r  r  r   r   r   r   MetaMeta  s   r  c               @   s   e Zd ZdZdS )zSTestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_property.<locals>.MetaFN)r.   r<   r=   rt  r   r   r   r   r    s   r  )r   c               @   s   e Zd ZdS )zTTestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_property.<locals>.ThingN)r.   r<   r=   r   r   r   r   rT    s   rT  rK   )rZ   r  r
  r1   rU  r6   rt  )r7   r  r  rT  r   r   r   3test_metaclass_with_metaclass_with_dict_as_property  s    zETestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_propertyN)r.   r<   r=   rW  rY  rZ  r[  r_  r`  rb  rc  rd  rh  rk  rl  rm  rq  rr  rv  rx  rz  r~  r  r  r  r   r   r   r   rS    s,   	

	rS  c               @   sd   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S )TestGetGeneratorStatec             C   s   dd }| | _ d S )Nc              s   s   xt dD ]
} | V  q
W d S )Nr   )r   )numberr   r   r   number_generator  s    z5TestGetGeneratorState.setUp.<locals>.number_generator)	generator)r7   r  r   r   r   r     s    zTestGetGeneratorState.setUpc             C   s   t | jS )N)r1   Zgetgeneratorstater  )r7   r   r   r   _generatorstate  s    z%TestGetGeneratorState._generatorstatec             C   s   |  |  tj d S )N)r   r  r1   ZGEN_CREATED)r7   r   r   r   test_created  s    z"TestGetGeneratorState.test_createdc             C   s    t | j | |  tj d S )N)nextr  r   r  r1   ZGEN_SUSPENDED)r7   r   r   r   test_suspended  s    
z$TestGetGeneratorState.test_suspendedc             C   s&   x| j D ]}qW | |  tj d S )N)r  r   r  r1   
GEN_CLOSED)r7   r#   r   r   r   test_closed_after_exhaustion	  s    z2TestGetGeneratorState.test_closed_after_exhaustionc          	   C   s8   |  t | jt W d Q R X | |  tj d S )N)r  r  r  r(   r   r  r1   r  )r7   r   r   r   %test_closed_after_immediate_exception  s    z;TestGetGeneratorState.test_closed_after_immediate_exceptionc                s,    fdd}|  _ t j  t j  d S )Nc              3   s@   x:t dD ].}    tj | V     tj q
W d S )Nr   )r   r   r  r1   ZGEN_RUNNING)r  )r7   r   r   running_check_generator  s    zCTestGetGeneratorState.test_running.<locals>.running_check_generator)r  r  )r7   r  r   )r7   r   test_running  s    
z"TestGetGeneratorState.test_runningc             C   sD   d  }x6|D ].}tt|}| |t| | |t| qW d S )Nz0GEN_CREATED GEN_RUNNING GEN_SUSPENDED GEN_CLOSED)r   r  r1   r|   reprr   )r7   namesr  stater   r   r   test_easy_debugging#  s
    

z)TestGetGeneratorState.test_easy_debuggingc          	   C   s   ddd}|dddg}|  t|d dddgd t| |  t|d dddgddd t| |  t|d dddgddd t| |  t|d dddgddd	d
 yt| W n tk
r   Y nX |  t|i  d S )Nc             s   s(   d}x| D ]}|dkrd}|V  q
W d S )N)r   r   r   r   r!  r   )lstr   rv   rp  r   r   r   r   each,  s
    
z;TestGetGeneratorState.test_getgeneratorlocals.<locals>.eachr   r   r   )r   r  )r   r   r   )r   r  rp  rv   r!  )r   r  rp  rv   r   )N)r   r1   getgeneratorlocalsr  StopIteration)r7   r  Znumbersr   r   r   test_getgeneratorlocals+  s*    


z-TestGetGeneratorState.test_getgeneratorlocalsc             C   sX   dd }| }|  t|i  yt| W n tk
r@   Y nX |  t|i  d S )Nc               s   s
   dV  d S )Nr   r   r   r   r   r   	yield_oneI  s    zFTestGetGeneratorState.test_getgeneratorlocals_empty.<locals>.yield_one)r   r1   r  r  r  )r7   r  r  r   r   r   test_getgeneratorlocals_emptyH  s    z3TestGetGeneratorState.test_getgeneratorlocals_emptyc             C   sH   |  ttjd |  ttjdd  |  ttjt |  ttjd d S )Nr   c             S   s   dS )NTr   )r~   r   r   r   rl   U  rh   zETestGetGeneratorState.test_getgeneratorlocals_error.<locals>.<lambda>)r   r   )r  r  r1   r  r0   )r7   r   r   r   test_getgeneratorlocals_errorS  s    z3TestGetGeneratorState.test_getgeneratorlocals_errorN)r.   r<   r=   r   r  r  r  r  r  r  r  r  r  r  r   r   r   r   r    s   r  c               @   sT   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S )TestGetCoroutineStatec                s&   t jdd   fdd}| | _d S )Nc              s   s   xt dD ]
} | V  q
W d S )Nr   )r   )r  r   r   r   number_coroutine]  s    z5TestGetCoroutineState.setUp.<locals>.number_coroutinec                  s     I d H  d S )Nr   r   )r  r   r   	coroutinea  s    z.TestGetCoroutineState.setUp.<locals>.coroutine)rY   r  )r7   r  r   )r  r   r   \  s    zTestGetCoroutineState.setUpc             C   s   | j   d S )N)r  rc   )r7   r   r   r   ry  e  s    zTestGetCoroutineState.tearDownc             C   s   t | jS )N)r1   Zgetcoroutinestater  )r7   r   r   r   _coroutinestateh  s    z%TestGetCoroutineState._coroutinestatec             C   s   |  |  tj d S )N)r   r  r1   ZCORO_CREATED)r7   r   r   r   r  k  s    z"TestGetCoroutineState.test_createdc             C   s"   | j d  | |  tj d S )N)r  sendr   r  r1   ZCORO_SUSPENDED)r7   r   r   r   r  n  s    z$TestGetCoroutineState.test_suspendedc             C   sD   x,y| j d  W q tk
r(   P Y qX qW | |  tj d S )N)r  r  r  r   r  r1   CORO_CLOSED)r7   r   r   r   r  r  s    z2TestGetCoroutineState.test_closed_after_exhaustionc          	   C   s8   |  t | jt W d Q R X | |  tj d S )N)r  r  r  r(   r   r  r1   r  )r7   r   r   r   r  {  s    z;TestGetCoroutineState.test_closed_after_immediate_exceptionc             C   sD   d  }x6|D ].}tt|}| |t| | |t| qW d S )Nz4CORO_CREATED CORO_RUNNING CORO_SUSPENDED CORO_CLOSED)r   r  r1   r|   r  r   )r7   r  r  r  r   r   r   r    s
    

z)TestGetCoroutineState.test_easy_debuggingc                sh   t jdd     d fdd	}| }| t|d  d |d  | t|d  dd d S )	Nc               s   s
   d V  d S )Nr   r   r   r   r   gencoro  s    z>TestGetCoroutineState.test_getcoroutinelocals.<locals>.gencoroc                s   d} I d H  d S )NrK   r   )r   rv   )r  r   r   r"    s    z;TestGetCoroutineState.test_getcoroutinelocals.<locals>.func)r   r  rK   )r   r  rv   )N)rY   r  r   r1   Zgetcoroutinelocalsr  )r7   r"  re   r   )r  r   test_getcoroutinelocals  s    
z-TestGetCoroutineState.test_getcoroutinelocalsN)r.   r<   r=   r   ry  r  r  r  r  r  r  r  r   r   r   r   r  Z  s   		r  c               @   s   e Zd ZdS )MySignatureN)r.   r<   r=   r   r   r   r   r    s   r  c               @   s   e Zd ZdS )MyParameterN)r.   r<   r=   r   r   r   r   r    s   r  c               @   s  e Zd Ze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eeeddd Zeeeddd Ze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d0d1 Zeedd2d3 Z eedd4d5 Z!d6d7 Z"d8d9 Z#d:d; Z$d<d= Z%d>d? Z&d@dA Z'dBdC Z(dDdE Z)dFdG Z*eeddHdI Z+dJdK Z,dLS )MTestSignatureObjectc             K   s<   t j| f|}tdd |j D |j|jkr4dn|jfS )Nc             s   sJ   | ]B}|j |j|jkrd n|j|j|jkr.d n|jt|j fV  qdS ).N)r  rD  empty
annotationr   rC  ri  )r   paramr   r   r   	<genexpr>  s   z0TestSignatureObject.signature.<locals>.<genexpr>.)r1   r  tupler"   valuesreturn_annotationr  )r"  kwsigr   r   r   r    s
    zTestSignatureObject.signaturec          	   C   s  t j}t j}| t| d ddd}t |}|jd j|jd}|jd j|jd}|jd	 }|jd
 }|jd }	|jd }
|jd }||||	|
|f | 	t
d ||||	|
|f W d Q R X | 	t
d |||	||
|f W d Q R X | 	t
d ||	|||
|f W d Q R X | 	t
d ||||	||
f W d Q R X |jdd}| 	t
d ||||	||
f W d Q R X | 	t
d |||f W d Q R X | 	t
d ||||f W d Q R X | 	t
d |||f W d Q R X | t|d | dt|k d S )Nz()ry   d   c            _   s   d S )Nr   )popkpodpkdkor   r   r   r   r   r    s    z7TestSignatureObject.test_signature_object.<locals>.testr  )rC  r  r  r  r   r  r   zwrong parameter order)r  zduplicate parameter namezfollows default argumentz
<Signaturez(po, pk)ry   r  )r1   r  r  r   r   r  r"   replacer  rF  r  r-   r  r  )r7   SPr  r  r  r  r  r  r   r  r   Zkwargs2r   r   r   test_signature_object  s@    






z)TestSignatureObject.test_signature_objectc       	   
   C   sb  i ddddiddd}t j|dd}t|}xNttjd D ]<}| j|d	d
$ tt	||}| 
|| W d Q R X qBW t|}tdtjjd}tj|j|d}t j| |jd}| t|t | t|jd t xtttjd D ]b}| j|dd
J tt	||}| 
|| | t|t | t|jd t W d Q R X qW d S )N)r   r   ry   r  )r   r  c            [   s   d S )Nr   )r   rv   r   r  r   r   r   r     rh   z=TestSignatureObject.test_signature_object_pickle.<locals>.foo)r   F)
pickle_versubclassr   )r  rC  )r"   r  T)r  r  r1   r  r   pickleHIGHEST_PROTOCOLsubTestloadsdumpsr   r  r  r  collectionsOrderedDictr"   r  r  r  r  r-   r  )	r7   r   Zfoo_partialr  verZsig_pickledZmyparamZmyparamsZmysigr   r   r   test_signature_object_pickle  s*    


z0TestSignatureObject.test_signature_object_picklec          	   C   sR   dd }t |}| t d|_W d Q R X | t d |jd< W d Q R X d S )Nc             S   s   d S )Nr   )r   r   r   r   r    s    z=TestSignatureObject.test_signature_immutability.<locals>.testr   r   )r1   r  r  r
  r   r  r"   )r7   r  r  r   r   r   test_signature_immutability  s    
z/TestSignatureObject.test_signature_immutabilityc             C   s   dd }|  | |d d S )Nc               S   s   d S )Nr   r   r   r   r   r  
  s    z9TestSignatureObject.test_signature_on_noarg.<locals>.test)r   .)r   r  )r7   r  r   r   r   test_signature_on_noarg	  s    z+TestSignatureObject.test_signature_on_noargc             C   s&   ddddd}|  | |d d S )Nr   rE  )rv   r  c             S   s   d S )Nr   )r   rv   r   r   r   r    s    z9TestSignatureObject.test_signature_on_wargs.<locals>.test)))r   ..positional_or_keyword)rv   .r   r  rE  )r   r  )r7   r  r   r   r   test_signature_on_wargs  s    z+TestSignatureObject.test_signature_on_wargsc             C   s@   t ttddd}| | |ddt dfddtdfftf d S )N)r   rv   r  c             S   s   d S )Nr   )r   rv   r   r   r   r    s    z;TestSignatureObject.test_signature_on_wkwonly.<locals>.testr   .keyword_onlyrv   )floatr   r   r   r  )r7   r  r   r   r   test_signature_on_wkwonly  s
    
z-TestSignatureObject.test_signature_on_wkwonlyc             C   sJ   ddddddt ddd	}| | |d
ddddddt dffdf d S )Nr.  rE  )r  r   r   baz)rv   r   rK   r   c            _   s   d S )Nr   )r   rv   rK   r  r   r   r   r   r   r    s    z@TestSignatureObject.test_signature_on_complex_args.<locals>.test)r   ..r  )rv   r.  r   r  )r   .r   var_positional)rK   .r  r  )r  rE  .r  r   .var_keyword)r.  )r   r   r  )r7   r  r   r   r   test_signature_on_complex_args  s    z2TestSignatureObject.test_signature_on_complex_argsc                s   dd dd  G  fddd}|  | d |  |  d |  | |jd |  | |jd |  | |jd |  | |jd d S )	Nc              W   s   d S )Nr   )r   r   r   r   test_args_only+  s    zGTestSignatureObject.test_signature_without_self.<locals>.test_args_onlyc              _   s   d S )Nr   )r   r   r   r   r   test_args_kwargs_only.  s    zNTestSignatureObject.test_signature_without_self.<locals>.test_args_kwargs_onlyc                   sT   e Zd Zedd Zedd ZeedZ	edZ
eedZe dZdS )z:TestSignatureObject.test_signature_without_self.<locals>.Ac              W   s   d S )Nr   )r   r   r   r   test_classmethod2  s    zKTestSignatureObject.test_signature_without_self.<locals>.A.test_classmethodc              W   s   d S )Nr   )r   r   r   r   test_staticmethod6  s    zLTestSignatureObject.test_signature_without_self.<locals>.A.test_staticmethodr   N)r.   r<   r=   r  r  r  r  r  r  rH  rI  rJ  rK  r   )r  r  r   r   r  1  s   r  )))r   ..r  .)))r   ..r  )r   ..r  .)r   r  rH  rI  rJ  rK  )r7   r  r   )r  r  r   test_signature_without_self*  s    z/TestSignatureObject.test_signature_without_selfz6Signature information for builtins requires docstringsc          	      s  dd l } fdd} fdd}||jfdd} |dd	  |d
d  |dd  |dd  |dd   |dd  |dd  |dd  |dtj  dj |t |tj	j
 t	t }||j
 |tj |dj |tj |i j |tj |tj |dj |tj  td G dd d}||  W d Q R X |tj |tj ||j d S )Nr   c                s<   t | } t|t j  t|j d j	d |S )zAUse this to test unbound methods (things that should have a self)r   r7   )
r1   r  r-   r  r  r   rs   r"   r  r  )r   r  )r7   r   r   test_unbound_methodS  s    
zKTestSignatureObject.test_signature_on_builtins.<locals>.test_unbound_methodc                sB   t | } t|t j |jr> t|j d j	d |S )zRUse this to test bound methods or normal callables (things that don't expect self)r   r7   )
r1   r  r-   r  r  r"   rj  rs   r  r  )r   r  )r7   r   r   test_callableZ  s
    
zETestSignatureObject.test_signature_on_builtins.<locals>.test_callablec                s    j |  jS )N)r"   rD  )r  )r  r   r   r$   c  rh   z9TestSignatureObject.test_signature_on_builtins.<locals>.pr  r  rv   s   bytesr   gQ	@r#   #   nr  Tr   FZlocalr   rV   r8   r   zno signature foundc               @   s   e Zd ZeZdS )zDTestSignatureObject.test_signature_on_builtins.<locals>.ThisWorksNowN)r.   r<   r=   rZ   r  r   r   r   r   ThisWorksNow  s   r  )r  r  r   rV   maxsizer}   r"   rt   r  r  r  r  StringIOr   	maketransrz   fromkeysrZ   r  r   r  minrF  r  __delitem__r  
__delete__Z#docstring_with_signature_but_no_doc)r7   r  r  r  r$   r   r  r   )r7   r  r   test_signature_on_builtinsM  sB    











z.TestSignatureObject.test_signature_on_builtinsc             C   sd   dd l }|j}dd }||}| t|t| tddd}| tj|ddt| d S )	Nr   c                s    t  td fdd}|S )N)r  c                 s
    | |S )Nr   )r   r   )r"  r   r   wrapper  s    z\TestSignatureObject.test_signature_on_decorated_builtins.<locals>.decorator.<locals>.wrapper)r  r  r   )r"  r  r   )r"  r   	decorator  s    zKTestSignatureObject.test_signature_on_decorated_builtins.<locals>.decorator)r  c              _   s   d S )Nr   )r   r   r   r   r   wrapper_like  rh   zNTestSignatureObject.test_signature_on_decorated_builtins.<locals>.wrapper_likeF)follow_wrapped)r  r  r   r1   r  r   )r7   r  r"  r  Zdecorated_funcr  r   r   r   $test_signature_on_decorated_builtins  s    
z8TestSignatureObject.test_signature_on_decorated_builtinsc          	   C   sR   dd l }| td t|j W d Q R X | td tt W d Q R X d S )Nr   zno signature found for builtin)r  rF  r  r1   r  r  r   )r7   r  r   r   r   'test_signature_on_builtins_no_signature  s    z;TestSignatureObject.test_signature_on_builtins_no_signaturec          	   C   s&   |  td td W d Q R X d S )Nzis not a callable objectry   )rF  r  r1   r  )r7   r   r   r   test_signature_on_non_function  s    z2TestSignatureObject.test_signature_on_non_functionc          	      s   dddd}G dd d}t j|}t j||}| || t ||}| || ||}|`| | |d t j  fdd	}tj	d
|F ||}| 
t | d|_| t | | t || W d Q R X d S )NT)kwonlyc            _   s   d S )Nr   )r   rv   r  	kwonlyreqr   r   r   r   r   r"    s    zITestSignatureObject.test_signature_from_functionlike_object.<locals>.funcc               @   s   e Zd Zdd Zdd ZdS )zMTestSignatureObject.test_signature_from_functionlike_object.<locals>.funclikec             S   s2   |j | _ |j| _|j| _|j| _|j| _|| _d S )N)r.   r  r  __defaults____kwdefaults__r"  )r7   r"  r   r   r   r     s    zVTestSignatureObject.test_signature_from_functionlike_object.<locals>.funclike.__init__c             _   s   | j ||S )N)r"  )r7   r   r   r   r   r   r    s    zVTestSignatureObject.test_signature_from_functionlike_object.<locals>.funclike.__call__N)r.   r<   r=   r   r  r   r   r   r   funclike  s   r  )))r   ..r  )r   ..r  .c                s   t | drdS  | S )N_builtinmockT)rX   )r9   )_orig_isdescr   r   _isdesc  s    
zLTestSignatureObject.test_signature_from_functionlike_object.<locals>._isdesczinspect.ismethoddescriptor)r1   r  from_callabler   r  r  r	  r   ZmockZpatchr6   r  r-   )r7   r"  r  Zsig_funcZsig_funclikeZflr  Zbuiltin_funcr   )r  r   'test_signature_from_functionlike_object  s&    z;TestSignatureObject.test_signature_from_functionlike_objectc                s:   dddd G  fddd}|  tt|d d S )NT)r  c            _   s   d S )Nr   )r   rv   r  r  r   r   r   r   r   r"    s    zCTestSignatureObject.test_signature_functionlike_class.<locals>.funcc                   s2   e Zd Zdd Z j Z  jZ jZ jZ jZdS )zGTestSignatureObject.test_signature_functionlike_class.<locals>.funclikec             S   s   d S )Nr   )r7   Zmarkerr   r   r   r     s    zPTestSignatureObject.test_signature_functionlike_class.<locals>.funclike.__init__N)r.   r<   r=   r   r  r  r  r  r   )r"  r   r   r    s   r  z(marker))r   r   r1   r  )r7   r  r   )r"  r   !test_signature_functionlike_class  s    
z5TestSignatureObject.test_signature_functionlike_classc          	   C   sx   G dd d}|  | | jdtf |  | | jd |  | |d | td | |  W d Q R X d S )Nc               @   s4   e Zd Zdd ZdedddZdd Zd	d
 ZdS )z:TestSignatureObject.test_signature_on_method.<locals>.Testc              W   s   d S )Nr   )r   r   r   r   r   	  s    zCTestSignatureObject.test_signature_on_method.<locals>.Test.__init__r   )r  c             S   s   d S )Nr   )r7   r  r  r   r   r   r  	  s    z=TestSignatureObject.test_signature_on_method.<locals>.Test.m1c              W   s   d S )Nr   )r   r   r   r   m2
	  s    z=TestSignatureObject.test_signature_on_method.<locals>.Test.m2c             S   s   d S )Nr   )r   r   r   r   r  	  s    zCTestSignatureObject.test_signature_on_method.<locals>.Test.__call__N)r   )r.   r<   r=   r   r   r  r  r  r   r   r   r   Test	  s   r  ))r  ..r  )r  r   .r  )))r   ..r  .zinvalid method signature)r   r  r  r   r  rF  r  )r7   r  r   r   r   test_signature_on_method	  s    
z,TestSignatureObject.test_signature_on_methodc             C   s>   G dd d}t | jdd }| | |dtf d S )Nc               @   s   e Zd ZdedddZdS )zETestSignatureObject.test_signature_wrapped_bound_method.<locals>.Testr   )r  c             S   s   d S )Nr   )r7   r  r  r   r   r   r  "	  s    zHTestSignatureObject.test_signature_wrapped_bound_method.<locals>.Test.m1N)r   )r.   r<   r=   r   r  r   r   r   r   r  !	  s   r  c              _   s   d S )Nr   )r   r   r   r   r   m1d$	  s    zDTestSignatureObject.test_signature_wrapped_bound_method.<locals>.m1d))r  ..r  )r  r   .r  )r  r  r  r   r  r   )r7   r  r  r   r   r   #test_signature_wrapped_bound_method	  s
    z7TestSignatureObject.test_signature_wrapped_bound_methodc             C   sD   G dd d}| j }| | |d |j }| | |d d S )Nc               @   s   e Zd ZeddddZdS )z?TestSignatureObject.test_signature_on_classmethod.<locals>.Testr   )r  c            S   s   d S )Nr   )r   r  r  r   r   r   r   .	  s    zCTestSignatureObject.test_signature_on_classmethod.<locals>.Test.fooN)r.   r<   r=   r  r   r   r   r   r   r  -	  s   r  )))r  ..r  )r  r   .r  .)r   r   r  )r7   r  methr   r   r   test_signature_on_classmethod,	  s    z1TestSignatureObject.test_signature_on_classmethodc             C   sD   G dd d}| j }| | |d |j }| | |d d S )Nc               @   s   e Zd Zedd ZdS )z@TestSignatureObject.test_signature_on_staticmethod.<locals>.Testc            S   s   d S )Nr   )r   r  r   r   r   r   @	  s    zDTestSignatureObject.test_signature_on_staticmethod.<locals>.Test.fooN)r.   r<   r=   r  r   r   r   r   r   r  ?	  s   r  )))r   ..r  )r  ..r  .)r   r   r  )r7   r  r  r   r   r   test_signature_on_staticmethod>	  s    z2TestSignatureObject.test_signature_on_staticmethodc       
      C   sH  ddl m} tj}dd }| | ||d | td t||d W d Q R X | td t||dd W d Q R X d	d }| | ||d
 | | ||dd | | ||dddd | | ||dddd | | ||ddddd | | ||ddd dd }| | ||dd | | ||ddd | | ||dddd | | ||dddddd | | ||ddddddd | | ||ddd | | ||dddd tddd d}t| }|_	| | |||dd!d"d#td$ffdf | | |||ddd"d#td$ffdf t|||dd}d%d& }|||d'dd(d}| | |d) | | d( d*d& }|||dd(dd+d}| | |d, | |d'dd- d.d& }|||d(d(d/d'd+d0}| | |d1 t|j
d2d3d4}| ||j|jd5 dGd6d&}||d7d}t|j
d3d}| ||j|jd8 t|
d3d9}| ||j|jd: t|j
d3d9d}| ||j|jd: t|j
d9d}| ||j|jd; ||d'd(d}t|
d9}| ||j|jd< d=d& }t|}|j }	|	d> j|jd?|	d>< |	d@ j|jd?|	d@< t|	 |_	t|}| t|dA | | ||ddB | | ||dddC | | ||ddddD | | ||dddddE | | ||ddddF d S )HNr   )r  c               S   s   d S )Nr   r   r   r   r   r  U	  s    z;TestSignatureObject.test_signature_on_partial.<locals>.test)r   .zhas incorrect argumentsr   )r   c            S   s   d S )Nr   )r   rv   r   r   r   r   r   r  `	  s    )))r   ..r  )rv   ..r  )r   ..r  )r   ..r  .)))rv   ..r  )r   ..r  )r   ..r  .r   )r   )))rv   ..r  )r   r   .r  )r   ..r  .)rv   r   )))r   ..r  )rv   r   .r  )r   r   .r  )r   ..r  .)))rv   r   .r  )r   r   .r  )r   ..r  .)))r   r   .r  )rv   ..r  )r   ..r  )r   ..r  .c            _   s   d S )Nr   )r   rv   r   r   r   r   r   r  	  s    )))r   ..r  )rv   ..r  )r   ..r  .)))r   r   .r  )rv   ..r  )r   ..r  .r   T)r  )r  rv   )))r   ..r  )rv   r   .r  )r   ..r  .)rv   )))r   ..r  )r   ..r  )rv   r   .r  )r   ..r  .)rv   r  ry   )r   r  c             S   s   d S )Nr   )r   rv   r   r   r   r   r  	  s    )rv   ..r  r   .r  c             S   s   | S )Nr   )r   r   r   r   r   	  s    z:TestSignatureObject.test_signature_on_partial.<locals>.foor.     )))r   r  .r  .c             S   s
   | ||fS )Nr   )r   rv   r   r   r   r   r   	  s    r:  )))rv   r:  .r  )r   ..r  .)r   r:  r.  c            S   s   | |||fS )Nr   )r   rv   r   r   r   r   r   r   	  s    )r   r   )rv   r   )))r   ..r  )rv   r.  .r  )r   r  .r  )r   r:  .r  .   r   )r   rv   )r   r   r  r:  c             S   s
   | ||fS )Nr   )r   rv   r   r   r   r   r   	  s       )r   r   r  r!  )r   r!  r  )r   r!  r  )r!  r.  r  c             [   s   d S )Nr   )r   rv   r   r   r   r   r   r   r   	  s    r   )rC  rv   z(a, b, /, c, d, **kwargs))))rv   ..positional_only)r   ..r  )r   ..r  )r   ..r  .)))r   ..r  )r   ..r  )r   ..r  .)))r   ..r  )r   ..r  .)))r   r   .r  )r   ..r  )r   ..r  .)))rv   ..r  )r   r   .r  )r   ..r  )r   ..r  .)r   r   r   )r  r  r1   r  r   r  rF  r  r   r  bindr   r   r"   copyr  r  r  r  r   )
r7   r  r  r  r  Zpsigr   Z_foobaparamsr   r   r   test_signature_on_partialP	  s    



z-TestSignatureObject.test_signature_on_partialc          	      s   ddl m  G  fddd}| td t|j W d Q R X G  fddd}| | |jd | | | jd G  fd	dd}| | |jd
 d S )Nr   )r  c                   s   e Zd Zdd Z eZdS )zATestSignatureObject.test_signature_on_partialmethod.<locals>.Spamc               S   s   d S )Nr   r   r   r   r   r  ,
  s    zFTestSignatureObject.test_signature_on_partialmethod.<locals>.Spam.testN)r.   r<   r=   r  r  r   )r  r   r   Spam+
  s   r  zhas incorrect argumentsc                   s&   e Zd ZddddZ eddZdS )zATestSignatureObject.test_signature_on_partialmethod.<locals>.SpamrK   )r  c            S   s   d S )Nr   )itr   r   r   r   r   r  4
  s    zFTestSignatureObject.test_signature_on_partialmethod.<locals>.Spam.testr   )r   N)r.   r<   r=   r  r  r   )r  r   r   r  3
  s   )))r	  ..r  )r   ..r  )r   r   .r  rK   )))r   ..r  )r   r   .r  rK   c                   s$   e Zd ZddddZ edZdS )zATestSignatureObject.test_signature_on_partialmethod.<locals>.Spamanno)r7   c             S   s   d S )Nr   )r7   r~   r   r   r   r  D
  s    zFTestSignatureObject.test_signature_on_partialmethod.<locals>.Spam.testr   N)r.   r<   r=   r  r   r   )r  r   r   r  C
  s   )))r7   .r
  r  .)	r  r  rF  r  r1   r  r  r   r   )r7   r  r   )r  r   test_signature_on_partialmethod(
  s    z3TestSignatureObject.test_signature_on_partialmethodc             C   s(   dd }d|_ | tt|d d S )Nc             S   s   d S )Nr   )r   r   r   r   r   N
  rh   zETestSignatureObject.test_signature_on_fake_partialmethod.<locals>.foorK   z(a))_partialmethodr   r   r1   r  )r7   r   r   r   r   $test_signature_on_fake_partialmethodM
  s    z8TestSignatureObject.test_signature_on_fake_partialmethodc                s   dd l fdd G  fddd}| | |jd | | | jd | | j|jdd	d
 fdd G  fddd}| | |jd | | | jd dd }|j|_| | |d d S )Nr   c                s      td fdd}|S )N)r  c                 s
    | |S )Nr   )r   r   )r"  r   r   r  V
  s    zSTestSignatureObject.test_signature_on_decorated.<locals>.decorator.<locals>.wrapper)r  r   )r"  r  )r  )r"  r   r  U
  s    zBTestSignatureObject.test_signature_on_decorated.<locals>.decoratorc                   s   e Zd Z dd ZdS )z<TestSignatureObject.test_signature_on_decorated.<locals>.Fooc             S   s   d S )Nr   )r7   r   rv   r   r   r   r   \
  s    z@TestSignatureObject.test_signature_on_decorated.<locals>.Foo.barN)r.   r<   r=   r   r   )r  r   r   rN  [
  s   rN  )))r7   ..r  )r   ..r  )rv   ..r  .)))r   ..r  )rv   ..r  .F)r  )))r   ..r  )r   ..r  .c                sN     td fdd}t }t|j dd  }|j|d|_|S )N)r  c                 s    d| |S )Nry   )ry   r   )r   r   )r"  r   r   r  t
  s    zSTestSignatureObject.test_signature_on_decorated.<locals>.decorator.<locals>.wrapperr   )r"   )	r  r   r1   r  r  r"   r  r  r  )r"  r  r  
new_params)r  )r"  r   r  s
  s    
c                   s   e Zd Z dd ZdS )z<TestSignatureObject.test_signature_on_decorated.<locals>.Fooc             S   s   d S )Nr   )r7   r   rv   r   r   r   r  }
  s    zETestSignatureObject.test_signature_on_decorated.<locals>.Foo.__call__N)r.   r<   r=   r  r   )r  r   r   rN  |
  s   )))rv   ..r  .c               S   s   d S )Nr   r   r   r   r   wrapped_foo_call
  s    zITestSignatureObject.test_signature_on_decorated.<locals>.wrapped_foo_call)r  r   r  r   r  __wrapped__)r7   rN  r  r   )r  r  r   test_signature_on_decoratedR
  s&    	z/TestSignatureObject.test_signature_on_decoratedc             C   s>  G dd d}|  | |d G dd dt}G dd d|d}|  | |d G dd dt}G d	d d|d}|  | |d
 |  | |d G dd dt}G dd dt|d}G dd d|d}|  | |d |  | |d |  | |d
 G dd dt}G dd d|d}|  | |d d S )Nc               @   s   e Zd Zdd ZdS )z6TestSignatureObject.test_signature_on_class.<locals>.Cc             S   s   d S )Nr   )r7   r   r   r   r   r   
  s    z?TestSignatureObject.test_signature_on_class.<locals>.C.__init__N)r.   r<   r=   r   r   r   r   r   rx   
  s   rx   )))r   ..r  .c               @   s   e Zd Zdd ZdS )z7TestSignatureObject.test_signature_on_class.<locals>.CMc             S   s   d S )Nr   )r   r   r   r   r   r  
  s    z@TestSignatureObject.test_signature_on_class.<locals>.CM.__call__N)r.   r<   r=   r  r   r   r   r   r  
  s   r  c               @   s   e Zd Zdd ZdS )z6TestSignatureObject.test_signature_on_class.<locals>.Cc             S   s   d S )Nr   )r7   rv   r   r   r   r   
  s    z?TestSignatureObject.test_signature_on_class.<locals>.C.__init__N)r.   r<   r=   r   r   r   r   r   rx   
  s   )r   c                   s"   e Zd Zdd fdd
Z  ZS )z7TestSignatureObject.test_signature_on_class.<locals>.CMr   )r   c               s   t  | |||S )N)rv  r  )mclsr  basesdctr   )rw  r   r   r  
  s    z?TestSignatureObject.test_signature_on_class.<locals>.CM.__new__)r.   r<   r=   r  r|  r   r   )rw  r   r  
  s   c               @   s   e Zd Zdd ZdS )z6TestSignatureObject.test_signature_on_class.<locals>.Cc             S   s   d S )Nr   )r7   rv   r   r   r   r   
  s    z?TestSignatureObject.test_signature_on_class.<locals>.C.__init__N)r.   r<   r=   r   r   r   r   r   rx   
  s   )))rv   ..r  .)))r  ..r  )r  ..r  )r  ..r  )r   r   .r  .c                   s*   e Zd Zdd fdd
Zdd Z  ZS )z8TestSignatureObject.test_signature_on_class.<locals>.CMMr   )r   c               s   t  | |||S )N)rv  r  )r  r  r  r  r   )rw  r   r   r  
  s    z@TestSignatureObject.test_signature_on_class.<locals>.CMM.__new__c             S   s   t |||S )N)rZ   )r   nmbsdtr   r   r   r  
  s    zATestSignatureObject.test_signature_on_class.<locals>.CMM.__call__)r.   r<   r=   r  r  r|  r   r   )rw  r   CMM
  s   r  c                   s"   e Zd Zdd fdd
Z  ZS )z7TestSignatureObject.test_signature_on_class.<locals>.CMr   )r   c               s   t  | |||S )N)rv  r  )r  r  r  r  r   )rw  r   r   r  
  s    z?TestSignatureObject.test_signature_on_class.<locals>.CM.__new__)r.   r<   r=   r  r|  r   r   )rw  r   r  
  s   c               @   s   e Zd Zdd ZdS )z6TestSignatureObject.test_signature_on_class.<locals>.Cc             S   s   d S )Nr   )r7   rv   r   r   r   r   
  s    z?TestSignatureObject.test_signature_on_class.<locals>.C.__init__N)r.   r<   r=   r   r   r   r   r   rx   
  s   )))r  ..r  )r  ..r  )r  ..r  .c                   s"   e Zd Zdd fdd
Z  ZS )z7TestSignatureObject.test_signature_on_class.<locals>.CMr   )r   c               s   t  |||S )N)rv  r   )r   r  r  r  r   )rw  r   r   r   
  s    z@TestSignatureObject.test_signature_on_class.<locals>.CM.__init__)r.   r<   r=   r   r|  r   r   )rw  r   r  
  s   c               @   s   e Zd Zdd ZdS )z6TestSignatureObject.test_signature_on_class.<locals>.Cc             S   s   d S )Nr   )r7   rv   r   r   r   r   
  s    z?TestSignatureObject.test_signature_on_class.<locals>.C.__init__N)r.   r<   r=   r   r   r   r   r   rx   
  s   )))r  ..r  )r  ..r  )r  ..r  )r   r   .r  .)r   r  rZ   )r7   rx   r  r  r   r   r   test_signature_on_class
  s4    z+TestSignatureObject.test_signature_on_classc          	   C   s   G dd d}|  tt|d G dd d|}|  tt|d G dd dt}G dd d|}| td |  t|d  W d Q R X | td |  t|d  W d Q R X d S )	Nc               @   s   e Zd ZdS )zCTestSignatureObject.test_signature_on_class_without_init.<locals>.CN)r.   r<   r=   r   r   r   r   rx   
  s    rx   z()c               @   s   e Zd ZdS )zCTestSignatureObject.test_signature_on_class_without_init.<locals>.DN)r.   r<   r=   r   r   r   r   r  
  s    r  c               @   s   e Zd ZdS )zCTestSignatureObject.test_signature_on_class_without_init.<locals>.CN)r.   r<   r=   r   r   r   r   rx   
  s    c               @   s   e Zd ZdS )zCTestSignatureObject.test_signature_on_class_without_init.<locals>.DN)r.   r<   r=   r   r   r   r   r  
  s    zcallable.*is not supported)r   r   r1   r  rZ   rF  r  )r7   rx   r  r   r   r   $test_signature_on_class_without_init
  s    z8TestSignatureObject.test_signature_on_class_without_initc             C   s   |  tttjd G dd dtj}G dd d}G dd d||}|  tt|d |  tt|d G dd	 d	|}|  tt|d
 G dd dt}G dd d||d}|  tt|d d S )Nz'(file, protocol=None, fix_imports=True)c               @   s   e Zd ZdS )z>TestSignatureObject.test_signature_on_builtin_class.<locals>.PN)r.   r<   r=   r   r   r   r   r  
  s    r  c               @   s   e Zd ZdS )zGTestSignatureObject.test_signature_on_builtin_class.<locals>.EmptyTraitN)r.   r<   r=   r   r   r   r   
EmptyTrait
  s    r  c               @   s   e Zd ZdS )z?TestSignatureObject.test_signature_on_builtin_class.<locals>.P2N)r.   r<   r=   r   r   r   r   P2
  s    r  c               @   s   e Zd Zdd ZdS )z?TestSignatureObject.test_signature_on_builtin_class.<locals>.P3c             S   s   d S )Nr   )r7   rK   r   r   r   r     s    zHTestSignatureObject.test_signature_on_builtin_class.<locals>.P3.__init__N)r.   r<   r=   r   r   r   r   r   P3  s   r  z(spam)c               @   s   e Zd Zdd ZdS )zBTestSignatureObject.test_signature_on_builtin_class.<locals>.MetaPc             S   s   d S )Nr   )r   r   r   r   r   r   r    s    zKTestSignatureObject.test_signature_on_builtin_class.<locals>.MetaP.__call__N)r.   r<   r=   r  r   r   r   r   MetaP
  s   r  c               @   s   e Zd ZdS )z?TestSignatureObject.test_signature_on_builtin_class.<locals>.P4N)r.   r<   r=   r   r   r   r   P4  s   r  )r   z
(foo, bar))r   r   r1   r  r  r  rZ   )r7   r  r  r  r  r  r  r   r   r   test_signature_on_builtin_class
  s    z3TestSignatureObject.test_signature_on_builtin_classc          	   C   s   G dd d}|  | | d G dd d}| td t|  W d Q R X G dd d||}|  | | d G d	d
 d
}dd |_|  | |d ||_| td | | W d Q R X d S )Nc               @   s   e Zd Zdd ZdS )zCTestSignatureObject.test_signature_on_callable_objects.<locals>.Fooc             S   s   d S )Nr   )r7   r   r   r   r   r    s    zLTestSignatureObject.test_signature_on_callable_objects.<locals>.Foo.__call__N)r.   r<   r=   r  r   r   r   r   rN    s   rN  )))r   ..r  .c               @   s   e Zd ZdS )zDTestSignatureObject.test_signature_on_callable_objects.<locals>.SpamN)r.   r<   r=   r   r   r   r   r    s   r  zis not a callable objectc               @   s   e Zd ZdS )zCTestSignatureObject.test_signature_on_callable_objects.<locals>.BarN)r.   r<   r=   r   r   r   r   Bar  s   r!  c               @   s   e Zd ZdS )zGTestSignatureObject.test_signature_on_callable_objects.<locals>.WrappedN)r.   r<   r=   r   r   r   r   Wrapped&  s   r"  c             S   s   d S )Nr   )r   r   r   r   rl   (  rh   zHTestSignatureObject.test_signature_on_callable_objects.<locals>.<lambda>zwrapper loop)r   r  rF  r  r1   r  r  )r7   rN  r  r!  r"  r   r   r   "test_signature_on_callable_objects  s     
z6TestSignatureObject.test_signature_on_callable_objectsc             C   s   |  | dddd d S )Nr.  c             S   s   | S )Nr   )r   r   r   r   rl   2  rh   z?TestSignatureObject.test_signature_on_lambdas.<locals>.<lambda>)))r   r.  .r  .)r.  )r   r  )r7   r   r   r   test_signature_on_lambdas1  s    z-TestSignatureObject.test_signature_on_lambdasc             C   sP  t tddd}| t|dk | t|dk | t|t k | t|t k t tddd}| t|t|k | t|t|k | tt|tt| t t ddd}| t|t|k | t|t|k | 	tt|tt| t dd	d}| t|t|k | t|t|k | 	tt|tt| ddt tdd
d}| t|t|k | t|t|k | 	tt|tt| tddd}| t|t|k | t|t|k | 	tt|tt| t tddd}| t|t|k | t|t|k | 	tt|tt| t tddd}| t|t|k | t|t|k | 	tt|tt| dd }dd }| t|t|k | t|t|k | tt|tt| dddd}dddd}| t|t|k | t|t|k | tt|tt| dddd}dddd}| t|t|k | t|t|k | tt|tt| dd }dddd}| t|t|k | t|t|k | 	tt|tt| ddt ddd}ddt ddd}| t|t|k | t|t|k | tt|tt| d S )N)rv   r  c            S   s   d S )Nr   )r   rv   r   r   r   r   7  rh   z8TestSignatureObject.test_signature_equality.<locals>.foory   c            S   s   d S )Nr   )r   rv   r   r   r   r   =  rh   z8TestSignatureObject.test_signature_equality.<locals>.barc            S   s   d S )Nr   )r   rv   r   r   r   r   C  rh   )rv   c            S   s   d S )Nr   )r   rv   r   r   r   r   I  rh   c            S   s   d S )Nr   )r   rv   r   r   r   r   O  rh   )r  c            S   s   d S )Nr   )r   r   r   r   r   r   U  rh   c             S   s   d S )Nr   )r   rv   r   r   r   r   [  rh   c             S   s   d S )Nr   )rv   r   r   r   r   rK   `  rh   z9TestSignatureObject.test_signature_equality.<locals>.spamc             S   s   d S )Nr   )r   rv   r   r   r   r   r   f  rh   c             S   s   d S )Nr   )r   rv   r   r   r   r   r   g  rh   r   )r   c             S   s   d S )Nr   )r   rv   r   r   r   r   r   m  rh   c             S   s   d S )Nr   )r   rv   r   r   r   r   r   n  rh   c            S   s   d S )Nr   )posr   rv   r   r   r   r   r   t  rh   c            S   s   d S )Nr   )r%  r   rv   r   r   r   r   r   u  rh   c            S   s   d S )Nr   )r%  r   rv   r   r   r   r   r   {  rh   c            S   s   d S )Nr   )r%  r   rv   r   r   r   r   r   |  rh   )r   c            _   s   d S )Nr   )r%  r   rv   r   r   r   r   r   r   r     rh   c            _   s   d S )Nr   )r%  r   rv   r   r   r   r   r   r   r     rh   )
r   r  r6   r1   r  r-   rN   r   hashrj  )r7   r   r   rK   r   r   r   test_signature_equality6  s    z+TestSignatureObject.test_signature_equalityc          	   C   s   t j}t j}dd }t |}||d|jgd}| t|t| | t|t|jdd ddd	d
}| t|tt | i fdd}| 	t
d tt | W d Q R X i ddd}| 	t
d tt | W d Q R X d S )Nc             S   s   d S )Nr   )r   r   r   r   r     rh   z8TestSignatureObject.test_signature_hashable.<locals>.foor   )r"   rK   )r  r   )r  c             S   s   d S )Nr   )r   r   r   r   r     rh   z8TestSignatureObject.test_signature_hashable.<locals>.barc             S   s   d S )Nr   )r   r   r   r   r     rh   zunhashable typec             S   s   d S )Nr   )r   r   r   r   r     rh   )r1   r  r  r  POSITIONAL_OR_KEYWORDr   r&  rj  r  rF  r  )r7   r  r  r   foo_sigZ
manual_sigr   r   r   r   test_signature_hashable  s     

z+TestSignatureObject.test_signature_hashablec             C   s~   dd dt dddd}| tt|d dd dt dddd}| tt|d	 d
d }| tt|d d S )Nr   )r   ry   )r   r  c            [   s   d S )Nr   )r   rv   r   r   r   r   r   r     s    z3TestSignatureObject.test_signature_str.<locals>.fooz*(a: int = 1, *, b, c=None, **kwargs) -> 42c            _   s   d S )Nr   )r   rv   r   r   r   r   r   r   r     s    z.(a: int = 1, *args, b, c=None, **kwargs) -> 42c               S   s   d S )Nr   r   r   r   r   r     s    z())r   )r   )r   r   r   r1   r  )r7   r   r   r   r   test_signature_str  s    z&TestSignatureObject.test_signature_strc             C   s   t j}t j}dd }t |}t|j }|d j|jd|d< |j|d|_	| 
tt |d | 
t||d|jgdd | 
t||d|j|d	|jgdd
 | 
t||d|j|d	|jgdd d S )Nc            [   s   | |fS )Nr   )a_porv   r   r   r   r   r    s    zDTestSignatureObject.test_signature_str_positional_only.<locals>.testr   )rC  )r"   z(a_po, /, *, b, **kwargs)r   z(foo, /)r   z(foo, /, **bar)z(foo, /, *bar))r1   r  r  r  rs   r"   r  r  r  r  r   r   rG  VAR_POSITIONAL)r7   r  r  r  r  r  r   r   r   "test_signature_str_positional_only  s&    


z6TestSignatureObject.test_signature_str_positional_onlyc             C   s   dddd}t |}|jd d}| |jd  |j|jd}| |j|j |jdd}| |jd | |t | d S )Nry   )r  c               S   s   d S )Nr   r   r   r   r   r    s    z=TestSignatureObject.test_signature_replace_anno.<locals>.test)r  )r1   r  r  r   r  r  r   )r7   r  r  r   r   r   test_signature_replace_anno  s    
z/TestSignatureObject.test_signature_replace_annoc             C   sR   G dd d}G dd d|}|  | |jd |  | |j| |j d S )Nc               @   s$   e Zd Zd	dddddddZdS )
zFTestSignatureObject.test_signature_on_mangled_parameters.<locals>.Spamr   r   )	_Spam__p2r   )	_Spam__p1r0  c            S   s   d S )Nr   )r7   r1  r0  r   r   r   r     s    zJTestSignatureObject.test_signature_on_mangled_parameters.<locals>.Spam.fooN)r   )r.   r<   r=   r   r   r   r   r   r    s   r  c               @   s   e Zd ZdS )zETestSignatureObject.test_signature_on_mangled_parameters.<locals>.HamN)r.   r<   r=   r   r   r   r   Ham  s   r2  )))r7   ..r  )r1  r   r   r  )r0  r   r   r  .)r   r  r   )r7   r  r2  r   r   r   $test_signature_on_mangled_parameters  s    z8TestSignatureObject.test_signature_on_mangled_parametersc             C   s>   G dd dt j}dddd}||}| t|| d S )Nc               @   s   e Zd ZdS )zPTestSignatureObject.test_signature_from_callable_python_obj.<locals>.MySignatureN)r.   r<   r=   r   r   r   r   r    s    r  r   )rv   c            S   s   d S )Nr   )r   rv   r   r   r   r     rh   zHTestSignatureObject.test_signature_from_callable_python_obj.<locals>.foo)r1   r  r  r-   r  )r7   r  r   r)  r   r   r   'test_signature_from_callable_python_obj  s    
z;TestSignatureObject.test_signature_from_callable_python_objc             C   s2   G dd dt j}|tj}| t|| d S )Nc               @   s   e Zd ZdS )zQTestSignatureObject.test_signature_from_callable_builtin_obj.<locals>.MySignatureN)r.   r<   r=   r   r   r   r   r    s    r  )r1   r  r  r  r  r-   r  )r7   r  r  r   r   r   (test_signature_from_callable_builtin_obj  s    z<TestSignatureObject.test_signature_from_callable_builtin_objc             C   sf   x@t  D ]6}t|}t|j}t|}| | | || qW tt}t|j}| |t	 d S )N)
r'   r1   r  rs   r"   r  r-   r   r*   r  )r7   r   r  r  r  r   r   r   3test_signature_definition_order_preserved_on_kwonly  s    




zGTestSignatureObject.test_signature_definition_order_preserved_on_kwonlyN)-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  r   r#  r$  r'  r*  r+  r.  r/  r3  r4  r5  r6  r   r   r   r   r    sZ   /#G5 Y%CQ Sr  c               @   sP   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	dd Z
dd ZdS )TestParameterObjectc             C   sl   t j}| |j|j  k o:|j  k o:|j  k o:|jk n   | t	|jd | dt
|jk d S )Nr  )r1   r  r-   r  r(  r-  KEYWORD_ONLYrG  r   r   r  )r7   r  r   r   r   test_signature_parameter_kinds  s
    (z2TestParameterObject.test_signature_parameter_kindsc          	   C   s  t jddt jjd}| |jd | |jd | |j|j | |j	t jj | 
td t jdddd W d Q R X | 
td t jdt jjd W d Q R X | 
td	 t jd t jjd W d Q R X | 
td
 t jdt jjd W d Q R X | 
td
 t jdt jjd W d Q R X | 
td t jddt jjd W d Q R X | 
td t jddt jjd W d Q R X t jddt jjd}| 
td |jt jjd W d Q R X | t|d | dt|k d S )Nr   r.  )rD  rC  z)value '123' is not a valid Parameter.kindZ123znot a valid parameter namer  )rC  zname must be a strzis not a valid parameter name$z.azcannot have default valuesr   ry   z
<Parameterz"a=42")r1   r  r  r   r  rD  r   r  r  rC  rF  r  rG  r  r-  r(  r  r-   r  r  )r7   r$   r   r   r   test_signature_parameter_object  s<    z3TestParameterObject.test_signature_parameter_objectc          	   C   st   t j}|d|jd}| t|t|d|jd | t|t|d|jdd | t|t|j|jd d S )Nr   )rC  ry   )rC  rD  )r1   r  r  r   r&  rj  r  r-  )r7   r  r   r   r   r   !test_signature_parameter_hashable5  s    
z5TestParameterObject.test_signature_parameter_hashablec             C   s   t j}|ddt jjd}| ||k | ||k | |dk | |dk | |t k | |t k | ||ddt jjdk | ||ddt jjdk d S )Nr   ry   )rD  rC  )r1   r  r8  r-   r6   rN   )r7   r  r$   r   r   r   !test_signature_parameter_equality>  s    z5TestParameterObject.test_signature_parameter_equalityc          	   C   sl  t jddt jjd}| ||  | ||  |jdd}| |jd |j|jd}| || |jdd}| |jd | 	|| | 
td |j|jd}W d Q R X |jdd d	}| |jd  | 	|| |jd|jd	}| |j|j |jd|jd}| |j|j | 	|| | 
td
 |j|jd}W d Q R X |j|jd}| || d S )Nr   ry   )rD  rC  r   )r  r   )r  zname is a required attribute)r  rD  z<value <class 'inspect._empty'> is not a valid Parameter.kind)rC  )r1   r  r8  r  r  r   r  r  r  rj  rF  r  r   rD  r(  rC  )r7   r$   Zp2r   r   r    test_signature_parameter_replaceN  s6    z4TestParameterObject.test_signature_parameter_replacec          	   C   s.   |  td tjd tjjd W d Q R X d S )Nzname must be a str)rC  )rF  r  r1   r  r  )r7   r   r   r   (test_signature_parameter_positional_onlyv  s    z<TestParameterObject.test_signature_parameter_positional_onlyc          	   C   s`   |  td tjdtjjd W d Q R X tjdtjjd}| |jtjj | |jd d S )NzYimplicit arguments must be passed as positional or keyword arguments, not positional-onlyz.0)rC  Z	implicit0)	rF  r  r1   r  r  r(  r   rC  r  )r7   r  r   r   r   !test_signature_parameter_implicitz  s    z5TestParameterObject.test_signature_parameter_implicitc          	   C   sN   t jdt jjd}| t d|_W d Q R X | t d|_W d Q R X d S )NrK   )rC  r   rE  )r1   r  r8  r  r
  r   rC  )r7   r$   r   r   r   %test_signature_parameter_immutability  s
    z9TestParameterObject.test_signature_parameter_immutabilityN)r.   r<   r=   r9  r;  r<  r=  r>  r?  r   r@  rA  r   r   r   r   r7    s   *	(r7  c               @   s   e Zd Ze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edd ZdS )TestSignatureBindc             O   s$   t | }|j||}| |j|jS )N)r1   r  r  r   r   )r"  r   r   r  r  r   r   r   call  s    
zTestSignatureBind.callc          	   C   s   dd }|  | |d | td | |d W d Q R X | td | j|ddd W d Q R X | td | j|dd W d Q R X d S )	Nc               S   s   dS )Nry   r   r   r   r   r   r    s    z9TestSignatureBind.test_signature_bind_empty.<locals>.testry   ztoo many positional argumentsr   r.  )rK   z)got an unexpected keyword argument 'spam')r   rC  rF  r  )r7   r  r   r   r   test_signature_bind_empty  s    
z+TestSignatureBind.test_signature_bind_emptyc             C   s   dd }|  | |di f |  | |ddi f |  | |dddi f |  | j|dd	dd
dif |  | j|ddd	dd
dif |  | j|dddddif |  | j|dddd	dd
dif d S )Nc              _   s   | |fS )Nr   )r   r   r   r   r   r    s    z7TestSignatureBind.test_signature_bind_var.<locals>.testr   r   )r   r   )r   r   r   )r   r   r.  )r   r   )r   rC  )r7   r  r   r   r   test_signature_bind_var  s     z)TestSignatureBind.test_signature_bind_varc          	   C   s  dd }|  | |dddd | td | |dddd W d Q R X | td	 | |d W d Q R X | td
 | | W d Q R X ddd}|  | |dddd |  | |ddd ddd}|  | j|dddd |  | j|ddd |  | j|ddd d S )Nc             S   s
   | ||fS )Nr   )r   rv   r   r   r   r   r    s    z=TestSignatureBind.test_signature_bind_just_args.<locals>.testr   r   r   )r   r   r   ztoo many positional argumentsr  z missing a required argument: 'b'z missing a required argument: 'a'r.  c             S   s
   | ||fS )Nr   )r   rv   r   r   r   r   r    s    )r   r   r.  c             S   s
   | ||fS )Nr   )r   rv   r   r   r   r   r    s    r  )r   r   )r.  r   r  )r   )r.  r   r   )rv   )r   r.  r   )r.  )r   r   r   )r   rC  rF  r  )r7   r  r   r   r   test_signature_bind_just_args  s"    

z/TestSignatureBind.test_signature_bind_just_argsc             C   s6   dd }|  | |d |  | |dddd d S )Nc              W   s   | S )Nr   )r   r   r   r   r    s    zATestSignatureBind.test_signature_bind_varargs_order.<locals>.testr   r   r   r   )r   r   r   )r   rC  )r7   r  r   r   r   !test_signature_bind_varargs_order  s    z3TestSignatureBind.test_signature_bind_varargs_orderc          
   C   s   ddd}|  | |dddddd |  | |ddd	 |  | j|ddd
d |  | j|dddd	 | td | j|ddddd W d Q R X d S )Nr   c             W   s   | |||fS )Nr   )r   rv   r   r   r   r   r   r    s    zDTestSignatureBind.test_signature_bind_args_and_varargs.<locals>.testr   r   r  r   )r   r   r   )r  r   )r   r   r   r   )rv   r   )r   r   r   r   )rv   z multiple values for argument 'c')r   )r   )r   rC  rF  r  )r7   r  r   r   r   $test_signature_bind_args_and_varargs  s    
z6TestSignatureBind.test_signature_bind_args_and_varargsc             C   s<   dd }|  | |i  |  | j|dddddd d S )Nc              [   s   | S )Nr   )r   r   r   r   r    s    z?TestSignatureBind.test_signature_bind_just_kwargs.<locals>.testr   r  )r   rK   )r   rC  )r7   r  r   r   r   test_signature_bind_just_kwargs  s    z1TestSignatureBind.test_signature_bind_just_kwargsc          
   C   sJ  ddd}|  | |dddddi f |  | j|dddddddddddf |  | j|ddddd	ddddddf |  | j|ddddd
ddddddf |  | j|dddddddddddf |  | j|ddddddddddddf |  | j|ddddddddddif |  | j|dddddddi f d S )Nr   c             [   s   | |||fS )Nr   )r   rv   r   r   r   r   r   r    s    zCTestSignatureBind.test_signature_bind_args_and_kwargs.<locals>.testr   r   r   r  )r   rK   )rv   r   r   rK   )r   rv   r   rK   )rv   r   rK   r  )rv   r   r   rK   )r   r   r   )r   r   rv   )r   )r   rC  )r7   r  r   r   r   #test_signature_bind_args_and_kwargs  s     
z5TestSignatureBind.test_signature_bind_args_and_kwargsc          	   C   sT  dd }|  td | |d W d Q R X | | j|ddd dddd}|  td | |d W d Q R X dd }| | j|dd	d
d | | j|d	ddd |  td | j|d	ddd W d Q R X |  td | |dd	 W d Q R X |  td | j|dd	d	d
 W d Q R X |  td | j|dd	dd W d Q R X |  td | |d W d Q R X dd }| | j|dd	d
dd	i f | | j|dd	ddd	i f | | j|dd	dddd	ddif | | j|ddd	ddd	ddif |  td | j|dd	d W d Q R X | | j|dd	ddddd	dddf d S )Nc             S   s   | S )Nr   )r   r   r   r   r     s    z:TestSignatureBind.test_signature_bind_kwonly.<locals>.testztoo many positional argumentsr   )r   c            S   s   |S )Nr   )r   r   r   r   r   r   r    s    z"missing a required argument: 'bar'c            S   s   | |fS )Nr   )r   r   r   r   r   r    s    r   )r   )r   r   )r   r   z)got an unexpected keyword argument 'spam'r.  )r   r   rK   r  )r   rK   c            [   s
   | ||fS )Nr   )r   r   binr   r   r   r  (  s    )r   r   rK   )rK   r   r   z"missing a required argument: 'foo')rK   r   )r   rK  rK   )rK  rK   )rF  r  rC  r   )r7   r  r   r   r   test_signature_bind_kwonly  sN    

z,TestSignatureBind.test_signature_bind_kwonlyc             C   s   dddd}t |}|jddddd	d
d}| t|j dddddd	d
dff | |jddd	d
d | |jd d S )Nr  )r   c            _   s   d S )Nr   )r   rv   r   r   r   r   r   r   r  7  s    z=TestSignatureBind.test_signature_bind_arguments.<locals>.testr.  r  r:  rA  r   <   )rv   r   r   r   )r   r.  )r   )r  )rv   r:  r   )r   r   r   )r.  r  )	r1   r  r  r   r  	argumentsitemsr   r   )r7   r  r  r  r   r   r   test_signature_bind_arguments6  s    
z/TestSignatureBind.test_signature_bind_argumentsc          
   C   sf  t j}ddddd}t |}tt|j }x"dD ]}|| j|j	d||< q:W |j|
 d	}||_| | j|d
dddddd
ddddi f | | |d
dd
ddddi f | | j|d
ddddd
ddddi f | td | j|d
ddddd W d Q R X | td | j|d
ddd W d Q R X | td | j|d
dd W d Q R X d S )Nr   ry   r   )r   c            [   s   | |||||fS )Nr   )r,  b_poc_por   r   r   r   r   r   r  G  s    zCTestSignatureBind.test_signature_bind_positional_only.<locals>.test)r,  rQ  rR  )rC  )r"   r   r   r  r      )r   r   zbut was passed as a keywordr.  )r   r   rR  zparameter is positional only)rR  )r,  rQ  )r   ry   )r1   r  r  r  r  r  r"   rO  r  r  r  r  r   rC  rF  r  )r7   r  r  r  r  r  Znew_sigr   r   r   #test_signature_bind_positional_onlyD  s(    

 z5TestSignatureBind.test_signature_bind_positional_onlyc             C   sP   dd }t |}|ddd}| |jd |jdddd}| |jd d S )Nc             S   s   d S )Nr   )r   r7   rv   r   r   r   r  e  s    zATestSignatureBind.test_signature_bind_with_self_arg.<locals>.testr   r   r   )r   r   r   )r7   rv   )r1   r  r  r   r   )r7   r  r  r  r   r   r   !test_signature_bind_with_self_argc  s    
z3TestSignatureBind.test_signature_bind_with_self_argc          	   C   s   dd }t |}| td |jddd W d Q R X dd }| | j|ddd	d
dif t |}|jdd}| |jdd
dii d S )Nc             W   s   | |fS )Nr   )r   r   r   r   r   r  n  s    z?TestSignatureBind.test_signature_bind_vararg_name.<locals>.testz)got an unexpected keyword argument 'args'r   r   )r   r   c              _   s   | |fS )Nr   )r   r   r   r   r   r  w  s    )r   r   r   r   )r1   r  rF  r  r  r   rC  rN  )r7   r  r  r  r   r   r   test_signature_bind_vararg_namem  s    


z1TestSignatureBind.test_signature_bind_vararg_namec             C   sN   dd }|j jd }t|i }ttd}| | ||dddddh d S )	Nc               S   s   dd t dD S )Nc             S   s   h | ]}|| qS r   r   )r   r   r   r   r   	<setcomp>  s    zWTestSignatureBind.test_signature_bind_implicit_arg.<locals>.make_set.<locals>.<setcomp>r   )r   r   r   r   r   make_set  s    zDTestSignatureBind.test_signature_bind_implicit_arg.<locals>.make_setr   r   r   r  r   r   )r  	co_constsrY   FunctionTypeiterr   r   rC  )r7   rX  Zsetcomp_codeZsetcomp_funciteratorr   r   r    test_signature_bind_implicit_arg  s
    z2TestSignatureBind.test_signature_bind_implicit_argN)r.   r<   r=   r  rC  rD  rE  rF  rG  rH  rI  rJ  rL  rP  rT  rU  rV  r   r]  r   r   r   r   rB    s   7
rB  c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestBoundArgumentsc          	   C   s<   dd }t |d}| td t| W d Q R X d S )Nc             S   s   d S )Nr   )r   r   r   r   r     rh   zITestBoundArguments.test_signature_bound_arguments_unhashable.<locals>.foor   zunhashable type)r1   r  r  rF  r  r&  )r7   r   r  r   r   r   )test_signature_bound_arguments_unhashable  s    z<TestBoundArguments.test_signature_bound_arguments_unhashablec       	      C   sT  dd }t |d}| ||k | ||k | |t k | |t k t |d}| ||k | ||k t |d}| ||k | ||k d|jd< | ||k | ||k dd }t |d}| ||k | ||k dd }t |}|jddd	}|jddd
}| ||k | ||k d S )Nc             S   s   d S )Nr   )r   r   r   r   r     rh   zGTestBoundArguments.test_signature_bound_arguments_equality.<locals>.foor   r   r   c             S   s   d S )Nr   )rv   r   r   r   r     rh   zGTestBoundArguments.test_signature_bound_arguments_equality.<locals>.barc             S   s   d S )Nr   )r   rv   r   r   r   r     rh   )r   rv   )rv   r   )r1   r  r  r-   r6   rN   rN  )	r7   r   r  Zba2Zba3r   Zba4r  Zba1r   r   r   'test_signature_bound_arguments_equality  s2    

z:TestBoundArguments.test_signature_bound_arguments_equalityc          
   C   s   i ddddiddd}t |}|jdd	i d
}xLttjd D ]:}| j|d$ tt||}| 	|| W d Q R X qDW d S )N)r   r   ry   r  )r   r  c            [   s   d S )Nr   )r   rv   r   r  r   r   r   r     rh   zETestBoundArguments.test_signature_bound_arguments_pickle.<locals>.foor  r:  )r   )r  )
r1   r  r  r   r  r  r  r  r  r   )r7   r   r  r  r  Z
ba_pickledr   r   r   %test_signature_bound_arguments_pickle  s    
z8TestBoundArguments.test_signature_bound_arguments_picklec             C   sH   i ddddiddd}t |}|jdd	i d
}| t|d d S )N)r   r   ry   r  )r   r  c            [   s   d S )Nr   )r   rv   r   r  r   r   r   r     rh   zCTestBoundArguments.test_signature_bound_arguments_repr.<locals>.foor  r:  )r   z <BoundArguments \(a=20,.*\}\}\)>)r1   r  r  ZassertRegexr  )r7   r   r  r  r   r   r   #test_signature_bound_arguments_repr  s    
z6TestBoundArguments.test_signature_bound_arguments_reprc          
   C   sT  di ddddd}t |}|d}|  | t|j dddd	i fd
i fg |jddddd}|  | t|j dddd	i fd
ddifg dd }t |}|d}|  | t|j dg dd }t |}| }|  | t|j g  ddd}t |}| }|  | t|j dg d S )Nr   )r   c            _   s   d S )Nr   )r   rv   r   r   r  r   r   r   r     rh   zMTestBoundArguments.test_signature_bound_arguments_apply_defaults.<locals>.foor  )r   r  )rv   r   )r   r   r   r  r.  r:  )r   )r   r.  )rv   r  )r   )r:  r   c             S   s   d S )Nr   )r   rv   r   r   r   r     rh   c               S   s   d S )Nr   r   r   r   r   r     rh   rK   c             S   s   d S )Nr   )r   r   r   r   r     rh   )r   rK   )r   )rK   )	r1   r  r  Zapply_defaultsr   rs   rN  rO  Zbind_partial)r7   r   r  r  r   r   r   -test_signature_bound_arguments_apply_defaults  s:    






z@TestBoundArguments.test_signature_bound_arguments_apply_defaultsN)r.   r<   r=   r_  r`  ra  rb  rc  r   r   r   r   r^    s
   
r^  c               @   s$   e Zd Zdd Zdd Zdd ZdS )TestSignaturePrivateHelpersc             C   s:   t j}| |dd | |dd | |dd d S )Nz($self)r7   z($self, obj)z($cls, /, obj)r   )r1   Z_signature_get_bound_paramr   )r7   getterr   r   r   test_signature_get_bound_param  s    z:TestSignaturePrivateHelpers.test_signature_get_bound_paramc             C   s8   t |\}}}| || | || | || d S )N)r1   Z"_signature_strip_non_python_syntaxr   )r7   inputZclean_signatureZself_parameterZlast_positional_onlyZcomputed_clean_signatureZcomputed_self_parameterZcomputed_last_positional_onlyr   r   r   _strip_non_python_syntax  s    z4TestSignaturePrivateHelpers._strip_non_python_syntaxc             C   st   |  dddd |  dddd |  ddd d |  ddd d  |  d	dd d  |  d
d
d d  |  d d d d  d S )NzZ($module, /, path, mode, *, dir_fd=None, effective_ids=False,
       follow_symlinks=True)zO(module, path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)r   z($module, word, salt, /)z(module, word, salt)r   z(x, y=None, z=None, /)z(x, y=None, z=None)z!(x,
    y=None,
      z = None  )r   )rh  )r7   r   r   r   &test_signature_strip_non_python_syntax  sF    zBTestSignaturePrivateHelpers.test_signature_strip_non_python_syntaxN)r.   r<   r=   rf  rh  ri  r   r   r   r   rd    s   
rd  c               @   s$   e Zd Zeeeddd ZdS )TestSignatureDefinitionsz6Signature information for builtins requires docstringsc       
   
   C   s
  t  }dddddddh}||O }dh}||O }d	d
dddh}||O }ddh}||O }t  }tt}xpt| D ]`\}}	t|	sqpt|	tr||kr|| ||krqp| j	|d | 
t|	 W d Q R X qpW x0|D ](}| j	|d | |	j W d Q R X qW d S )Nr   slicer  r  r  r[  varsround
breakpointr  maxr  __build_class__r   
__import__)r  )r0   rl  r   r  rO  callabler  rZ   r   r  ZassertIsNotNoner1   r  r   __text_signature__)
r7   Zno_signatureZneeds_groupsZneeds_semantic_updateZneeds_varargsZnot_converted_yetZtypes_with_signaturesr  r  r9   r   r   r   test_builtins_have_signatures0  s2    


z6TestSignatureDefinitions.test_builtins_have_signaturesN)r.   r<   r=   r   r   r#  r   rt  r   r   r   r   rj  ,  s   rj  c               @   s    e Zd Zdd Zedd ZdS )NTimesUnwrappablec             C   s   || _ d | _d S )N)r  _next)r7   r  r   r   r   r   f  s    zNTimesUnwrappable.__init__c             C   s2   | j dkrtd| jd kr,t| j d | _| jS )Nr   zUnwrapped too many timesr   )r  r  rv  ru  )r7   r   r   r   r  j  s
    

zNTimesUnwrappable.__wrapped__N)r.   r<   r=   r   r  r  r   r   r   r   ru  e  s   ru  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S )
TestUnwrapc             C   s.   dd }t jdd|}| t|| d S )Nc             S   s   | | S )Nr   )r   rv   r   r   r   r"  u  s    z(TestUnwrap.test_unwrap_one.<locals>.funcr  )r  )r  	lru_cacher   r1   unwrap)r7   r"  r  r   r   r   test_unwrap_onet  s    zTestUnwrap.test_unwrap_onec             C   sT   dd }|}x"t dD ]}t|dd }qW | |j| | t|| d S )Nc             S   s   | | S )Nr   )r   rv   r   r   r   r"  {  s    z,TestUnwrap.test_unwrap_several.<locals>.funcr.  c               S   s   d S )Nr   r   r   r   r   r    s    z/TestUnwrap.test_unwrap_several.<locals>.wrapper)r   r  r  r  r  r   r1   ry  )r7   r"  r  __r   r   r   test_unwrap_severalz  s    zTestUnwrap.test_unwrap_severalc             C   sT   dd }t |dd }t |dd }d|_tj|dd	 d
}| || d S )Nc             S   s   | | S )Nr   )r   rv   r   r   r   func1  s    z#TestUnwrap.test_stop.<locals>.func1c               S   s   d S )Nr   r   r   r   r   func2  s    z#TestUnwrap.test_stop.<locals>.func2c               S   s   d S )Nr   r   r   r   r   r    s    z%TestUnwrap.test_stop.<locals>.wrapperr   c             S   s
   t | dS )N	stop_here)rX   )r   r   r   r   rl     rh   z&TestUnwrap.test_stop.<locals>.<lambda>)stop)r  r  r  r1   ry  r   )r7   r}  r~  r  Z	unwrappedr   r   r   	test_stop  s    zTestUnwrap.test_stopc          	   C   s   dd }||_ | td t| W d Q R X dd }||_ ||_ | td t| W d Q R X | td t| W d Q R X d S )Nc               S   s   d S )Nr   r   r   r   r   r}    rh   z$TestUnwrap.test_cycle.<locals>.func1zwrapper loopc               S   s   d S )Nr   r   r   r   r   r~    rh   z$TestUnwrap.test_cycle.<locals>.func2)r  rF  r  r1   ry  )r7   r}  r~  r   r   r   
test_cycle  s    zTestUnwrap.test_cyclec                s6   dd  d  _ G  fddd}| t|  d S )Nc               S   s   d S )Nr   r   r   r   r   r"    rh   z(TestUnwrap.test_unhashable.<locals>.funcc                   s   e Zd ZdZ ZdS )z%TestUnwrap.test_unhashable.<locals>.CN)r.   r<   r=   __hash__r  r   )r"  r   r   rx     s   rx   )r  r   r1   ry  )r7   rx   r   )r"  r   test_unhashable  s    zTestUnwrap.test_unhashablec          	   C   s6   t t d }| td t| W d Q R X d S )Nr   zwrapper loop)ru  rV   getrecursionlimitrF  r  r1   ry  )r7   r9   r   r   r   test_recursion_limit  s    zTestUnwrap.test_recursion_limitN)	r.   r<   r=   rz  r|  r  r  r  r  r   r   r   r   rw  r  s   rw  c               @   sD   e Zd Zdd Zdd Zeedkddd Zd	d
 Z	dd Z
dS )TestMainc             C   sV   t d}tddd\}}}|  }| |d d t|  | |d d S )Nr   z-mr1   r   rh   )	importlibimport_moduler	   decoder  r   r1   r   )r7   modulercr)   errr   r   r   r   test_only_source  s    
zTestMain.test_only_sourcec          	   C   s2   dd }d|_ | t t| W d Q R X d S )Nc               S   s   d S )Nr   r   r   r   r   r     s    z)TestMain.test_custom_getattr.<locals>.foory   )r  r  r  r1   r  )r7   r   r   r   r   test_custom_getattr  s    zTestMain.test_custom_getattrNz6threads required to test __qualname__ for source filesc             C   sL   t ddd\}}}|  }| |d d tt  | |d d S )Nz-mr1   z%concurrent.futures:ThreadPoolExecutorr   rh   )r	   r  r  r   r1   r   r   )r7   r  r)   r  r   r   r   r   test_qualname_source  s    zTestMain.test_qualname_sourcec             C   s:   t d}tddd\}}}|  }| |dg d S )Nr   z-mr1   rV   z#Can't get info for builtin modules.)r  r  r
   r  r  r   )r7   r  r\  r)   r  r   r   r   r   test_builtins  s
    
zTestMain.test_builtinsc             C   sf   t d}t }t|d \}}}| }| |j| | |j| | |j	| | 
|d d S )Nr   -mr1   	--detailsrh   )r  r1   r   r  )r  r  r   Z!optim_args_from_interpreter_flagsr	   r  r|   r.   r   
__cached__r   )r7   r  r   r  r)   r  outputr   r   r   test_details  s    
zTestMain.test_details)r.   r<   r=   r  r  r   r#  r   r  r  r  r   r   r   r   r    s   	

r  c               @   s0   e Zd ZedZedZdd Zdd ZdS )
TestReloadz def foo():
    print("Bla")
    z#def foo():
    print("Oh no!")
    c          	   C   s>   t |}t|"}| | d|d W d Q R X d S )NT)r1   r   r   r   r   r  )r7   rs  r   Zinspected_srcsrcr   r   r   assertInspectEqual  s
    

zTestReload.assertInspectEqualc          
   C   sd   t d| jN\}}t|}| || t|d}|| j W d Q R X | || W d Q R X d S )NZ
reload_bugro  )r   
src_beforer  r  r  r   ru  	src_after)r7   r  rs  r  r  r   r   r   test_getsource_reload  s    
z TestReload.test_getsource_reloadN)	r.   r<   r=   textwrapdedentr  r  r  r  r   r   r   r   r    s   r  c               C   s<   t ttttttttt	t
ttttttttttttttt d S )N)r   r)  r   r6  rK  r   r  rP   r3  rM  rQ  rS  r  rn  r  rB  r7  r^  rd  rj  r  rw  r  r  r  r&  r   r   r   r   	test_main  s    r  __main__)ar   r  ra   r  r  r1   r  r   rq  Zos.pathr   r  r  rx  rV   rY   r  r`  r   Zunittest.mockr^   concurrent.futuresr   ImportErrorZtest.supportr   r   r   r   r   Ztest.support.script_helperr	   r
   r  r   rS   r   r+  r   Ztest.test_importr   r   r   rm  r   r   r   r'   r*   r   r  r   r+   rH   rJ   rL   r  rM   rN   rP   r   r   r   r&  r)  r6  rK  rn  rt   r}  r  r  r  r  r  r3  rM  rQ  rS  r  r  r  r  r  r  r  r7  rB  r^  rd  rj  ru  rw  r  r  r  r.   r   r   r   r   <module>   s   
 7 D
*:   Az I  c@        d  {b?9<0
