o
    KXh/                     @   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rJe   dS 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   I/opt/python-3.10.19/usr/lib/python3.10/unittest/test/testmock/testwith.pyr
      s    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 sw   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   st   |  t$ tdt tj | ttjd t 1 sw   Y  W d    n1 s,w   Y  | ttj d S r   )	assertRaisesr
   r   r   r   r   r   r   r   r   r   r   r   test_with_statement_exception   s   z&WithTest.test_with_statement_exceptionc                 C   s^   t dt }| t|d | t|td W d    n1 s!w   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 s$w   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B tdt ,}tdt }| t|d | t|d W d    n1 s,w   Y  W d    n1 s;w   Y  W d    n1 sJw   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 s"w   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 s$w   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 sw   Y  W d    n1 s)w   Y  |j  | |jj d S )Nr!      )r   r   	TypeErrorr-   r0   r   r.   Zcalled)r   r1   r   r   r   $test_context_manager_with_magic_mockO   s   

z-WithTest.test_context_manager_with_magic_mockc              	   C   s   t dt tj3}| t|d t dt }| t|d W d    n1 s(w   Y  | t|d W d    n1 s>w   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 ,}| t|d t dt }| t|d W d    n1 s&w   Y  W d    n1 s5w   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w   Y  | |i  | t% t |ddi | |ddi td1 sFw   Y  W d    n1 sUw   Y  | |i  d S )NabZKonrad)r   dictr   r   	NameError)r   r!   r   r   r   test_dict_context_managerr   s   z"WithTest.test_dict_context_managerc              	   C   s   G dd d}| }t j|ddd6}t j|ddd}|  W d    n1 s*w   Y  | |jd | |jd |  W d    n1 sKw   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   s    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,   r3   r6   r7   r8   r=   rB   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 s!w   Y  |d d S N%s.openTZcreater!   )r   r   r   assertIsopenassert_called_once_withr   r1   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 s#w   Y  W d    n1 s2w   Y  tdt  t  t d d d g}| 	|j
| | || d S rD   )r   r/   r   r   rH   readr	   r-   r.   r   
mock_callsrG   )r   r1   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8 td}|  W d    n1 s w   Y  td}|  W d    n1 s8w   Y  W d    n1 sGw   Y  tdt  t  t d d d tdt  t  t d d d g}| |j	| d S )NrE   TrF   r!   bar)
r   r   r   rH   rL   r	   r-   r.   r   rM   )r   r1   r>   rO   r   r   r   -test_mock_open_context_manager_multiple_times   s    



z:TestMockOpen.test_mock_open_context_manager_multiple_timesc                 C   sb   t  }t| tdt |dd}| || td W d    n1 s%w   Y  |d d S rD   )r   r   r   r   rG   rH   rI   rJ   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 s!w   Y  | |d d S )Nr!   Z	read_datarE   TrF   rQ   r   r   r   rH   rL   r   r   r1   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    n1 s)w   Y  | |d | |d | |d	 | | d
 t dd}tdt |dd td}| }W d    n1 siw   Y  | |d | | d
 d S )Nfoo
bar
baz
rT   rE   TrF   rQ   foo
bar
baz
 r!   r   r   r   rH   readliner   )r   r1   rW   line1line2line3rX   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 s$w   Y  | |d	 d
 | |d d | |d d | | d | t t| W d    d S 1 s^w   Y  d S )NrZ   rT   rE   TrF   rQ   c                 S      g | ]}|qS r   r   .0lr   r   r   
<listcomp>       z6TestMockOpen.test_dunder_iter_data.<locals>.<listcomp>r   r[   r@   r\      r]   r^   )	r   r   r   rH   r   r`   r   StopIterationnext)r   r1   rW   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}t|}t|}dd |D }W d    n1 s,w   Y  | |d	 | |d
 | |d d | | d d S )NrZ   rT   rE   TrF   rQ   c                 S   re   r   r   rf   r   r   r   ri      rj   z/TestMockOpen.test_next_data.<locals>.<listcomp>r[   r\   r   r]   r^   )r   r   r   rH   rm   r   r`   )r   r1   rW   ra   rb   rn   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 s!w   Y  | |g d t dd}tdt |dd td}| }W d    n1 sOw   Y  | |g d	 d S )
NrZ   rT   rE   TrF   rQ   )r[   r\   r]   foo
bar
baz)r[   r\   Zbazr   r   r   rH   	readlinesr   rV   r   r   r   test_readlines_data   s   



z TestMockOpen.test_readlines_datac              	   C   s~   t dd}tdt |dd! tdd}| }W d    n1 s#w   Y  W d    n1 s2w   Y  | |d d S )N   rT   rE   TrF   abcrbrU   )r   r1   r>   rX   r   r   r   test_read_bytes  s   

zTestMockOpen.test_read_bytesc              	   C   s   t dd}tdt |dd) tdd}| }| }| }W d    n1 s+w   Y  W d    n1 s:w   Y  | |d | |d	 | |d
 d S )N   abc
def
ghi
rT   rE   TrF   rv   rw      abc
   def
   ghi
r_   )r   r2   r>   ra   rb   rc   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    n1 s#w   Y  W d    n1 s2w   Y  | |g d d S )	Nry   rT   rE   TrF   rv   rw   )rz   r{   r|   rr   )r   r2   r>   rX   r   r   r   test_readlines_bytes   s   

z!TestMockOpen.test_readlines_bytesc                 C   s   d}t |d}| | d|d d  | | d|d d  | }| |d|d d  | |d|dd   d S )Nrq   rT   
   )r   r   rL   )r   Z	some_datar1   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 s%w   Y  | |d | |dd	g t dd}tdt |dd td}| }| }W d    n1 s]w   Y  | |d | |d
 d S )NrZ   rT   rE   TrF   rQ   r[   r\   r]   zbar
baz
)r   r   r   rH   r`   rs   r   rL   )r   r1   rW   ra   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!   rT   rQ   )r   rL   r/   r`   rs   r   )r   r1   rN   r   r   r   test_overriding_return_valuesI  s   

z*TestMockOpen.test_overriding_return_valuesN)r   r   r   rK   rP   rR   rS   rY   rd   ro   rp   rt   rx   r}   r~   r   r   r   r   r   r   r   rC      s     		rC   __main__)Zunittestwarningsr   Zunittest.test.testmock.supportr   Zunittest.mockr   r   r   r   r   r	   r   r   r(   r'   	Exceptionr
   ZTestCaser   rC   r   mainr   r   r   r   <module>   s     ~ M