o
    eG                     @   s  d dl mZ d dl mZ d dlZd dlZd dlZd dl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 zd dlmZ W n eyK   dZY nw d dlmZ d dlmZ dd	 Zd
d Zdd ZG dd deZG dd deejZG dd deZG dd deeZe	eeddG dd deeZ G dd dee	jZ!G dd deejZ"dd Z#e#  e	$edu d G d!d" d"e"Z%e&d#kre'  dS dS )$    )print_function)absolute_importN)
fileobjectOpenDescriptorGreenOpenDescriptor)sysinfoc                 C   s(   |D ]}|  | |   q|   d S N)writeflushclose)fobjline	character r   MD:\Projects\ConvertPro\env\Lib\site-packages\gevent/tests/test__fileobject.pyWriter   s   

r   c                 C   s&   zt |  W d S  ty   Y d S w r
   )osr   OSError)fdr   r   r   close_fd_quietly"   s
   r   c                    s   t   fdd}|S )Nc                    s   | j s| d  |  d S )NzDoesn't work with regular files)WORKS_WITH_REGULAR_FILESskipTestselffuncr   r   f)   s   
z*skipUnlessWorksWithRegularFiles.<locals>.f)	functoolswraps)r   r   r   r   r   skipUnlessWorksWithRegularFiles(   s   r!   c                   @   s   e Zd Zdd Zdd ZdS )CleanupMixinc                 C   s0   t |\}}| tj| | t| ||fS r
   )tempfilemkstemp
addCleanupr   remover   )r   suffixfilenopathr   r   r   _mkstemp2   s   zCleanupMixin._mkstempc                 C   s,   t  \}}| t| | t| ||fS r
   )r   piper%   r   )r   rwr   r   r   _pipe8   s   zCleanupMixin._pipeN)__name__
__module____qualname__r*   r.   r   r   r   r   r"   1   s    r"   c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e
dd Z	d(ddZe
dd Ze
dd Ze
dd Ze
dd Ze
dd Ze
dd Ze
dd  Zd!d" Ze
ejd#d$ Ze
d%d& Zd'S ))TestFileObjectBlockTc                 C      t jS r
   )r   ZFileObjectBlockr   r   r   r   _getTargetClassE      z#TestFileObjectBlock._getTargetClassc                 O      |   |i |S r
   r4   r   argskwargsr   r   r   _makeOneH      zTestFileObjectBlock._makeOnec                 K   s&   |   \}}| j||ffi | d S r
   )r.   _do_test_del)r   r:   r,   r-   r   r   r   	_test_delK   s   zTestFileObjectBlock._test_delc           	      K   sB  |\}}| j |dfi |}|d z|  W n ty4   tdt|tjd dd l}|	  Y nw dd l
}|  |dt ~t  W d    n1 sSw   Y  |ddr{| ttf t| W d    n1 suw   Y  nt| |  |d	}| | d W d    d S 1 sw   Y  d S )
Nwb   xzFailed flushing fileobject)filer   ignorer   Trb)r;   r   r   IOErrorprintreprsysstderr	traceback	print_excwarningscatch_warningssimplefilterResourceWarninggcZcollectgetassertRaisesr   r   r   assertEqualread)	r   r+   r:   r,   r-   srI   rK   r   r   r   r   r=   O   s2   



"z TestFileObjectBlock._do_test_delc                 C   s   |    d S r
   r>   r   r   r   r   test_dell   s   zTestFileObjectBlock.test_delc                 C      | j dd d S )NTr   rU   r   r   r   r   test_del_closep   s   z"TestFileObjectBlock.test_del_closec                 C   s   |  d\}}d}t|d t|| t| t|d}|d |d}W d    n1 s4w   Y  t|d)}| j|ddd}| |	  |d | 
d|  |d}W d    n1 sjw   Y  | 
|| | 
|| d S )	Nz".gevent.test__fileobject.test_seeks   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas   BBBBBBBBBBBBBBBrC      i   FrX   )r*   r   r   r   openseekrS   r;   
assertTrueseekablerR   tell)r   r(   r)   rT   r   native_dataZf_rawZfileobj_datar   r   r   	test_seekt   s$   


zTestFileObjectBlock.test_seekrS   c              	   K   s,  |  d| \}}t|| t| tj||fi |}t|| }	W d    n1 s/w   Y  |rW| j||fi |}t|| }
W d    n1 sQw   Y  n7tj}|||fi |#}| |}t|| }
W d    n1 szw   Y  W d    n1 sw   Y  | |	|
 |
S )Nz.gevent_test_)	r*   r   r   r   ior[   getattrr;   rR   )r   Z	byte_dataZ	open_modemeth	open_pathZopen_kwargsr(   r)   r   r`   gevent_dataopenerrawr   r   r   Z__check_native_matches   s(   
z*TestFileObjectBlock.__check_native_matchesc                 C   s   |  dd}| |t d S )Ns   abcdefgr,   *_TestFileObjectBlock__check_native_matchesassertIsInstancestrr   rf   r   r   r   test_str_default_to_native   s   z.TestFileObjectBlock.test_str_default_to_nativec                 C   s(   | j dddddd}| |t d S )Nu   ☃zutf-8zr+   )	bufferingencoding)rj   encoderk   rl   rm   r   r   r   test_text_encoding   s   z&TestFileObjectBlock.test_text_encodingc                 C   s   d S r
   r   r   r   r   r   test_does_not_leak_on_exception   s   z3TestFileObjectBlock.test_does_not_leak_on_exceptionc                 C   sH   t jdkr
| d | jdddd}| |d t | t|d d S )	N      U file mode was removed in 3.11   line1
line2
line3lastline

ZrbU	readlinesrd   r      )rG   version_infor   rj   rk   bytesrR   lenrm   r   r   r    test_rbU_produces_bytes_readline   s   

z4TestFileObjectBlock.test_rbU_produces_bytes_readlinec                 C   s8   t jdkr
| d | jdddd}| |d t d S )Nru   rx   ry   rUrz   r{   r   )rG   r}   r   rj   rk   rl   rm   r   r   r   test_rU_produces_native   s   

z+TestFileObjectBlock.test_rU_produces_nativec                 C   s    | j dddd}| |t d S )N   line1
r,   readliner{   ri   rm   r   r   r   test_r_readline_produces_native   s   z3TestFileObjectBlock.test_r_readline_produces_nativec                 C   s"   | j ddddd}| |t d S )Nr   r,   r   F)rd   re   ri   rm   r   r   r   *test_r_readline_on_fobject_produces_native   s   z>TestFileObjectBlock.test_r_readline_on_fobject_produces_nativec                 C   s6   t  \}}| |}| |d}|  |  d S )Nr-   )r   r+   r;   r   )r   r,   r-   xyr   r   r   test_close_pipe   s
   
z#TestFileObjectBlock.test_close_pipec                    s   d\  }t }tjrdn }|j  |j| G  fdddt}| d}	t
 t|d W d    n1 sLw   Y  |  	t
 t|d W d    n1 sjw   Y  |  z|  W n	 ty   Y nw |j  |j| fdd}| t}|| W d    n1 sw   Y  t}|| W d    d S 1 sw   Y  d S )	Nz#.gevent_test_named_path_after_closez<fdopen>c                       s<   e Zd Z fddZdd  Z Z Z ZZdd  Z	Z
dS )z;TestFileObjectBlock.test_name_after_close.<locals>.Namelessc                    s    S r
   r   r   r(   r   r   r(        zBTestFileObjectBlock.test_name_after_close.<locals>.Nameless.filenoc                 S      dS )NFr   r   r   r   r   <lambda>	      zDTestFileObjectBlock.test_name_after_close.<locals>.Nameless.<lambda>c                 S   r   )NTr   r   r   r   r   r   
  r   N)r/   r0   r1   r(   r   r   isattyclosedwritabler^   readabler   r   r   r   Nameless  s    r   rC   namec                    s2    | }|j  |  |j  d S r
   )r;   rR   r   r   )argr   )r)   r   r   r   check  s   
z8TestFileObjectBlock.test_name_after_close.<locals>.check)r*   r;   r   fdopen	greentestPY2rR   r   objectrQ   AttributeErrorrc   r   r   r[   rb   )r   r   nfZnf_namer   Znamelessr   r   )r(   r)   r   r   test_name_after_close   s>   




"z)TestFileObjectBlock.test_name_after_closec                    s    d\}}t|d t| td t  fdd}|d|dd |d	d
 |dd |dd W d    d S 1 sIw   Y  d S )Nz.gevent_test_readintos   hello world    c                    s:    d |  }|t|  d | | d S r
   )readintorR   r   )Z
byte_countZexpected_dataZ
bytes_readbufr   Zmbufr   r   r   assertReadInto7  s   z@TestFileObjectBlock.test_readinto_serial.<locals>.assertReadIntorC      s   he      ls   lo world    )r*   r   r   r   	bytearray
memoryviewr;   )r   r(   r)   r   r   r   r   test_readinto_serial.  s   



"z(TestFileObjectBlock.test_readinto_serialN)rS   T)r/   r0   r1   r   r4   r;   r>   r=   rV   rY   r!   ra   rj   rn   rs   rt   r   r   r   r   r   r   Zignores_leakcheckr   r   r   r   r   r   r2   ?   s@    









	8r2   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S )ConcurrentFileObjectMixinc                 C   sR   |   \}}| |d}| | | |d}| | | t|dt| d S )NrC   r-   read1)r.   r;   _close_on_teardownr]   hasattrdir)r   r,   r-   readerwriterr   r   r   test_read1_binary_presentG  s   

z3ConcurrentFileObjectMixin.test_read1_binary_presentc                 C   sJ   |   \}}| |d}| | | tj| | t|dt| d S )Nrtr   )	r.   r;   r   r%   r   r   assertFalser   r   r   r,   r-   r   r   r   r   test_read1_text_not_presentP  s
   
z5ConcurrentFileObjectMixin.test_read1_text_not_presentc                 C   sB   |   \}}| tj| | |}| | | t|d d S )Nr   )r.   r%   r   r   r;   r   r   r   r   r   r   r   test_read1_defaultX  s
   

z,ConcurrentFileObjectMixin.test_read1_defaultc                 C   s   |   \}}| j|ddd}| j|ddd}| | | | |d |d}| |d |dg |d}| |d d S )NrC   r   )bufsizer?      ar      2)r.   r;   r   r   rS   rR   
writelines)r   r,   r-   r   r   br   r   r   test_bufsize_0a  s   




z(ConcurrentFileObjectMixin.test_bufsize_0c           	      C   s   dd l }|  \}}g d}tt| |d|}zD| # tjdkr,d}| 	d n|
dt d}| ||}W d    n1 sDw   Y  | }|  | d	| W |  d S |  w )
Nr   )r   s   line2s   line3
s   line4
line5s   
line6r?   ru   r,   rx   rB   r   z#line1
line2
line3
line4
line5
line6)rK   r.   geventspawnr   r;   rL   rG   r}   r   rM   DeprecationWarningrS   r   rR   kill)	r   rK   r,   r-   linesgmoder   resultr   r   r   test_newlinesp  s"   


z'ConcurrentFileObjectMixin.test_newlinesc           
      C   s   |   \}}| | |d}| | |d}tt|dg}z/td}td}||}||}	| |d | |d | d | |	d W |	  d S |	  w )NrC   r?   s   hellor   ro   r   )
r.   r   r;   r   r   r   r   r   rR   r   )
r   r,   r-   rfZwfr   Zbuf1buf2Zn1Zn2r   r   r   test_readinto  s   

z'ConcurrentFileObjectMixin.test_readintoN)	r/   r0   r1   r   r   r   r   r   r   r   r   r   r   r   C  s    		r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestFileObjectThreadc                 C   r3   r
   )r   ZFileObjectThreadr   r   r   r   r4     r5   z$TestFileObjectThread._getTargetClassc                 C   rW   )NFrX   rU   r   r   r   r   test_del_noclose  s   z%TestFileObjectThread.test_del_noclosec                 C   
   t dNzRace conditionsunittestZSkipTestr   r   r   r   rV        
zTestFileObjectThread.test_delc                 C   r   r   r   r   r   r   r   rY     r   z#TestFileObjectThread.test_del_closeN)r/   r0   r1   r4   r   rV   rY   r   r   r   r   r     s
    r   FileObjectPosixzNeeds FileObjectPosixc                   @   s,   e Zd ZejrejrdZdd Zdd ZdS )TestFileObjectPosixFc                 C   r3   r
   )r   r   r   r   r   r   r4     r5   z#TestFileObjectPosix._getTargetClassc                 C   s   |   \}}| t}t|dtj W d    n1 sw   Y  |j}| t}| j|ddd}|j	
d W d    n1 sDw   Y  |j}| |j|j | |j|j | |j|j | t|t| d S )Nr   r,   FrX   )r.   rQ   r   r   lseekSEEK_SET	exceptionrD   r;   Zfileior\   rR   errnostrerrorr9   rl   )r   r,   _wctxZos_exr   Zio_exr   r   r   test_seek_raises_ioerror  s   z,TestFileObjectPosix.test_seek_raises_ioerrorN)	r/   r0   r1   r	   ZLIBUVZLINUXr   r4   r   r   r   r   r   r     s
    r   c                   @      e Zd Zdd ZdS )TestTextModec                 C   s   t   | d\}}t| t|d}|d W d    n1 s%w   Y  t|d}| }W d    n1 s>w   Y  | |tj	
d d S )Nz%.gevent.test__fileobject.test_defaultr-   
rC   ascii)r   Zget_hubr*   r   r   r[   r   rS   rR   lineseprr   )r   r(   r)   r   datar   r   r    test_default_mode_writes_linesep  s   

z-TestTextMode.test_default_mode_writes_linesepN)r/   r0   r1   r   r   r   r   r   r         r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d Zed
ddedddedddeddded
ddedddedddedddedddedddd ed!dd"d#ed$dd%d&fZd'd( Z	d)S )*TestOpenDescriptorc                 C      t S r
   r   r   r   r   r   r4     r   z"TestOpenDescriptor._getTargetClassc                 O   r6   r
   r7   r8   r   r   r   r;     r<   zTestOpenDescriptor._makeOnec                 O   sB   |  || | j|i | W d    d S 1 sw   Y  d S r
   )assertRaisesRegexr;   )r   regexkindr9   r:   r   r   r   _check  s   "zTestOpenDescriptor._checkc                 K   
   | t |fS r
   )	TypeErrorrer:   r   r   r   r        
 zTestOpenDescriptor.<lambda>c                 K   r   r
   )
ValueErrorr   r   r   r   r     r   r   *   )r   rp   Znope)rp   rq   )rq   errors)r   Zaoeugzmode U cannot be combinedZwUztext and binaryZrtbzappend mode at oncerwzexactly one+ztake an encodingrC   r   )r   rq   ztake an errorsstrict)r   r   ztake a newliner   )r   newlinec                 C   sZ   ddl m} |  \}}| j|ddddd}| |j | }| || t	| d S )Nr   )WriteallMixinr?   FT)rp   closefdatomic_write)
gevent._fileobjectcommonr   r.   r;   r]   r   Zopenedrk   r   r   )r   r   r(   r   descr   r   r   r   test_atomicwrite_fd  s   z&TestOpenDescriptor.test_atomicwrite_fdN)
r/   r0   r1   r4   r;   r   caseZvaseCASESr   r   r   r   r   r     s(    








r   c                  C   s:   t jD ]\} }}tt d| dd | ||fdd qd S )NZtest_ _c                 S   s   | j ||dfi |S )Nr   )r   )r   _re_kindZ_kwr   r   r   r   %  s    zpop.<locals>.<lambda>)r   r   setattrreplace)r   r   r:   r   r   r   pop!  s   r  zNo support for non-blocking IOc                   @   r   )TestGreenOpenDescriptonc                 C   r   r
   r   r   r   r   r   r4   +  r   z'TestGreenOpenDescripton._getTargetClassN)r/   r0   r1   r4   r   r   r   r   r  )  r   r  __main__)(
__future__r   r   r   rO   rb   r   rG   r#   r   r   r   r   r   Zgevent._fileobjectposixr   ImportErrorZgevent.testingtestingr   r	   r   r   r!   r   r"   ZTestCaser2   r   r   Z
skipUnlessr   r   r   r   r  ZskipIfr  r/   mainr   r   r   r   <module>   s`    	  [#+