B
    18\                 @   s   d dl Z d dlZd dlZd dlmZ d dlmZmZ d dlm	Z	 d dl
mZmZmZmZmZmZmZmZmZmZmZ dZeje Zde Zdd	d
ZejaejZG dd de Z!de Z"e!fddZ#G dd de Z$G dd dej%Z&edkre'  dS )    N)support)	SomeClassis_instance)uncache)NonCallableMockCallableMixinsentinel	MagicMockMockNonCallableMagicMockpatch_patchDEFAULTcall_get_targetbuiltinsz%s.PTModuleTc                sB   G  fdddt }|s< fdd} fdd}||_||_| S )Nc                   s   e Zd Z fddZdS )z_get_proxy.<locals>.Proxyc                s
   t  |S )N)getattr)selfname)obj d/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/unittest/test/testmock/testpatch.py__getattr__   s    z%_get_proxy.<locals>.Proxy.__getattr__N)__name__
__module____qualname__r   r   )r   r   r   Proxy   s   r   c                s   t  || d S )N)setattr)r   r   value)r   r   r   __setattr__   s    z_get_proxy.<locals>.__setattr__c                s   t  | d S )N)delattr)r   r   )r   r   r   __delattr__!   s    z_get_proxy.<locals>.__delattr__)objectr   r!   )r   get_onlyr   r   r!   r   )r   r   
_get_proxy   s    r$   c               @   s8   e Zd Zdd Zdd Zdd ZdZG dd	 d	eZd
S )Fooc             C   s   d S )Nr   )r   ar   r   r   __init__.   s    zFoo.__init__c             C   s   d S )Nr   )r   r&   r   r   r   f0   s    zFoo.fc             C   s   d S )Nr   )r   r   r   r   g2   s    zFoo.gbarc               @   s   e Zd Zdd ZdS )zFoo.Barc             C   s   d S )Nr   )r   r   r   r   r&   7   s    z	Foo.Bar.aN)r   r   r   r&   r   r   r   r   Bar6   s   r+   N)	r   r   r   r'   r(   r)   foor"   r+   r   r   r   r   r%   -   s
   r%   z%s.Fooc             C   s   d S )Nr   )r&   br   r   r   function=   s    r.   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )	Containerc             C   s
   i | _ d S )N)values)r   r   r   r   r'   B   s    zContainer.__init__c             C   s
   | j | S )N)r0   )r   r   r   r   r   __getitem__E   s    zContainer.__getitem__c             C   s   || j |< d S )N)r0   )r   r   r   r   r   r   __setitem__H   s    zContainer.__setitem__c             C   s   | j |= d S )N)r0   )r   r   r   r   r   __delitem__K   s    zContainer.__delitem__c             C   s
   t | jS )N)iterr0   )r   r   r   r   __iter__N   s    zContainer.__iter__N)r   r   r   r'   r1   r2   r3   r5   r   r   r   r   r/   A   s
   r/   c               @   s2  e Zd Zdd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d0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Z d>d? Z!d@dA Z"dBdC Z#dDdE Z$dFdG Z%dHdI Z&dJdK Z'dLdM Z(dNdO Z)dPdQ Z*dRdS Z+dTdU Z,dVdW Z-dXdY Z.dZd[ Z/d\d] Z0d^d_ Z1d`da Z2dbdc Z3ddde Z4dfdg Z5dhdi Z6djdk Z7dldm Z8dndo Z9dpdq Z:drds Z;dtdu Z<dvdw Z=dxdy Z>dzd{ Z?d|d} Z@d~d ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSeTdddd ZUeTdddd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd ZbddĄ ZcddƄ ZdddȄ ZedS )	PatchTestTc             C   s<   t }|st}| t| | t|| | t|t d S )N)r   r   assertRaises	TypeError
assertTruer   assertFalser   )r   r   magic	MockClassr   r   r   assertNotCallableU   s    zPatchTest.assertNotCallablec                sJ   G dd dt  t  dtj fdd}|   jtjd d S )Nc               @   s   e Zd ZejZdS )z4PatchTest.test_single_patchobject.<locals>.SomethingN)r   r   r   r   Original	attributer   r   r   r   	Something`   s   r@   r?   c                  s     jtjd d S )N	unpatched)assertEqualr?   r   Patchedr   )r@   r   r   r   testc   s    z/PatchTest.test_single_patchobject.<locals>.testzpatch not restored)r"   r   r   rC   rB   r?   r>   )r   rD   r   )r@   r   r   test_single_patchobject_   s
    z!PatchTest.test_single_patchobjectc                sH   G dd dt  t  dd  fdd}|   jtjd d S )Nc               @   s   e Zd ZejZdS )z7PatchTest.test_patchobject_with_none.<locals>.SomethingN)r   r   r   r   r>   r?   r   r   r   r   r@   m   s   r@   r?   c                  s     jd d S )NrA   )assertIsNoner?   r   )r@   r   r   r   rD   p   s    z2PatchTest.test_patchobject_with_none.<locals>.testzpatch not restored)r"   r   rB   r?   r   r>   )r   rD   r   )r@   r   r   test_patchobject_with_nonel   s
    z$PatchTest.test_patchobject_with_nonec                sl   G dd dt  t  dtjt  dtj fdd}|   jtjd  jtj	d d S )Nc               @   s   e Zd ZejZejZdS )z6PatchTest.test_multiple_patchobject.<locals>.SomethingN)r   r   r   r   r>   r?   	Original2next_attributer   r   r   r   r@   z   s   r@   r?   rI   c                  s(     jtjd   jtjd d S )NrA   )rB   r?   r   rC   rI   Patched2r   )r@   r   r   r   rD   ~   s    z1PatchTest.test_multiple_patchobject.<locals>.testzpatch not restored)
r"   r   r   rC   rJ   rB   r?   r>   rI   rH   )r   rD   r   )r@   r   r   test_multiple_patchobjecty   s     z#PatchTest.test_multiple_patchobjectc             C   sF   t }tdt tjdd }ztja |  | t tj W d |a X d S )Nz%s.somethingc               S   s   d S )Nr   r   r   r   r   rD      s    z8PatchTest.test_object_lookup_is_quite_lazy.<locals>.test)	somethingr   r   r   
Something2Zreplacement_valuerB   )r   originalrD   r   r   r    test_object_lookup_is_quite_lazy   s    z*PatchTest.test_object_lookup_is_quite_lazyc                s   t dt tj fdd}|   tjtjd t dt tjt dt tj fdd} tjtjd  tj	tjd |   tjtjd  tj	tjd t
 }tj|_t dt | fdd}|  |   t|d d S )	Nz%s.somethingc                  s     tjtjd d S )NrA   )rB   PTModulerL   r   rM   r   )r   r   r   rD      s    z"PatchTest.test_patch.<locals>.testzpatch not restoredz%s.something_elsec                  s(     tjtjd   tjtjd d S )NrA   )rB   rP   rL   r   rM   something_elseSomethingElser   )r   r   r   rD      s    z%s.openc                  s     tddtjd d S )Nfilenamerzopen not patched)rB   openr   Handler   )r   r   r   rD      s    )r   r   r   rM   rB   rP   rL   r@   rR   rQ   r
   rV   return_valuebuiltin_stringassertNotEqualrU   )r   rD   mockr   )r   r   
test_patch   s*    zPatchTest.test_patchc                s6   t dt tj fdd}|   tjjd d S )Nz%s.SomeClass.class_attributec                  s     tjjtjd d S )NrA   )rB   rP   r   class_attributer   ClassAttributer   )r   r   r   rD      s    
z2PatchTest.test_patch_class_attribute.<locals>.testzpatch not restored)r   r   r   r]   rF   rP   r   r\   )r   rD   r   )r   r   test_patch_class_attribute   s
    
z$PatchTest.test_patch_class_attributec                s   G dd dt  t  d fdd}|  t  dt  d fdd}d  |tjtj\|tjtj d S )Nc               @   s   e Zd ZejZejZdS )z:PatchTest.test_patchobject_with_default_mock.<locals>.TestN)r   r   r   r   r>   rL   rH   
something2r   r   r   r   Test   s   r`   rL   c                s"    |  jd | td d S )Nz"Mock not passed into test functionz.patch with two arguments did not create a mock)rB   rL   assertIsInstancer	   )rZ   )r`   r   r   r   rD      s    
z:PatchTest.test_patchobject_with_default_mock.<locals>.testr_   c                s    | tjd  |tjd  | jd  | jd |td |td |d |d ||fS )Nz0Patched function didn't receive initial argumentz/Patched function didn't receive second argumentz"Mock not passed into test functionz)Second Mock not passed into test functionz.patch with two arguments did not create a mockzunexpected value for mock1)	rB   r   this1this2r_   rL   ra   r	   rY   )rb   rc   mock1mock2)r`   
outerMock1
outerMock2r   r   r   rD      s    



)r"   r   r   rb   rc   )r   rD   r   )r`   rf   rg   r   r   "test_patchobject_with_default_mock   s    
 z,PatchTest.test_patchobject_with_default_mockc                s&   t dt td fdd}|  d S )Nz%s.SomeClass)specc                s2     t|   ttjt  tdd  d S )Nc               S   s   t jS )N)r   
not_wibbler   r   r   r   <lambda>      z>PatchTest.test_patch_with_spec.<locals>.test.<locals>.<lambda>)rB   r   r9   r   wibbler	   r7   AttributeError)MockSomeClass)r   r   r   rD      s    z,PatchTest.test_patch_with_spec.<locals>.test)r   r   r   )r   rD   r   )r   r   test_patch_with_spec   s    zPatchTest.test_patch_with_specc                s&   t jtdtd fdd}|  d S )Nr\   )ri   c                s6     tj|   ttjjt  tdd  d S )Nc               S   s   t jjS )N)r   r\   rj   r   r   r   r   rk     rl   zDPatchTest.test_patchobject_with_spec.<locals>.test.<locals>.<lambda>)	rB   r   r\   r9   r   rm   r	   r7   rn   )MockAttribute)r   r   r   rD     s
    z2PatchTest.test_patchobject_with_spec.<locals>.test)r   r"   r   )r   rD   r   )r   r   test_patchobject_with_spec  s    z$PatchTest.test_patchobject_with_specc                s(   t dt dgd fdd}|  d S )Nz%s.SomeClassrm   )ri   c                s2     t|   ttjt  tdd  d S )Nc               S   s   t jS )N)r   rj   r   r   r   r   rk     rl   zFPatchTest.test_patch_with_spec_as_list.<locals>.test.<locals>.<lambda>)rB   r   r9   r   rm   r	   r7   rn   )ro   )r   r   r   rD     s    z4PatchTest.test_patch_with_spec_as_list.<locals>.test)r   r   )r   rD   r   )r   r   test_patch_with_spec_as_list  s    z&PatchTest.test_patch_with_spec_as_listc                s(   t jtddgd fdd}|  d S )Nr\   rm   )ri   c                s6     tj|   ttjjt  tdd  d S )Nc               S   s   t jjS )N)r   r\   rj   r   r   r   r   rk   $  rl   zLPatchTest.test_patchobject_with_spec_as_list.<locals>.test.<locals>.<lambda>)	rB   r   r\   r9   r   rm   r	   r7   rn   )rq   )r   r   r   rD     s
    z:PatchTest.test_patchobject_with_spec_as_list.<locals>.test)r   r"   r   )r   rD   r   )r   r   "test_patchobject_with_spec_as_list  s    z,PatchTest.test_patchobject_with_spec_as_listc                s4   t dt t dt dgd fdd}|  d S )Nz%s.openz%s.SomeClassrm   )ri   c                s2     t|   ttjt  tdd  d S )Nc               S   s   t jS )N)r   rj   r   r   r   r   rk   0  rl   zMPatchTest.test_nested_patch_with_spec_as_list.<locals>.test.<locals>.<lambda>)rB   r   r9   r   rm   r	   r7   rn   )ro   ZMockOpen)r   r   r   rD   +  s    z;PatchTest.test_nested_patch_with_spec_as_list.<locals>.test)r   rX   r   )r   rD   r   )r   r   #test_nested_patch_with_spec_as_list)  s    
 z-PatchTest.test_nested_patch_with_spec_as_listc                s&   t dt dd fdd}|  d S )Nz%s.SomeClassT)ri   c                s*    t   j t fdd d S )Nc                  s    j S )N)rj   r   )ro   r   r   rk   ;  rl   zIPatchTest.test_patch_with_spec_as_boolean.<locals>.test.<locals>.<lambda>)rB   r   rm   r7   rn   )ro   )r   )ro   r   rD   5  s    z7PatchTest.test_patch_with_spec_as_boolean.<locals>.test)r   r   )r   rD   r   )r   r   test_patch_with_spec_as_boolean4  s    z)PatchTest.test_patch_with_spec_as_booleanc                s&   t jtddd fdd}|  d S )Nr   T)ri   c                s*    t   j t fdd d S )Nc                  s    j S )N)rj   r   )ro   r   r   rk   G  rl   zPPatchTest.test_patch_object_with_spec_as_boolean.<locals>.test.<locals>.<lambda>)rB   r   rm   r7   rn   )ro   )r   )ro   r   rD   A  s    z>PatchTest.test_patch_object_with_spec_as_boolean.<locals>.test)r   r"   rP   )r   rD   r   )r   r   &test_patch_object_with_spec_as_boolean@  s    z0PatchTest.test_patch_object_with_spec_as_booleanc                s&   t dt dd fdd}|  d S )Nz%s.SomeClassT)ri   c                s>    t| t |      j t fdd d S )Nc                  s    j S )N)rj   r   )instancer   r   rk   U  rl   zVPatchTest.test_patch_class_acts_with_spec_is_inherited.<locals>.test.<locals>.<lambda>)r9   r   r	   r=   rm   r7   rn   )ro   )r   )rx   r   rD   M  s
    
zDPatchTest.test_patch_class_acts_with_spec_is_inherited.<locals>.test)r   r   )r   rD   r   )r   r   ,test_patch_class_acts_with_spec_is_inheritedL  s    
z6PatchTest.test_patch_class_acts_with_spec_is_inheritedc                s:   t dt tjdd fdd}|   tdd  d S )Nz
%s.froobleT)createc                  s     ttj d S )N)rB   froobler   Froobler   )r   r   r   rD   [  s    zLPatchTest.test_patch_with_create_mocks_non_existent_attributes.<locals>.testc               S   s   t S )N)r{   r   r   r   r   rk   `  rl   zPPatchTest.test_patch_with_create_mocks_non_existent_attributes.<locals>.<lambda>)r   rX   r   r|   r7   	NameError)r   rD   r   )r   r   4test_patch_with_create_mocks_non_existent_attributesZ  s     z>PatchTest.test_patch_with_create_mocks_non_existent_attributesc                s:   t jtdtjdd fdd}|   ttd d S )Nr{   T)rz   c                  s     tjtj d S )N)rB   r   r{   r   r|   r   )r   r   r   rD   d  s    zRPatchTest.test_patchobject_with_create_mocks_non_existent_attributes.<locals>.test)r   r"   r   r   r|   r:   hasattr)r   rD   r   )r   r   :test_patchobject_with_create_mocks_non_existent_attributesc  s     zDPatchTest.test_patchobject_with_create_mocks_non_existent_attributesc                sZ   y&t dt tj fdd}|  W n tk
r:   Y nX  d  tdd  d S )Nz
%s.frooblec                  s     ttj d S )N)rB   r{   r   r|   r   )r   r   r   rD   n  s    z9PatchTest.test_patch_wont_create_by_default.<locals>.testz,Patching non existent attributes should failc               S   s   t S )N)r{   r   r   r   r   rk   x  rl   z=PatchTest.test_patch_wont_create_by_default.<locals>.<lambda>)r   rX   r   r|   rn   failr7   r}   )r   rD   r   )r   r   !test_patch_wont_create_by_defaultl  s    

z+PatchTest.test_patch_wont_create_by_defaultc                sZ   y&t tdtj fdd}|  W n tk
r:   Y nX  d  ttd d S )Nordc                  s     d d S )Nz,Patching non existent attributes should fail)r   r   )r   r   r   rD   }  s    z?PatchTest.test_patchobject_wont_create_by_default.<locals>.testz,Patching non existent attributes should fail)	r   r"   r   r   r|   rn   r   r:   r   )r   rD   r   )r   r   'test_patchobject_wont_create_by_default{  s    

z1PatchTest.test_patchobject_wont_create_by_defaultc             C   sH   t td dd }t td dd }| | d | | d d S )	Nz.ordc             S   s   d| _ tdS )Ne   c)rW   r   )Zmock_ordr   r   r   test_ord  s    z>PatchTest.test_patch_builtins_without_create.<locals>.test_ordz.openc             S   s*   | j }d|j_ td}| }|  |S )Nabcdzdoesnotexists.txt)rW   readrU   close)	mock_openmZfobjdatar   r   r   	test_open  s    z?PatchTest.test_patch_builtins_without_create.<locals>.test_openr   r   )r   r   rB   )r   r   r   r   r   r   "test_patch_builtins_without_create  s    
z,PatchTest.test_patch_builtins_without_createc                sP   G dd dt  t  dtdd  fdd}|    tj d S )Nc               @   s   e Zd Zedd ZdS )z5PatchTest.test_patch_with_static_methods.<locals>.Fooc               S   s   t jS )N)r   Staticr   r   r   r   woot  s    z:PatchTest.test_patch_with_static_methods.<locals>.Foo.wootN)r   r   r   staticmethodr   r   r   r   r   r%     s   r%   r   c               S   s   t jS )N)r   rC   r   r   r   r   rk     rl   z:PatchTest.test_patch_with_static_methods.<locals>.<lambda>c                  s      tj d S )N)rB   r   r   rC   r   )r%   r   r   r   	anonymous  s    z;PatchTest.test_patch_with_static_methods.<locals>.anonymous)r"   r   r   rB   r   r   r   )r   r   r   )r%   r   r   test_patch_with_static_methods  s    $z(PatchTest.test_patch_with_static_methodsc                s8   t j}tt dd fdd}|   t j| d S )Nr%   c                  s     tjd d S )Nr%   )rB   r   r%   r   )r   r   r   r     s    z-PatchTest.test_patch_local.<locals>.anonymous)r   r%   r   r"   rB   )r   r,   r   r   )r   r   test_patch_local  s    zPatchTest.test_patch_localc                sT   G dd dt }|  tj _t  dd fdd}|   jtj d S )Nc               @   s   e Zd ZdZdS )z'PatchTest.test_patch_slots.<locals>.Foo)r%   N)r   r   r   	__slots__r   r   r   r   r%     s   r%   c                  s     jd d S )Nr%   )rB   r%   r   )r,   r   r   r   r     s    z-PatchTest.test_patch_slots.<locals>.anonymous)r"   r   r%   r   rB   )r   r%   r   r   )r,   r   r   test_patch_slots  s    zPatchTest.test_patch_slotsc                sf   G dd dt  G  fdddt }t  dtj|}| }|  |   jtjd d S )Nc               @   s   e Zd ZejZdS )z=PatchTest.test_patchobject_class_decorator.<locals>.SomethingN)r   r   r   r   r>   r?   r   r   r   r   r@     s   r@   c                   s(   e Zd Z fddZ fddZdS )z7PatchTest.test_patchobject_class_decorator.<locals>.Fooc                s     jtjd d S )NrA   )rB   r?   r   rC   )
other_self)r@   r   r   r   test_method  s    zCPatchTest.test_patchobject_class_decorator.<locals>.Foo.test_methodc                s     jtjd d S )Nznon-test method patched)rB   r?   r   r>   )r   )r@   r   r   r   not_test_method  s    zGPatchTest.test_patchobject_class_decorator.<locals>.Foo.not_test_methodN)r   r   r   r   r   r   )r@   r   r   r   r%     s   r%   r?   zpatch not restored)	r"   r   r   rC   r   r   rB   r?   r>   )r   r%   r(   r   )r@   r   r    test_patchobject_class_decorator  s    z*PatchTest.test_patchobject_class_decoratorc                sr   G dd dt }G  fdddt }tdt |}| }|  |   |jtjd  t	j
tjd d S )Nc               @   s   e Zd ZejZdS )z7PatchTest.test_patch_class_decorator.<locals>.SomethingN)r   r   r   r   r>   r?   r   r   r   r   r@     s   r@   c                   s$   e Zd Z fddZ fddZdS )z1PatchTest.test_patch_class_decorator.<locals>.Fooc                s     tj|d d S )NrA   )rB   rP   rL   )r   mock_something)r   r   r   r     s    
z=PatchTest.test_patch_class_decorator.<locals>.Foo.test_methodc                s     tjtjd d S )Nznon-test method patched)rB   rP   rL   r   r@   )r   )r   r   r   r     s    zAPatchTest.test_patch_class_decorator.<locals>.Foo.not_test_methodN)r   r   r   r   r   r   )r   r   r   r%     s   r%   z%s.somethingzpatch not restored)r"   r   r   r   r   rB   r?   r   r>   rP   rL   r@   )r   r@   r%   r(   r   )r   r   test_patch_class_decorator  s    z$PatchTest.test_patch_class_decoratorc                sZ   G dd dt  t  dtjt  dtj fdd}|   jtjd d S )Nc               @   s   e Zd ZejZejZdS )z3PatchTest.test_patchobject_twice.<locals>.SomethingN)r   r   r   r   r>   r?   rH   rI   r   r   r   r   r@     s   r@   r?   c                  s     jtjd d S )NrA   )rB   r?   r   rC   r   )r@   r   r   r   rD     s    z.PatchTest.test_patchobject_twice.<locals>.testzpatch not restored)r"   r   r   rC   rB   r?   r>   )r   rD   r   )r@   r   r   test_patchobject_twice  s     z PatchTest.test_patchobject_twicec                s   t  dd   }t  fdd}|   | t ddi fdd}|   | t dg fd	d}|   | d S )
NrL   )initialotherc                  s   d d<  d= d d< d S )N   r&   r   zsomething elser   r   r   )r,   r   r   rD     s    z'PatchTest.test_patch_dict.<locals>.testr&   r-   c                  s$    t d   d d d S )Nr   r&   r-   )rB   lenr   )r,   r   r   r   rD     s    )r&   r-   c                  s$    t d   d d d S )Nr   r&   r-   )rB   r   r   )r,   r   r   r   rD     s    )r"   copyr   dictrB   )r   rN   rD   r   )r,   r   r   test_patch_dict  s    zPatchTest.test_patch_dictc                s   t   t  d< d d<  j }t  fdd}|   j| t ddi fdd}|   j| d S )	Nr   rL   r   c                  s   d d<  d= d d< d S )Nr   r&   r   zsomething elser   r   r   )r,   r   r   rD   )  s    z=PatchTest.test_patch_dict_with_container_object.<locals>.testr&   r-   c                  s&    t jd   d d d S )Nr   r&   r-   )rB   r   r0   r   )r,   r   r   r   rD   3  s    )r/   r"   r0   r   r   r   rB   )r   rN   rD   r   )r,   r   r   %test_patch_dict_with_container_object"  s    

z/PatchTest.test_patch_dict_with_container_objectc                s   t  dd   }tj dd fdd}|   | tj ddidd fd	d}|   | tj d
gdd fdd}|   | d S )NrL   )r   r   T)clearc                  s      i  d d< d d< d S )Nr   r&   zsomething elser   )rB   r   )r,   r   r   r   rD   A  s    z2PatchTest.test_patch_dict_with_clear.<locals>.testr&   r-   c                  s     ddi d S )Nr&   r-   )rB   r   )r,   r   r   r   rD   K  s    )r&   r-   c                  s     ddi d S )Nr&   r-   )rB   r   )r,   r   r   r   rD   S  s    )r"   r   r   r   rB   )r   rN   rD   r   )r,   r   r   test_patch_dict_with_clear=  s    " z$PatchTest.test_patch_dict_with_clearc                s   t   t  d< d d<  j }tj dd fdd}|   j| tj dd	idd fd
d}|   j| d S )Nr   rL   r   T)r   c                  s"     ji  d d< d d< d S )Nr   r&   zsomething elser   )rB   r0   r   )r,   r   r   r   rD   c  s    zGPatchTest.test_patch_dict_with_container_object_and_clear.<locals>.testr&   r-   c                  s     jddi d S )Nr&   r-   )rB   r0   r   )r,   r   r   r   rD   m  s    )r/   r"   r0   r   r   r   rB   )r   rN   rD   r   )r,   r   r   /test_patch_dict_with_container_object_and_clear\  s    

"z9PatchTest.test_patch_dict_with_container_object_and_clearc             C   sZ   i }t dt t t dt t ddt tt t |dd }| |jd d S )Nz%s.SomeClassT)autospecc               S   s   d S )Nr   r   r   r   r   	some_namey  s    z0PatchTest.test_name_preserved.<locals>.some_namer   )r   r   r"   r   r   rB   )r   r,   r   r   r   r   test_name_preservedv  s    zPatchTest.test_name_preservedc             C   sV   i }t |ddidd }y
|  W n tk
r:   Y nX | d | |i  d S )Nr&   r-   c               S   s   t dd S )NKonrad)r}   r   r   r   r   rD     s    z1PatchTest.test_patch_with_exception.<locals>.testzNameError not raised by test)r   r   r}   r   rB   )r   r,   rD   r   r   r   test_patch_with_exception  s    

z#PatchTest.test_patch_with_exceptionc                s&   t dddi fdd}|  d S )Nz
os.environkonrad_delongz
some valuec                  s     dtj d S )Nr   )assertInosenvironr   )r   r   r   rD     s    z3PatchTest.test_patch_dict_with_string.<locals>.test)r   r   )r   rD   r   )r   r   test_patch_dict_with_string  s    z%PatchTest.test_patch_dict_with_stringc                sZ   t j }tdddi fdd}z&ddit _|   t jddi W d |t _X d S )Nz%unittest.test.testmock.support.targetr*   BARc                  s     tjddd d S )NBAZr   )r,   r*   )rB   r   targetr   )r   r   r   rD     s    z<PatchTest.test_patch_dict_decorator_resolution.<locals>.testr,   r   )r   r   r   r   r   rB   )r   rN   rD   r   )r   r   $test_patch_dict_decorator_resolution  s    

z.PatchTest.test_patch_dict_decorator_resolutionc                s   d S )Nc               @   s   e Zd ZdZdS )z0PatchTest.test_patch_descriptor.<locals>.NothingN)r   r   r   r,   r   r   r   r   Nothing  s   r   c                   s|   e Zd Zi Ze ddefddZe ddedd Z	e
eefddZe
eed	d
 ZdS )z2PatchTest.test_patch_descriptor.<locals>.Somethingr,      c                s    |   d S )N)assertIs)cls)r@   r   r   r   klass  s    z8PatchTest.test_patch_descriptor.<locals>.Something.klassc             S   s   | S )Nr   )argr   r   r   static  s    z9PatchTest.test_patch_descriptor.<locals>.Something.staticc                s    |   d S )N)r   )r   )r@   r   r   r   
klass_dict  s    z=PatchTest.test_patch_descriptor.<locals>.Something.klass_dictc             S   s   | S )Nr   )r   r   r   r   static_dict  s    z>PatchTest.test_patch_descriptor.<locals>.Something.static_dictN)r   r   r   r,   r   r"   classmethodr   r   r   r   r   r   r   )r   r@   r   r   r   r@     s   r@   Zf00)r"   rB   r   r   r   r   )r   rL   r   )r   r@   r   r   test_patch_descriptor  s              zPatchTest.test_patch_descriptorc             C   s   t dt tdddd }| t| t jtdtdddd }| t| t dt ddd	d }| t| t jtdddd
d }| t| d S )Nz%s.SomeClassT)ri   spec_setc             S   s
   d| _ d S )Nr,   )z)r<   r   r   r   rD     s    z+PatchTest.test_patch_spec_set.<locals>.testr   c             S   s
   d| _ d S )Nr,   )r   )r<   r   r   r   rD     s    )r   c             S   s
   d| _ d S )Nr,   )r   )r<   r   r   r   rD     s    c             S   s
   d| _ d S )Nr,   )r   )r<   r   r   r   rD     s    )r   r   r   r7   rn   r"   r   )r   rD   r   r   r   test_patch_spec_set  s    zPatchTest.test_patch_spec_setc             C   s(   t dt dddd }| t| d S )Nz%s.SomeClassT)r   c             S   s   |  }d|_ d S )Nr,   )r   )r<   rx   r   r   r   rD     s    z-PatchTest.test_spec_set_inherit.<locals>.test)r   r   r7   rn   )r   rD   r   r   r   test_spec_set_inherit  s    zPatchTest.test_spec_set_inheritc             C   s\   t }tdt }| t | | }z| || | t | W d |  X | t | d S )Nz%s.something)rL   r   r   r   startassertIsNotstop)r   rN   patcherrZ   r   r   r   test_patch_start_stop  s    
zPatchTest.test_patch_start_stopc             C   s   t tdd}| t|j d S )Nr*   r   )r   foo_namer7   RuntimeErrorr   )r   r   r   r   r   test_stop_without_start  s    z!PatchTest.test_stop_without_startc             C   s^   t }ttdd}| t | | }z| |d | t | W d |  X | t | d S )NrL   r,   )rL   r   r"   rP   r   r   rB   r   )r   rN   r   Zreplacedr   r   r   test_patchobject_start_stop  s    
z%PatchTest.test_patchobject_start_stopc             C   sf   ddi}|  }tj|dgdd}| || |  z| |ddi W d |  X | || d S )Nr,   r*   )spameggsT)r   r   r   )r   r   r   rB   r   r   )r   drN   r   r   r   r   test_patch_dict_start_stop  s    
z$PatchTest.test_patch_dict_start_stopc                s   | ddi    }G  fdddt}tj ddidd|}|  | | }|  |  | |  |  | | }|  |  | |  |  | d S )	Nr   r   c                   s(   e Zd Z fddZ fddZdS )z7PatchTest.test_patch_dict_class_decorator.<locals>.Testc                s     ddi d S )Nr,   r*   )rB   )r   )r   thisr   r   
test_first.  s    zBPatchTest.test_patch_dict_class_decorator.<locals>.Test.test_firstc                s     ddi d S )Nr,   r*   )rB   )r   )r   r   r   r   test_second0  s    zCPatchTest.test_patch_dict_class_decorator.<locals>.Test.test_secondN)r   r   r   r   r   r   )r   r   r   r   r`   -  s   r`   r,   r*   T)r   )r   r"   r   r   rB   r   r   )r   rN   r`   rD   r   )r   r   r   test_patch_dict_class_decorator(  s     z)PatchTest.test_patch_dict_class_decoratorc                s   G dd dt }G dd d}xj||| |fD ]X}t| t  dd fdd}|   jd |jd d j q.W d S )	Nc               @   s   e Zd ZdZdS )z0PatchTest.test_get_only_proxy.<locals>.Somethingr,   N)r   r   r   r,   r   r   r   r   r@   H  s   r@   c               @   s   e Zd ZdZdS )z4PatchTest.test_get_only_proxy.<locals>.SomethingElser,   N)r   r   r   r,   r   r   r   r   rR   J  s   rR   r,   r*   c                  s     jd d S )Nr*   )rB   r,   r   )proxyr   r   r   rD   P  s    z+PatchTest.test_get_only_proxy.<locals>.test)r"   r$   r   rB   r,   assertNotIn__dict__)r   r@   rR   thingrD   r   )r   r   r   test_get_only_proxyG  s    zPatchTest.test_get_only_proxyc                s   G dd dt }G dd d}xn||| |fD ]\}t|dd t  dd fd	d
}|   jd |jd d j q.W d S )Nc               @   s   e Zd ZdZdS )z6PatchTest.test_get_set_delete_proxy.<locals>.Somethingr,   N)r   r   r   r,   r   r   r   r   r@   Z  s   r@   c               @   s   e Zd ZdZdS )z:PatchTest.test_get_set_delete_proxy.<locals>.SomethingElser,   N)r   r   r   r,   r   r   r   r   rR   \  s   rR   F)r#   r,   r*   c                  s     jd d S )Nr*   )rB   r,   r   )r   r   r   r   rD   b  s    z1PatchTest.test_get_set_delete_proxy.<locals>.test)r"   r$   r   rB   r,   r   r   )r   r@   rR   r   rD   r   )r   r   r   test_get_set_delete_proxyY  s    z#PatchTest.test_get_set_delete_proxyc             C   sZ   t dt d}ttf|}| }|  | t | | |j	 d | 
|jt d S )N!   )side_effectzfoo.bar.return_valuer,   )KeyErrorr	   r   r   r   r   r7   rB   r,   r*   ra   )r   kwargsr   rZ   r   r   r   test_patch_keyword_argsk  s    
z!PatchTest.test_patch_keyword_argsc             C   s^   t dt d}tjtdf|}| }|  | t | | |j	
 d | |j	t d S )Nr   )r   zfoo.bar.return_valuer,   r(   )r   r	   r   r"   r%   r   r   r7   rB   r,   r*   ra   )r   r   r   rZ   r   r   r   test_patch_object_keyword_argsx  s    
z(PatchTest.test_patch_object_keyword_argsc             C   s`   ddi}|  }tj|dddd}|  z| |tdddd W d |  X | || d S )Nr,   r*   r         )r,   r*   baz)r   r   r   r   rB   r   )r   rN   r   r   r   r   r   test_patch_dict_keyword_args  s    
z&PatchTest.test_patch_dict_keyword_argsc                s   G dd dt }fdd fdd fdd}ttd	d
|}| }t| |  tjt }tj |dd	d
|}| }t| |  d S )Nc               @   s8   e Zd Zdd Zdd Zdd ZdZG dd	 d	eZd
S )z$PatchTest.test_autospec.<locals>.Booc             S   s   d S )Nr   )r   r&   r   r   r   r'     s    z-PatchTest.test_autospec.<locals>.Boo.__init__c             S   s   d S )Nr   )r   r&   r   r   r   r(     s    z&PatchTest.test_autospec.<locals>.Boo.fc             S   s   d S )Nr   )r   r   r   r   r)     s    z&PatchTest.test_autospec.<locals>.Boo.gr*   c               @   s   e Zd Zdd ZdS )z(PatchTest.test_autospec.<locals>.Boo.Barc             S   s   d S )Nr   )r   r   r   r   r&     s    z*PatchTest.test_autospec.<locals>.Boo.Bar.aN)r   r   r   r&   r   r   r   r   r+     s   r+   N)	r   r   r   r'   r(   r)   r,   r"   r+   r   r   r   r   Boo  s
   r   c                s"   | d |  d  t|  d S )N   )assert_called_withr7   r8   )rZ   )r   r   r   _test  s    
z&PatchTest.test_autospec.<locals>._testc                s  |  d | j d  t| j  |   | j   t| jd  tt| d | j  | jj   tt| jd | 	  | j	  | j	
  | j	j
   t| j	j
d | 	 
  | 	 j
   t| 	 j
d  tt| j	d  tt| 	 d d S )Nr   hr*   r-   )r(   r   r7   r8   r)   rn   r   r,   lowerr+   r&   )rZ   )r   r   r   _test2  s(    




z'PatchTest.test_autospec.<locals>._test2c                s,    |  |  | d  | t | S )Nr   )r   r%   )rZ   )r   r   r   r   r   r.     s
    z)PatchTest.test_autospec.<locals>.functionT)r   r%   )r"   r   r   r   r%   sysmodulesr   )r   r   r.   rD   rZ   moduler   )r   r   r   r   test_autospec  s    
zPatchTest.test_autospecc                s&   t dt dd fdd}|  d S )Nz%s.functionT)r   c                s   t    tt j  tt j t d  tt j t d t   t   t dd t dd  tt   tt	t d d S )Nr   r   r   r,   )
r.   assert_not_calledr7   AssertionErrorassert_calledassert_called_oncer   r8   rn   r   )rZ   )r   r   r   rD     s    

z.PatchTest.test_autospec_function.<locals>.test)r   r   )r   rD   r   )r   r   test_autospec_function  s    z PatchTest.test_autospec_functionc             C   s0   t dt ddddd }| }| |d d S )Nz%s.functionTr   )r   rW   c             S   s
   t ddS )Nr   r   )r.   )Zmock_functionr   r   r   rD     s    z.PatchTest.test_autospec_keywords.<locals>.test)r   r   rB   )r   rD   resultr   r   r   test_autospec_keywords  s    
z PatchTest.test_autospec_keywordsc             C   sN   t dt ddd}| t|j tjt }t j|dddd}| t|j d S )Nz%s.functionr   T)newr   r.   )r   r   r7   r8   r   r   r   r"   )r   r   r   r   r   r   test_autospec_with_new  s
    
z PatchTest.test_autospec_with_newc             C   sR   G dd dt }tt|d}| }z| || | |jt W d |  X d S )Nc               @   s   e Zd Zg ZdS )z0PatchTest.test_autospec_with_object.<locals>.BarN)r   r   r   extrar   r   r   r   r+     s   r+   )r   )r%   r   r   r   ra   r   listr   )r   r+   r   rZ   r   r   r   test_autospec_with_object  s    z#PatchTest.test_autospec_with_objectc             C   sH   t }ttdd}| }z | || | |d| W d |  X d S )NT)r   r   )r%   r   r   r   ra   r   )r   ZFooClassr   rZ   r   r   r   test_autospec_inherits  s    z PatchTest.test_autospec_inheritsc             C   st   t tdd}| }zP| dt| | dt|j | dt|d  | dt|d j W d |  X d S )NT)r   z name='Foo'z name='Foo.f'z name='Foo()'z name='Foo().f')r   r   r   r   reprr(   r   )r   r   rZ   r   r   r   test_autospec_name  s    zPatchTest.test_autospec_namec             C   sb   t tdt dd }y
|  W n   t }Y nX td d d}||| }| d| d S )Nr(   c               S   s   t d S )N)r   r   r   r   r   rD   )  s    z'PatchTest.test_tracebacks.<locals>.testr   zraise AssertionError)	r   r"   r%   r   exc_infounittestTextTestResult_exc_info_to_stringr   )r   rD   errr   	tracebackr   r   r   test_tracebacks(  s    
zPatchTest.test_tracebacksc             C   sX   t ttd}| }|  | }|  | || x||fD ]}| | qBW d S )N)new_callable)r   r   r   r   r   r   r=   )r   r   m1m2rZ   r   r   r   test_new_callable_patch6  s    z!PatchTest.test_new_callable_patchc             C   s\   t jtdtd}| }|  | }|  | || x||fD ]}| | qFW d S )Nr(   )r	  )r   r"   r%   r   r   r   r   r=   )r   r   r
  r  rZ   r   r   r   test_new_callable_patch_objectC  s    z(PatchTest.test_new_callable_patch_objectc                sf   G  fdddt  tt ddd}| }z*| t|  |  jtddd W d |	  X d S )Nc                   s   e Zd ZdZ fddZdS )z:PatchTest.test_new_callable_keyword_arguments.<locals>.BarNc                s
   | _ d S )N)r   )r   r   )r+   r   r   r'   S  s    zCPatchTest.test_new_callable_keyword_arguments.<locals>.Bar.__init__)r   r   r   r   r'   r   )r+   r   r   r+   Q  s   r+   r   r   )r	  arg1arg2)r  r  )
r"   r   r   r   r   typerB   r   r   r   )r   r   r   r   )r+   r   #test_new_callable_keyword_argumentsP  s    z-PatchTest.test_new_callable_keyword_argumentsc                s   G  fdddt  tt  d}|  z|  jt d W d |  X tt  d}|  z|  jt d W d |  X d S )Nc                   s   e Zd ZdZ fddZdS )z-PatchTest.test_new_callable_spec.<locals>.BarNc                s
   | _ d S )N)r   )r   r   )r+   r   r   r'   b  s    z6PatchTest.test_new_callable_spec.<locals>.Bar.__init__)r   r   r   r   r'   r   )r+   r   r   r+   `  s   r+   )r	  ri   )ri   )r	  r   )r   )r"   r   r   r   rB   r   r   r   )r   r   r   )r+   r   test_new_callable_spec_  s    
z PatchTest.test_new_callable_specc             C   sZ   dt  }t|td}| t|j t|tdd}| }z| j|dd W d |  X d S )Nz	%s.weeeee)r	  T)r	  rz   F)r;   )r   r   r   r7   rn   r   r=   r   )r   Znon_existent_attrpr   r   r   r   test_new_callable_createt  s    z"PatchTest.test_new_callable_createc             C   s4   | j tttt td | j ttjtdt td d S )N)r   r	  r(   )r7   
ValueErrorr   r   r"   r	   r%   )r   r   r   r   'test_new_callable_incompatible_with_new  s
    z1PatchTest.test_new_callable_incompatible_with_newc             C   s0   | j ttttdd | j ttjtdtdd d S )NT)r	  r   r(   )r7   r  r   r   r	   r"   r%   )r   r   r   r   ,test_new_callable_incompatible_with_autospec  s    z6PatchTest.test_new_callable_incompatible_with_autospecc       	   
   C   s   G dd dt }tttt |f}xd|D ]\}xVdD ]N}|di}ttfd|i|}| }z|j}| t	t
|d W d |  X q.W q$W d S )Nc               @   s   e Zd ZdS )z>PatchTest.test_new_callable_inherit_for_mocks.<locals>.MockSubN)r   r   r   r   r   r   r   MockSub  s   r  )ri   r   Tr	  x)r
   r   r   r	   r   r   r   rW   r7   rn   r   r   )	r   r  ZMockClassesKlassr   r   r  r   rx   r   r   r   #test_new_callable_inherit_for_mocks  s    

z-PatchTest.test_new_callable_inherit_for_mocksc             C   sh   G dd dt }tt|dd}| }z$| t|| | tt|d W d |	  X | 
|jt d S )Nc               @   s   e Zd Zdd ZdS )z>PatchTest.test_new_callable_inherit_non_mock.<locals>.NotAMockc             S   s
   || _ d S )N)ri   )r   ri   r   r   r   r'     s    zGPatchTest.test_new_callable_inherit_non_mock.<locals>.NotAMock.__init__N)r   r   r   r'   r   r   r   r   NotAMock  s   r  T)r	  ri   rW   )r"   r   r   r   r9   r   r7   rn   r   r   rB   ri   r%   )r   r  r  r   r   r   r   "test_new_callable_inherit_non_mock  s    
z,PatchTest.test_new_callable_inherit_non_mockc                sR   | t  G  fdddt}tttd|}|   |   | t   d S )Nc                   s*   e Zd Z fddZdd Zdd ZdS )z>PatchTest.test_new_callable_class_decorating.<locals>.SomeTestc                s(    t  t| tt d S )N)r   r%   r   ra   r   )r   mock_foo)rN   rD   r   r   r     s    zDPatchTest.test_new_callable_class_decorating.<locals>.SomeTest._testc             S   s   |  | d S )N)r   )r   r  r   r   r   test_two  s    zGPatchTest.test_new_callable_class_decorating.<locals>.SomeTest.test_twoc             S   s   |  | d S )N)r   )r   r  r   r   r   test_one  s    zGPatchTest.test_new_callable_class_decorating.<locals>.SomeTest.test_oneN)r   r   r   r   r  r   r   )rN   rD   r   r   SomeTest  s   r!  )r	  )r%   r"   r   r   r   r   r  r   )r   r!  r   )rN   rD   r   "test_new_callable_class_decorating  s    

z,PatchTest.test_new_callable_class_decoratingc          	      s   t  t j}t j}tjtddd}tjt ddd}xx||fD ]l}|  z,t   t jd t jd W d |	  X t   t j| t j| q:W tjtddd fdd}|  d S )Nr   r   )r(   r)   r   r   c                  s,    t  tjd tjd d S )Nr   r   )r   r%   rB   r(   r)   r   )original_foor   r   r   rD     s    z+PatchTest.test_patch_multiple.<locals>.test)
r%   r(   r)   r   multipler   r   r   rB   r   )r   
original_f
original_gZpatcher1Zpatcher2r   rD   r   )r#  r   r   test_patch_multiple  s"    
zPatchTest.test_patch_multiplec             C   s$   |  ttjt |  ttjt d S )N)r7   r  r   r$  r   r%   )r   r   r   r   test_patch_multiple_no_kwargs  s    z'PatchTest.test_patch_multiple_no_kwargsc                sV   t  t j}t j}tjttdtd fdd}|  t j| t j| d S )Nr   )r(   r)   r,   c                sZ    t   tj|  tjd  tj| t| t t|t d S )Nr   )	r   r%   r(   rB   r)   r,   r9   r   r	   )r(   r,   )r#  r   r   r   rD     s    z8PatchTest.test_patch_multiple_create_mocks.<locals>.test)r%   r(   r)   r   r$  r   r   rB   )r   r%  r&  rD   r   )r#  r   r    test_patch_multiple_create_mocks  s     	z*PatchTest.test_patch_multiple_create_mocksc                sr   t j}t j}tt dd}d|_tt dt}d|_|g|_| fdd}|   t j|  t j| d S )Nr(   r   r)   c                s      tj|   tjd d S )Nr   )r   r%   r)   rB   r(   )r)   )r   r   r   rD     s    zHPatchTest.test_patch_multiple_create_mocks_different_order.<locals>.test)	r%   r(   r)   r   r"   attribute_namer   additional_patchersrB   )r   r%  r&  r   r   rD   r   )r   r   0test_patch_multiple_create_mocks_different_order  s    z:PatchTest.test_patch_multiple_create_mocks_different_orderc                s   t t j}t j}tjttdtjttdttd  fdd}tjttdttd tjttd fdd}ttd tjttdtjttd fdd	}fd
d |  |  |  t j| t j| d S )N)r(   )r,   z.gc                s    | f| d S )Nr   )r)   r   )r   r   r   test1!  s    z?PatchTest.test_patch_multiple_stacked_decorators.<locals>.test1c                s    | f| d S )Nr   )r)   r   )r   r   r   test2'  s    z?PatchTest.test_patch_multiple_stacked_decorators.<locals>.test2c                s    | f| d S )Nr   )r)   r   )r   r   r   test3-  s    z?PatchTest.test_patch_multiple_stacked_decorators.<locals>.test3c                s   | d}| d}| t  tj| tj|  tj| t|t	 t| t	 t|t	 d S )Nr(   r,   )
popr:   r   r%   r(   r)   r,   r9   r   r	   )r)   r   r(   r,   )r#  r   r   r   r   3  s    


z?PatchTest.test_patch_multiple_stacked_decorators.<locals>._test)r%   r(   r)   r   r$  r   r   rB   )r   r%  r&  r-  r.  r/  r   )r   r#  r   r   &test_patch_multiple_stacked_decorators  s$    

z0PatchTest.test_patch_multiple_stacked_decoratorsc             C   s   t }t j}t j}tjttdtd}| }zt|d }|d }| t	|t	ddg | 
t | | 
t j| | 
t j| | t|t | t|t W d |  X | t j| | t j| d S )Nr   )r(   r)   r,   r(   r,   )r%   r(   r)   r   r$  r   r   r   rB   setr   r,   r9   r   r	   r   )r   r#  r%  r&  r   r   r(   r,   r   r   r   (test_patch_multiple_create_mocks_patcherG  s"    
z2PatchTest.test_patch_multiple_create_mocks_patcherc                sv   | t  t j}t j}G  fdddt}tjttdtd|}| }|  |	  | 
t j| | 
t j| d S )Nc                   s*   e Zd Z fddZdd Zdd ZdS )z@PatchTest.test_patch_multiple_decorating_class.<locals>.SomeTestc                sZ    t   tj| tjd  tj| t|t t|t d S )Nr   )	r   r%   r(   rB   r)   r,   r9   r   r	   )r   r(   r,   )r#  rD   r   r   r   h  s    zFPatchTest.test_patch_multiple_decorating_class.<locals>.SomeTest._testc             S   s   |  || d S )N)r   )r   r(   r,   r   r   r   r  p  s    zIPatchTest.test_patch_multiple_decorating_class.<locals>.SomeTest.test_twoc             S   s   |  || d S )N)r   )r   r(   r,   r   r   r   r   r  s    zIPatchTest.test_patch_multiple_decorating_class.<locals>.SomeTest.test_oneN)r   r   r   r   r  r   r   )r#  rD   r   r   r!  f  s   r!  r   )r(   r)   r,   )r%   r(   r)   r"   r   r$  r   r   r   r  rB   )r   r%  r&  r!  r   r   )r#  rD   r   $test_patch_multiple_decorating_class`  s    z.PatchTest.test_patch_multiple_decorating_classc             C   sf   t jtdd}| t|j t jtddd}|  z| tjd W d |  X | 	t
td d S )Nblam)r5  T)r5  rz   )r   r$  r%   r7   rn   r   rB   r5  r   r:   r   )r   r   r   r   r   test_patch_multiple_create  s    
z$PatchTest.test_patch_multiple_createc             C   s   t jttddgd}| }z^| tj|d  tjd tjd tjj	d tjj	d | 
tttjdd  W d |  X d S )Nr&   r-   )r,   r   r,   r   r   r   )r   r$  r%   r   r   rB   r,   r&   r-   r   r7   rn   r   r   )r   r   r   r   r   r   test_patch_multiple_spec_set  s    z&PatchTest.test_patch_multiple_spec_setc             C   s   G dd dt }tjttt|d}| }zT| tj|d  | tj|d  | 	tj| | 	tj| | 
tjtj W d |  X d S )Nc               @   s   e Zd ZdS )z9PatchTest.test_patch_multiple_new_callable.<locals>.ThingN)r   r   r   r   r   r   r   Thing  s   r8  )r(   r)   r	  r(   r)   )r"   r   r$  r%   r   r   r   r(   r)   ra   r   r   )r   r8  r   r   r   r   r    test_patch_multiple_new_callable  s    z*PatchTest.test_patch_multiple_new_callablec             C   s   t j}t j}tt ddtt ddtt dddd }tt ddtt ddtt dddd }tt ddtt ddtt ddd	d
 }x:|||fD ],}| t| | t j| | t j| qW d S )Nr)   r   missingr(   c               S   s   d S )Nr   r   r   r   r   thing1  s    z3PatchTest.test_nested_patch_failure.<locals>.thing1c               S   s   d S )Nr   r   r   r   r   thing2  s    z3PatchTest.test_nested_patch_failure.<locals>.thing2c               S   s   d S )Nr   r   r   r   r   thing3  s    z3PatchTest.test_nested_patch_failure.<locals>.thing3)r%   r(   r)   r   r"   r7   rn   rB   )r   r%  r&  r;  r<  r=  funcr   r   r   test_nested_patch_failure  s    z#PatchTest.test_nested_patch_failurec       	      C   s  t j}t j}t j}dd }tt ddtjt d|dtt dddd	 }tjt d|dtt ddtt ddd
d }tt ddtt ddtjt d|ddd }xH|||fD ]:}| t| | t j| | t j| | t j| qW d S )Nc               S   s   t dd S )Ncrasher)r}   r   r   r   r   r@    s    z4PatchTest.test_new_callable_failure.<locals>.crasherr)   r   r,   )r	  r(   c               S   s   d S )Nr   r   r   r   r   r;    s    z3PatchTest.test_new_callable_failure.<locals>.thing1c               S   s   d S )Nr   r   r   r   r   r<    s    z3PatchTest.test_new_callable_failure.<locals>.thing2c               S   s   d S )Nr   r   r   r   r   r=    s    z3PatchTest.test_new_callable_failure.<locals>.thing3)	r%   r(   r)   r,   r   r"   r7   r}   rB   )	r   r%  r&  r#  r@  r;  r<  r=  r>  r   r   r   test_new_callable_failure  s$    z#PatchTest.test_new_callable_failurec             C   s   t j}t j}tt dd}d|_tt dd}d|_tt dd}d|_xR||g||gfD ]>}||_|dd }| t| | 	t j| | 	t j| qZW d S )Nr(   r   r)   r:  c               S   s   d S )Nr   r   r   r   r   r>    s    z3PatchTest.test_patch_multiple_failure.<locals>.func)
r%   r(   r)   r   r"   r*  r+  r7   rn   rB   )r   r%  r&  r   goodbadadditionalsr>  r   r   r   test_patch_multiple_failure  s    z%PatchTest.test_patch_multiple_failurec       
      C   s   t j}t j}t j}dd }tt dd}d|_tt dd}d|_tjt d|d}d|_x`||g||gfD ]L}||_|dd	 }	| t	|	 | 
t j| | 
t j| | 
t j| qjW d S )
Nc               S   s   t dd S )Nr@  )r}   r   r   r   r   r@    s    zCPatchTest.test_patch_multiple_new_callable_failure.<locals>.crasherr(   r   r)   r,   )r	  c               S   s   d S )Nr   r   r   r   r   r>    s    z@PatchTest.test_patch_multiple_new_callable_failure.<locals>.func)r%   r(   r)   r,   r   r"   r*  r+  r7   r}   rB   )
r   r%  r&  r#  r@  r   rB  rC  rD  r>  r   r   r   (test_patch_multiple_new_callable_failure  s"    z2PatchTest.test_patch_multiple_new_callable_failurec                sL   t dtfddi}|  tj dd fdd}|   jd d S )Nr%   fishZtastyznearly gone)rG  c                  s     jd d S )Nznearly gone)rB   rG  r   )r,   r   r   r   rD   (  s    z=PatchTest.test_patch_multiple_string_subclasses.<locals>.test)r  strr   r$  rB   rG  )r   r%   rD   r   )r,   r   r   %test_patch_multiple_string_subclasses%  s
    z/PatchTest.test_patch_multiple_string_subclasseszunittest.mock.patch.TEST_PREFIXr,   c             C   sl   G dd dt }t |dd|}| }| | d | | d | | d | | d d S )Nc               @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )z-PatchTest.test_patch_test_prefix.<locals>.FoorN   c             S   s   | j S )N)r   )r   r   r   r   foo_one5  s    z5PatchTest.test_patch_test_prefix.<locals>.Foo.foo_onec             S   s   | j S )N)r   )r   r   r   r   foo_two7  s    z5PatchTest.test_patch_test_prefix.<locals>.Foo.foo_twoc             S   s   | j S )N)r   )r   r   r   r   r   9  s    z6PatchTest.test_patch_test_prefix.<locals>.Foo.test_onec             S   s   | j S )N)r   )r   r   r   r   r  ;  s    z6PatchTest.test_patch_test_prefix.<locals>.Foo.test_twoN)r   r   r   r   rJ  rK  r   r  r   r   r   r   r%   2  s
   r%   r   changedrN   )r"   r   rB   rJ  rK  r   r  )r   r%   r,   r   r   r   test_patch_test_prefix0  s    z PatchTest.test_patch_test_prefixr*   c                s   G  fdddt }ddi tj dd|}| }| | ddi | | ddi | | ddi | | ddi d S )Nc                   s<   e Zd Z fddZ fddZ fddZ fddZd	S )
z2PatchTest.test_patch_dict_test_prefix.<locals>.Fooc                s   t  S )N)r   )r   )the_dictr   r   bar_oneJ  s    z:PatchTest.test_patch_dict_test_prefix.<locals>.Foo.bar_onec                s   t  S )N)r   )r   )rN  r   r   bar_twoL  s    z:PatchTest.test_patch_dict_test_prefix.<locals>.Foo.bar_twoc                s   t  S )N)r   )r   )rN  r   r   r   N  s    z;PatchTest.test_patch_dict_test_prefix.<locals>.Foo.test_onec                s   t  S )N)r   )r   )rN  r   r   r  P  s    z;PatchTest.test_patch_dict_test_prefix.<locals>.Foo.test_twoN)r   r   r   rO  rP  r   r  r   )rN  r   r   r%   I  s   r%   keyrN   rL  )rQ  )r"   r   r   rB   rO  rP  r   r  )r   r%   r,   r   )rN  r   test_patch_dict_test_prefixG  s    
z%PatchTest.test_patch_dict_test_prefixc          	   C   s   xdD ]x}t dt f|di}| }zL| dt| | dt|j | dt|  | dt| j W d |  X qW d S )N)ri   r   r   z%s.SomeClassTz name='SomeClass'z! name='SomeClass.class_attribute'z name='SomeClass()'z# name='SomeClass().class_attribute')r   r   r   r   r   r\   r   )r   r   r  r   r   r   r   test_patch_with_spec_mock_repr]  s    
z(PatchTest.test_patch_with_spec_mock_reprc          	   C   sJ   t ddd4}| dt|j  | dt|   W d Q R X d S )Nzunittest.test.testmock.supportT)r   z" name='support.SomeClass.wibble()'z$ name='support.SomeClass().wibble()')r   r   r   r   rm   )r   r   r   r   r   test_patch_nested_autospec_reprl  s
    z)PatchTest.test_patch_nested_autospec_reprc          	   C   s  xdD ]}t dt f|di}| }z|  t g}| |j| | |j| | |jjt g | }|t  | |j| |  |t   | |j| | |jt g | |jjt g | |jt g W d |	  X qW d S )N)ri   r   r   z%s.SomeClassT)
r   r   r   rm   r   rB   
mock_callsmethod_callsappendr   )r   r   r  r   Zkallsr   r   r   r   test_mock_calls_with_patchu  s&    

z$PatchTest.test_mock_calls_with_patchc          	   C   sp   t d}| t|j td: t }|tjd< d|_t d}d|_|  |	  W d Q R X | 
|jd d S )Nzsquizz.squozzsquizz   r   )r   r7   ImportErrorr   r   r
   r   r   Zsquozzr   rB   )r   Zp1rY  r   r   r   test_patch_imports_lazily  s    

z#PatchTest.test_patch_imports_lazilyc          	      s   G dd dG fdddt   fdd}|ddd	 }td
" t }|tjd
< | t| W d Q R X | jd t | 	jd d | 	jd d d S )Nc               @   s   e Zd ZdZdS )z<PatchTest.test_patch_propogrates_exc_on_exit.<locals>.holder)NNNN)r   r   r   r  r   r   r   r   holder  s   r]  c                   s   e Zd Zd fdd	ZeZdS )zBPatchTest.test_patch_propogrates_exc_on_exit.<locals>.custom_patchNc                s    t | ||| |||f _d S )N)r   __exit__r  )r   etypevaltb)r]  r   r   r^    s    zKPatchTest.test_patch_propogrates_exc_on_exit.<locals>.custom_patch.__exit__)NNN)r   r   r   r^  r   r   )r]  r   r   custom_patch  s   rb  c          
      s$   t | \}} ||td dd d d i 	S )NF)r   r   )r   getterr?   )rb  r   r   with_custom_patch  s    zGPatchTest.test_patch_propogrates_exc_on_exit.<locals>.with_custom_patchzsquizz.squozzc             S   s   t d S )N)r   )rZ   r   r   r   rD     s    z:PatchTest.test_patch_propogrates_exc_on_exit.<locals>.testrY  r   r   zexception value not propgatedr   z!exception traceback not propgated)
r   r   r
   r   r   r7   r   r   r  assertIsNotNone)r   rd  rD   rY  r   )rb  r]  r   "test_patch_propogrates_exc_on_exit  s    

z,PatchTest.test_patch_propogrates_exc_on_exitc             C   st   xndD ]f}t dt fddi|di}| t|j | tdd  t tfddi|di}|  |  qW d S )N)ri   r   r   z%s.doesnotexistrz   Tc               S   s   t S )N)doesnotexistr   r   r   r   rk     rl   z1PatchTest.test_create_and_specs.<locals>.<lambda>)r   r   r7   r8   r   r}   MODNAMEr   )r   kwargr  r   r   r   test_create_and_specs  s    
zPatchTest.test_create_and_specsc             C   s   t }x>dD ]6}ttfddi|di}| t|j | t | q
W x>dD ]6}ttfddi|di}| t|j | t | qJW x>dD ]6}ttfddi|di}| t|j | t | qW d S )N)ri   r   r   r   )ri   r   r   )r   r   ri   )rP   r   rh  r7   r8   r   r   )r   rN   ri  r  r   r   r   test_multiple_specs  s    


zPatchTest.test_multiple_specsc             C   s8   t tdddd}| }z|j d|_W d |  X d S )NF)ri   r   r   r   )r   rh  r   Zdoes_not_existr   )r   r  rZ   r   r   r    test_specs_false_instead_of_none  s    
z*PatchTest.test_specs_false_instead_of_nonec          	   C   sJ   xDdD ]<}t tf|di}| }z| tt|d W d |  X qW d S )N)ri   r   r   r   Zdoesnotexit)r   rh  r   r7   rn   r   r   )r   ri  r  r   r   r   r   test_falsey_spec  s    
zPatchTest.test_falsey_specc          	   C   sd   x^dD ]V}t tfddi|di}| }z&| tt|dd | tt|d W d |  X qW d S )N)ri   r   r   Trg  rL   )r   rh  r   r7   rn   r   r   r   )r   ri  r  r   r   r   r   test_spec_set_true  s    

zPatchTest.test_spec_set_truec             C   s:   d}t t|d}| }z| t| W d |  X d S )N)__call__)ri   )r   rh  r   r9   callabler   )r   ri   r  r   r   r   r   test_callable_spec_as_list  s    z$PatchTest.test_callable_spec_as_listc             C   s:   d}t t|d}| }z| t| W d |  X d S )N)r,   r*   )ri   )r   rh  r   r:   rp  r   )r   ri   r  r   r   r   r   test_not_callable_spec_as_list  s    z(PatchTest.test_not_callable_spec_as_listc                s^   t jt j t j}tdt  tdt  td fdd}|  t j| d S )Nz	os.unlinkzos.chdirzos.pathc                s6   t   tj|  tj tj  d S )N)r   stopallr   r   pathunlinkchdir)Z	mock_path)rv  r   ru  r   r   patched  s    z-PatchTest.test_patch_stopall.<locals>.patched)	r   ru  rv  rt  r   rL   r   rQ   r   )r   rt  rw  r   )rv  r   ru  r   test_patch_stopall  s    zPatchTest.test_patch_stopallc                sR   g G dd dt fdd  fdddD  t  | dd	d
g d S )Nc               @   s   e Zd Zd Z ZZdS )z*PatchTest.test_stopall_lifo.<locals>.thingN)r   r   r   onetwothreer   r   r   r   r   (  s   r   c          
      s8   G  fdddt fdd d d dd d d i 	S )Nc                   s"   e Zd Z fddZ  ZS )z?PatchTest.test_stopall_lifo.<locals>.get_patch.<locals>.mypatchc                s     t|  S )N)rW  superr   )r   )	__class__r?   mypatchstoppedr   r   r   -  s    
zDPatchTest.test_stopall_lifo.<locals>.get_patch.<locals>.mypatch.stop)r   r   r   r   __classcell__r   )r?   r~  r  )r}  r   r~  ,  s   r~  c                  s    S )Nr   r   )r   r   r   rk   0  rl   z@PatchTest.test_stopall_lifo.<locals>.get_patch.<locals>.<lambda>F)r   )r?   )r  r   )r?   r~  r   	get_patch+  s    z.PatchTest.test_stopall_lifo.<locals>.get_patchc                s   g | ]} |  qS r   )r   ).0r`  )r  r   r   
<listcomp>2  s    z/PatchTest.test_stopall_lifo.<locals>.<listcomp>)ry  rz  r{  r{  rz  ry  )r"   r   rs  rB   )r   r   )r  r  r   r   test_stopall_lifo&  s    zPatchTest.test_stopall_lifoc          	   C   s>  ddd}t |dd | | d W d Q R X | | d t |dd | |jd W d Q R X | |jd	 t |d
d | |jd W d Q R X | |jd t |dtdg | |jtdg W d Q R X | |jt  dddd}t |dtdg | | d W d Q R X | | d d S )Nr   c             S   s   | S )TESTr   )r  r   r   r   r,   9  s    z)PatchTest.test_special_attrs.<locals>.foo__defaults__)r   r   __doc__ZFUNr  r   Z
testpatch2z unittest.test.testmock.testpatch__annotations__)sr   )r  c             W   s   | S )Nr   )r  r&   r   r   r   r,   L  s    __kwdefaults__)r  r   )r   )r   r"   rB   r  r   r   r  )r   r,   r   r   r   test_special_attrs8  s"    
zPatchTest.test_special_attrsN)T)fr   r   r   r=   rE   rG   rK   rO   r[   r^   rh   rp   rr   rs   rt   ru   rv   rw   ry   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  r  r  r  r  r  r  r  r"  r'  r(  r)  r,  r1  r3  r4  r6  r7  r9  r?  rA  rE  rF  rI  r   rM  rR  rS  rT  rX  r\  rf  rj  rk  rl  rm  rn  rq  rr  rx  r  r  r   r   r   r   r6   S   s   

+*

		
!+	G	
+!!	"


r6   __main__)T)(r   r   r  Zunittest.test.testmockr   unittest.test.testmock.supportr   r   test.test_importlib.utilr   unittest.mockr   r   r   r	   r
   r   r   r   r   r   r   rX   r   r   rP   rh  r$   r@   rL   rR   rQ   r"   r%   r   r.   r/   TestCaser6   mainr   r   r   r   <module>   sB   4

              