B
    18\L8                 @   sJ   d dl Z d dlZd dlmZmZmZ G dd de jZedkrFe 	  dS )    N)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ed1ejkd2d3d4 Zd5d6 Z d7d8 Z!d9d: Z"d;d< Z#d=d> Z$d?d@ Z%dAdB Z&dCS )DTestMockingMagicMethodsc             C   sF   t  }| t|d t  |_| t|d |`| t|d d S )N__getitem__)r   assertFalsehasattrr   
assertTrue)selfmock r   k/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/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 )Nr   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   assertIsNotassertEqual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   )mock2r   r   r   5   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_mocks/   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 )Nr   r   )sr   r   r   r   ;   r   z3TestMockingMagicMethods.test_repr.<locals>.<lambda>r   )r   r   reprid__repr__)r
   r   r   r   r   	test_repr8   s    
z!TestMockingMagicMethods.test_reprc             C   s:   t  }| t|t| dd |_| t|d d S )Nc             S   s   dS )Nr   r   )r"   r   r   r   r   B   r   z2TestMockingMagicMethods.test_str.<locals>.<lambda>r   )r   r   strobject__str__)r
   r   r   r   r   test_str?   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 )Nr   r   r   )r   r   r   r   I   r   z;TestMockingMagicMethods.test_dict_methods.<locals>.<lambda>c                  s
    d= d S )Nr   r   r   )r   r   r   _delJ   s    z7TestMockingMagicMethods.test_dict_methods.<locals>._delc                  s   d d< d S )N   r   r   r   )r   r   r   _setL   s    z7TestMockingMagicMethods.test_dict_methods.<locals>._setc                s    | S )Nr   )r"   r   )_dictr   r   getitemR   s    z:TestMockingMagicMethods.test_dict_methods.<locals>.getitemc                s   | |< d S )Nr   )r"   r   value)r.   r   r   setitemT   s    z:TestMockingMagicMethods.test_dict_methods.<locals>.setitemc                s
    |= d S )Nr   )r"   r   )r.   r   r   delitemV   s    z:TestMockingMagicMethods.test_dict_methods.<locals>.delitemc                  s    d S )Nr   r   r   )r   r   r   r   ]   r   barr   )r   r   r   __setitem__r   __delitem__KeyErrorr   )r
   r+   r-   r/   r1   r2   r   )r.   r   r   test_dict_methodsF   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 )Nr,   r   r   )r   r   r   r   i   r   z6TestMockingMagicMethods.test_numeric.<locals>.<lambda>c                s     j |7  _ | S )N)r0   )r
   other)r   r   r   addk   s    z1TestMockingMagicMethods.test_numeric.<locals>.addr,   c             S   s   | d7 } d S )Nr,   r   )r   r   r   r   iadds   s    z2TestMockingMagicMethods.test_numeric.<locals>.iadd   	   c                  s   d  S )Nr,   r   r   )r   r   r   r   {   r         )r   r0   r   r   __add__r   __iadd____radd__)r
   originalr9   r:   r   )r   r   test_numerice   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 )N)r0   )r
   r8   )r   r   r   truediv   s    z6TestMockingMagicMethods.test_division.<locals>.truedivrE   r>   c             S   s   | d } d S )N   r   )r   r   r   r   itruediv   s    z7TestMockingMagicMethods.test_division.<locals>.itruediv   c                  s   d  S )NrI   r   r   )r   r   r   r      r   g      ?rG   )r   r0   r   r   __truediv__r   __itruediv____rtruediv__)r
   rB   rF   rH   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 )Nr,   r   )r"   r   r   r   _hash   s    z0TestMockingMagicMethods.test_hash.<locals>._hashr,   )r   r   hash__hash__)r
   r   rN   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>.compr,   c               S   s   t  t k S )N)r   r(   r   r   r   r   r      r   z9TestMockingMagicMethods.test_comparison.<locals>.<lambda>c               S   s   t  t k S )N)r(   r   r   r   r   r   r      r   c               S   s   t  t  k S )N)r   r   r   r   r   r      r   c               S   s   t  t kS )N)r   r(   r   r   r   r   r      r   c               S   s   t  t kS )N)r(   r   r   r   r   r   r      r   c               S   s   t  t  kS )N)r   r   r   r   r   r      r   c               S   s   t  t kS )N)r   r(   r   r   r   r   r      r   c               S   s   t  t kS )N)r(   r   r   r   r   r   r      r   c               S   s   t  t  kS )N)r   r   r   r   r   r      r   c               S   s   t  t kS )N)r   r(   r   r   r   r   r      r   c               S   s   t  t kS )N)r(   r   r   r   r   r   r      r   c               S   s   t  t  kS )N)r   r   r   r   r   r      r   )r   __lt____gt____le____ge__r	   r   r   )r
   r   rW   r   r   r   test_comparison   s&    z'TestMockingMagicMethods.test_comparisonc             C   s(  xt  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W 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 )Nr,   r   )r
   r8   r   r   r   eq   s    z1TestMockingMagicMethods.test_equality.<locals>.eqr,   rG   c             S   s   |dkS )Nr,   r   )r
   r8   r   r   r   ne   s    z1TestMockingMagicMethods.test_equality.<locals>.ne)r   r   r   assertIsInstancerR   r(   __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 kS )Nr   r   r   )r   r   r   r      r   z@TestMockingMagicMethods.test_len_contains_iter.<locals>.<lambda>c             S   s   dS )Nr;   r   )r"   r   r   r   r      r   r;   c             S   s   |dkS )Nr,   r   )r"   rV   r   r   r   r      r   r,   c             S   s   t dS )N	foobarbaz)r   )r"   r   r   r   r      r   rc   )r   r   r   lenr   __len__r   __contains__assertInassertNotInr    r   )r
   r   )r   r   test_len_contains_iter   s    


z.TestMockingMagicMethods.test_len_contains_iterc             C   s   t  }tdddg|j_| t|dddg dt|d_| t|d | t	| xt
D ]}| t|| q^W | t|d d S )N   rE   r,   FrS   Z__nonzero__Z__imaginary__)r   r   r    r   r   r   getattrr   r   rR   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_   r(   rR   r   )r
   r   r   r   r   test_magic_mock_equality  s    z0TestMockingMagicMethods.test_magic_mock_equalityc             C   s   t  }| t|d | t|d | t|d | t | | t|d | t|g  | t	|t
| | t|t| | t| | t|d | t|d d S )Nrj   y              ?g      ?r   Z0o1Z0x1)r   r   intcomplexfloatrh   r(   rd   r   rO   rP   r'   r)   r	   rR   octhex)r
   r   r   r   r   test_magicmock_defaults  s    z/TestMockingMagicMethods.test_magicmock_defaultsc                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 )Nr   )r
   r   r   r   r    %  s    zNTestMockingMagicMethods.test_magic_methods_and_spec.<locals>.Iterable.__iter__N)__name__
__module____qualname__r    r   r   r   r   Iterable$  s   rx   )specc                  s    j S )N)r    r   )r   r   r   r   )  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)ru   rv   rw   r   r   r   r   NonIterable.  s   rz   c                  s    j S )N)r    r   )r   r   r   r   1  r   c                  s   t tg d _d S )N)r   )r   r   __int__r   )r   r   r   set_int3  s    zDTestMockingMagicMethods.test_magic_methods_and_spec.<locals>.set_int)	r(   r   r   AttributeErrorr   r    r   r   r   )r
   rx   rz   r|   r   )r   r   test_magic_methods_and_spec#  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 )Nr   )r
   r   r   r   r    >  s    zRTestMockingMagicMethods.test_magic_methods_and_spec_set.<locals>.Iterable.__iter__N)ru   rv   rw   r    r   r   r   r   rx   =  s   rx   )spec_setc                  s    j S )N)r    r   )r   r   r   r   B  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>.NonIterableN)ru   rv   rw   r   r   r   r   rz   G  s   rz   c                  s    j S )N)r    r   )r   r   r   r   J  r   c                  s   t tg d _d S )N)r   )r   r   r{   r   )r   r   r   r|   L  s    zHTestMockingMagicMethods.test_magic_methods_and_spec_set.<locals>.set_int)	r(   r   r   r}   r   r    r   r   r   )r
   rx   rz   r|   r   )r   r   test_magic_methods_and_spec_set<  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 )Nr   )r
   r   r   r   r   r   X  r   zdTestMockingMagicMethods.test_setting_unsupported_magic_method.<locals>.set_setattr.<locals>.<lambda>)__setattr__r   )r   r   r   set_setattrW  s    zRTestMockingMagicMethods.test_setting_unsupported_magic_method.<locals>.set_setattrz9Attempting to set unsupported magic method '__setattr__'.)r   assertRaisesRegexr}   )r
   r   r   )r   r   %test_setting_unsupported_magic_methodU  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 )Nrj   )type__mro__)objr   r   r   	_get_typeb  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 )Nr,   rj   rE   )r   r_   r   r   r   )r
   r   r   r   r   "test_magic_methods_are_magic_mocksl  s    z:TestMockingMagicMethods.test_magic_methods_are_magic_mocksc             C   s6   t  }t| | |jj |  | |jj d S )N)r   r'   r	   r)   called
reset_mockr   )r
   r   r   r   r   test_magic_method_reset_mockt  s
    z4TestMockingMagicMethods.test_magic_method_reset_mockc             C   s:   x4t  t fD ]$}dd }||_| t|dg qW d S )Nc             S   s   dgS )Nr   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_dirPyPyzThis fails differently on pypyc             C   s"   t  }dgj|_| tt| d S )Nr,   )r   r    r   r   r   )r
   rT   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>.FooN)ru   rv   rw   r   r   r   r   Foo  s   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 )Nr   )r   r   r)   r   r   r'   )r
   rT   r   r   r   test_descriptor_from_class  s    z2TestMockingMagicMethods.test_descriptor_from_classc             C   s|   t  }dddg|j_| t|dddg | t|dddg tdddg|j_| t|dddg | t|g  d S )Nrj   rE   r,   rG      r;   )r   r    r   r   r   r   )r
   rT   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 )Nrj   *   i     )r   r_   
__matmul__r   __rmatmul____imatmul__r   )r
   rT   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   )rE   rj   rE   )r   r_   divmod
__divmod__r   r   __rdivmod__)r
   rT   r   Z
foo_directr3   Z
bar_directr   r   r   test_divmod_and_rdivmod  s    



z/TestMockingMagicMethods.test_divmod_and_rdivmodc             C   s"   t f ddi}| t|d d S )Nz__str__.return_value12)r   r   r'   )r
   rT   r   r   r   test_magic_in_initialization  s    z4TestMockingMagicMethods.test_magic_in_initializationc             C   sX   t f ddi}d|j_| t|d t f ddi}|jf ddi | t|d d S )Nz__str__.return_valuer   Z13Z14)r   r)   r   r   r'   configure_mock)r
   rT   r   r   r   )test_changing_magic_set_in_initialization  s    zATestMockingMagicMethods.test_changing_magic_set_in_initializationN)'ru   rv   rw   r   r   r   r!   r&   r*   r7   rC   rM   rQ   rU   r\   rb   ri   rm   rn   rt   r~   r   r   r   r   r   r   unittestskipIfsysversionr   r   r   r   r   r   r   r   r   r   r   r   r      s@   	
	r   __main__)
r   r   unittest.mockr   r   r   TestCaser   ru   mainr   r   r   r   <module>   s      O