B
    2*™\˜O ã               @   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Úoéÿÿÿÿc             G   s   t | ƒf| S )N)r   )ÚfilenameÚargs© r   ú<C:\ALexclude\prg\programme\Python37\Lib\test\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 )NÚaÚbarr   ZdeltaZephraimZmagicalZyoyoÚzé   é   zdef foo(*, z, z): passÚfoo)Ú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&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 )Né2   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   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   ÚassertRaisesÚ	TypeErrorr1   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 )N)z<test>zdef x(): pass
c                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Õ   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_decorator  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_decorator"  s    z'TestDecorators.test_replacing_decoratorc             C   s   |   tjdd¡ d S )Né‚   é„   )rÔ   r%  ræ   )r7   r   r   r   Útest_getsource_unwrap%  s    z$TestDecorators.test_getsource_unwrapc             C   s   |   tjdd¡ d S )Néq   é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)  r,  r/  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_lambda1  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_lambda6  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_onelinefunc;  s    zTestOneliners.test_onelinefuncc             C   s   |   tjdd¡ d S )Né(   é)   )rÔ   r%  Zmanyargs)r7   r   r   r   Útest_manyargs?  s    zTestOneliners.test_manyargsc             C   s   |   tjdd¡ d S )Né,   é-   )rÔ   r%  Ztwolinefunc)r7   r   r   r   Útest_twolinefuncE  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_listK  s    z!TestOneliners.test_lambda_in_listc             C   s   |   tjdd¡ d S )Né7   )rÔ   r%  Z	anonymous)r7   r   r   r   Útest_anonymousP  s    zTestOneliners.test_anonymousN)r.   r<   r=   r%  rÇ   r2  r5  r8  r:  r=  r@  rB  rD  r   r   r   r   r0  +  s   r0  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_commentX  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_sig[  s    z!TestBuggyCases.test_multiline_sigc             C   s   |   t ¡ jdd¡ d S )NéG   éH   )rÔ   r%  Zfunc69Zfunc71)r7   r   r   r   Útest_nested_class^  s    z TestBuggyCases.test_nested_classc             C   s   |   tjdd¡ d S )NéM   )rÔ   r%  Zfunc77)r7   r   r   r   Ú#test_one_liner_followed_by_non_namea  s    z2TestBuggyCases.test_one_liner_followed_by_non_namec             C   s   |   tjjdd¡ d S )NéS   )rÔ   r%  Zcls82Zfunc83)r7   r   r   r   Útest_one_liner_dedent_non_named  s    z-TestBuggyCases.test_one_liner_dedent_non_namec             C   s   |   tjdd¡ d S )NéX   éZ   )rÔ   r%  Zfunc88)r7   r   r   r   Ú&test_with_comment_instead_of_docstringg  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_classj  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_binaryo  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  rY  r1   r[  rÓ   rû   rü   rý   r’   )r7   rÑ   rë   r   r   r   Ú!test_findsource_code_in_linecachev  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   r[  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 )Név   é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Ç   rH  rK  rN  rP  rR  rU  rX  r™   r  rX   rZ  r¬   Úendswithr\  r]  r_  rc  rf  r   r   r   r   rE  U  s   
rE  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rmtreerj  )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Ë   rs  ru  Ú__classcell__r   r   )rq  r   rh    s   rh  c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú_BrokenDataDescriptorc              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=   rx  rz  rq   r   r   r   r   rw  ¢  s   rw  c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú_BrokenMethodDescriptorc              G   s   t dƒ‚d S )Nzbroken method descriptor)r  )r   r   r   r   rx  ´  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=   rx  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__'  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_new&  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   Útest3  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_attr2  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­  ;  rh   zITestClassesAndFunctions.test_getfullargspec_signature_annos.<locals>.testc               S   s   d S )Nr   r   r   r   r   r­  ?  rh   )r1   r  r’   Ú__annotations__Zannotations)r7   r­  Úspecr   r   r   Ú#test_getfullargspec_signature_annos:  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  rm  Údir_fdÚfollow_symlinksT)r·  r¸  z,(path, *, dir_fd=None, follow_symlinks=True))r‰  r‘  r’  r  )r–  Ú_pickleÚPicklerÚdumpÚioÚBytesIOrk  Ústat)r7   r   r   r   Ú#test_getfullargspec_builtin_methodsC  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_funcS  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_signature\  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_kwonlye  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  r  s    z;TestClassesAndFunctions.test_getargspec_method.<locals>.A.mN)r.   r<   r=   r  r   r   r   r   r€  q  s   r€  r7   )rt   r  r  )r7   r€  r   r   r   Útest_getargspec_methodp  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   Úsy  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Ð  Údatablobrw  Úddr{  Úmdr   r   r   r   r€  w  s   r€  r¨  zstatic methodzmissing __new__r›   rb  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_newstylev  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ä   rb  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   )rp  rq   )r7   r  )rq  r   r   rq   Ý  s    zUTestClassesAndFunctions.test_classify_DynamicClassAttribute.<locals>.Meta.__getattr__)r.   r<   r=   rq   rv  r   r   )rq  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 )Nrq  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 )Nrq  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   )rp  Z_Meta__getattr)r7   r  )rq  r   r   rq     s    zPTestClassesAndFunctions.test_classify_VirtualAttribute.<locals>.Meta.__getattr__)r.   r<   r=   rî  rq   rv  r   r   )rq  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 ]}|  ||¡ q¤W 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 )Nrq  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   )rp  rq   )r7   r  )rq  r   r   rq     s    z_TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta1.__getattr__)r.   r<   r=   rî  rq   rv  r   r   )rq  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 )Nrq  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   )rp  rq   )r7   r  )rq  r   r   rq     s    z_TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta2.__getattr__)r.   r<   r=   rî  rq   rv  r   r   )rq  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 )Nrq  r<   r.   Úthree)rs   rÇ  r0   rî  )r‹   )rõ  r÷  r   r   rî     s    z[TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta3.__dir__c                s   |dkrdS t ƒ  |¡S )Nrø  r¤   )rp  rq   )r7   r  )rq  r   r   rq   #  s    z_TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta3.__getattr__)r.   r<   r=   rî  rq   rv  r   )rõ  r÷  )rq  r   ÚMeta3  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   ÚClass1'  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 )Nrq  r.   Úmissingr   )r‹   r   r   r   rî  5  s    zSTestClassesAndFunctions.test_classify_class_attrs_with_buggy_dir.<locals>.M.__dir__N)r.   r<   r=   rî  r   r   r   r   ÚM4  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   7  s   rx   )r„   c             S   s   g | ]}|d  ‘qS )r   r   )rÚ   r   r   r   r   rÛ   9  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_dir3  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=   rw  rÕ  r{  rÖ  r   r   r   r   r€  =  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   ÚEmptyD  s   r   c                s$   dt | ƒkrtˆ | jƒrdS ˆ| ƒS )Nr.   F)rÜ  rX   r.   )r~   )r   Úpredr   r   r&  F  s    zZTestClassesAndFunctions.test_getmembers_descriptors.<locals>.pred_wrapper.<locals>.wrapped)rt   )r  r&  r   )r   r  r   Úpred_wrapperA  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  T  s   r  )rt   r1   Úismethoddescriptorr]   r’   r{   r  )r7   r€  r  r  r]   r  r   r   r   Útest_getmembers_descriptors<  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¿   ^  s    z;TestClassesAndFunctions.test_getmembers_method.<locals>.B.fN)r.   r<   r=   r¿   r   r   r   r   r  ]  s   r  r¿   )r|   r¿   r1   r{   r}   rB   )r7   r  rv   r   r   r   Útest_getmembers_method\  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)rp  rq   )r‹   r  )rq  r   r   rq   i  s    zOTestClassesAndFunctions.test_getmembers_VirtualAttribute.<locals>.M.__getattr__)r.   r<   r=   rq   rv  r   r   )rq  r   rþ  h  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¡   n  s    zHTestClassesAndFunctions.test_getmembers_VirtualAttribute.<locals>.A.eggsN)r.   r<   r=   rY   rã  r¡   r   r   r   r   r€  m  s   r€  )r„   )r¡   r  )r¡   rK   )rZ   r|   r1   r{   )r7   rþ  r€  r   r   r   Ú test_getmembers_VirtualAttributeg  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 )Nrq  r.   rý  r   )r‹   r   r   r   rî  v  s    zITestClassesAndFunctions.test_getmembers_with_buggy_dir.<locals>.M.__dir__N)r.   r<   r=   rî  r   r   r   r   rþ  u  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   x  s   rx   )r„   c             S   s   g | ]}|d  ‘qS )r   r   )rÚ   r   r   r   r   rÛ   z  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_dirt  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
  rm  )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 )Nrm  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Ý  rm  r
  )r(  rk  r1   r  rm  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(  r*  r+  r,  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_stringr/  r¾   Zex1Zex2r   r   r   ÚassertEqualException  s    



z-TestGetcallargsFunctions.assertEqualExceptionc             C   s   d}t || ƒS )Nz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))r2  r0  )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, *cr3  z2, 3z2, 3, 4z*(2,3,4)z	2, *[3,4]z 2, 3, *collections.UserList([4]))r2  r0  )r7   r¿   r   r   r   Útest_varargs1  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))r2  r0  )r7   r¿   r   r   r   Ú
test_varkw:  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))r2  r0  )r7   r¿   r   r   r   Útest_varkw_onlyF  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)r2  r0  r1  )r7   r¿   r   r   r   Útest_keyword_onlyP  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))r2  r0  )r7   r¿   r   r   r   Útest_multiple_features`  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¡ q”W |   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—  )r=  )	r2  r1  ÚassertRaisesRegexr  r1   Zgetcallargsr˜  r®  ÚVAR_KEYWORD)	r7   Zf0Úf1Úf2r¿   Úf3Úf4r;  r<  r   r   r   Útest_errorsx  s^    




z$TestGetcallargsFunctions.test_errors)N)N)r.   r<   r=   r0  r1  r2  r4  r5  r6  r7  r9  r:  rF  r   r   r   r   r-  ù  s   

	
r-  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   rH  )rt   r‹   Úinst)r7   rH  r   r   r   rË   Ã  s    zTestGetcallargsMethods.setUpc                s$   t t| ƒj}|d| ƒ| j_| jjS )Nzself, )rp  rG  r2  r‹   rb  rI  )r7   rÉ  Úmk)rq  r   r   r2  É  s    z#TestGetcallargsMethods.makeCallable)r.   r<   r=   rË   r2  rv  r   r   )rq  r   rG  Á  s   rG  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)rp  rK  r2  r‹   rb  )r7   rÉ  )rq  r   r   r2  Ñ  s    z*TestGetcallargsUnboundMethods.makeCallableNc                s   t t| ƒj|  |||¡Ž S )N)rp  rK  r0  Ú_getAssertEqualParams)r7   r  r.  r/  )rq  r   r   r0  Õ  s    
z1TestGetcallargsUnboundMethods.assertEqualCallArgsc                s   t t| ƒj|  |||¡Ž S )N)rp  rK  r1  rL  )r7   r  r.  r/  )rq  r   r   r1  Ù  s    
z2TestGetcallargsUnboundMethods.assertEqualExceptionc             C   s    t |pi | jd}|d| |fS )N)rI  zinst,)rz   rI  )r7   r  r.  r/  r   r   r   rL  Ý  s    z3TestGetcallargsUnboundMethods._getAssertEqualParams)N)N)N)r.   r<   r=   r2  r0  r1  rL  rv  r   r   )rq  r   rK  Ï  s   rK  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   rN  r~   r´   r¤   )rt   r’   r1   Úgetattr_staticr~   r  r  )r7   rN  Ú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   rN  ò  s   rN  c               @   s   e Zd ZdS )z4TestGetattrStatic.test_inherited.<locals>.OtherThingN)r.   r<   r=   r   r   r   r   Ú
OtherThingô  s   rR  r~   )rt   r’   r1   rO  r~   )r7   rN  rR  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   rN  û  s   rN  r¤   r~   r   )rt   r’   r1   rO  r~   )r7   rN  rP  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   rN    s   rN  r~   )rt   r’   r1   rO  r~   )r7   rN  rP  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   rx    s    zSTestGetattrStatic.test_descriptor_raises_AttributeError.<locals>.descriptor.__get__N)r.   r<   r=   rx  r   r   r   r   Ú
descriptor  s   rW  c                   s   e Zd Z” ZdS )zFTestGetattrStatic.test_descriptor_raises_AttributeError.<locals>.ThingN)r.   r<   r=   r~   r   )Údescr   r   rN    s   rN  r~   )rt   r’   r1   rO  )r7   rW  rN  rP  r   )rX  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   rN    s   rN  r~   )rt   r’   r1   rO  r~   )r7   rN  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~     s    z=TestGetattrStatic.test_classVirtualAttribute.<locals>.Thing.xN)r.   r<   r=   rY   rã  r~   rt   r[  r   r   r   r   rN    s   rN  r~   )rt   r’   r1   rO  r  )r7   rN  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   rN  &  s   rN  c               @   s   e Zd ZdS )zCTestGetattrStatic.test_inherited_classattribute.<locals>.OtherThingN)r.   r<   r=   r   r   r   r   rR  (  s   rR  r~   )rt   r’   r1   rO  r~   )r7   rN  rR  r   r   r   Útest_inherited_classattribute%  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›   1  s    z4TestGetattrStatic.test_slots.<locals>.Thing.__init__N)r.   r<   r=   r´   rw   r›   r   r   r   r   rN  .  s   rN  r~   r´   r   )rt   r’   r1   rO  r~   )r7   rN  rP  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   Úmeta;  s   r_  c               @   s   e Zd ZdS )z/TestGetattrStatic.test_metaclass.<locals>.ThingN)r.   r<   r=   r   r   r   r   rN  =  s   rN  )r„   rp   r   c               @   s   e Zd ZdS )z-TestGetattrStatic.test_metaclass.<locals>.subN)r.   r<   r=   r   r   r   r   ÚsubA  s   r`  c               @   s   e Zd ZdZdS )z4TestGetattrStatic.test_metaclass.<locals>.OtherThingr¤   N)r.   r<   r=   r~   r   r   r   r   rR  C  s   rR  c               @   s   e Zd ZdS )z9TestGetattrStatic.test_metaclass.<locals>.OtherOtherThingN)r.   r<   r=   r   r   r   r   ÚOtherOtherThingG  s   ra  r~   r¤   )rZ   rt   r’   r1   rO  )r7   r_  rN  r`  rR  ra  r   r   r   Útest_metaclass:  s    z TestGetattrStatic.test_metaclassc             C   s.   |   t ddd ¡d ¡ |  t dd¡d ¡ d S )Nr   r   Úlower)r’   r1   rO  ÚassertNotEqual)r7   r   r   r   Útest_no_dict_no_slotsL  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   rO  rZ   r  )r7   Úhandler   r   r   Ú%test_no_dict_no_slots_instance_memberP  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›   Y  s    z>TestGetattrStatic.test_inherited_slots.<locals>.Thing.__init__N)r.   r<   r=   rw   r›   r   r   r   r   rN  W  s   rN  c               @   s   e Zd ZdS )z:TestGetattrStatic.test_inherited_slots.<locals>.OtherThingN)r.   r<   r=   r   r   r   r   rR  \  s   rR  r~   )rt   r’   r1   rO  r~   )r7   rN  rR  r   r   r   Útest_inherited_slotsU  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   rx  d  s    z=TestGetattrStatic.test_descriptor.<locals>.descriptor.__get__N)r.   r<   r=   rx  r   r   r   r   rW  c  s   rW  c                   s   e Zd Z” ƒ ZdS )z.TestGetattrStatic.test_descriptor.<locals>.FooN)r.   r<   r=   r½   r   )rW  r   r   rH  f  s   rH  r   r½   c             S   s   d S )Nr   )rÎ  r#   Úvr   r   r   rl   q  rh   z3TestGetattrStatic.test_descriptor.<locals>.<lambda>)rt   r  r’   r1   rO  rz  )r7   rH  r   r   )rW  r   Útest_descriptorb  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   ri  rj  r   r   r   rx  w  s    zLTestGetattrStatic.test_metaclass_with_descriptor.<locals>.descriptor.__get__N)r.   r<   r=   rx  r   r   r   r   rW  v  s   rW  c                   s   e Zd Z” ƒ ZdS )z>TestGetattrStatic.test_metaclass_with_descriptor.<locals>.metaN)r.   r<   r=   r½   r   )rW  r   r   r_  y  s   r_  c               @   s   e Zd ZdS )z?TestGetattrStatic.test_metaclass_with_descriptor.<locals>.ThingN)r.   r<   r=   r   r   r   r   rN  {  s   rN  )r„   r½   )rt   rZ   r’   r1   rO  r  )r7   r_  rN  r   )rW  r   Útest_metaclass_with_descriptoru  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   rn  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   rq  †  s    zETestGetattrStatic.test_class_as_property.<locals>.Something.__class__N)r.   r<   r=   ro  r  rq  r   r   r   r   Ú	Something„  s   rp  r   r¤   )rt   r’   r1   rO  r6   ro  )r7   rn  rp  ri  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  rr  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   rn  –  s   rn  c               @   s   e Zd ZdS )z9TestGetattrStatic.test_mro_as_property.<locals>.SomethingN)r.   r<   r=   r   r   r   r   rp  ™  s   rp  )r„   r   r¤   )rZ   rt   r’   r1   rO  )r7   râ  rn  rp  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   rH  £  s   rH  r—  r   r¤   )rt  rz   r   r’   r1   rO  r6   )r7   rH  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)rt  rp  Úget)r7   Úkeyr>  )rq  r­  r   r   rv  ´  s    z=TestGetattrStatic.test_custom_object_dict.<locals>.Custom.get)N)r.   r<   r=   rv  rv  r   )r­  )rq  r   ÚCustom³  s   rx  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   rH  ¸  s   rH  r   r¤   )rt  rz   rt   r  r’   r1   rO  r6   )r7   rx  rH  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)ro  )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=   ro  r›   r   r   r   r   rN  Å  s   rN  )r„   rK   ry   )rZ   r’   r1   rO  r6   ro  )r7   râ  rN  ri  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   rO  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   )ro  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=   ro  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   rN  Þ  s   rN  rK   )rZ   r  r  r1   rO  r6   ro  )r7   r  râ  rN  r   r   r   Ú3test_metaclass_with_metaclass_with_dict_as_propertyÔ  s    zETestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_propertyN)r.   r<   r=   rQ  rS  rT  rU  rY  rZ  r\  r]  r^  rb  re  rg  rh  rl  rm  rq  rs  ru  ry  rz  r~  r€  r   r   r   r   rM  ã  s,   	

	rM  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  ry  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   rk  r   r   r   r   Úeach  s
    
z;TestGetGeneratorState.test_getgeneratorlocals.<locals>.eachr   r   r¤   )r   r’  )r   r   r¤   )r   r’  rk  rv   r  )r   r’  rk  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_one7  s    zFTestGetGeneratorState.test_getgeneratorlocals_empty.<locals>.yield_one)r’   r1   r”  r‡  r•  )r7   r—  rô  r   r   r   Útest_getgeneratorlocals_empty6  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   C  rh   zETestGetGeneratorState.test_getgeneratorlocals_error.<locals>.<lambda>)r   r¤   )r  r  r1   r”  r0   )r7   r   r   r   Útest_getgeneratorlocals_errorA  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_coroutineK  s    z5TestGetCoroutineState.setUp.<locals>.number_coroutinec               “   s   ˆ ƒ I d H  d S )Nr   r   )r›  r   r   Ú	coroutineO  s    z.TestGetCoroutineState.setUp.<locals>.coroutine)rY   rœ  )r7   rœ  r   )r›  r   rË   J  s    zTestGetCoroutineState.setUpc             C   s   | j  ¡  d S )N)rœ  rc   )r7   r   r   r   rs  S  s    zTestGetCoroutineState.tearDownc             C   s   t  | j¡S )N)r1   Zgetcoroutinestaterœ  )r7   r   r   r   Ú_coroutinestateV  s    z%TestGetCoroutineState._coroutinestatec             C   s   |   |  ¡ tj¡ d S )N)r’   r  r1   ZCORO_CREATED)r7   r   r   r   r†  Y  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ˆ  \  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Š  `  s    z2TestGetCoroutineState.test_closed_after_exhaustionc          	   C   s8   |   t¡ | j t¡ W d Q R X |  |  ¡ tj¡ d S )N)r  ry  rœ  r(   r’   r  r1   rŸ  )r7   r   r   r   r‹  i  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‘  n  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   Úgencorow  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_getcoroutinelocalsv  s    
z-TestGetCoroutineState.test_getcoroutinelocalsN)r.   r<   r=   rË   rs  r  r†  rˆ  rŠ  r‹  r‘  r¡  r   r   r   r   rš  H  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  r>  ÚemptyÚ
annotationrï   r=  rc  )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¯  )r=  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¯  r@  r˜  r-   rŽ  Ú
startswith)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 qøW 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  r=  )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   r?  )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Æ  r?  )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(  r?  )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¡  r?  .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_classmethod   s    zKTestSignatureObject.test_signature_without_self.<locals>.A.test_classmethodc              W   s   d S )Nr   )r   r   r   r   Útest_staticmethod$  s    zLTestSignatureObject.test_signature_without_self.<locals>.A.test_staticmethodr   N)r.   r<   r=   rÓ  rÑ  rÒ  rÒ  r¤  r¦  rB  rC  rD  rE  r   )rÐ  rÏ  r   r   r€    s   r€  )))r   ..rÌ  .)))r   ..rÌ  )rž   ..rÍ  .)r’   rÉ  rB  rC  rD  rE  )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 )Nr   r7   )
r1   rÉ  r-   rß  r°  r’   rs   r"   rª  r  )r   rÉ  )r7   r   r   Útest_unbound_methodA  s    
zKTestSignatureObject.test_signature_on_builtins.<locals>.test_unbound_methodc                sB   t  | ¡}ˆ  t|t jƒ¡ |jr>ˆ  t|j ¡ ƒd j	d¡ |S )Nr   r7   )
r1   rÉ  r-   rß  r°  r"   rd  rs   rª  r  )r   rÉ  )r7   r   r   Útest_callableH  s
    
zETestSignatureObject.test_signature_on_builtins.<locals>.test_callablec                s   ˆ j |  jS )N)r"   r>  )r  )rÉ  r   r   r$   Q  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   ÚThisWorksNowy  s   rØ  )rÁ  rÂ  r’   rV   Úmaxsizer}   r"   rt   r¹  rº  r»  r¼  ÚStringIOrï   Ú	maketransrz   ÚfromkeysrZ   r£  r‰   rÚ  Úminr@  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_builtins;  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Á  r@  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   )r@  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ó  r@  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­  C	  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­  N	  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­  x	  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    r4  )))rv   r4  .rÈ  )r   ..rÈ  .)r   r4  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½   r4  .rÈ  .éÈ   rµ   )r   rv   )rü  rµ   rû  r4  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   )r=  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É  r@  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_partial>	  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­  "
  s    zFTestSignatureObject.test_signature_on_partialmethod.<locals>.Spam.testr   )r   N)r.   r<   r=   r­  r¡  r   )r¦  r   r   r  !
  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­  2
  s    zFTestSignatureObject.test_signature_on_partialmethod.<locals>.Spam.testr   N)r.   r<   r=   r­  rÀ   r   )r¦  r   r   r  1
  s   )))r7   .r  rÆ  .)	r¤  r¦  r@  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   <
  rh   zETestSignatureObject.test_signature_on_fake_partialmethod.<locals>.foorK   z(a))Ú_partialmethodr’   rï   r1   rÉ  )r7   r   r   r   r   Ú$test_signature_on_fake_partialmethod;
  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á  D
  s    zSTestSignatureObject.test_signature_on_decorated.<locals>.decorator.<locals>.wrapper)r¥  r‰   )r  rá  )r¤  )r  r   râ  C
  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   J
  s    z@TestSignatureObject.test_signature_on_decorated.<locals>.Foo.barN)r.   r<   r=   r   r   )râ  r   r   rH  I
  s   rH  )))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á  b
  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â  a
  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£  k
  s    zETestSignatureObject.test_signature_on_decorated.<locals>.Foo.__call__N)r.   r<   r=   r£  r   )râ  r   r   rH  j
  s   )))rv   ..rÆ  .c               S   s   d S )Nr   r   r   r   r   Úwrapped_foo_cally
  s    zITestSignatureObject.test_signature_on_decorated.<locals>.wrapped_foo_call)r¤  r’   rÉ  r   r£  Ú__wrapped__)r7   rH  r  r   )râ  r¤  r   Útest_signature_on_decorated@
  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)rp  r¨  )Úmclsr  ÚbasesÚdctr   )rq  r   r   r¨  ˜
  s    z?TestSignatureObject.test_signature_on_class.<locals>.CM.__new__)r.   r<   r=   r¨  rv  r   r   )rq  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)rp  r¨  )r  r  r  r  r   )rq  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£  rv  r   r   )rq  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)rp  r¨  )r  r  r  r  r   )rq  r   r   r¨  ¯
  s    z?TestSignatureObject.test_signature_on_class.<locals>.CM.__new__)r.   r<   r=   r¨  rv  r   r   )rq  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)rp  r›   )r‹   r  r  r  r   )rq  r   r   r›   Ç
  s    z@TestSignatureObject.test_signature_on_class.<locals>.CM.__init__)r.   r<   r=   r›   rv  r   r   )rq  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   r@  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   rH     s   rH  )))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É  r@  r  r1   r  r˜  )r7   rH  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      rh   z?TestSignatureObject.test_signature_on_lambdas.<locals>.<lambda>)))r   r(  .rÆ  .)r(  )r’   rÉ  )r7   r   r   r   Útest_signature_on_lambdas  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   %  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   1  rh   )rv   c            S   s   d S )Nr   )r   rv   r   r   r   r   7  rh   c            S   s   d S )Nr   )r   rv   r   r   r   r   =  rh   )r³  c            S   s   d S )Nr   )r   r   r   r   r   r   C  rh   c             S   s   d S )Nr   )r   rv   r   r   r   r   I  rh   c             S   s   d S )Nr   )rv   r   r   r   r   rK   N  rh   z9TestSignatureObject.test_signature_equality.<locals>.spamc             S   s   d S )Nr   )r   rv   r   r   r   r   r   T  rh   c             S   s   d S )Nr   )r   rv   r   r   r   r   r   U  rh   r   )r   c             S   s   d S )Nr   )r   rv   r   r   r   r   r   [  rh   c             S   s   d S )Nr   )r   rv   r   r   r   r   r   \  rh   c            S   s   d S )Nr   )Úposr   rv   r   r   r   r   r   b  rh   c            S   s   d S )Nr   )r!  r   rv   r   r   r   r   r   c  rh   c            S   s   d S )Nr   )r!  r   rv   r   r   r   r   r   i  rh   c            S   s   d S )Nr   )r!  r   rv   r   r   r   r   r   j  rh   )rž   c            _   s   d S )Nr   )r!  r   rv   r   r   rž   r   r   r   r   p  rh   c            _   s   d S )Nr   )r!  r   rv   r   r   rž   r   r   r   r   q  rh   )
r‰   rÉ  r6   r1   rÉ  r-   rN   r’   Úhashrd  )r7   r   r   rK   r   r   r   Útest_signature_equality$  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"  rd  r´  r@  r  )r7   r¶  r·  r   Úfoo_sigZ
manual_sigr   r   r   r   Útest_signature_hashablew  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   )r=  )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ï   rA  Ú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__p1r,  c            S   s   d S )Nr   )r7   r-  r,  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   r.  )))r7   ..rÆ  )r-  r   r   rÆ  )r,  r¤   r   rÈ  .)r’   rÉ  r   )r7   r  r.  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+  r/  r0  r1  r2  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_ONLYrA  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(  )r>  r=  z)value '123' is not a valid Parameter.kindZ123znot a valid parameter namerÑ  )r=  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  r>  r¨   r¦  r¥  r=  r@  r˜  rA  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   )r=  ry   )r=  r>  )r1   r®  r¯  r’   r"  rd  r´  r)  )r7   r·  r   r   r   r   Ú!test_signature_parameter_hashable#  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   )r>  r=  )r1   r®  r4  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   )r>  r=  r   )r¦  r   )r  zname is a required attribute)r  r>  z<value <class 'inspect._empty'> is not a valid Parameter.kind)r=  )r1   r®  r4  r|  r´  r’   r¦  r¥  r  rd  r@  r˜  r¨   r>  r$  r=  )r7   r$   Zp2r   r   r   Ú test_signature_parameter_replace<  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)r=  )r@  r  r1   r®  r¯  )r7   r   r   r   Ú(test_signature_parameter_positional_onlyd  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)r=  Z	implicit0)	r@  r˜  r1   r®  r¯  r$  r’   r=  r  )r7   r§  r   r   r   Ú!test_signature_parameter_implicith  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   )r=  r   r?  )r1   r®  r4  r  r  r   r=  )r7   r$   r   r   r   Ú%test_signature_parameter_immutabilityu  s
    z9TestParameterObject.test_signature_parameter_immutabilityN)r.   r<   r=   r5  r7  r8  r9  r:  r;  r   r<  r=  r   r   r   r   r3  ð  s   *	(r3  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’   r?  r@  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’   r?  )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’   r?  r@  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’   r?  )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’   r?  r@  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’   r?  )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’   r?  )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   rG  rK   )rG  rK   )r@  r  r?  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­  %  s    z=TestSignatureBind.test_signature_bind_arguments.<locals>.testr(  rû  r4  r;  rò   é<   )rv   r   r   rž   )r   r(  )r   )rû  )rv   r4  rž   )r   r   rž   )r(  rû  )	r1   rÉ  rÿ  r’   r©  Ú	argumentsÚitemsrž   r   )r7   r­  r­  r  r   r   r   Útest_signature_bind_arguments$  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­  5  s    zCTestSignatureBind.test_signature_bind_positional_only.<locals>.test)r(  rM  rN  )r=  )r"   r   r   r—  r†   é   )r   r   zbut was passed as a keywordr(  )r   r   rN  zparameter is positional only)rN  )r(  rM  )r¤   ry   )r1   r®  rÉ  rÀ  rÁ  r©  r"   rK  r´  r¯  rª  r±  r’   r?  r@  r  )r7   r·  r­  r­  r
  r  Znew_sigr   r   r   Ú#test_signature_bind_positional_only2  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­  S  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_argQ  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­  \  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­  e  s    )r   r   r   rž   )r1   rÉ  r@  r  rÿ  r’   r?  rJ  )r7   r­  r­  r  r   r   r   Útest_signature_bind_vararg_name[  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>q  s    zWTestSignatureBind.test_signature_bind_implicit_arg.<locals>.make_set.<locals>.<setcomp>r†   )r   r   r   r   r   Úmake_setp  s    zDTestSignatureBind.test_signature_bind_implicit_arg.<locals>.make_setr   r†   r   r—  r˜   r    )r  Ú	co_constsrY   ÚFunctionTypeÚiterr   r’   r?  )r7   rT  Zsetcomp_codeZsetcomp_funcÚiteratorr   r   r   Ú test_signature_bind_implicit_argm  s
    z2TestSignatureBind.test_signature_bind_implicit_argN)r.   r<   r=   rÒ  r?  r@  rA  rB  rC  rD  rE  rF  rH  rL  rP  rQ  rR  r   rY  r   r   r   r   r>    s   7
r>  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ÿ  r@  r  r"  )r7   r   r  r   r   r   Ú)test_signature_bound_arguments_unhashablez  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   rJ  )	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û  r4  )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û  r4  )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(  r4  )r½   )r   r(  )rv   rû  )r   )r4  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   rJ  rK  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\  r]  r^  r_  r   r   r   r   rZ  y  s
   
rZ  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Í   )rd  )r7   r   r   r   Ú&test_signature_strip_non_python_syntaxí  sF    zBTestSignaturePrivateHelpers.test_signature_strip_non_python_syntaxN)r.   r<   r=   rb  rd  re  r   r   r   r   r`  Û  s   
r`  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|	ƒs‚qpt|	tƒrž||krž| |¡ ||kr¨qp| j	|d |  
t |	¡¡ W d Q R X qpW x0|D ](}| j	|d |  |	j¡ W d Q R X qÚW d S )Nr   ÚslicerÜ  rÞ  r‡  rW  ÚvarsÚroundÚ
breakpointrÝ  Úmaxr
  Ú__build_class__rÅ   Ú
__import__)rÃ  )r0   rh  rí   rÇ  rK  Ú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_signatures  s2    


z6TestSignatureDefinitions.test_builtins_have_signaturesN)r.   r<   r=   r   r™   r  r   rp  r   r   r   r   rf    s   rf  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›   T  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  rr  rq  )r7   r   r   r   r  X  s
    

zNTimesUnwrappable.__wrapped__N)r.   r<   r=   r›   r  r  r   r   r   r   rq  S  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S )Ú
TestUnwrapc             C   s.   dd„ }t jdd|ƒ}|  t |¡|¡ d S )Nc             S   s   | | S )Nr   )r   rv   r   r   r   r  c  s    z(TestUnwrap.test_unwrap_one.<locals>.funcrû  )rÙ  )r¤  Ú	lru_cacher¨   r1   Úunwrap)r7   r  rá  r   r   r   Útest_unwrap_oneb  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  i  s    z,TestUnwrap.test_unwrap_several.<locals>.funcr(  c               S   s   d S )Nr   r   r   r   r   rá  m  s    z/TestUnwrap.test_unwrap_several.<locals>.wrapper)r   r¤  r¥  r|  r  r¨   r1   ru  )r7   r  rá  Ú__r   r   r   Útest_unwrap_severalh  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   Úfunc1t  s    z#TestUnwrap.test_stop.<locals>.func1c               S   s   d S )Nr   r   r   r   r   Úfunc2v  s    z#TestUnwrap.test_stop.<locals>.func2c               S   s   d S )Nr   r   r   r   r   rá  y  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   ru  r¨   )r7   ry  rz  rá  Z	unwrappedr   r   r   Ú	test_stops  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   ry  ‚  rh   z$TestUnwrap.test_cycle.<locals>.func1zwrapper loopc               S   s   d S )Nr   r   r   r   r   rz  ‡  rh   z$TestUnwrap.test_cycle.<locals>.func2)r  r@  r˜  r1   ru  )r7   ry  rz  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   ru  )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)rq  rV   Úgetrecursionlimitr@  r˜  r1   ru  )r7   r9   r   r   r   Útest_recursion_limit—  s    zTestUnwrap.test_recursion_limitN)	r.   r<   r=   rv  rx  r}  r~  r€  r‚  r   r   r   r   rs  `  s   rs  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‡  rV  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   rm  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_bugri  )r   Ú
src_beforer„  r…  r•  rÅ   ro  Ú	src_after)r7   r  rm  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Õ   r0  rE  r•   r  rP   r-  rG  rK  rM  r  rh  r¤  r>  r3  rZ  r`  rf  r	  rs  rƒ  r“  rš  r   r   r   r   r   Ú	test_mainê  s    r›  Ú__main__)arí   rÀ  ra   r¤  r„  r1   r¼  rü   rk  Zos.pathr   r¹  r»  rr  rV   rY   r™  rZ  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§   rg  r   rÙ   rœ   r'   r*   rÎ   rÈ  rš   r+   rH   rJ   rL   rœ  rM   rN   rP   r•   rÄ   rÕ   r   r#  r0  rE  rh  rt   rw  r{  r~  r  r  r	  r-  rG  rK  rM  r  rš  r°  r¢  r®  r£  r¤  r3  r>  rZ  r`  rf  rq  rs  rƒ  r“  r›  r.   r   r   r   r   Ú<module>   sÆ   
 7 2
*:   Az I  c@        d  {b?9<0
