o
    eK                     @   s   d dl mZmZmZ d dlZd dlmZ d dlZd dlmZ d dlmZm	Z	 d dlm
Z d dlmZ d dlmZ d d	lmZ G d
d dejZeeeddG dd deZeeeddG dd dejZedkrte  dS dS )    )print_functionabsolute_importdivisionNpipe)os)Greenletjoinall)testing)mock)six)skipOnLibuvOnPyPyOnWinc                   @   sr   e Zd ZejZdd Zeej	Z
eejZeddd Zejd dk r(dd	 Zejd
d dkr7dd Zd
S d
S )	TestOS_tpc                 C   s   t  S Nr   self r   ED:\Projects\ConvertPro\env\Lib\site-packages\gevent/tests/test__os.pyr      s   zTestOS_tp.pipezSometimes times outc                    s     \dd}|| dgdg fdd}fdd}t|}|  t|}|d t||g d  d d  d S )	Ni@B s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr   c                     sR   d kr'd  } d    d t| d 7  < d ksd S d S Nr   i   )writeminZ	bytesleft)bufbyteswrittennbytesr   wr   r   produce&   s   &z/TestOS_tp._test_if_pipe_blocks.<locals>.producec               
      sN    d kr% d  }  d  t t| d7  <  d ksd S d S r   )lenreadr   r   )	bytesreadr   rr   r   r   consume+   s   "z/TestOS_tp._test_if_pipe_blocks.<locals>.consume   )r   r   startZstart_laterr	   assertEqual)r   Zbuffer_classblockr   r!   ZproducerZconsumerr   )r   r   r   r   r    r   r   r   _test_if_pipe_blocks   s   
zTestOS_tp._test_if_pipe_blocksr      c                 C      |  tjj d S r   )r&   r   builtinsbufferr   r   r   r   test_if_pipe_blocks_buffer=      z$TestOS_tp.test_if_pipe_blocks_bufferN   )r-      c                 C   r(   r   )r&   r   r)   
memoryviewr   r   r   r   test_if_pipe_blocks_memoryviewB   r,   z(TestOS_tp.test_if_pipe_blocks_memoryview)__name__
__module____qualname__	greentestLARGE_TIMEOUT__timeout__r   staticmethodr   Ztp_readr   Ztp_writer   r   r&   sysversion_infor+   r0   r   r   r   r   r      s    


r   make_nonblockingzOnly on POSIXc                       s   e Zd Zdd Zdd Z fddZdd Zd	d
 Zdd Zdd Z	e
de
ddd Ze
de
ddd Ze
de
ddd Ze
de
ddd Z  ZS )	TestOS_nbc                 C      t ||S r   )r   nb_readr   fdcountr   r   r   r   J      zTestOS_nb.readc                 C   r<   r   )r   nb_writer>   r   r   r   r   M   rA   zTestOS_nb.writec                    s.   t t|  \}}t| t| ||fS r   )superr;   r   r   r:   )r   r    r   	__class__r   r   r   P   s   

zTestOS_nb.pipec                 C   s   dd l }t }|j|_ |S )Nr   )errnoOSErrorZEINTR)r   rF   Zignored_oserrorr   r   r   _make_ignored_oserrorV   s   zTestOS_nb._make_ignored_oserrorc                 C   s6   |   |j}|jj}| || |j}|j   d S r   )Zassert_called_once_withreturn_valueloopioclose)r   mock_get_hubr?   eventZhubrK   r   r   r   _check_hub_event_closed]   s   z!TestOS_nb._check_hub_event_closedc                 C   s:   |   dg|_d}|||}| |d | ||| d S )N*   d   )rH   side_effectr$   rO   )r   nb_funcnb_argmock_iorM   rN   r?   resultr   r   r   _test_event_closed_on_normal_iof   s
   
z)TestOS_nb._test_event_closed_on_normal_ioc                 C   sZ   |   t g|_d}| t ||| W d    n1 sw   Y  | ||| d S )NrQ   )rH   
ValueErrorrR   assertRaisesrO   )r   rS   rT   rU   rM   rN   r?   r   r   r   _test_event_closed_on_io_errorp   s   z(TestOS_nb._test_event_closed_on_io_errorzgevent.os.get_hubzgevent.os._writec                 C      |  tjd||d d S N   bufr-   )rW   r   rB   r   Z
mock_writerM   r   r   r   test_event_closed_on_write{      
z$TestOS_nb.test_event_closed_on_writec                 C   r[   r\   )rZ   r   rB   r^   r   r   r    test_event_closed_on_write_error   r`   z*TestOS_nb.test_event_closed_on_write_errorzgevent.os._readc                 C   r[   Nr]   r"   )rW   r   r=   r   Z	mock_readrM   r   r   r   test_event_closed_on_read   r`   z#TestOS_nb.test_event_closed_on_readc                 C   r[   rb   )rZ   r   r=   rc   r   r   r   test_event_closed_on_read_error   r`   z)TestOS_nb.test_event_closed_on_read_error)r1   r2   r3   r   r   r   rH   rO   rW   rZ   r   patchr_   ra   rd   re   __classcell__r   r   rD   r   r;   F   s(    	
r;   fork_and_watchc                   @   s*   e Zd ZejZdd Zdd Zdd ZdS )TestForkAndWatchc                 C   s>   t  }|rt dd t d d S td t d d S )Nr   r-   )r   rh   waitpidZ_reap_childrengeventsleep_exit)r   pidr   r   r   test_waitpid_all   s   
z!TestForkAndWatch.test_waitpid_allc                 C      |  ttjdd d S )Nr   rY   rG   r   rk   r   r   r   r   test_waitpid_wrong_neg      z'TestForkAndWatch.test_waitpid_wrong_negc                 C   rq   )Nr"   r   rs   r   r   r   r   test_waitpid_wrong_pos   ru   z'TestForkAndWatch.test_waitpid_wrong_posN)	r1   r2   r3   r4   r5   r6   rp   rt   rv   r   r   r   r   ri      s
    ri   __main__)
__future__r   r   r   r8   r   r   rl   r   r	   r
   r4   Zgevent.testingr   r   Zgevent.testing.skippingr   ZTestCaser   Z
skipUnlesshasattrr;   ri   r1   mainr   r   r   r   <module>   s,    5P