o
    KXhp                     @   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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G dd dejZedkrse  dS dS )    N)
call_Callcreate_autospec	MagicMockMockANY	_CallListpatchPropertyMock	_callable)datetimepartialc                   @   s&   e Zd Zdd Zdd ZdddZdS )		SomeClassc                 C      d S N selfabr   r   L/opt/python-3.10.19/usr/lib/python3.10/unittest/test/testmock/testhelpers.pyone       zSomeClass.onec                 C   r   r   r   r   r   r   r   two   r   zSomeClass.twoNc                 C   r   r   r   r   r   r   r   r   three   r   zSomeClass.threer   )__name__
__module____qualname__r   r   r   r   r   r   r   r      s    r   c                   @   <   e Zd Zdd Zd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   strr   r   r   r   	test_repr"   s   zAnyTest.test_reprc                 C   s,   t  }|t t d |jttd d S r#   )r   r   nowr(   r   r)   r   r   r   test_any_and_datetime'   s   zAnyTest.test_any_and_datetimec                 C   s   t  }G dd dt}t | fD ]C}|  ||||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d S )Nc                   @      e Zd Zdd Zdd ZdS )z9AnyTest.test_any_mock_calls_comparison_order.<locals>.Fooc                 S   r   r   r   r   otherr   r   r   __eq__1   r   z@AnyTest.test_any_mock_calls_comparison_order.<locals>.Foo.__eq__c                 S   r   r   r   r2   r   r   r   __ne__2   r   z@AnyTest.test_any_mock_calls_comparison_order.<locals>.Foo.__ne__N)r   r   r    r4   r5   r   r   r   r   Foo0       r6   r%   bar)Zzingaalpha)Za1Zz99)
r   r'   r   r/   
reset_mockmethodr   r   r&   
mock_calls)r   r*   r6   dexpectedr   r   r   $test_any_mock_calls_comparison_order.   s   z,AnyTest.test_any_mock_calls_comparison_orderc                 C   sN   G dd d}t  }|| d |ttdg |td |td d S )Nc                   @      e Zd Zdd ZdS )z%AnyTest.test_any_no_spec.<locals>.Fooc                 S   r   r   r   r2   r   r   r   r4   F   r   z,AnyTest.test_any_no_spec.<locals>.Foo.__eq__Nr   r   r    r4   r   r   r   r   r6   E       r6      r   assert_has_callsr   r   r(   assert_any_callr   r6   r*   r   r   r   test_any_no_specC   s   zAnyTest.test_any_no_specc                 C   sR   G dd d}t |d}|| d |ttdg |td |td d S )Nc                   @   rA   )z*AnyTest.test_any_and_spec_set.<locals>.Fooc                 S   r   r   r   r2   r   r   r   r4   Q   r   z1AnyTest.test_any_and_spec_set.<locals>.Foo.__eq__NrB   r   r   r   r   r6   P   rC   r6   )specrD   rE   rH   r   r   r   test_any_and_spec_setN   s   
zAnyTest.test_any_and_spec_setN)	r   r   r    r+   r.   r0   r@   rI   rK   r   r   r   r   r"      s    r"   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+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   )rM   r   rM   r   r$   r9   r   bazZspamrD         )rM   rR   rR   )rD   rS      )r%   rU   )rM   rU   rU   )r9   rU   r9   r   rT   r   r&   assertNotEqual)r   kallr   r   r   test_call_with_call\   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$   rN   r%   r   r%   )r   r&   r   argsr   r   r   test_empty__Call   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[   rN   )r9   rO   r9   rW   r\   r   r   r   test_named_empty_call   s   zCallTest.test_named_empty_callc                 C   sf   t di f}| |d | |d | |ddi f | |di f | |jd | |ji  d S )NrR   rQ   r%   rR   r%   )r   r&   r]   kwargsr\   r   r   r   test_call_with_args   s   zCallTest.test_call_with_argsc                 C   sh   t ddi f}| |d | |ddi f | |jd | |ji  | |d | |di f d S )Nr%   rR   r`   rQ   )r   r&   r]   ra   rX   r\   r   r   r   test_named_call_with_args   s   z"CallTest.test_named_call_with_argsc              	   C   s   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 | |jd | |jtddd d S )Nr   rT   rV   r   r   r%   )r   dictr&   r]   ra   r\   r   r   r   test_call_with_kwargs   s   zCallTest.test_call_with_kwargsc              	   C   s   t ddtdddf}| |dtdddf | |ddtdddf | |jd | |jtddd | |tdddf | |dtdddf d S )Nr%   r   rT   rV   rd   )r   re   r&   r]   ra   rX   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 )NrR   rD   rS   rT   )r   r&   r   assertInr\   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 )NrQ   rD   rS   rT   rD   rS   )rX   r   r   assertFalse
assertTruer   r   r   r   test_call_ne   s   "zCallTest.test_call_nec                 C   s8   t d}dd | tfD ]}| || | ||k q
d S )NrQ   rD   )r   intrX   rk   )r   rY   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()rR   r   r   zcall(1, 2, 3, a='b')r9   zcall.bar(1, 2, 3, a='b')r   rD   zcall(1)thing)zzzcall(zz='thing')z
call().foorT   r   zcall().foo.bar().bingrS   zcall().foo(1, 2, a=3)zcall()()z	call()(2)zcall()().bar().baz.beep(1))
r&   r,   r   r   r-   r%   r9   bingrP   beepr   r   r   r   r.      s6   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 )NrM   r   r%   r9   rT   rV   )r   r   r8   rD   rS      rd   )r&   r   r   call_args_listr)   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 )NrD   r%   )rD   Zeggs)fishzbar.bazr   ry   rS   rT   rv   rd   )r&   r   r%   r9   rP   r   method_callsr)   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 )NrD   rS   rT   rV   rs   z().foo().barrT   rd   rv   )r   r%   r9   r&   re   r   Z	call_argsrX   rw   r=   rP   ru   	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 NrD   xrS   )r   r%   r&   rX   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 r   )r   r%   r9   r&   rX   r   r   r   r   test_nested_calls_not_equal2  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 )NrD   rS   rT   rV      )r   r&   r   r~   r=   r<   rn   r%   r9   rP   __int__)r   r*   rY   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 r   )r&   r   r   r   rn   r=   r   mr   r   r   test_call_anyO  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 )	Nrj   r   rT   T)r   rS   r   rD   )r   r&   len)r   r]   Z
other_argsr   r   r   test_two_args_callX  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   )r9   ZbarzrM   r   ZhelloZworld)r&   r   r   r   r   r   test_call_with_namea  s    zCallTest.test_call_with_namec              	   C   s   t  }|  d   | |jt t  t  dt    g t  }d|  d< | |jt t  t  ddg t  }t|   | |jt t  t   g d S )Nr9   rD   )	r   r%   r&   r=   r   __getitem____setitem__iter__iter__r   r   r   r   test_dunder_callf  s$   *zCallTest.test_dunder_callN)r   r   r    rZ   r^   r_   rb   rc   rf   rg   ri   rm   rp   r.   rx   r{   r   r   r   r   r   r   r   r   r   r   r   r   rL   Z   s,    %		rL   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#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMS )N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%   rD   rS   rT   rV   rs   )	assertRaisesAttributeErrorgetattrr   r(   AssertionError	TypeErrorr   r   r)   r   r   r   _check_someclass_mock}  s.   



z'SpecSignatureTest._check_someclass_mockc                 C   s*   t t}| | t t }| | d S r   )r   r   r   r)   r   r   r   
test_basic  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   r   r   r   r   r   r   r   f  r   z>SpecSignatureTest.test_create_autospec_return_value.<locals>.fr%   return_valuec                   @      e Zd ZdS )z@SpecSignatureTest.test_create_autospec_return_value.<locals>.FooNr   r   r    r   r   r   r   r6         r6   )r   r&   r'   )r   r   r*   r6   r   r   r   !test_create_autospec_return_value  s   z3SpecSignatureTest.test_create_autospec_return_valuec                 C   s,   t t}t| |  | |jjd d S )Nr   )r   rn   r;   r&   r   Z
call_countr   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                   @   rA   )z;SpecSignatureTest.test_mocking_unbound_methods.<locals>.Fooc                 S   r   r   r   )r   r%   r   r   r   r%     r   z?SpecSignatureTest.test_mocking_unbound_methods.<locals>.Foo.fooNr   r   r    r%   r   r   r   r   r6     rC   r6   r%   rD   )r'   r	   startr%   r(   )r   r6   pZmock_foor   r   r   test_mocking_unbound_methods  s
   z.SpecSignatureTest.test_mocking_unbound_methodsc                 C   s.   G dd dt }t|dd}| |jd d S )Nc                   @      e Zd ZdZdS )zESpecSignatureTest.test_create_autospec_keyword_arguments.<locals>.FoorT   Nr   r   r    r   r   r   r   r   r6         r6   3rs   )r'   r   r&   r   )r   r6   r   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   r   r   r   rd   r   r   r   r%     r   zJSpecSignatureTest.test_create_autospec_keyword_only_arguments.<locals>.foorD   rS   rT   )r   r(   r   r   )r   r%   r   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   r   r   r   rs   r   r   r   r     r   z@SpecSignatureTest.test_function_as_instance_attribute.<locals>.frt   )r   r   r   r(   )r   objr   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>.FooNr   r   r   r   r   r6     r   r6   rT   )r   appendr(   r   r   r   r'   r%   )r   r*   r6   r   r   r   test_spec_as_list  s   
z#SpecSignatureTest.test_spec_as_listc                 C   s6   G dd dt }t|}||jfD ]}| | qd S )Nc                   @      e Zd Ze ZdS )z.SpecSignatureTest.test_attributes.<locals>.SubNr   r   r    r   attrr   r   r   r   Sub      
r   )r   r   r   r   )r   r   Zsub_mockr*   r   r   r   test_attributes  s
   z!SpecSignatureTest.test_attributesc                    s   G dd dt  G  fdddt }t|}|d | t |  W d    n1 s/w   Y  | t |dd W d    d S 1 sKw   Y  d S )Nc                   @   rA   )zVSpecSignatureTest.test_spec_has_descriptor_returning_function.<locals>.CrazyDescriptorc                 S   s   |d u rdd S d S )Nc                 S   r   r   r   r   r   r   r   <lambda>  r   zpSpecSignatureTest.test_spec_has_descriptor_returning_function.<locals>.CrazyDescriptor.__get__.<locals>.<lambda>r   )r   r   Ztype_r   r   r   __get__     z^SpecSignatureTest.test_spec_has_descriptor_returning_function.<locals>.CrazyDescriptor.__get__Nr   r   r    r   r   r   r   r   CrazyDescriptor      r   c                       s   e Zd Z  ZdS )zNSpecSignatureTest.test_spec_has_descriptor_returning_function.<locals>.MyClassN)r   r   r    	some_attrr   r   r   r   MyClass  s    
r   rD   rS   )r'   r   r   r   r   )r   r   r*   r   r   r   +test_spec_has_descriptor_returning_function  s   

"z=SpecSignatureTest.test_spec_has_descriptor_returning_functionc                    s   G  fdddt    }| t |j W d    n1 s w   Y  | |dd t|}|d | t |  W d    n1 sKw   Y  | t |dd W d    d S 1 sgw   Y  d S )Nc                       s&   e Zd Z fddZdd Z  ZS )zISpecSignatureTest.test_spec_has_function_not_in_bases.<locals>.CrazyClassc                    s   t  |  dg S )Ncrazy)super__dir__r   )
CrazyClass	__class__r   r   r     s   zQSpecSignatureTest.test_spec_has_function_not_in_bases.<locals>.CrazyClass.__dir__c                 S   s   |dkrdd S t |)Nr   c                 S      | S r   r   r   r   r   r   r     r   zgSpecSignatureTest.test_spec_has_function_not_in_bases.<locals>.CrazyClass.__getattr__.<locals>.<lambda>r   )r   itemr   r   r   __getattr__  s   zUSpecSignatureTest.test_spec_has_function_not_in_bases.<locals>.CrazyClass.__getattr__)r   r   r    r   r   __classcell__r   r   )r   r   r     s    r   *   rD   rS   )r'   r   r   r3   r&   r   r   r   )r   instr*   r   r   r   #test_spec_has_function_not_in_bases	  s   


"z5SpecSignatureTest.test_spec_has_function_not_in_basesc                 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   r   r   r   )r   argr   r   r   r9   '  r   zKSpecSignatureTest.test_builtin_functions_types.<locals>.BuiltinSubclass.barN)r   r   r    r9   sortedr   r   r   r   r   BuiltinSubclass&      r   rT   r%   r9   rD   rS   )listr   r   r(   r   r   r   r9   r   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                   @   r   )z0SpecSignatureTest.test_method_calls.<locals>.SubNr   r   r   r   r   r   ?  r   r   rD   rS   rT   )
r   r   r   r   r   r   r&   rz   r   extend)r   r   r*   r?   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   U  r   r   r%   )	r   r   r&   r   r   rn   r   assertIsInstancer   r   r   r   r   test_magic_methodsT  s   z$SpecSignatureTest.test_magic_methodsc                 C   s`   G dd dt }|| fD ] }t|dd}| | | tt|dd | tt|jdd qd S )Nc                   @   r   )z,SpecSignatureTest.test_spec_set.<locals>.SubNr   r   r   r   r   r   c  r   r   T)Zspec_setr%   r9   )r   r   r   r   r   setattrr   )r   r   rJ   r*   r   r   r   test_spec_setb  s   
zSpecSignatureTest.test_spec_setc                 C   s   G dd dt }G dd d|}G dd dt|}|| || || fD ] }t|}|dd |jdd |d	d
 |jd	d
 q$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   r   r   r   )clsr   r   r   r   r   r   p     z1SpecSignatureTest.test_descriptors.<locals>.Foo.fc                 S   r   r   r   rd   r   r   r   gr  r   z1SpecSignatureTest.test_descriptors.<locals>.Foo.gN)r   r   r    classmethodr   staticmethodr   r   r   r   r   r6   o  s
    
r6   c                   @   r   )z/SpecSignatureTest.test_descriptors.<locals>.BarNr   r   r   r   r   Baru      r   c                   @   r   )z/SpecSignatureTest.test_descriptors.<locals>.BazNr   r   r   r   r   Bazw  r   r   rD   rS   rT   rV   )r'   r   r   r   assert_called_once_withr   )r   r6   r   r   rJ   r*   r   r   r   test_descriptorsn  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   r   r   r   r   r   r   r   r     r   z-SpecSignatureTest.test_recursive.<locals>.A.azfoo bar bazN)r   r   r    r   r%   r9   r   r   r   r   A  r   r   )r'   Br   rk   Zcalledr   r&   rz   r   ZassertIsr%   r9   assertIsNotlowerr   r   r(   )r   r   r*   r   r   r   test_recursive  s   

z SpecSignatureTest.test_recursivec                 C   s^  G dd dt }t|}| ||  || fD ]&}|jdd |jjdd |jd | t|jdd | tt|d q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   r   r   r   )r   r   r   r   r   r     r   zBSpecSignatureTest.test_spec_inheritance_for_classes.<locals>.Foo.ac                   @   rA   )zDSpecSignatureTest.test_spec_inheritance_for_classes.<locals>.Foo.Barc                 S   r   r   r   )r   yr   r   r   r     r   zFSpecSignatureTest.test_spec_inheritance_for_classes.<locals>.Foo.Bar.fNr   r   r    r   r   r   r   r   r     rC   r   N)r   r   r    r   r'   r   r   r   r   r   r6     s    r6   r   r   r%   r9   r   rv   )r   r   )r'   r   r   r   r(   r   r   r   r   r   r   )r   r6   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                   @   r   )z+SpecSignatureTest.test_inherit.<locals>.FoorT   Nr   r   r   r   r   r6     r   r6   r   )r'   r6   r   r   r   r   r   )r   r6   r*   instanceZ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 )NrD   r%   g      ?y              ?FT)r   rn   r-   re   r   setfloatcomplexr   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   r   r   r   rd   r   r   r   r     r   z*SpecSignatureTest.test_function.<locals>.frD   rS   r   rd   rT   rV   )r   r   r   r(   r   r   r   r*   r   r   r   test_function  s   
zSpecSignatureTest.test_functionc                    s   G dd dt  G  fdddt }| |ddd t|| tfdd	 | ddjj | 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 u rt dd S )Nz$Can only be accessed via an instancer   )r   r   typer   r   r   r     r   zCSpecSignatureTest.test_skip_attributeerrors.<locals>.Raiser.__get__r   r   r   r   r   r   Raiser      r   c                       s   e Zd Z  Zedd ZdS )z@SpecSignatureTest.test_skip_attributeerrors.<locals>.RaiserClassc                 S   s   | | S r   r   rd   r   r   r   existing  s   zISpecSignatureTest.test_skip_attributeerrors.<locals>.RaiserClass.existingN)r   r   r    raiserr   r   r   )r   r   r   RaiserClass  s    r   rD   rS   rT   c                    s     dddS )NrD   rS   rT   )r   r   sr   r   r     s    z=SpecSignatureTest.test_skip_attributeerrors.<locals>.<lambda>c                      s    j S r   )Znonexistingr   r   r   r   r     s    )r'   r&   r   r   r   r   r   r   r   r%   r9   )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>.FoorT   c                 S   r   r   r   r   r   r   r   __init__  r   z<SpecSignatureTest.test_signature_class.<locals>.Foo.__init__Nr|   r   r   r    r  r   r   r   r   r6     r   r6   rD   rs   rS   rV   r   rd   )r'   r   r   r   r   r   r(   rH   r   r   r   test_signature_class  s   

z&SpecSignatureTest.test_signature_classc                 C   s   G dd dt }t| d S )Nc                   @   r   )z6SpecSignatureTest.test_class_with_no_init.<locals>.FooNr   r   r   r   r   r6   *  r   r6   )r'   r   )r   r6   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                   @   r1   )z;SpecSignatureTest.test_signature_callable.<locals>.Callablec                 S   r   r   r   )r   r   r   r   r   r   r  1  r   zDSpecSignatureTest.test_signature_callable.<locals>.Callable.__init__c                 S   r   r   r   r   r   r   r   __call__2  r   zDSpecSignatureTest.test_signature_callable.<locals>.Callable.__call__N)r   r   r    r  r  r   r   r   r   Callable0  r7   r  rD   rS   r   r   r   rs   )r'   r   r   r   r   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                   @   rA   )zASpecSignatureTest.test_signature_noncallable.<locals>.NonCallablec                 S   r   r   r   r   r   r   r   r  M  r   zJSpecSignatureTest.test_signature_noncallable.<locals>.NonCallable.__init__Nr  r   r   r   r   NonCallableL  rC   r  r   )r'   r   r   r   r   )r   r  r*   r   r   r   r   test_signature_noncallableK  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    r9   r   r   r   r   r6   ]  r   r6   )r'   r   r9   assertNotIsInstancer   r%   r   )r   r6   r*   Z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                   @   rA   )zMSpecSignatureTest.test_autospec_functions_with_self_in_odd_place.<locals>.Fooc                 S   r   r   r   )r   r   r   r   r   r   j  r   zOSpecSignatureTest.test_autospec_functions_with_self_in_odd_place.<locals>.Foo.fNr   r   r   r   r   r6   i  rC   r6   
   r   )r'   r   r   r(   )r   r6   r   r   r   r   .test_autospec_functions_with_self_in_odd_placeh  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 r   )ro   )r   ro   r   r   r   r  w  s   
zLSpecSignatureTest.test_autospec_data_descriptor.<locals>.Descriptor.__init__Nc                 S   r   r   r   )r   r   r   r   r   r   r   z  r   zKSpecSignatureTest.test_autospec_data_descriptor.<locals>.Descriptor.__get__c                 S   r   r   r   )r   r   ro   r   r   r   __set__}  r   zKSpecSignatureTest.test_autospec_data_descriptor.<locals>.Descriptor.__set__r   )r   r   r    r  r   r  r   r   r   r   
Descriptorv  s    
r  c                   @   r   )zCSpecSignatureTest.test_autospec_data_descriptor.<locals>.MyPropertyNr   r   r   r   r   
MyProperty  r   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   r   r   r   r   r   r   r   prop  r   zASpecSignatureTest.test_autospec_data_descriptor.<locals>.Foo.propc                 S   r   r   r   r   r   r   r   subprop  r   zDSpecSignatureTest.test_autospec_data_descriptor.<locals>.Foo.subpropr   N)r   r   r    	__slots__propertyr  r  descr   )r  r  r   r   r6     s    

r6   c                    sH     | t | ddd | ddd | ddd | jddd d S )NrD   rS   rT   rV   r   rv   )r   r   abcr   )Z	mock_attrr   r   r   check_data_descriptor  s
   zNSpecSignatureTest.test_autospec_data_descriptor.<locals>.check_data_descriptor)r'   r  r   r  r  r  r  )r   r6   r%   r  r   )r  r  r   r   test_autospec_data_descriptoru  s   	
	

z/SpecSignatureTest.test_autospec_data_descriptorc                 C   s\   t tjt }| | t t|}|  |  |  |ddd |ddd d S )NrV   r   rv   )	types
MethodTypetimectimer   r-   r   r   r;   )r   methZmockedr   r   r   'test_autospec_on_bound_builtin_function  s   z9SpecSignatureTest.test_autospec_on_bound_builtin_functionc                 C   s0   G dd d}| }t |}| t|d d S )Nc                   @   rA   )zESpecSignatureTest.test_autospec_getattr_partial_function.<locals>.Fooc                 S   s   t dd |S )Nc                 S   r   r   r   )namer   r   r   r     r   zcSpecSignatureTest.test_autospec_getattr_partial_function.<locals>.Foo.__getattr__.<locals>.<lambda>r   )r   Z	attributer   r   r   r     s   zQSpecSignatureTest.test_autospec_getattr_partial_function.<locals>.Foo.__getattr__N)r   r   r    r   r   r   r   r   r6     r   r6   r   )r   rk   hasattr)r   r6   proxyZ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   r   r   r   r	  r   r   r   myfunc  r   z=SpecSignatureTest.test_spec_inspect_signature.<locals>.myfuncrD   rS   r	  )r   r&   inspect	signaturer=   r   r   r   )r   r'  r*   r   r   r   test_spec_inspect_signature  s   
 z-SpecSignatureTest.test_spec_inspect_signaturec              	   C   s   ddt dt dt dt fdd}| |dd	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 r   r   )r   r   r+  r   r   r   r%     s   zFSpecSignatureTest.test_spec_inspect_signature_annotations.<locals>.foorD   rS   rT   )r+  rv   rV   )r  )	rn   r&   r   r(  r)  r=   r   r   r   )r   r%   r*   r   r   r   'test_spec_inspect_signature_annotations  s   $z9SpecSignatureTest.test_spec_inspect_signature_annotationsc                 C   s"   dd }t |}| |jd d S )Nc                   S   s   dS )NZnoper   r   r   r   r   r     r   z>SpecSignatureTest.test_spec_function_no_name.<locals>.<lambda>Zfuncopy)r   r&   r   )r   funcr*   r   r   r   test_spec_function_no_name  s   z,SpecSignatureTest.test_spec_function_no_namec                 C   sh   dd }t |}|d |tdg | t |tdg W d    d S 1 s-w   Y  d S )Nc                 S   r   r   r   rs   r   r   r   r     r   z@SpecSignatureTest.test_spec_function_assert_has_calls.<locals>.frD   rS   )r   rF   r   r   r   r   r   r   r   #test_spec_function_assert_has_calls  s   "z5SpecSignatureTest.test_spec_function_assert_has_callsc                 C   s\   dd }t |}|d |d | t |d W d    d S 1 s'w   Y  d S )Nc                 S   r   r   r   rs   r   r   r   r     r   z?SpecSignatureTest.test_spec_function_assert_any_call.<locals>.frD   rS   )r   rG   r   r   r   r   r   r   "test_spec_function_assert_any_call  s   
"z4SpecSignatureTest.test_spec_function_assert_any_callc                 C   sv   dd }t  }t||d}|dd | |jtdg | |jtdg |  | |jg  | |jg  d S )Nc                 S   r   r   r   rs   r   r   r   r     r   z:SpecSignatureTest.test_spec_function_reset_mock.<locals>.fr   rD   rS   )r   r   r&   r=   r   r;   )r   r   rvr*   r   r   r   test_spec_function_reset_mock  s   z/SpecSignatureTest.test_spec_function_reset_mockN))r   r   r    r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r
  r  r  r  r  r"  r&  r*  r-  r/  r0  r1  r3  r   r   r   r   r   {  sN    


&,		r   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 tddtddtddtddfD ]	}| ||j q0t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 )	NrD   rS   rT   rs   rV   rv   r   ry   )r   r   rw   r   r   rh   ZassertNotIn)r   r*   rY   Z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 )	NrD   rS   rT   rs   ry   Zdog)catzU[call(1, 2),
 call.foo(a=3),
 call.foo.bar(),
 call.foo.bar().baz('fish', cat='dog')])r   r%   r9   rP   r&   r-   r=   )r   r*   r?   r   r   r   test_call_list_str  s   
zTestCallList.test_call_list_strc                 C   s   t dt td}| }z4tj |  t }|j |  | |j	t
 t
 g d|_| |j	t
 t
 t
dg W |  d S |  w )Nz%s.SomeClass.one)Znew_callablerT   )r	   r   r
   r   r   r   r   r(   r&   r=   r   stop)r   r   r*   r  r   r   r   test_propertymock&  s   zTestCallList.test_propertymockc                 C   s@   t  }t }|t|_|j}|  | |t  | |t d S r   )r   r
   r   r%   r   r   r  )r   r   r   Zreturnedr   r   r   test_propertymock_returnvalue8  s   
z*TestCallList.test_propertymock_returnvalueN)r   r   r    r5  r7  r9  r:  r   r   r   r   r4    s
    r4  c                   @   r!   )TestCallablePredicatec                 C   s(   t tttttfD ]	}| t| qd S r   )r-   bytesrn   r   tupler   rl   r   )r   r   r   r   r   	test_typeE  s   zTestCallablePredicate.test_typec                 C   s&   G dd d}| }|  t| d S )Nc                   @   rA   )z>TestCallablePredicate.test_call_magic_method.<locals>.Callablec                 S   r   r   r   r   r   r   r   r  K  r   zGTestCallablePredicate.test_call_magic_method.<locals>.Callable.__call__N)r   r   r    r  r   r   r   r   r  J  rC   r  )rl   r   )r   r  r   r   r   r   test_call_magic_methodI  s   z,TestCallablePredicate.test_call_magic_methodc                 C   "   G dd d}|  t|j d S )Nc                   @      e Zd Zedd ZdS )zATestCallablePredicate.test_staticmethod.<locals>.WithStaticMethodc                   S   r   r   r   r   r   r   r   
staticfuncQ  r   zLTestCallablePredicate.test_staticmethod.<locals>.WithStaticMethod.staticfuncN)r   r   r    r   rB  r   r   r   r   WithStaticMethodP      rC  )rl   r   rB  )r   rC  r   r   r   test_staticmethodO     z'TestCallablePredicate.test_staticmethodc                 C   r@  )Nc                   @      e Zd ZedZdS )zMTestCallablePredicate.test_non_callable_staticmethod.<locals>.BadStaticMethodN)r   r   r    r   not_callabler   r   r   r   BadStaticMethodV  rC   rI  rk   r   rH  )r   rI  r   r   r   test_non_callable_staticmethodU     z4TestCallablePredicate.test_non_callable_staticmethodc                 C   r@  )Nc                   @   rA  )z?TestCallablePredicate.test_classmethod.<locals>.WithClassMethodc                 S   r   r   r   )r   r   r   r   	classfunc\  r   zITestCallablePredicate.test_classmethod.<locals>.WithClassMethod.classfuncN)r   r   r    r   rM  r   r   r   r   WithClassMethod[  rD  rN  )rl   r   rM  )r   rN  r   r   r   test_classmethodZ  rF  z&TestCallablePredicate.test_classmethodc                 C   r@  )Nc                   @   rG  )zKTestCallablePredicate.test_non_callable_classmethod.<locals>.BadClassMethodN)r   r   r    r   rH  r   r   r   r   BadClassMethoda  rC   rP  rJ  )r   rP  r   r   r   test_non_callable_classmethod`  rL  z3TestCallablePredicate.test_non_callable_classmethodN)	r   r   r    r>  r?  rE  rK  rO  rQ  r   r   r   r   r;  C  s    r;  __main__)r(  r  r  ZunittestZunittest.mockr   r   r   r   r   r   r   r	   r
   r   r   	functoolsr   r'   r   ZTestCaser"   rL   r   r4  r;  r   mainr   r   r   r   <module>   s.    0E  #     G#