a
    zes?                     @   sb   d dl Z d dlZd dlZd dlmZ d dlmZmZmZm	Z	 G dd dej
Zedkr^e  dS )    N)iscoroutinefunction)	AsyncMockMock	MagicMock_magicsc                   @   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$dES )FTestMockingMagicMethodsc                 C   sF   t  }| t|d t  |_| t|d |`| t|d d S )N__getitem__)r   assertFalsehasattrr   
assertTrueselfmock r   =/usr/lib/python3.9/unittest/test/testmock/testmagicmethods.pytest_deleting_magic_methods   s    z3TestMockingMagicMethods.test_deleting_magic_methodsc                    sH   t    `| t fdd t    d   `| t fdd d S )Nc                      s    d S Nfoor   r   r   r   r   <lambda>       z<TestMockingMagicMethods.test_magicmock_del.<locals>.<lambda>r   c                      s    d S r   r   r   r   r   r   r       r   )r   r   assertRaises	TypeErrorr   r   r   r   test_magicmock_del   s    z*TestMockingMagicMethods.test_magicmock_delc                 C   sd   t  }dd }||_| |j| | |d |df | |d|df ||_| |j| d S )Nc                 S   s   | dfS )Nfishr   r   namer   r   r   f%   s    z=TestMockingMagicMethods.test_magic_method_wrapping.<locals>.fr   r   )r   r   ZassertIsNotassertEqualZassertIs)r   r   r   r   r   r   test_magic_method_wrapping#   s    z2TestMockingMagicMethods.test_magic_method_wrappingc                    sD   t  }t   t tg d|_| t|g  | t fdd d S )Nreturn_valuec                      s   t  S N)listr   Zmock2r   r   r   7   r   zSTestMockingMagicMethods.test_magic_methods_isolated_between_mocks.<locals>.<lambda>)r   iter__iter__r   r$   r   r   )r   Zmock1r   r%   r   )test_magic_methods_isolated_between_mocks1   s
    zATestMockingMagicMethods.test_magic_methods_isolated_between_mocksc                 C   s<   t  }| t|dt|  dd |_| t|d d S )Nz<Mock id='%s'>c                 S   s   dS r   r   sr   r   r   r   =   r   z3TestMockingMagicMethods.test_repr.<locals>.<lambda>r   )r   r   reprid__repr__r   r   r   r   	test_repr:   s    
z!TestMockingMagicMethods.test_reprc                 C   s:   t  }| t|t| dd |_| t|d d S )Nc                 S   s   dS r   r   r)   r   r   r   r   D   r   z2TestMockingMagicMethods.test_str.<locals>.<lambda>r   )r   r   strobject__str__r   r   r   r   test_strA   s    
z TestMockingMagicMethods.test_strc                    s   t  | tfdd fdd}fdd}| t| | t| i   fdd} fd	d
} fdd}|_|_|_| tfdd dd< |  ddi | d d d= |  i  d S )Nc                      s    d S r   r   r   r   r   r   r   K   r   z;TestMockingMagicMethods.test_dict_methods.<locals>.<lambda>c                      s
    d= d S r   r   r   r   r   r   _delL   s    z7TestMockingMagicMethods.test_dict_methods.<locals>._delc                      s   d d< d S )N   r   r   r   r   r   r   _setN   s    z7TestMockingMagicMethods.test_dict_methods.<locals>._setc                    s    | S r#   r   r*   r   _dictr   r   getitemT   s    z:TestMockingMagicMethods.test_dict_methods.<locals>.getitemc                    s   | |< d S r#   r   )r*   r   valuer7   r   r   setitemV   s    z:TestMockingMagicMethods.test_dict_methods.<locals>.setitemc                    s
    |= d S r#   r   r6   r7   r   r   delitemX   s    z:TestMockingMagicMethods.test_dict_methods.<locals>.delitemc                      s    d S r   r   r   r   r   r   r   _   r   barr   )r   r   r   __setitem__r   __delitem__KeyErrorr   )r   r3   r5   r9   r;   r<   r   )r8   r   r   test_dict_methodsH   s&    z)TestMockingMagicMethods.test_dict_methodsc                    s   t   } d _| t fdd  fdd}| _|  d   |  jd  `dd }| t|  | _ d	7  |  | |  jd
 | t fdd | _| d    |  jd d S )Nr   c                      s    d S Nr4   r   r   r   r   r   r   k   r   z6TestMockingMagicMethods.test_numeric.<locals>.<lambda>c                    s     j |7  _ | S r#   r:   r   otherr   r   r   addm   s    z1TestMockingMagicMethods.test_numeric.<locals>.addr4   c                 S   s   | d7 } d S rB   r   r   r   r   r   iaddu   s    z2TestMockingMagicMethods.test_numeric.<locals>.iadd   	   c                      s   d  S rB   r   r   r   r   r   r   }   r         )r   r:   r   r   __add__r   __iadd____radd__)r   originalrF   rG   r   r   r   test_numericg   s$    
z$TestMockingMagicMethods.test_numericc                    s   t   } d _| t fdd  fdd}| _|  d   |  jd  `dd	 }| t|  | _ d
  |  | |  jd | t fdd | _| d    |  jd d S )N    c                      s    d S )N   r   r   r   r   r   r      r   z7TestMockingMagicMethods.test_division.<locals>.<lambda>c                    s     j |  _ | S r#   rC   rD   r   r   r   truediv   s    z6TestMockingMagicMethods.test_division.<locals>.truedivrR   rK   c                 S   s   | d } d S )N   r   r   r   r   r   itruediv   s    z7TestMockingMagicMethods.test_division.<locals>.itruediv   c                      s   d  S )NrV   r   r   r   r   r   r      r   g      ?rT   )r   r:   r   r   __truediv__r   __itruediv____rtruediv__)r   rO   rS   rU   r   r   r   test_division   s$    
z%TestMockingMagicMethods.test_divisionc                 C   s>   t  }| t|t | dd }||_| t|d d S )Nc                 S   s   dS rB   r   r)   r   r   r   _hash   s    z0TestMockingMagicMethods.test_hash.<locals>._hashr4   )r   r   hash__hash__)r   r   r[   r   r   r   	test_hash   s
    z!TestMockingMagicMethods.test_hashc                 C   s0   t  }| t| dd |_| t| d S )Nc                 S   s   dS )NFr   r)   r   r   r   r      r   z6TestMockingMagicMethods.test_nonzero.<locals>.<lambda>)r   r   bool__bool__r	   r   mr   r   r   test_nonzero   s    
z$TestMockingMagicMethods.test_nonzeroc                 C   s"  t  }dd }| |_ |_ |_|_| |dk  | |dk | |dk | |dk | tdd  | tdd  | tdd  | tdd  | td	d  | td
d  | tdd  | tdd  | tdd  | tdd  | tdd  | tdd  d S )Nc                 S   s   dS )NTr   r*   or   r   r   comp   s    z5TestMockingMagicMethods.test_comparison.<locals>.compr4   c                   S   s   t  t k S r#   r   r0   r   r   r   r   r      r   z9TestMockingMagicMethods.test_comparison.<locals>.<lambda>c                   S   s   t  t k S r#   r0   r   r   r   r   r   r      r   c                   S   s   t  t  k S r#   r   r   r   r   r   r      r   c                   S   s   t  t kS r#   rg   r   r   r   r   r      r   c                   S   s   t  t kS r#   rh   r   r   r   r   r      r   c                   S   s   t  t  kS r#   ri   r   r   r   r   r      r   c                   S   s   t  t kS r#   rg   r   r   r   r   r      r   c                   S   s   t  t kS r#   rh   r   r   r   r   r      r   c                   S   s   t  t  kS r#   ri   r   r   r   r   r      r   c                   S   s   t  t kS r#   rg   r   r   r   r   r      r   c                   S   s   t  t kS r#   rh   r   r   r   r   r      r   c                   S   s   t  t  kS r#   ri   r   r   r   r   r      r   )r   __lt____gt____le____ge__r   r   r   )r   r   rf   r   r   r   test_comparison   s&    z'TestMockingMagicMethods.test_comparisonc                 C   s$  t  t fD ]}| ||kd | ||kt | ||kd | ||kt | |t kd | |t kd dd }||_| |dk | |dk dd }||_	| |dk | |dk qt }d|j_
| |dkt | |dkd d|j	_
| |dkt | |dkd d S )	NTFc                 S   s   |dkS rB   r   rD   r   r   r   eq   s    z1TestMockingMagicMethods.test_equality.<locals>.eqr4   rT   c                 S   s   |dkS rB   r   rD   r   r   r   ne   s    z1TestMockingMagicMethods.test_equality.<locals>.ne)r   r   r   assertIsInstancer_   r0   __eq__r   r	   __ne__r"   )r   r   ro   rp   r   r   r   test_equality   s,    z%TestMockingMagicMethods.test_equalityc                    s   t   | tt  | tt  | t fdd dd  _| t d dd  _| d  | 	d  dd  _
| t td d S )	Nc                      s   d v S r   r   r   r   r   r   r      r   z@TestMockingMagicMethods.test_len_contains_iter.<locals>.<lambda>c                 S   s   dS )NrH   r   r)   r   r   r   r      r   rH   c                 S   s   |dkS rB   r   rd   r   r   r   r      r   r4   c                 S   s   t dS )N	foobarbaz)r&   r)   r   r   r   r      r   ru   )r   r   r   lenr&   __len__r   __contains__ZassertInassertNotInr'   r$   r   r   r   r   test_len_contains_iter   s    


z.TestMockingMagicMethods.test_len_contains_iterc                 C   s   t  }tg d|j_| t|g d dt|d_| t|d | t	| t
D ]}| t|| qX| t|d d S )N   rR   r4   Fr`   Z__nonzero__Z__imaginary__)r   r&   r'   r"   r   r$   getattrr	   r
   r_   r   r   )r   r   entryr   r   r   test_magicmock   s    z&TestMockingMagicMethods.test_magicmockc                 C   sr   t  }| |t kt | |t kt | |t kd | |t kd | ||kd | ||kd d S )NFT)r   rq   r0   r_   r   r   r   r   r   test_magic_mock_equality  s    z0TestMockingMagicMethods.test_magic_mock_equalityc                 C   sT  t  }| t|d | t|d | t|d | t | | t|d | t|g  | t	|t
| | t|t| | t| | t||  | t||  | t||  | t||  | t|j | t|j | |jt  | |jt  | t|d | t|d d S Nr|   y              ?g      ?r   Z0o1Z0x1)r   r   intcomplexfloatry   r0   rv   r$   r\   r]   r/   r1   r   r_   round	__round__mathtrunc	__trunc__floor	__floor__ceil__ceil__r   	__aexit__
__aenter__rq   octhexr   r   r   r   test_asyncmock_defaults  s(    z/TestMockingMagicMethods.test_asyncmock_defaultsc                 C   sT  t  }| t|d | t|d | t|d | t | | t|d | t|g  | t	|t
| | t|t| | t| | t||  | t||  | t||  | t||  | t|j | t|j | |jt | |jt | t|d | t|d d S r   )r   r   r   r   r   ry   r0   rv   r$   r\   r]   r/   r1   r   r_   r   r   r   r   r   r   r   r   r   r   r   r   rq   r   r   r   r   r   r   r   test_magicmock_defaults+  s(    z/TestMockingMagicMethods.test_magicmock_defaultsc                 C   s6   t  }| }|  | t|| |j  d S r#   )r   
__fspath__
reset_mockr   osfspathZassert_called_once)r   r   Zexpected_pathr   r   r   test_magic_methods_fspathF  s
    z1TestMockingMagicMethods.test_magic_methods_fspathc                    s   G dd dt }t|d | t fdd ttg d _| t g  G dd dt }t|d | t fd	d  fd
d}| t| t|d | t g  | t| d S )Nc                   @   s   e Zd Zdd ZdS )zETestMockingMagicMethods.test_magic_methods_and_spec.<locals>.Iterablec                 S   s   d S r#   r   r   r   r   r   r'   Q  r   zNTestMockingMagicMethods.test_magic_methods_and_spec.<locals>.Iterable.__iter__N__name__
__module____qualname__r'   r   r   r   r   IterableP  s   r   )specc                      s    j S r#   r'   r   r   r   r   r   T  r   zETestMockingMagicMethods.test_magic_methods_and_spec.<locals>.<lambda>r!   c                   @   s   e Zd ZdS )zHTestMockingMagicMethods.test_magic_methods_and_spec.<locals>.NonIterableNr   r   r   r   r   r   r   NonIterableY  s   r   c                      s    j S r#   r   r   r   r   r   r   \  r   c                      s   t tg d _d S Nr!   r   r&   __int__r   r   r   r   set_int^  s    zDTestMockingMagicMethods.test_magic_methods_and_spec.<locals>.set_int	r0   r   r   AttributeErrorr&   r'   r   r$   r   r   r   r   r   r   r   r   test_magic_methods_and_specO  s    


z3TestMockingMagicMethods.test_magic_methods_and_specc                    s   G dd dt }t|d | t fdd ttg d _| t g  G dd dt }t|d | t fd	d  fd
d}| t| t|d | t g  | t| d S )Nc                   @   s   e Zd Zdd ZdS )zITestMockingMagicMethods.test_magic_methods_and_spec_set.<locals>.Iterablec                 S   s   d S r#   r   r   r   r   r   r'   i  r   zRTestMockingMagicMethods.test_magic_methods_and_spec_set.<locals>.Iterable.__iter__Nr   r   r   r   r   r   h  s   r   )Zspec_setc                      s    j S r#   r   r   r   r   r   r   l  r   zITestMockingMagicMethods.test_magic_methods_and_spec_set.<locals>.<lambda>r!   c                   @   s   e Zd ZdS )zLTestMockingMagicMethods.test_magic_methods_and_spec_set.<locals>.NonIterableNr   r   r   r   r   r   q  s   r   c                      s    j S r#   r   r   r   r   r   r   t  r   c                      s   t tg d _d S r   r   r   r   r   r   r   v  s    zHTestMockingMagicMethods.test_magic_methods_and_spec_set.<locals>.set_intr   r   r   r   r   test_magic_methods_and_spec_setg  s    


z7TestMockingMagicMethods.test_magic_methods_and_spec_setc                    s$   t    fdd}| td| d S )Nc                      s   dd  _ d S )Nc                 S   s   d S r#   r   r   r   r   r   r     r   zdTestMockingMagicMethods.test_setting_unsupported_magic_method.<locals>.set_setattr.<locals>.<lambda>)__setattr__r   r   r   r   set_setattr  s    zRTestMockingMagicMethods.test_setting_unsupported_magic_method.<locals>.set_setattrz9Attempting to set unsupported magic method '__setattr__'.)r   ZassertRaisesRegexr   )r   r   r   r   r   %test_setting_unsupported_magic_method  s    z=TestMockingMagicMethods.test_setting_unsupported_magic_methodc                 C   s>   t  }|j}dd }| ||t  | }| ||t  d S )Nc                 S   s   t | jd S )Nr|   )type__mro__)objr   r   r   	_get_type  s    zKTestMockingMagicMethods.test_attributes_and_return_value.<locals>._get_type)r   r   r   )r   r   attrr   Zreturnedr   r   r    test_attributes_and_return_value  s    z8TestMockingMagicMethods.test_attributes_and_return_valuec                 C   s@   t  }| |jt  d|d d j_| |d d d d d S )Nr4   r|   rR   )r   rq   r   r"   r   r   r   r   r   "test_magic_methods_are_magic_mocks  s    z:TestMockingMagicMethods.test_magic_methods_are_magic_mocksc                 C   s6   t  }t| | |jj |  | |jj d S r#   )r   r/   r   r1   Zcalledr   r	   r   r   r   r   test_magic_method_reset_mock  s
    z4TestMockingMagicMethods.test_magic_method_reset_mockc                 C   s6   t  t fD ]$}dd }||_| t|dg qd S )Nc                 S   s   dgS r   r   r   r   r   r   _dir  s    z.TestMockingMagicMethods.test_dir.<locals>._dirr   )r   r   __dir__r   dir)r   r   r   r   r   r   test_dir  s    z TestMockingMagicMethods.test_dirc                 C   s"   t  }dgj|_| tt| d S rB   )r   r'   r   r   r&   ra   r   r   r   test_bound_methods  s    
z*TestMockingMagicMethods.test_bound_methodsc                 C   s(   G dd dt }| }| |j| d S )Nc                   @   s   e Zd ZdS )z;TestMockingMagicMethods.test_magic_method_type.<locals>.FooNr   r   r   r   r   Foo  s   r   )r   rq   r   )r   r   r   r   r   r   test_magic_method_type  s    z.TestMockingMagicMethods.test_magic_method_typec                 C   s&   t  }dt|j_| t|d d S r   )r   r   r1   r"   r   r/   ra   r   r   r   test_descriptor_from_class  s    z2TestMockingMagicMethods.test_descriptor_from_classc                 C   sr   t  }g d|j_| t|g d | t|g d tg d|j_| t|g d | t|g  d S )Nr{   )rT      rH   )r   r'   r"   r   r$   r&   ra   r   r   r   "test_iterable_as_iter_return_value  s    z:TestMockingMagicMethods.test_iterable_as_iter_return_valuec                 C   sf   t  }| |d t  d|j_d|j_d|j_| |d d | d| d |d }| |d d S )Nr|   *   i     )r   rq   
__matmul__r"   __rmatmul____imatmul__r   ra   r   r   r   test_matmul  s    z#TestMockingMagicMethods.test_matmulc                 C   s   t  }| td|t  d|j_| t|dd t  }td|}| |t  |d}| |t  t|d}| |t  |d}| |t  d S )Nr   )rR   r|   rR   )r   rq   divmod
__divmod__r"   r   __rdivmod__)r   rb   r   Z
foo_directr=   Z
bar_directr   r   r   test_divmod_and_rdivmod  s    



z/TestMockingMagicMethods.test_divmod_and_rdivmodc                 C   s&   t f i ddi}| t|d d S )N__str__.return_value12)r   r   r/   ra   r   r   r   test_magic_in_initialization  s    z4TestMockingMagicMethods.test_magic_in_initializationc                 C   sd   t f i ddi}d|j_| t|d t f i ddi}|jf i ddi | t|d d S )Nr   r   Z13Z14)r   r1   r"   r   r/   Zconfigure_mockra   r   r   r   )test_changing_magic_set_in_initialization  s    zATestMockingMagicMethods.test_changing_magic_set_in_initializationN)%r   r   r   r   r   r    r(   r.   r2   rA   rP   rZ   r^   rc   rn   rt   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   	   sD   	
	
	r   __main__)r   Zunittestr   Zasyncior   Zunittest.mockr   r   r   r   ZTestCaser   r   mainr   r   r   r   <module>   s      v