a
    ze/                     @   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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                   @   s   e Zd ZdS )SampleExceptionN)__name__
__module____qualname__ r   r   5/usr/lib/python3.9/unittest/test/testmock/testwith.pyr
          r
   c                   @   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   sR   t dt tj  | ttjd W d    n1 s60    Y  | ttj d S N%s.something	unpatched)r   r   r   
Something2assertEqual	something	Somethingselfr   r   r   test_with_statement   s    .zWithTest.test_with_statementc              	   C   s   |  tV tdt tj& | ttjd t W d    n1 sH0    Y  W d    n1 sf0    Y  | ttj d S r   )	assertRaisesr
   r   r   r   r   r   r   r   r   r   r   r   test_with_statement_exception   s
    Bz&WithTest.test_with_statement_exceptionc                 C   s^   t dt 0}| t|d | t|td W d    n1 sB0    Y  | ttj d S )Nr   r   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   sd   G dd dt }|j}t |d  | |j|d W d    n1 sH0    Y  | |j| d S )Nc                   @   s   e Zd ZdZdS )z6WithTest.test_patch_object_with_statement.<locals>.FoofooN)r   r   r   r   r   r   r   r   Foo)   s   r#   r   r   )objectr   r   ZassertNotEqualr   )r   r#   Zoriginalr   r   r    test_patch_object_with_statement(   s
    .z)WithTest.test_patch_object_with_statementc              
   C   s   t dd tdt X}tdt ,}| t|d | t|d W d    n1 sX0    Y  W d    n1 sv0    Y  W d    n1 s0    Y  | ttj | ttj d S )NT)recordr   %s.something_elser   )	r   r   r   r   r   something_elser   r   SomethingElser   r    Zmock_something_elser   r   r   test_with_statement_nested1   s    ^z#WithTest.test_with_statement_nestedc                 C   s`   t dt tj.}| t|d | |tjd W d    n1 sD0    Y  | ttj d S )Nr   r   zwrong patchr   r   r   ZPatchedr   r   r   r   r   r   r   test_with_statement_specified<   s    .z&WithTest.test_with_statement_specifiedc                 C   sp   t  }t  |_t  |_d|j_| }| ||jj W d    n1 sH0    Y  |j  |jd d d  d S )NF)r   	__enter____exit__return_valuer   assert_called_with)r   mockmr   r   r   testContextManagerMockingC   s    .
z"WithTest.testContextManagerMockingc              	   C   sx   t  }| t< | dd  W d    n1 s40    Y  W d    n1 sR0    Y  |j  | |jj d S )Nr"      )r   r   	TypeErrorr.   r1   r   r/   Zcalled)r   r2   r   r   r   $test_context_manager_with_magic_mockO   s    D
z-WithTest.test_context_manager_with_magic_mockc              	   C   s   t dt tjf}| t|d t dt }| t|d W d    n1 sP0    Y  | t|d W d    n1 s|0    Y  | ttjd d S )Nr   r   zrestored with wrong instanceznot restoredr,   )r   r    Z
mock_againr   r   r   "test_with_statement_same_attributeY   s    ,"z+WithTest.test_with_statement_same_attributec              	   C   s   t dt X}| t|d t dt }| t|d W d    n1 sL0    Y  W d    n1 sj0    Y  | ttj | ttj d S )Nr   r   r'   )r   r   r   r   r(   r   r   r)   r*   r   r   r   test_with_statement_imbricatedf   s    @z'WithTest.test_with_statement_imbricatedc              	   C   s   i }t |ddi  | |ddi W d    n1 s:0    Y  | |i  | tX t |ddi( | |ddi tdW d    n1 s0    Y  W d    n1 s0    Y  | |i  d S )NabZKonrad)r   dictr   r   	NameError)r   r"   r   r   r   test_dict_context_managerr   s    .Dz"WithTest.test_dict_context_managerc              	   C   s   G dd d}| }t j|dddl}t j|ddd}|  W d    n1 sT0    Y  | |jd | |jd |  W d    n1 s0    Y  | |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   r   z7WithTest.test_double_patch_instance_method.<locals>.C.fN)r   r   r   r?   r   r   r   r   C   s   r@   r?   T)Zautospec   r   )r   r$   r?   r   Z
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-   r4   r7   r8   r9   r>   rC   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S ) TestMockOpenc                 C   sZ   t  }tdt |dd$}| || td W d    n1 sB0    Y  |d d S N%s.openTZcreater"   )r   r   r   assertIsopenassert_called_once_withr   r2   Z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    n1 sF0    Y  W d    n1 sd0    Y  tdt  t  t d d d g}| 	|j
| | || d S rE   )r   r0   r   r   rI   readr	   r.   r/   r   
mock_callsrH   )r   r2   handler?   expected_callsr   r   r   test_mock_open_context_manager   s    
Dz+TestMockOpen.test_mock_open_context_managerc                 C   s   t  }tdt |ddp td}|  W d    n1 s@0    Y  td}|  W d    n1 sp0    Y  W d    n1 s0    Y  tdt  t  t d d d tdt  t  t d d d g}| |j	| d S )NrF   TrG   r"   bar)
r   r   r   rI   rM   r	   r.   r/   r   rN   )r   r2   r?   rP   r   r   r   -test_mock_open_context_manager_multiple_times   s    
&
Dz:TestMockOpen.test_mock_open_context_manager_multiple_timesc                 C   sb   t  }t| tdt |dd$}| || td W d    n1 sJ0    Y  |d d S rE   )r   r   r   r   rH   rI   rJ   rK   r   r   r   test_explicit_mock   s    &zTestMockOpen.test_explicit_mockc                 C   s\   t dd}tdt |dd  td}| }W d    n1 sB0    Y  | |d d S )Nr"   Z	read_datarF   TrG   rR   r   r   r   rI   rM   r   r   r2   hresultr   r   r   test_read_data   s
    
&zTestMockOpen.test_read_datac                 C   s   t dd}tdt |dd0 td}| }| }| }W d    n1 sR0    Y  | |d | |d | |d	 | | d
 t dd}tdt |dd  td}| }W d    n1 s0    Y  | |d | | d
 d S )Nfoo
bar
baz
rU   rF   TrG   rR   foo
bar
baz
 r"   r   r   r   rI   readliner   )r   r2   rX   line1line2line3rY   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    n1 sH0    Y  | |d	 d
 | |d d | |d d | | d | t t| W d    n1 s0    Y  d S )Nr[   rU   rF   TrG   rR   c                 S   s   g | ]}|qS r   r   .0lr   r   r   
<listcomp>   r   z6TestMockOpen.test_dunder_iter_data.<locals>.<listcomp>r   r\   rA   r]      r^   r_   )	r   r   r   rI   r   ra   r   StopIterationnext)r   r2   rX   linesr   r   r   test_dunder_iter_data   s    
,z"TestMockOpen.test_dunder_iter_datac                 C   s   t dd}tdt |dd6 td}t|}t|}dd |D }W d    n1 sX0    Y  | |d	 | |d
 | |d d | | d d S )Nr[   rU   rF   TrG   rR   c                 S   s   g | ]}|qS r   r   rf   r   r   r   ri      r   z/TestMockOpen.test_next_data.<locals>.<listcomp>r\   r]   r   r^   r_   )r   r   r   rI   rl   r   ra   )r   r2   rX   rb   rc   rm   r   r   r   test_next_data   s    
,zTestMockOpen.test_next_datac                 C   s   t dd}tdt |dd  td}| }W d    n1 sB0    Y  | |g d t dd}tdt |dd  td}| }W d    n1 s0    Y  | |g d	 d S )
Nr[   rU   rF   TrG   rR   )r\   r]   r^   foo
bar
baz)r\   r]   Zbazr   r   r   rI   	readlinesr   rW   r   r   r   test_readlines_data   s    
&
&z TestMockOpen.test_readlines_datac              	   C   s~   t dd}tdt |ddB tdd}| }W d    n1 sF0    Y  W d    n1 sd0    Y  | |d d S )N   rU   rF   TrG   abcrbrV   )r   r2   r?   rY   r   r   r   test_read_bytes  s
    
DzTestMockOpen.test_read_bytesc              	   C   s   t dd}tdt |ddR tdd(}| }| }| }W d    n1 sV0    Y  W d    n1 st0    Y  | |d | |d	 | |d
 d S )N   abc
def
ghi
rU   rF   TrG   ru   rv      abc
   def
   ghi
r`   )r   r3   r?   rb   rc   rd   r   r   r   test_readline_bytes  s    
Dz TestMockOpen.test_readline_bytesc              	   C   s   t dd}tdt |ddB tdd}| }W d    n1 sF0    Y  W d    n1 sd0    Y  | |g d d S )	Nrx   rU   rF   TrG   ru   rv   )ry   rz   r{   rq   )r   r3   r?   rY   r   r   r   test_readlines_bytes   s
    
Dz!TestMockOpen.test_readlines_bytesc                 C   s   d}t |d}| | d|d d  | | d|d d  | }| |d|d d  | |d|dd   d S )Nrp   rU   
   )r   r   rM   )r   Z	some_datar2   r?   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    n1 sJ0    Y  | |d | |dd	g t dd}tdt |dd( td}| }| }W d    n1 s0    Y  | |d | |d
 d S )Nr[   rU   rF   TrG   rR   r\   r]   r^   zbar
baz
)r   r   r   rI   ra   rr   r   rM   )r   r2   rX   rb   restr   r   r   test_interleaved_reads5  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"   rU   rR   )r   rM   r0   ra   rr   r   )r   r2   rO   r   r   r   test_overriding_return_valuesI  s    

z*TestMockOpen.test_overriding_return_valuesN)r   r   r   rL   rQ   rS   rT   rZ   re   rn   ro   rs   rw   r|   r}   r   r   r   r   r   r   r   rD      s   		rD   __main__)Zunittestwarningsr   Zunittest.test.testmock.supportr   Zunittest.mockr   r   r   r   r   r	   r   r   r)   r(   	Exceptionr
   ZTestCaser   rD   r   mainr   r   r   r   <module>   s    ~ M