B
    ÐH/\ê!  ã               @   sB  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mZ d dl	m
Z d dlmZ d dlmZ d dlmZ ye W n$ ek
r¤   G dd„ deƒZY nX d	d
„ Zdd„ ZG dd„ d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jƒZe dkr>ej! "d¡ e #¡  dS )é    )Úprint_functionN)Ú
fileobject)ÚPY3)Ú"reraiseFlakyTestRaceConditionLibuv)ÚskipOnLibuvOnCIOnPyPyc               @   s   e Zd ZdZdS )ÚResourceWarningzPython 2 fallbackN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   ú<lib/python3.7/site-packages/gevent/tests/test__fileobject.pyr      s   r   c             C   s,   x|D ]}|   |¡ |  ¡  qW |  ¡  d S )N)ÚwriteÚflushÚclose)ÚfobjÚlineÚ	characterr   r   r   Úwriter   s    

r   c          	   C   s,   yt  | ¡ W n ttfk
r&   Y nX d S )N)Úosr   ÚIOErrorÚOSError)Úfdr   r   r   Úclose_fd_quietly   s    r   c               @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	dƒdd„ ƒZ
dd„ ZdS )ÚTestFileObjectBlockc             C   s   t jS )N)r   ZFileObjectBlock)Úselfr   r   r   Ú_getTargetClass'   s    z#TestFileObjectBlock._getTargetClassc             O   s   |   ¡ ||ŽS )N)r   )r   ÚargsÚkwargsr   r   r   Ú_makeOne*   s    zTestFileObjectBlock._makeOnec             K   s:   t  ¡ \}}|  t|¡ |  t|¡ | j||ff|Ž d S )N)r   ÚpipeÚ
addCleanupr   Ú_do_test_del)r   r   ÚrÚwr   r   r   Ú	_test_del-   s    zTestFileObjectBlock._test_delc       	   	   K   s  |\}}| j |df|Ž}| d¡ y| ¡  W n8 tk
rf   tdt|ƒtjd dd l}| 	¡  Y nX dd l
}| ¡  | dt¡ ~t ¡  W d Q R X | dd¡rÌ|  ttf¡ t |¡ W d Q R X n
t |¡ |   |d	¡}|  | ¡ d¡ W d Q R X d S )
NÚwbó   xzFailed flushing fileobject)Úfiler   Úignorer   TÚrb)r   r   r   r   ÚprintÚreprÚsysÚstderrÚ	tracebackÚ	print_excÚwarningsÚcatch_warningsÚsimplefilterr   ÚgcZcollectÚgetÚassertRaisesr   r   r   ÚassertEqualÚread)	r   r    r   r#   r$   Úsr/   r1   r   r   r   r   r"   4   s(    


z TestFileObjectBlock._do_test_delc             C   s   |   ¡  d S )N)r%   )r   r   r   r   Útest_delQ   s    zTestFileObjectBlock.test_delc             C   s   | j dd d S )NT)r   )r%   )r   r   r   r   Útest_del_closeU   s    z"TestFileObjectBlock.test_del_closez+This appears to crash on libuv/pypy/travis.c          	   C   s  t  d¡\}}|  tj|¡ d}t |d¡ t ||¡ t |¡ t|dƒ}| d¡ | 	d¡}W d Q R X t|dƒv}y| j
|ddd}W n tk
r¦   tƒ  Y nX ts¶t|d	ƒrÄ|  | ¡ ¡ | d¡ |  d| ¡ ¡ | 	d¡}W d Q R X |  ||¡ |  ||¡ d S )
Nz".gevent.test__fileobject.test_seeks   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas   BBBBBBBBBBBBBBBr*   é   i   F)r   Úseekable)ÚtempfileÚmkstempr!   r   Úremover   r   ÚopenÚseekr8   r   Ú
ValueErrorr   r   ÚhasattrÚ
assertTruer=   r7   Útell)r   ÚfilenoÚpathr9   ÚfZnative_dataZf_rawZfileobj_datar   r   r   Ú	test_seekX   s*    


zTestFileObjectBlock.test_seekc             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_pipeN)r   r	   r
   r   r   r%   r"   r:   r;   r   rJ   rM   r   r   r   r   r   %   s   *r   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚConcurrentFileObjectMixinc             C   sJ   t  ¡ \}}|  |¡}|  |d¡}|  |¡ |  |¡ |  t|dƒ¡ d S )Nr$   Úread1)r   r    r   Ú_close_on_teardownrE   rD   )r   r#   r$   rK   rL   r   r   r   Ú
test_read1   s    


z$ConcurrentFileObjectMixin.test_read1c             C   s†   t  ¡ \}}| j|ddd}| j|ddd}|  |¡ |  |¡ | d¡ | d¡}|  |d¡ | dg¡ | d¡}|  |d¡ d S )Nr*   r   )Úbufsizer&   ó   aé   ó   2)r   r    r   rP   r   r8   r7   Ú
writelines)r   r#   r$   rK   rL   Úbr   r   r   Útest_bufsize_0˜   s    




z(ConcurrentFileObjectMixin.test_bufsize_0c          	   C   s”   dd l }t ¡ \}}dddddg}t t|  |d¡|¡}zL| ¡  | dt	¡ |  |d	¡}W d Q R X | 
¡ }| ¡  |  d
|¡ W d | ¡  X d S )Nr   s   line1
s   line2s   line3
s   line4
line5s   
line6r&   r)   ZrUz#line1
line2
line3
line4
line5
line6)r1   r   r    ÚgeventZspawnr   r   r2   r3   ÚDeprecationWarningr8   r   r7   Úkill)r   r1   r#   r$   ÚlinesÚgr   Úresultr   r   r   Útest_newlines§   s    
z'ConcurrentFileObjectMixin.test_newlinesN)r   r	   r
   rQ   rX   r_   r   r   r   r   rN   ‹   s   	rN   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestFileObjectThreadc             C   s   t jS )N)r   ZFileObjectThread)r   r   r   r   r   ¼   s    z$TestFileObjectThread._getTargetClassc          	   C   s(   |   td¡ | jdd W d Q R X d S )Nz7FileObjectThread does not support close=False on an fd.F)r   )ZassertRaisesRegexÚ	TypeErrorr%   )r   r   r   r   Útest_del_nocloseÂ   s    z%TestFileObjectThread.test_del_noclosec             C   s   t  d¡‚d S )NzRace conditions)ÚunittestÚSkipTest)r   r   r   r   r:   Ð   s    zTestFileObjectThread.test_delc             C   s   t  d¡‚d S )NzRace conditions)rc   rd   )r   r   r   r   r;   Ó   s    z#TestFileObjectThread.test_del_closeN)r   r	   r
   r   rb   r:   r;   r   r   r   r   r`   ¹   s   r`   ÚFileObjectPosixzNeeds FileObjectPosixc               @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestFileObjectPosixc             C   s   t jS )N)r   re   )r   r   r   r   r   Þ   s    z#TestFileObjectPosix._getTargetClassc          	   C   sÐ   t  ¡ \}}|  t|¡ |  t|¡ |  t¡}t  |dt j¡ W d Q R X |j}|  t	¡"}| j
|ddd}|j d¡ W d Q R X |j}|  |j|j¡ |  |j|j¡ |  |j|j¡ |  t|ƒt|ƒ¡ d S )Nr   r#   F)r   )r   r    r!   r   r6   r   ÚlseekÚSEEK_SETZ	exceptionr   r   ZfileiorB   r7   ÚerrnoÚstrerrorr   Ústr)r   r#   r$   ZctxZos_exrI   Zio_exr   r   r   Útest_seek_raises_ioerrorá   s    z,TestFileObjectPosix.test_seek_raises_ioerrorN)r   r	   r
   r   rl   r   r   r   r   rf   ×   s   rf   c               @   s   e Zd Zdd„ ZdS )ÚTestTextModec          	   C   s„   t  ¡  t d¡\}}|  tj|¡ t |¡ t|dƒ}| 	d¡ W d Q R X t|dƒ}| 
¡ }W d Q R X |  |tj d¡¡ d S )Nz%.gevent.test__fileobject.test_defaultr$   Ú
r*   Úascii)rY   Zget_hubr>   r?   r!   r   r@   r   rA   r   r8   r7   ÚlinesepÚencode)r   rG   rH   rI   Údatar   r   r   Ú test_default_mode_writes_linesepþ   s    
z-TestTextMode.test_default_mode_writes_linesepN)r   r	   r
   rs   r   r   r   r   rm   ü   s   rm   Ú__main__z-v)$Z
__future__r   r   r-   r>   r4   rc   rY   r   Zgevent.testingZtestingZ	greentestZgevent.testing.sysinfor   Zgevent.testing.flakyr   Zgevent.testing.skippingr   r   Ú	NameErrorÚWarningr   r   ZTestCaser   ÚobjectrN   r`   Z
skipUnlessrD   rf   rm   r   ÚargvÚappendÚmainr   r   r   r   Ú<module>   s<   f. 
