B
    18\vs                 @   s   d dl Z d dlZd dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZmZmZ d dlmZ d dlmZ G dd deZG dd dejZG d	d
 d
ejZG dd dejZG dd dejZedkre  dS )    N)	call_Callcreate_autospec	MagicMockMockANY	_CallListpatchPropertyMock)datetime)partialc               @   s&   e Zd Zdd Zdd ZdddZdS )		SomeClassc             C   s   d S )N )selfabr   r   f/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/unittest/test/testmock/testhelpers.pyone   s    zSomeClass.onec             C   s   d S )Nr   )r   r   r   r   two   s    zSomeClass.twoNc             C   s   d S )Nr   )r   r   r   r   r   three   s    zSomeClass.three)N)__name__
__module____qualname__r   r   r   r   r   r   r   r      s   r   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
AnyTestc             C   sF   |  tt  t }|t |t t }|td |jtd d S )N)foo)assertEqualr   objectr   assert_called_with)r   mockr   r   r   test_any   s    

zAnyTest.test_anyc             C   s$   |  ttd |  ttd d S )Nz<ANY>)r   reprr   str)r   r   r   r   	test_repr%   s    zAnyTest.test_reprc             C   s,   t  }|t t d |jttd d S )N)r   )r   r   nowr   r   )r   r   r   r   r   test_any_and_datetime*   s    zAnyTest.test_any_and_datetimec             C   s   t  }t }G dd dt}xt | fD ]}|  ||||d |j|||d | j||d ttttdtjtttdt t jttdg}| ||j	 | |j	| q.W d S )Nc               @   s   e Zd Zdd Zdd ZdS )z9AnyTest.test_any_mock_calls_comparison_order.<locals>.Fooc             S   s   dS )NFr   )r   otherr   r   r   __eq__5   s    z@AnyTest.test_any_mock_calls_comparison_order.<locals>.Foo.__eq__c             S   s   dS )NTr   )r   r%   r   r   r   __ne__7   s    z@AnyTest.test_any_mock_calls_comparison_order.<locals>.Foo.__ne__N)r   r   r   r&   r'   r   r   r   r   Foo4   s   r(   )r   bar)Zzingaalpha)a1Zz99)
r   r   r#   r   
reset_mockmethodr   r   r   
mock_calls)r   r   dr(   expectedr   r   r   $test_any_mock_calls_comparison_order1   s    z,AnyTest.test_any_mock_calls_comparison_orderN)r   r   r   r   r"   r$   r1   r   r   r   r   r      s   r   c               @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)S )*CallTestc             C   s  t  }| |t   | |t d | |t d | |t i f | |t d | |t di f | |t ddi f | |t d | |t d | |t di f | |t d	di f t d
}| |t d
 | |t d | |t di f | |t ddi f t d}| |t d | |t ddi f t d}| |t d | |t ddi f | |t d | |t ddi f t ddif}| |t ddddif | |t dddif | |t dddif | |t ddif d S )N) )r   )r3   r   r3   r   )r   )r)   r   bazspam))         )r3   )r6   r7   r8   )r6   r7   r8   ))r6   r7      )r   )r6   r7   r9   )r3   )r6   r7   r9   )r6   r7   r9   )r)   )r6   r7   r9   r)   r   r8   )r   r   assertNotEqual)r   kallr   r   r   test_call_with_callM   s<    zCallTest.test_call_with_callc             C   sj   t  }| |d | |d | |d | |d | |ddi f | |di f | |i f d S )Nr   )r   )r   )r   r   r   )r   r   )r   argsr   r   r   test_empty__Callr   s    zCallTest.test_empty__Callc             C   s   t ddi f}| |d | |d | |ddi f | |di f | |d | |d | |i f | |d | |d | |di f d S )	Nr   r   )r   )r   r   )r   )r)   )r)   r   r)   )r   r   r:   )r   r=   r   r   r   test_named_empty_call~   s    zCallTest.test_named_empty_callc             C   sJ   t di f}| |d | |d | |ddi f | |di f d S )N)r6   r7   r8   ))r6   r7   r8   )r   )r6   r7   r8   r   )r   r   )r   r=   r   r   r   test_call_with_args   s
    zCallTest.test_call_with_argsc             C   sL   t ddi f}| |d | |ddi f | |d | |di f d S )Nr   )r6   r7   r8   )r   )r6   r7   r8   ))r6   r7   r8   )r   r   r:   )r   r=   r   r   r   test_named_call_with_args   s
    z"CallTest.test_named_call_with_argsc          	   C   sx   t dtdddf}| |tdddf | |dtdddf | |ddtdddf | |dtdddf d S )Nr   r8   r9   )r   r   r   )r   dictr   )r   r=   r   r   r   test_call_with_kwargs   s
    zCallTest.test_call_with_kwargsc          	   C   sz   t ddtdddf}| |dtdddf | |ddtdddf | |tdddf | |dtdddf d S )Nr   r   r8   r9   )r   r   )r   rB   r   r:   )r   r=   r   r   r   test_named_call_with_kwargs   s
    z$CallTest.test_named_call_with_kwargsc             C   sN   t di f}| |tddd | tddd| | tddd|g d S )N)r6   r7   r8   r6   r7   r8   )r   r   r   assertIn)r   r=   r   r   r   #test_call_with_args_call_empty_name   s    z,CallTest.test_call_with_args_call_empty_namec             C   sR   |  tdtdd | tdtdddk | tdi ftdddk d S )N))r6   r7   r8   r6   r7   r8   )r6   r7   )r:   r   r   assertFalse
assertTrue)r   r   r   r   test_call_ne   s    zCallTest.test_call_nec             C   s<   t d}x.dd | tfD ]}| || | ||k qW d S )N))r6   r7   r8   r6   )r   intr:   rG   )r   r;   valuer   r   r   test_call_non_tuples   s    zCallTest.test_call_non_tuplesc             C   s^  |  tt d |  ttdd |  ttdddifd |  ttddddifd	 |  ttd
 |  ttd
 |  tt d |  ttdd |  ttddd |  tt jd |  ttdjjddjd |  tt jddddd |  tt  d |  ttddd |  tt   j	dd d S )Nzcall())r   z
call.foo())r6   r7   r8   r   r   zcall(1, 2, 3, a='b')r)   zcall.bar(1, 2, 3, a='b')r   r6   zcall(1)thing)zzzcall(zz='thing')z
call().foor8   )r   zcall().foo.bar().bingr7   zcall().foo(1, 2, a=3)zcall()()z	call()(2)zcall()().bar().baz.beep(1))
r   r    r   r   r!   r   r)   bingr4   beep)r   r   r   r   r"      s,    zCallTest.test_reprc             C   s|   |  t ddi f |  tddddddddddf t }|d	d
d |ddd |  |jtd	d
dtdddg d S )Nr3   r   r   r)   r8   r9   )r   r   )r   r)   r6   r7      )r   r   )r   r   r   call_args_list)r   r   r   r   r   	test_call   s    zCallTest.test_callc             C   s   |  tdddi f |  tjjddddddif t }|dd	d
 |jjd
dd |  |jtdd	d
tjjd
ddg d S )Nr6   r   )r6   eggs)fishzbar.bazr   rU   r7   r8   rQ   )r   r   )r   r   r   r)   r4   r   method_calls)r   r   r   r   r   test_attribute_call   s    zCallTest.test_attribute_callc          	   C   s  t ddjddd}| |ddtddf t }|ddddd | |jt ddddd | |jt ddd | |jt dddddg | |j	t dddddg t }|d  j
jd	d t d  j
jd	d}| |j	d
 | | |j	|  d S )Nr6   r7   r8   r9   )r   z().foo().bar)r8   )r   r   rQ   )r   r   r)   r   rB   r   	call_argsr:   rR   r.   r4   rP   	call_list)r   resultr   Z	last_callr   r   r   test_extended_call   s    zCallTest.test_extended_callc             C   s@   t ddj}t ddj}| || | || | || d S )Nr6   )xr7   )r   r   r   r:   )r   r   r   r   r   r   test_extended_not_equal  s
    z CallTest.test_extended_not_equalc             C   sH   t dd j}t dd j}| || | || | || d S )Nr6   )r]   r7   )r   r   r)   r   r:   )r   r   r   r   r   r   test_nested_calls_not_equal  s
    z$CallTest.test_nested_calls_not_equalc             C   s   t  }|d | td |j t  }|dd | tdd |j t  }|ddd | tddd |j t  }t|dddjj	dd tdddjj	dd
 }| | |j d S )Nr6   r7   r8   r9      )r   r   r   rZ   r.   r-   rJ   r   r)   r4   __int__)r   r   r;   r   r   r   test_call_list"  s    $$zCallTest.test_call_listc             C   s>   |  tt t }t| |  |jtg |  tg|j d S )N)r   r   r   r   rJ   r.   )r   mr   r   r   test_call_any7  s
    zCallTest.test_call_anyc             C   sh   t dddifdd}| t|d | |d d | |d ddi t dddif}| || d S )	N)r6   r7   r   r8   T)r   r7   r   r6   )r   r   len)r   r=   
other_argsr   r   r   test_two_args_call@  s    zCallTest.test_two_args_callc             C   sJ   |  tddd d |  tdd d |  tdddifd d d S )	Nr   r   r   ))r)   barzr3   )r)   rh   helloZworld)r   r   )r   r   r   r   test_call_with_nameI  s    zCallTest.test_call_with_nameN)r   r   r   r<   r>   r?   r@   rA   rC   rD   rF   rI   rL   r"   rS   rW   r\   r^   r_   rb   rd   rg   rj   r   r   r   r   r2   K   s(   %	
	
		r2   c               @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCS )DSpecSignatureTestc             C   s   |  tt|d |dd |jdd |  t|jjdd |  t|jd |  |j  |  t|jjd |  t|jd |  |j  |  t|jjd |  t|jdd |d |jd |jdd |jjdd d S )Nr   r6   r7   r8   r9   )r   )	assertRaisesAttributeErrorgetattrr   r   AssertionError	TypeErrorr   r   )r   r   r   r   r   _check_someclass_mockQ  s(    


z'SpecSignatureTest._check_someclass_mockc             C   s*   t t}| | t t }| | d S )N)r   r   rq   )r   r   r   r   r   
test_basicl  s    

zSpecSignatureTest.test_basicc             C   sP   dd }t |dd}| | d G dd dt}t |dd}| | d d S )Nc               S   s   d S )Nr   r   r   r   r   ft  s    z>SpecSignatureTest.test_create_autospec_return_value.<locals>.fr   )return_valuec               @   s   e Zd ZdS )z@SpecSignatureTest.test_create_autospec_return_value.<locals>.FooN)r   r   r   r   r   r   r   r(   y  s   r(   )r   r   r   )r   rs   r   r(   r   r   r   !test_create_autospec_return_values  s    z3SpecSignatureTest.test_create_autospec_return_valuec             C   s,   t t}t| |  | |jjd d S )Nr   )r   rJ   r,   r   ra   
call_count)r   rc   r   r   r   test_autospec_reset_mock  s    z*SpecSignatureTest.test_autospec_reset_mockc             C   s>   G dd dt }t |d}| }| d |d d S )Nc               @   s   e Zd Zdd ZdS )z;SpecSignatureTest.test_mocking_unbound_methods.<locals>.Fooc             S   s   d S )Nr   )r   r   r   r   r   r     s    z?SpecSignatureTest.test_mocking_unbound_methods.<locals>.Foo.fooN)r   r   r   r   r   r   r   r   r(     s   r(   r   r6   )r   r	   startr   r   )r   r(   pZmock_foor   r   r   test_mocking_unbound_methods  s
    z.SpecSignatureTest.test_mocking_unbound_methodsc             C   s   d S )Nc               @   s   e Zd Zdd ZdS )zCSpecSignatureTest.test_create_autospec_unbound_methods.<locals>.Fooc             S   s   d S )Nr   )r   r   r   r   r     s    zGSpecSignatureTest.test_create_autospec_unbound_methods.<locals>.Foo.fooN)r   r   r   r   r   r   r   r   r(     s   r(   r6   )r   r   rl   rp   r   r   )r   r(   klassinstancer   r   r   $test_create_autospec_unbound_methods  s          z6SpecSignatureTest.test_create_autospec_unbound_methodsc             C   s.   G dd dt }t|dd}| |jd d S )Nc               @   s   e Zd ZdZdS )zESpecSignatureTest.test_create_autospec_keyword_arguments.<locals>.Foor8   N)r   r   r   r   r   r   r   r   r(     s   r(   3)r   )r   r   r   r   )r   r(   rc   r   r   r   &test_create_autospec_keyword_arguments  s    z8SpecSignatureTest.test_create_autospec_keyword_argumentsc             C   sV   d ddd}t |}|d |d | t|dd |ddd |jddd d S )N)r   c            S   s   d S )Nr   )r   r   r   r   r   r     s    zJSpecSignatureTest.test_create_autospec_keyword_only_arguments.<locals>.foor6   r7   r8   )r   r   rl   rp   )r   r   rc   r   r   r   +test_create_autospec_keyword_only_arguments  s    
z=SpecSignatureTest.test_create_autospec_keyword_only_argumentsc             C   s6   t  }dd }||_t|}|d |jd d S )Nc             S   s   d S )Nr   )r   r   r   r   rs     s    z@SpecSignatureTest.test_function_as_instance_attribute.<locals>.frO   )r   rs   r   r   )r   objrs   r   r   r   r   #test_function_as_instance_attribute  s    
z5SpecSignatureTest.test_function_as_instance_attributec             C   sv   t g }|d |jd | tt|d G dd dt}t |}|jd |jjd | tt|jd d S )Nr   c               @   s   e Zd Zg ZdS )z0SpecSignatureTest.test_spec_as_list.<locals>.FooN)r   r   r   r   r   r   r   r   r(     s   r(   r8   )r   appendr   rl   rm   rn   r   r   )r   r   r(   r   r   r   test_spec_as_list  s    
z#SpecSignatureTest.test_spec_as_listc             C   s:   G dd dt }t|}x||jfD ]}| | q$W d S )Nc               @   s   e Zd Ze ZdS )z.SpecSignatureTest.test_attributes.<locals>.SubN)r   r   r   r   attrr   r   r   r   Sub  s   r   )r   r   r   rq   )r   r   Zsub_mockr   r   r   r   test_attributes  s    z!SpecSignatureTest.test_attributesc             C   s   G dd dt }t|}|d |jd | tt|jd |d |jd | t|jdd | tt|jd |	ddg |j	ddg | tt|j	d |j
d |j
jd | tt|j
d d S )Nc               @   s   e Zd Zdd ZeZi ZdS )zGSpecSignatureTest.test_builtin_functions_types.<locals>.BuiltinSubclassc             S   s   d S )Nr   )r   argr   r   r   r)     s    zKSpecSignatureTest.test_builtin_functions_types.<locals>.BuiltinSubclass.barN)r   r   r   r)   sortedr   r   r   r   r   BuiltinSubclass  s   r   r8   r   r)   r6   r7   )listr   r   r   rl   rm   rn   r)   rp   r   r   pop)r   r   r   r   r   r   test_builtin_functions_types  s    

z.SpecSignatureTest.test_builtin_functions_typesc             C   s   G dd dt }t|}|dd |  |d tddt tdg}| |j| |jdd |j  |jd |	tjddtj tjdg | |j| d S )Nc               @   s   e Zd Ze ZdS )z0SpecSignatureTest.test_method_calls.<locals>.SubN)r   r   r   r   r   r   r   r   r   r     s   r   r6   r7   r8   )
r   r   r   r   r   r   r   rV   r   extend)r   r   r   r0   r   r   r   test_method_calls  s    

$z#SpecSignatureTest.test_method_callsc             C   s|   G dd dt }t|}| t |g  | tt| | tt|j | t |g  | |d t | |jd t d S )Nc               @   s   e Zd Zi ZdS )z=SpecSignatureTest.test_magic_methods.<locals>.BuiltinSubclassN)r   r   r   r   r   r   r   r   r     s   r   r   )	r   r   r   rl   rp   rJ   r   assertIsInstancer   )r   r   r   r   r   r   test_magic_methods  s    z$SpecSignatureTest.test_magic_methodsc             C   sd   G dd dt }xN|| fD ]@}t|dd}| | | tt|dd | tt|jdd qW d S )Nc               @   s   e Zd Ze ZdS )z,SpecSignatureTest.test_spec_set.<locals>.SubN)r   r   r   r   r   r   r   r   r   r   !  s   r   T)spec_setr   r)   )r   r   rq   rl   rm   setattrr   )r   r   specr   r   r   r   test_spec_set   s    
zSpecSignatureTest.test_spec_setc             C   s   G dd dt }G dd d|}G dd dt|}xZ|| || || fD ]@}t|}|dd |jdd |d	d
 |jd	d
 qJW d S )Nc               @   s$   e Zd Zedd Zedd ZdS )z/SpecSignatureTest.test_descriptors.<locals>.Fooc             S   s   d S )Nr   )clsr   r   r   r   r   rs   .  s    z1SpecSignatureTest.test_descriptors.<locals>.Foo.fc             S   s   d S )Nr   )r   r   r   r   r   g1  s    z1SpecSignatureTest.test_descriptors.<locals>.Foo.gN)r   r   r   classmethodrs   staticmethodr   r   r   r   r   r(   -  s   r(   c               @   s   e Zd ZdS )z/SpecSignatureTest.test_descriptors.<locals>.BarN)r   r   r   r   r   r   r   Bar5  s   r   c               @   s   e Zd ZdS )z/SpecSignatureTest.test_descriptors.<locals>.BazN)r   r   r   r   r   r   r   Baz8  s   r   r6   r7   r8   r9   )r   r   r   rs   assert_called_once_withr   )r   r(   r   r   r   r   r   r   r   test_descriptors,  s    z"SpecSignatureTest.test_descriptorsc             C   s   G dd dt }||_t|}|  | |jj |  |j  | |jt tj g | 	|j
|j | |j
|j |j
  | t|jjj d S )Nc               @   s   e Zd Zdd ZdZeZdS )z+SpecSignatureTest.test_recursive.<locals>.Ac             S   s   d S )Nr   )r   r   r   r   r   F  s    z-SpecSignatureTest.test_recursive.<locals>.A.azfoo bar bazN)r   r   r   r   r   r)   r   r   r   r   AE  s   r   )r   Br   rG   calledr   r   rV   r   assertIsr   r)   assertIsNotlowerrl   ro   r   )r   r   r   r   r   r   test_recursiveD  s    

z SpecSignatureTest.test_recursivec             C   sb  G dd dt }t|}| ||  xZ|| fD ]L}|jdd |jjdd |jd | t|jdd | tt|d q2W t| }|d |jd |jjdd | t|jdd | tt|d | t| |j	
d |j	j
d |j	j
jdd	 | tt|j	d
 |	 
d |	 j
d |	 j
jdd	 | tt|	 d
 d S )Nc               @   s$   e Zd Zdd ZG dd deZdS )z@SpecSignatureTest.test_spec_inheritance_for_classes.<locals>.Fooc             S   s   d S )Nr   )r   r]   r   r   r   r   ]  s    zBSpecSignatureTest.test_spec_inheritance_for_classes.<locals>.Foo.ac               @   s   e Zd Zdd ZdS )zDSpecSignatureTest.test_spec_inheritance_for_classes.<locals>.Foo.Barc             S   s   d S )Nr   )r   yr   r   r   rs   `  s    zFSpecSignatureTest.test_spec_inheritance_for_classes.<locals>.Foo.Bar.fN)r   r   r   rs   r   r   r   r   r   _  s   r   N)r   r   r   r   r   r   r   r   r   r   r(   \  s   r(   r`   )r]   r   r)   r   rQ   )r   r   )r   r   r   r   r   rl   rp   rm   rn   r   rs   )r   r(   Z
class_mockZ	this_mockZinstance_mockr   r   r   !test_spec_inheritance_for_classes[  s0    

z3SpecSignatureTest.test_spec_inheritance_for_classesc             C   s   G dd dt }||_t|}| }| tt|d | }| tt|d t| }| tt|d | t| | }| tt|d d S )Nc               @   s   e Zd ZdZdS )z+SpecSignatureTest.test_inherit.<locals>.Foor8   N)r   r   r   r   r   r   r   r   r(     s   r(   r   )r   r(   r   rl   rm   rn   rp   )r   r(   r   r|   Zattr_instanceZcall_resultr   r   r   test_inherit  s    
zSpecSignatureTest.test_inheritc             C   s   t d t t t d t t t i  t t t g  t t t t  t t t d t t t d t t t d t d d S )Nr6   r   g      ?y              ?FT)r   rJ   r!   rB   r   setfloatcomplex)r   r   r   r   test_builtins  s     
zSpecSignatureTest.test_builtinsc             C   s   dd }t |}| t| |dd |dd |jddd |jddd ||_t |}| t|j |dd |jdd |jjddd d S )	Nc             S   s   d S )Nr   )r   r   r   r   r   rs     s    z*SpecSignatureTest.test_function.<locals>.fr6   r7   )r   )r   r   r8   r9   )r   rl   rp   r   rs   )r   rs   r   r   r   r   test_function  s    
zSpecSignatureTest.test_functionc                sv   G dd dt  G  fdddt }t|| tfdd dd | tfd	d j}|j|jf d S )
Nc               @   s   e Zd ZdddZdS )z;SpecSignatureTest.test_skip_attributeerrors.<locals>.RaiserNc             S   s   |d krt dd S )Nz$Can only be accessed via an instance)rm   )r   r   typer   r   r   __get__  s    zCSpecSignatureTest.test_skip_attributeerrors.<locals>.Raiser.__get__)N)r   r   r   r   r   r   r   r   Raiser  s   r   c                   s   e Zd Z  Zedd ZdS )z@SpecSignatureTest.test_skip_attributeerrors.<locals>.RaiserClassc             S   s   | | S )Nr   )r   r   r   r   r   existing  s    zISpecSignatureTest.test_skip_attributeerrors.<locals>.RaiserClass.existingN)r   r   r   raiserr   r   r   )r   r   r   RaiserClass  s   r   c                s     dddS )Nr6   r7   r8   )r   )r]   )sr   r   <lambda>      z=SpecSignatureTest.test_skip_attributeerrors.<locals>.<lambda>r6   r7   c                  s    j S )N)Znonexistingr   )r   r   r   r     r   )	r   r   rl   rp   r   rm   r   r   r)   )r   r   r   r   )r   r   r   test_skip_attributeerrors  s    z+SpecSignatureTest.test_skip_attributeerrorsc             C   s   G dd dt }t|}| t| |d |d |jdd | t|jd |dd |dd |jddd | jt|jddd d S )	Nc               @   s   e Zd ZdddZdS )z3SpecSignatureTest.test_signature_class.<locals>.Foor8   c             S   s   d S )Nr   )r   r   r   r   r   r   __init__  s    z<SpecSignatureTest.test_signature_class.<locals>.Foo.__init__N)r8   )r   r   r   r   r   r   r   r   r(     s   r(   r6   )r   r7   r9   r`   )r   r   )r   r   rl   rp   r   ro   r   )r   r(   r   r   r   r   test_signature_class  s    

z&SpecSignatureTest.test_signature_classc             C   s   G dd dt }t| d S )Nc               @   s   e Zd ZdS )z6SpecSignatureTest.test_class_with_no_init.<locals>.FooN)r   r   r   r   r   r   r   r(     s   r(   )r   r   )r   r(   r   r   r   test_class_with_no_init  s    z)SpecSignatureTest.test_class_with_no_initc             C   s   G dd dt }t|}|dd |dd |jddd | t|d |dd}| t| |dd |d |jdd |d |d |jdd t|dd}|dd |jdd | t| |d |d d S )Nc               @   s   e Zd Zdd Zdd ZdS )z;SpecSignatureTest.test_signature_callable.<locals>.Callablec             S   s   d S )Nr   )r   r]   r   r   r   r   r     s    zDSpecSignatureTest.test_signature_callable.<locals>.Callable.__init__c             S   s   d S )Nr   )r   r   r   r   r   __call__  s    zDSpecSignatureTest.test_signature_callable.<locals>.Callable.__call__N)r   r   r   r   r   r   r   r   r   Callable  s   r   r6   r7   )r]   r   r   )r   )r   r   r   rl   rp   r   )r   r   r   r|   r   r   r   test_signature_callable  s(    





z)SpecSignatureTest.test_signature_callablec             C   sv   G dd dt }t|}| }|  | t|d | t| | t|d t| }| t| | t|d d S )Nc               @   s   e Zd Zdd ZdS )zASpecSignatureTest.test_signature_noncallable.<locals>.NonCallablec             S   s   d S )Nr   )r   r   r   r   r     s    zJSpecSignatureTest.test_signature_noncallable.<locals>.NonCallable.__init__N)r   r   r   r   r   r   r   r   NonCallable  s   r   r   )r   r   r   rl   rp   )r   r   r   r|   r   r   r   test_signature_noncallable  s    
z,SpecSignatureTest.test_signature_noncallablec             C   sD   G dd dt }t|}|j}| |td  |  |j  d S )Nc               @   s   e Zd ZdZdS )z8SpecSignatureTest.test_create_autospec_none.<locals>.FooN)r   r   r   r)   r   r   r   r   r(   %  s   r(   )r   r   r)   assertNotIsInstancer   r   r   )r   r(   r   noner   r   r   test_create_autospec_none$  s    z+SpecSignatureTest.test_create_autospec_nonec             C   sf   G dd dt }t|}|d |jd |jjdd |jdd |jd |jjdd d S )Nc               @   s   e Zd Zdd ZdS )zMSpecSignatureTest.test_autospec_functions_with_self_in_odd_place.<locals>.Fooc             S   s   d S )Nr   )r   r   r   r   r   rs   2  s    zOSpecSignatureTest.test_autospec_functions_with_self_in_odd_place.<locals>.Foo.fN)r   r   r   rs   r   r   r   r   r(   1  s   r(   
   )r   )r   r   rs   r   )r   r(   r   r   r   r   .test_autospec_functions_with_self_in_odd_place0  s    
z@SpecSignatureTest.test_autospec_functions_with_self_in_odd_placec                sv   G dd dt  G dd dtG  fdddt }t|}fdd}||j ||j ||j ||j d S )	Nc               @   s&   e Zd Zdd ZdddZdd ZdS )	zCSpecSignatureTest.test_autospec_data_descriptor.<locals>.Descriptorc             S   s
   || _ d S )N)rK   )r   rK   r   r   r   r   @  s    zLSpecSignatureTest.test_autospec_data_descriptor.<locals>.Descriptor.__init__Nc             S   s   |d kr| S | j S )N)rK   )r   r   r   r   r   r   r   C  s    zKSpecSignatureTest.test_autospec_data_descriptor.<locals>.Descriptor.__get__c             S   s   d S )Nr   )r   r   rK   r   r   r   __set__H  s    zKSpecSignatureTest.test_autospec_data_descriptor.<locals>.Descriptor.__set__)N)r   r   r   r   r   r   r   r   r   r   
Descriptor?  s   
r   c               @   s   e Zd ZdS )zCSpecSignatureTest.test_autospec_data_descriptor.<locals>.MyPropertyN)r   r   r   r   r   r   r   
MyPropertyK  s   r   c                   s2   e Zd ZdgZedd Zdd Z dZdS )z<SpecSignatureTest.test_autospec_data_descriptor.<locals>.Fooslotc             S   s   dS )Nr8   r   )r   r   r   r   propQ  s    zASpecSignatureTest.test_autospec_data_descriptor.<locals>.Foo.propc             S   s   dS )Nr9   r   )r   r   r   r   subpropU  s    zDSpecSignatureTest.test_autospec_data_descriptor.<locals>.Foo.subprop*   N)r   r   r   	__slots__propertyr   r   descr   )r   r   r   r   r(   N  s   r(   c                sH     | t | ddd | ddd | ddd | jddd d S )Nr6   r7   r8   r9   r`   rQ   )r   r   abcr   )Z	mock_attr)r   r   r   check_data_descriptor]  s
    zNSpecSignatureTest.test_autospec_data_descriptor.<locals>.check_data_descriptor)r   r   r   r   r   r   r   )r   r(   r   r   r   )r   r   r   r   test_autospec_data_descriptor>  s    	


z/SpecSignatureTest.test_autospec_data_descriptorc             C   s\   t tjt }| | t t|}|  |  |  |ddd |ddd d S )Nr9   r`   rQ   )	types
MethodTypetimectimer   r!   r   r   r,   )r   methZmockedr   r   r   'test_autospec_on_bound_builtin_functiono  s    z9SpecSignatureTest.test_autospec_on_bound_builtin_functionc             C   s0   G dd d}| }t |}| t|d d S )Nc               @   s   e Zd Zdd ZdS )zESpecSignatureTest.test_autospec_getattr_partial_function.<locals>.Fooc             S   s   t dd |S )Nc             S   s   | S )Nr   )namer   r   r   r     r   zcSpecSignatureTest.test_autospec_getattr_partial_function.<locals>.Foo.__getattr__.<locals>.<lambda>)r   )r   	attributer   r   r   __getattr__  s    zQSpecSignatureTest.test_autospec_getattr_partial_function.<locals>.Foo.__getattr__N)r   r   r   r   r   r   r   r   r(     s   r(   r   )r   rG   hasattr)r   r(   proxyautospecr   r   r   &test_autospec_getattr_partial_function|  s    z8SpecSignatureTest.test_autospec_getattr_partial_functionc             C   sp   dd }t |}|dd |ddd | t|t| | |jtddtdddg | t|d d S )Nc             S   s   d S )Nr   )r]   r   r   r   r   myfunc  s    z=SpecSignatureTest.test_spec_inspect_signature.<locals>.myfuncr6   r7   )r]   r   )r   r   inspectgetfullargspecr.   r   rl   rp   )r   r   r   r   r   r   test_spec_inspect_signature  s    
 z-SpecSignatureTest.test_spec_inspect_signaturec             C   s   d
t t t t ddd}t|}|dddd |ddd | t|t| | |jtddddtdddg | t|d | jt|dddd	d d S )Nr   )r   r   creturnc            S   s   | | | S )Nr   )r   r   r   r   r   r   r     s    zFSpecSignatureTest.test_spec_inspect_signature_annotations.<locals>.foor6   r7   r8   )r   r9   )r   )	rJ   r   r   r   r   r.   r   rl   rp   )r   r   r   r   r   r   'test_spec_inspect_signature_annotations  s    $z9SpecSignatureTest.test_spec_inspect_signature_annotationsN)$r   r   r   rq   rr   ru   rw   rz   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   rk   O  sB   
(1rk   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestCallListc             C   s"  t  }| |jt |dd |dd |dd |dd x:tddtddtddtddfD ]}| ||j qbW tddtddg}| ||j tddtddg}| ||j tddtddg}| ||j tddg}| ||j | td|j | tdg|j d S )	Nr6   r7   r8   )r   r9   rQ   )r   rU   )r   r   rR   r   r   rE   assertNotIn)r   r   r;   callsr   r   r   !test_args_list_contains_call_list  s$    



*z.TestCallList.test_args_list_contains_call_listc             C   sJ   t  }|dd |jdd |j jddd d}| t|j| d S )	Nr6   r7   r8   )r   rU   Zdog)catzU[call(1, 2),
 call.foo(a=3),
 call.foo.bar(),
 call.foo.bar().baz('fish', cat='dog')])r   r   r)   r4   r   r!   r.   )r   r   r0   r   r   r   test_call_list_str  s    
zTestCallList.test_call_list_strc             C   s   t dt td}| }z^tj |  t }|j |  | |j	t
 t
 g d|_| |j	t
 t
 t
dg W d |  X d S )Nz%s.SomeClass.one)new_callabler8   )r	   r   r
   rx   r   r   r   r   r   r.   r   stop)r   ry   r   r   r   r   r   test_propertymock  s     zTestCallList.test_propertymockc             C   s@   t  }t }|t|_|j}|  | |t  | |t d S )N)r   r
   r   r   r   r   r   )r   rc   ry   returnedr   r   r   test_propertymock_returnvalue  s    
z*TestCallList.test_propertymock_returnvalueN)r   r   r   r   r   r   r   r   r   r   r   r     s   r   __main__)r   r   r   unittestunittest.mockr   r   r   r   r   r   r   r	   r
   r   	functoolsr   r   r   TestCaser   r2   rk   r   r   mainr   r   r   r   <module>   s&   ,
3      [G