B
    18\,                 @   s   d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZ e	jZe	jZG dd de jZG dd de jZed	kre   dS )
    N)catch_warnings)is_instance)	MagicMockMockpatchsentinel	mock_opencallc               @   sl   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S )WithTestc          	   C   s>   t dt tj | ttjd W d Q R X | ttj d S )Nz%s.something	unpatched)r   __name__r   
Something2assertEqual	something	Something)self r   c/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/unittest/test/testmock/testwith.pytest_with_statement   s    zWithTest.test_with_statementc          	   C   sj   y8t dt tj | ttjd tdW d Q R X W n tk
rL   Y nX | d | ttj d S )Nz%s.somethingr   powzpatch swallowed exception)	r   r   r   r   r   r   	Exceptionfailr   )r   r   r   r   test_with_statement_exception   s    
z&WithTest.test_with_statement_exceptionc          	   C   sJ   t dt &}| t|d | t|td W d Q R X | ttj d S )Nz%s.somethingr   zpatching wrong type)	r   r   r   r   
assertTruer   r   r   r   )r   mock_somethingr   r   r   test_with_statement_as"   s
    zWithTest.test_with_statement_asc          	   C   sP   G dd dt }|j}t |d | |j|d W d Q R X | |j| d S )Nc               @   s   e Zd ZdZdS )z6WithTest.test_patch_object_with_statement.<locals>.FoofooN)r   
__module____qualname__r   r   r   r   r   Foo+   s   r   r   r   )objectr   r   assertNotEqualr   )r   r   originalr   r   r    test_patch_object_with_statement*   s
    z)WithTest.test_patch_object_with_statementc             C   s   t ddR tdt :}tdt "}| t|d | t|d W d Q R X W d Q R X W d Q R X | ttj | ttj d S )NT)recordz%s.somethingz%s.something_elser   )	r   r   r   r   r   something_elser   r   SomethingElse)r   r   mock_something_elser   r   r   test_with_statement_nested3   s    $z#WithTest.test_with_statement_nestedc          	   C   sL   t dt tj$}| t|d | |tjd W d Q R X | ttj d S )Nz%s.somethingr   zwrong patch)r   r   r   Patchedr   r   r   )r   r   r   r   r   test_with_statement_specified>   s    z&WithTest.test_with_statement_specifiedc          	   C   s\   t  }t  |_t  |_d|j_|}| ||jj W d Q R X |j  |jd d d  d S )NF)r   	__enter____exit__return_valuer   assert_called_with)r   mockmr   r   r   testContextManagerMockingE   s    
z"WithTest.testContextManagerMockingc          
   C   sP   t  }| t | dd  W d Q R X W d Q R X |j  | |jj d S )Nr      )r   assertRaises	TypeErrorr+   r.   r   r,   called)r   r/   r   r   r   $test_context_manager_with_magic_mockQ   s    
z-WithTest.test_context_manager_with_magic_mockc          
   C   sr   t dt tjH}| t|d t dt }| t|d W d Q R X | t|d W d Q R X | ttjd d S )Nz%s.somethingr   zrestored with wrong instanceznot restored)r   r   r   r)   r   r   r   )r   r   Z
mock_againr   r   r   "test_with_statement_same_attribute[   s    z+WithTest.test_with_statement_same_attributec          
   C   sl   t dt :}| t|d t dt }| t|d W d Q R X W d Q R X | ttj | ttj d S )Nz%s.somethingr   z%s.something_else)r   r   r   r   r%   r   r   r&   )r   r   r'   r   r   r   test_with_statement_imbricatedh   s    z'WithTest.test_with_statement_imbricatedc          
   C   s   i }t |ddi | |ddi W d Q R X | |i  | t: t |ddi | |ddi tdW d Q R X W d Q R X | |i  d S )NabZKonrad)r   dictr   r3   	NameError)r   r   r   r   r   test_dict_context_managert   s    z"WithTest.test_dict_context_managerc          
   C   s   G dd d}| }t j|dddN}t j|ddd}|  W d Q R X | |jd | |jd |  W d Q R X | |jd d S )Nc               @   s   e Zd Zdd ZdS )z5WithTest.test_double_patch_instance_method.<locals>.Cc             S   s   d S )Nr   )r   r   r   r   f   s    z7WithTest.test_double_patch_instance_method.<locals>.C.fN)r   r   r   r>   r   r   r   r   C   s   r?   r>   T)autospec   r   )r   r    r>   r   
call_count)r   r?   cZpatch1Zpatch2r   r   r   !test_double_patch_instance_method   s    z*WithTest.test_double_patch_instance_methodN)r   r   r   r   r   r   r#   r(   r*   r1   r6   r7   r8   r=   rD   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S )TestMockOpenc          	   C   sF   t  }tdt |dd}| || td W d Q R X |d d S )Nz%s.openT)creater   )r   r   r   assertIsopenassert_called_once_with)r   r/   patchedr   r   r   test_mock_open   s
    zTestMockOpen.test_mock_openc          
   C   s   t  }|j}tdt |dd" td}|  W d Q R X W d Q R X tdt  t  t d d d g}| 	|j
| | || d S )Nz%s.openT)rF   r   )r   r-   r   r   rH   readr	   r+   r,   r   
mock_callsrG   )r   r/   handler>   expected_callsr   r   r   test_mock_open_context_manager   s    
z+TestMockOpen.test_mock_open_context_managerc             C   s   t  }tdt |dd> td}|  W d Q R X td}|  W d Q R X W d Q R X tdt  t  t d d d tdt  t  t d d d g}| |j	| d S )Nz%s.openT)rF   r   bar)
r   r   r   rH   rL   r	   r+   r,   r   rM   )r   r/   r>   rO   r   r   r   -test_mock_open_context_manager_multiple_times   s    

z:TestMockOpen.test_mock_open_context_manager_multiple_timesc          	   C   sN   t  }t| tdt |dd}| || td W d Q R X |d d S )Nz%s.openT)rF   r   )r   r   r   r   rG   rH   rI   )r   r/   rJ   r   r   r   test_explicit_mock   s    zTestMockOpen.test_explicit_mockc          	   C   sH   t dd}tdt |dd td}| }W d Q R X | |d d S )Nr   )	read_dataz%s.openT)rF   rQ   )r   r   r   rH   rL   r   )r   r/   hresultr   r   r   test_read_data   s
    
zTestMockOpen.test_read_datac          	   C   s   t dd}tdt |dd& td}| }| }| }W d Q R X | |d | |d | |d	 | | d
 t dd}tdt |dd td}| }W d Q R X | |d | | d
 d S )Nzfoo
bar
baz
)rT   z%s.openT)rF   rQ   zfoo
zbar
zbaz
 r   )r   r   r   rH   readliner   )r   r/   rU   line1line2line3rV   r   r   r   test_readline_data   s     

zTestMockOpen.test_readline_datac          	   C   s   t dd}tdt |dd td}dd |D }W d Q R X | |d	 d
 | |d d | |d d | | d d S )Nzfoo
bar
baz
)rT   z%s.openT)rF   rQ   c             S   s   g | ]}|qS r   r   ).0lr   r   r   
<listcomp>   s    z6TestMockOpen.test_dunder_iter_data.<locals>.<listcomp>r   zfoo
rA   zbar
   zbaz
rX   )r   r   r   rH   r   rY   )r   r/   rU   linesr   r   r   test_dunder_iter_data   s    
z"TestMockOpen.test_dunder_iter_datac          	   C   s   t dd}tdt |dd td}| }W d Q R X | |ddd	g t d
d}tdt |dd td}| }W d Q R X | |dddg d S )Nzfoo
bar
baz
)rT   z%s.openT)rF   rQ   zfoo
zbar
zbaz
zfoo
bar
bazbaz)r   r   r   rH   	readlinesr   )r   r/   rU   rV   r   r   r   test_readlines_data   s    

z TestMockOpen.test_readlines_datac          
   C   sV   t dd}tdt |dd$ tdd}| }W d Q R X W d Q R X | |d d S )N   )rT   z%s.openT)rF   abcrb)r   r   r   rH   rL   r   )r   r/   r>   rV   r   r   r   test_read_bytes   s
    
zTestMockOpen.test_read_bytesc          
   C   s~   t dd}tdt |dd4 tdd}| }| }| }W d Q R X W d Q R X | |d | |d	 | |d
 d S )Ns   abc
def
ghi
)rT   z%s.openT)rF   rh   ri   s   abc
s   def
s   ghi
)r   r   r   rH   rY   r   )r   r0   r>   rZ   r[   r\   r   r   r   test_readline_bytes  s    
z TestMockOpen.test_readline_bytesc          
   C   s\   t dd}tdt |dd$ tdd}| }W d Q R X W d Q R X | |dd	d
g d S )Ns   abc
def
ghi
)rT   z%s.openT)rF   rh   ri   s   abc
s   def
s   ghi
)r   r   r   rH   re   r   )r   r0   r>   rV   r   r   r   test_readlines_bytes  s
    
z!TestMockOpen.test_readlines_bytesc             C   s&   d}t |d}| | d| d S )Nzfoo
bar
baz)rT   
   )r   r   rL   )r   Z	some_datar/   r   r   r   !test_mock_open_read_with_argument  s    
z.TestMockOpen.test_mock_open_read_with_argumentc          	   C   s   t dd}tdt |dd td}| }| }W d Q R X | |d | |dd	g t dd}tdt |dd td}| }| }W d Q R X | |d | |d
 d S )Nzfoo
bar
baz
)rT   z%s.openT)rF   rQ   zfoo
zbar
zbaz
zbar
baz
)r   r   r   rH   rY   re   r   rL   )r   r/   rU   rZ   restr   r   r   test_interleaved_reads$  s    

z#TestMockOpen.test_interleaved_readsc             C   s   t dd}| }d|j_d|j_dg|j_| | d | | d | | dg | | d | | d d S )Nr   )rT   rQ   )r   rL   r-   rY   re   r   )r   r/   rN   r   r   r   test_overriding_return_values8  s    

z*TestMockOpen.test_overriding_return_valuesN)r   r   r   rK   rP   rR   rS   rW   r]   rc   rf   rj   rk   rl   rn   rp   rq   r   r   r   r   rE      s   		rE   __main__)unittestwarningsr   unittest.test.testmock.supportr   unittest.mockr   r   r   r   r   r	   r   r   r&   r%   TestCaser
   rE   r   mainr   r   r   r   <module>   s      9