o
    KXhs?                     @   sf   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r1e  dS 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   Q/opt/python-3.10.19/usr/lib/python3.10/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                          d S Nfoor   r   r   r   r   <lambda>       z<TestMockingMagicMethods.test_magicmock_del.<locals>.<lambda>r   c                      r   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%      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      dS r   r   sr   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   r+   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                      r   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      
z7TestMockingMagicMethods.test_dict_methods.<locals>._delc                      s   d d< d S )N   r   r   r   r   r   r   _setN      z7TestMockingMagicMethods.test_dict_methods.<locals>._setc                    s    | S r%   r   r-   r   _dictr   r   getitemT   r    z:TestMockingMagicMethods.test_dict_methods.<locals>.getitemc                    s   | |< d S r%   r   )r-   r   valuer=   r   r   setitemV   r;   z:TestMockingMagicMethods.test_dict_methods.<locals>.setitemc                    s
    |= d S r%   r   r<   r=   r   r   delitemX   r8   z:TestMockingMagicMethods.test_dict_methods.<locals>.delitemc                      r   r   r   r   r   r   r   r   _   r   barr   )r   r   r   __setitem__r   __delitem__KeyErrorr!   )r   r7   r:   r?   rA   rB   r   )r>   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 Nr9   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      z1TestMockingMagicMethods.test_numeric.<locals>.addr9   c                 S   s   | d7 } d S rH   r   r   r   r   r   iaddu   r;   z2TestMockingMagicMethods.test_numeric.<locals>.iadd   	   c                      s   d  S rH   r   r   r   r   r   r   }   r         )r   r@   r   r   __add__r!   __iadd____radd__)r   originalrL   rN   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%   rI   rJ   r   r   r   truediv   rM   z6TestMockingMagicMethods.test_division.<locals>.truedivrY   rR   c                 S   s   | d } d S )N   r   r   r   r   r   itruediv   r;   z7TestMockingMagicMethods.test_division.<locals>.itruediv   c                      s   d  S )Nr]   r   r   r   r   r   r      r   g      ?r[   )r   r@   r   r   __truediv__r!   __itruediv____rtruediv__)r   rV   rZ   r\   r   r   r   test_division   s$   
z%TestMockingMagicMethods.test_divisionc                 C   s>   t  }| t|t | dd }||_| t|d d S )Nc                 S   r+   rH   r   r,   r   r   r   _hash      z0TestMockingMagicMethods.test_hash.<locals>._hashr9   )r   r!   hash__hash__)r   r   rb   r   r   r   	test_hash   s
   z!TestMockingMagicMethods.test_hashc                 C   s0   t  }| t| dd |_| t| d S )Nc                 S   r+   )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   r+   )NTr   r-   or   r   r   comp   rc   z5TestMockingMagicMethods.test_comparison.<locals>.compr9   c                   S      t  t k S r%   r   r4   r   r   r   r   r          z9TestMockingMagicMethods.test_comparison.<locals>.<lambda>c                   S   ro   r%   r4   r   r   r   r   r   r      rq   c                   S   s   t  t  k S r%   r   r   r   r   r   r      rq   c                   S      t  t kS r%   rp   r   r   r   r   r      rq   c                   S   rt   r%   rr   r   r   r   r   r      rq   c                   S   s   t  t  kS r%   rs   r   r   r   r   r      rq   c                   S      t  t kS r%   rp   r   r   r   r   r      rq   c                   S   ru   r%   rr   r   r   r   r   r      rq   c                   S   s   t  t  kS r%   rs   r   r   r   r   r      rq   c                   S      t  t kS r%   rp   r   r   r   r   r      rq   c                   S   rv   r%   rr   r   r   r   r   r      rq   c                   S   s   t  t  kS r%   rs   r   r   r   r   r      rq   )r   __lt____gt____le____ge__r   r   r   )r   r   rn   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      |dkS rH   r   rJ   r   r   r   eq   r    z1TestMockingMagicMethods.test_equality.<locals>.eqr9   r[   c                 S   r|   rH   r   rJ   r   r   r   ne   r    z1TestMockingMagicMethods.test_equality.<locals>.ne)r   r   r!   assertIsInstancerg   r4   __eq__r   r	   __ne__r$   )r   r   r}   r~   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   r+   )NrO   r   r,   r   r   r   r      r.   rO   c                 S   r|   rH   r   rl   r   r   r   r      r   r9   c                 S   s   t dS )N	foobarbaz)r(   r,   r   r   r   r      r   r   )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|| q,| t|d d S )N   rY   r9   Frh   Z__nonzero__Z__imaginary__)r   r(   r)   r$   r!   r&   getattrr	   r
   rg   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   r   r4   rg   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floatr   r4   r   r&   rd   re   r3   r5   r   rg   round	__round__mathtrunc	__trunc__floor	__floor__ceil__ceil__r   	__aexit__
__aenter__r   octhexr   r   r   r   test_asyncmock_defaults  (   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   r   r4   r   r&   rd   re   r3   r5   r   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   test_magicmock_defaults+  r   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                       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                   @      e Zd Zdd ZdS )zETestMockingMagicMethods.test_magic_methods_and_spec.<locals>.Iterablec                 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      r   )specc                          j S r%   r)   r   r   r   r   r   T      zETestMockingMagicMethods.test_magic_methods_and_spec.<locals>.<lambda>r#   c                   @      e Zd ZdS )zHTestMockingMagicMethods.test_magic_methods_and_spec.<locals>.NonIterableNr   r   r   r   r   r   r   NonIterableY      r   c                      r   r%   r   r   r   r   r   r   \  r   c                         t tg d _d S Nr#   r   r(   __int__r   r   r   r   set_int^     zDTestMockingMagicMethods.test_magic_methods_and_spec.<locals>.set_int	r4   r   r   AttributeErrorr(   r)   r!   r&   r   r   r   r   r   r   r   r   test_magic_methods_and_specO     


z3TestMockingMagicMethods.test_magic_methods_and_specc                    r   )Nc                   @   r   )zITestMockingMagicMethods.test_magic_methods_and_spec_set.<locals>.Iterablec                 S   r   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  r   r   )Zspec_setc                      r   r%   r   r   r   r   r   r   l  r   zITestMockingMagicMethods.test_magic_methods_and_spec_set.<locals>.<lambda>r#   c                   @   r   )zLTestMockingMagicMethods.test_magic_methods_and_spec_set.<locals>.NonIterableNr   r   r   r   r   r   q  r   r   c                      r   r%   r   r   r   r   r   r   t  r   c                      r   r   r   r   r   r   r   r   v  r   zHTestMockingMagicMethods.test_magic_methods_and_spec_set.<locals>.set_intr   r   r   r   r   test_magic_methods_and_spec_setg  r   z7TestMockingMagicMethods.test_magic_methods_and_spec_setc                    s$   t    fdd}| td| d S )Nc                      s   dd  _ d S )Nc                 S   r   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 )Nr9   r   rY   )r   r   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   r3   r   r5   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 rH   )r   r)   r   r   r(   ri   r   r   r   test_bound_methods  s   
z*TestMockingMagicMethods.test_bound_methodsc                 C   s(   G dd dt }| }| |j| d S )Nc                   @   r   )z;TestMockingMagicMethods.test_magic_method_type.<locals>.FooNr   r   r   r   r   Foo  r   r   )r   r   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   r5   r$   r!   r3   ri   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   )r[      rO   )r   r)   r$   r!   r&   r(   ri   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   r   
__matmul__r$   __rmatmul____imatmul__r!   ri   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   )rY   r   rY   )r   r   divmod
__divmod__r$   r!   __rdivmod__)r   rj   r   Z
foo_directrC   Z
bar_directr   r   r   test_divmod_and_rdivmod  s   



z/TestMockingMagicMethods.test_divmod_and_rdivmodc                 C   s&   t di ddi}| t|d d S )N__str__.return_value12r   )r   r!   r3   ri   r   r   r   test_magic_in_initialization  s   z4TestMockingMagicMethods.test_magic_in_initializationc                 C   sd   t di ddi}d|j_| t|d t di ddi}|jdi ddi | t|d d S )Nr   r   Z13Z14r   )r   r5   r$   r!   r3   Zconfigure_mockri   r   r   r   )test_changing_magic_set_in_initialization  s   zATestMockingMagicMethods.test_changing_magic_set_in_initializationN)%r   r   r   r   r   r"   r*   r2   r6   rG   rW   ra   rf   rk   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   	   sF    	
	
	r   __main__)r   Zunittestr   Zasyncior   Zunittest.mockr   r   r   r   ZTestCaser   r   mainr   r   r   r   <module>   s       v