o
    ҷh$                     @  sn  d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ d dlZd dlZd dlmZmZ d dlmZmZmZ erHd dlZejd7ddZejd8ddZejd9ddZd:ddZd:ddZd;ddZd;ddZd:ddZd:dd Zd;d!d"Zd;d#d$Z d<d%d&Z!d<d'd(Z"d;d)d*Z#d;d+d,Z$d=d-d.Z%d=d/d0Z&d:d1d2Z'd=d3d4Z(d>d5d6Z)dS )?    )annotationsN)TYPE_CHECKING)mock)sentinel)_core_file_io)_FILE_ASYNC_METHODS_FILE_SYNC_ATTRSAsyncIOWrappertmp_pathpathlib.Pathreturnstrc                 C  s   t | d S )Ntest)osfspath)r    r   K/var/www/html/venv/lib/python3.10/site-packages/trio/_tests/test_file_io.pypath      r   	mock.Mockc                   C  s   t jtjdS )N)spec_set)r   MockioStringIOr   r   r   r   wrapped   r   r   AsyncIOWrapper[mock.Mock]c                 C  s
   t | S N)trio	wrap_filer   r   r   r   
async_file   s   
r!   Nonec                   C  s:   t t td W d    d S 1 sw   Y  d S )N )pytestraises	TypeErrorr   r   r   r   r   r   test_wrap_invalid$   s   "r'   c                  C  s|   G dd d} |  }t |tjrJ t|}t |tsJ | `tt	 t|   W d    d S 1 s7w   Y  d S )Nc                   @  s    e Zd ZdddZdddZdS )	z&test_wrap_non_iobase.<locals>.FakeFiler   r"   c                 S     d S r   r   selfr   r   r   close+      z,test_wrap_non_iobase.<locals>.FakeFile.closec                 S  r(   r   r   r)   r   r   r   write.   r,   z,test_wrap_non_iobase.<locals>.FakeFile.writeNr   r"   )__name__
__module____qualname__r+   r-   r   r   r   r   FakeFile*   s    
r2   )

isinstancer   IOBaser   r   r
   r-   r$   r%   r&   )r2   r   r!   r   r   r   test_wrap_non_iobase)   s   
"r5   c                 C  s   | j |u sJ d S r   r    r!   r   r   r   r   test_wrapped_property=   s   r7   c                   sF   t t}t fdd|D sJ t fdd|D r!J d S )Nc                 3  s(    | ]}|t v r|t  v V  qd S r   dir.0attrr6   r   r   	<genexpr>K   s   & z+test_dir_matches_wrapped.<locals>.<genexpr>c                 3  s(    | ]}|t vr|t  v V  qd S r   r8   r:   r6   r   r   r=   M   s    )r	   unionr   allany)r!   r   attrsr   r6   r   test_dir_matches_wrappedD   s
   
rB   c                  C  sd   G dd dt j} t|  }t|jdsJ tt |j	 W d    d S 1 s+w   Y  d S )Nc                   @  s   e Zd ZdddZdS )z0test_unsupported_not_forwarded.<locals>.FakeFiler   r"   c                 S  r(   r   r   r)   r   r   r   unsupported_attrT   r,   zAtest_unsupported_not_forwarded.<locals>.FakeFile.unsupported_attrNr.   )r/   r0   r1   rC   r   r   r   r   r2   S   s    r2   rC   )
r   	RawIOBaser   r   hasattrr   r$   r%   AttributeErrorrC   )r2   r!   r   r   r   test_unsupported_not_forwardedR   s   "rG   c                  C  s  t jdusJ t jj} t| tjjsJ t| 	d}|D ]}d|v r& nqt
d |D ]}d|v r6 nq.t
d g }|D ],}| rM|dsM n td|}|durl|d	dur`d
nd}||d|f q@dd tD }|dd tD 7 }|  |  ||ksJ dS )z9Check the manual stubs match the list of wrapped methods.Nztrio._file_iozclass AsyncIOWrapperzNo class definition line?zif TYPE_CHECKINGzNo TYPE CHECKING line?z        z!\s*(async )?def ([a-zA-Z0-9_]+)\(   asyncsync   c                 S     g | ]}|d fqS )rI   r   r;   fnamer   r   r   
<listcomp>       z/test_type_stubs_match_lists.<locals>.<listcomp>c                 S  rL   )rJ   r   rM   r   r   r   rO      rP   )r   __spec__loaderr3   	importlibabcSourceLoaderr   r   
get_sourcer$   failstrip
startswithrematchgroupappendr   r	   sort)rR   sourcelinefoundr[   kindexpectedr   r   r   test_type_stubs_match_lists`   s8   

rd   c                 C  s4   t D ]}|t| vrqt| |t||u sJ qd S r   )r	   r9   getattrr!   r   	attr_namer   r   r   test_sync_attrs_forwarded   s
   rh   c              	   C     t D ]=}|t| v rqtt t| | W d    n1 s w   Y  tt t|| W d    n1 s:w   Y  qd S r   )r	   r9   r$   r%   rF   re   rf   r   r   r   test_sync_attrs_match_wrapper      rj   c                 C  s4   t D ]}|t| vrqt| |t| |u sJ qd S r   )r   r9   re   )r!   	meth_namer   r   r   !test_async_methods_generated_once   s
   rm   c                 C  sD   | j jdksJ | j jdksJ | j jd usJ d| j jv s J d S )NreadzAsyncIOWrapper.readzio.StringIO.read)rn   r/   r1   __doc__)r!   r   r   r   test_async_methods_signature   s   rp   c                   sp   t D ]2}|t| vrqt| |}t||}|tjtjdI d H }|jtjtjd || ks1J |  qd S )N)keyword)r   r9   re   r   argumentrq   assert_called_once_with
reset_mock)r!   r   rl   methwrapped_methvaluer   r   r   test_async_methods_wrap   s   


rx   c              	   C  ri   r   )r   r9   r$   r%   rF   re   )r!   r   rl   r   r   r    test_async_methods_match_wrapper   rk   ry   c                   s4   t | dI d H }t|tsJ | I d H  d S Nw)r   	open_filer3   r
   acloser   fr   r   r   	test_open   s   r   c              	     sn   t | dI d H 4 I d H }t|tsJ |jrJ W d   I d H  n1 I d H s+w   Y  |js5J d S rz   )r   r|   r3   r
   closedr~   r   r   r   test_open_context_manager   s   (r   c                    sL   t td} t| j}| jd dd | 2 I d H }||ks$J d S )Nztest
foo
barr   c                   s   g | z3 d H W }|q6 S r   r   )r;   r`   r   r   r   rO      s    z#test_async_iter.<locals>.<listcomp>)r   r   r   r   listr   seek)r!   rc   resultr   r   r   test_async_iter   s   
r   c              	     s   t  P}t| dI d H }|  tt j |dI d H  W d    n1 s,w   Y  tt j |	 I d H  W d    n1 sIw   Y  W d    n1 sXw   Y  |j
sbJ d S )Nr{   a)r   CancelScoper   r|   cancelr$   r%   	Cancelledr-   r}   r   )r   cscoper   r   r   r   test_aclose_cancelled   s   

r   c                   s   | d }|   t|ddd(}t|}t|}| I d H }t|ts)J |j	|u s0J W d    d S 1 s;w   Y  d S )Nfilenamerbr   )mode	buffering)
touchopenr   BufferedReaderr   r   detachr3   r
   r   )r   tmp_filerawbufferedr!   detachedr   r   r   test_detach_rewraps_asynciobase  s   

"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   r   r"   )*
__future__r   rS   r   r   rZ   typingr   unittestr   unittest.mockr   r$   r   r   r   trio._file_ior   r	   r
   pathlibfixturer   r   r!   r'   r5   r7   rB   rG   rd   rh   rj   rm   rp   rx   ry   r   r   r   r   r   r   r   r   r   <module>   sJ    






(


	
	





