U
    g                     @  sb  U d dl mZ d dlZd dlZd dlmZmZmZ d dlZd dl	Z	d dl
mZ erbd dlmZmZ ejdddd	d
ZddddddZejjejdkddddddZejjejdkddddddZdddddZddddZeee	j eej f Zeeee f Ze	jejfeje	jfe	je	jfgZded < ejd!ed"d"dd#d$d%Z e	jejfe	je	jfe	jefee	jfgZ!d&ed'< ejd!e!d(d(dd#d)d*Z"ejd!e	jejfe	je	jfgejd
d+d,d-gd"d"ddd.d/d0Z#dddd1d2Z$dddd3d4Z%ejd5d6d7gddd8d9d:Z&dddd;d<Z'ejd5d=d>gddd8d?d@Z(ddddAdBdCZ)ddddDdEZ*ddddFdGZ+dddHdIZ,ejdJe	jj-e	jj.gddKddLdMdNZ/dddOdPZ0ddddQdRZ1ddddSdTZ2ddddUdVZ3dddWdXZ4ejdYe	j5j6e	j5j7e	j5j8e	j5j9gdZdd[d\d]Z:dS )^    )annotationsN)TYPE_CHECKINGTypeUnion)AsyncIOWrapper)	AwaitableCallablezpathlib.Pathz	trio.Path)tmp_pathreturnc                 C  s   t | d S )Ntest)trioPath)r	    r   9/tmp/pip-unpacked-wheel-ks04xdmi/trio/_tests/test_path.pypath   s    r   strz<tuple[Callable[[], object], Callable[[], Awaitable[object]]])r   method_namer
   c                 C  s(   t | }t| }t||t||fS N)pathlibr   r   getattr)r   r   Z	sync_pathZ
async_pathr   r   r   method_pair   s    

r   ntzOS is not posix)reasonNoner
   c                     s   t t tjstd S r   )
isinstancer   r   	PosixPathAssertionErrorr   r   r   r   test_instantiate_posix   s    r   zOS is not Windowsc                     s   t t tjstd S r   )r   r   r   WindowsPathr   r   r   r   r   test_instantiate_windows#   s    r    )r   r
   c              
     sF   |  dI d H 4 I d H }t|ts(tW 5 Q I d H R X |jsBtd S Nw)openr   r   r   closedr   fr   r   r   "test_open_is_async_context_manager(   s    r'   c                    s.   t d} t| dkstt| dks*td S )Nr   s   test)r   r   r   r   bytesr   r   r   r   
test_magic/   s    
r*   z+list[tuple[EitherPathType, EitherPathType]]	cls_pairs)cls_acls_bEitherPathType)r,   r-   r
   c                   sp   | d|d }}||kst ||kr*t | d|d }}||k sHt ||ksTt |d kr`t |d krlt d S )N ab)r   )r,   r-   r0   r1   r   r   r   test_cmp_magic?   s    r2   z)list[tuple[PathOrStrType, PathOrStrType]]cls_pairs_strPathOrStrTypec                   sH   | d|d }}|| }t |tjs*tt|tjddksDtd S )Nr0   r1   )r   r   r   r   r   osr   join)r,   r-   r0   r1   resultr   r   r   test_div_magicZ   s    r8   foozfoo/bar/bazz./foo)r,   r-   r   r
   c                   s*   | ||| }}t |t |ks&td S r   )hashr   )r,   r-   r   r0   r1   r   r   r   test_hash_magicd   s    
r;   c                   s"   dt | kst| jdkstd S )Nnamer   )dirr   r<   r)   r   r   r   test_forwarded_propertiesr   s    r>   c                   sH   | j jdkst| j jdks t| j jd k	s0t| j j| j jksDtd S )NresolvezPath.resolve)r?   __name__r   __qualname____doc__r)   r   r   r   test_async_method_signaturey   s    rC   r   is_diris_file)r   r
   c                   s0   t d| \}}| }| I d H }||ks,td S N.)r   r   r   methodZasync_methodr7   Zasync_resultr   r   r   test_compare_async_stat_methods   s    rJ   c              	     s$   t t t| d W 5 Q R X d S )NZinvalid_fake_attr)pytestraisesAttributeErrorr   r)   r   r   r   test_invalid_name_not_wrapped   s    rN   absoluter?   c                   sH   t d| \}}| }| I d H }t|tjs0tt|t|ksDtd S rF   )r   r   r   r   r   r   rH   r   r   r   test_async_methods_rewrap   s
    rP   )r   r	   r
   c                   sX   |  d}| d}t|tjs$t||d ks4tt|tjsDt||d ksTtd S )Nr9   z.pyztest.py)	with_namewith_suffixr   r   r   r   )r   r	   rQ   rR   r   r   r   test_forward_methods_rewrap   s    

rS   c                   s   t | jtjstd S r   )r   parentr   r   r   r)   r   r   r   test_forward_properties_rewrap   s    rU   c                   s&   | j  I d H } |  ds"td S )Nzfile:///)rT   r?   as_uri
startswithr   r)   r   r   r   #test_forward_methods_without_rewrap   s    rX   c                    s   t d} t| dkstd S )NrG   ztrio.Path('.'))r   r   reprr   r)   r   r   r   	test_repr   s    
rZ   methz(Callable[[trio.Path, trio.Path], object])r   r[   r
   c                   s4   |   I d H }|| |}|d kr$| }||ks0td S r   )rO   r   )r   r[   wrappedr7   r   r   r   test_path_wraps_path   s
    
r]   c                	     s$   t t td W 5 Q R X d S )N   )rK   rL   	TypeErrorr   r   r   r   r   r   test_path_nonpath   s    r`   c              
     sD   t | dI d H 4 I d H }|jt| ks0tW 5 Q I d H R X d S r!   )r   	open_filer<   r5   fspathr   r%   r   r   r   test_open_file_can_open_path   s    rc   c                   s  |   I d H  | d   I d H  | d d dI d H  | d dI d H  | d dI d H  dhddhd D ]L\}}t }| |I d H D ] }t|tjst|	|j
 q||ksttqtt }| dI d H D ] }t|tjst|	|j
 q|ddhkstd S )Nr9   z_bar.txt    bar.txtzbar.dat)*.txtz**/*.txtrf   )mkdirwrite_bytesitemssetglobr   r   r   r   addr<   rglob)r   Z_patternZ_resultsentriesentryr   r   r   test_globmethods   s$    rp   c                   s~   |   I d H  | d   I d H  | d dI d H  t }|  I d H D ] }t|tjs\t||j	 qH|ddhksztd S )Nr9   re   rd   )
rg   rh   rj   iterdirr   r   r   r   rl   r<   )r   rn   ro   r   r   r   test_iterdir   s    rr   c                     sr   t tj I d H tjstttj I d H tjdks@tttj	 I d H t
 ks`ttjjjsntd S )N~)r   r   r   homer   r   r5   r   
expandusercwdgetcwdrB   r   r   r   r   test_classmethods   s    $ rx   wrapperz2Callable[[Callable[[], None]], Callable[[], None]])ry   r
   c                 C  s$   | dddd}|j d ks td S )Nr   r   c                   S  s   d S r   r   r   r   r   r   func_without_docstring  s    z@test_wrapping_without_docstrings.<locals>.func_without_docstring)rB   r   )ry   rz   r   r   r    test_wrapping_without_docstrings  s    r{   );
__future__r   r5   r   typingr   r   r   rK   r   Ztrio._file_ior   collections.abcr   r   Zfixturer   r   markZskipifr<   r   r    r'   r*   r   r.   r   r4   r+   __annotations__Zparametrizer2   r3   r8   r;   r>   rC   rJ   rN   rP   rS   rU   rX   rZ   __init__joinpathr]   r`   rc   rp   rr   rx   _pathZ_wraps_asyncZ_wrap_methodZ_wrap_method_pathZ_wrap_method_path_iterabler{   r   r   r   r   <module>   s    	




		
	

	