B
    18™\í  ã               @   s®   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m	Z	m
Z
mZ y
ej W n ek
rx   e d¡‚Y nX dd„ ZG dd„ dejƒZdd	„ Zed
krªeƒ  dS )é    N)ÚTESTFNÚrun_unittestÚreap_threadsÚcpython_onlyzselect.poll not definedc             C   s,   g }x"| D ]\}}||@ r
|  |¡ q
W |S )N)Úappend)ÚreadyÚflagÚmatchÚfdÚmode© r   úR/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_poll.pyÚfind_ready_matching   s
    r   c               @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zed	d
„ ƒZe	dd„ ƒZ
e ed¡e	dd„ ƒƒZdS )Ú	PollTestsc             C   sz  t  ¡ }d}d}t|ƒ}g }g }i }i }xft|ƒD ]Z}	t ¡ \}
}| |
¡ | |
t j¡ | |t j	¡ | 
|
¡ | 
|¡ |||
< |
||< q2W g }xÎ|rb| ¡ }t|t j	ƒ}|s¼tdƒ‚t |¡}t ||¡ | ¡ }t|t jƒ}|sòtdƒ‚t |¡}
t |
|¡}|  t|ƒ|¡ | 
|¡ t ||
 ¡ t |
¡ | ||
 ¡ | |
¡ | ||
 ¡ q–W |  ||g| ¡ d S )Né   s    This is a test.zno pipes ready for writingzno pipes ready for reading)ÚselectÚpollÚlenÚrangeÚosÚpipeÚregisterÚmodifyÚPOLLINÚPOLLOUTr   r   ÚRuntimeErrorÚrandomÚchoiceÚwriteÚreadÚassertEqualÚcloseÚ
unregisterÚremove)ÚselfÚpZ	NUM_PIPESZMSGZMSG_LENZreadersZwritersZr2wZw2rÚiZrdÚwrZbufsr   Zready_writersZready_readersÚbufr   r   r   Ú
test_poll1   sN    





 

zPollTests.test_poll1c       
      C   sP  t  ¡ \}}t  |¡ t  |¡ t ¡ }| |¡ | ¡ }|  |d |tjf¡ tt	dƒ}| 
¡ }t ¡ }| |¡ | ¡ }|  |d d |¡ | ¡  | ¡ }|  |d |tjf¡ t  t	¡ t ¡ }|  t|j|¡ |  t|j|¡ t ¡ }|  t|jd¡ t ¡ }G dd„ dƒ}G dd„ dƒ}	|  t|j|ƒ d¡ |  t|j|	ƒ d¡ d S )Nr   Úwé   c               @   s   e Zd ZdS )z,PollTests.test_poll_unit_tests.<locals>.NopeN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   ÚNopel   s   r/   c               @   s   e Zd Zdd„ ZdS )z.PollTests.test_poll_unit_tests.<locals>.Almostc             S   s   dS )NÚfilenor   )r$   r   r   r   r0   p   s    z5PollTests.test_poll_unit_tests.<locals>.Almost.filenoN)r,   r-   r.   r0   r   r   r   r   ÚAlmosto   s   r1   )r   r   r!   r   r   r   r    ÚPOLLNVALÚopenr   r0   ÚunlinkÚassertRaisesÚ	TypeErrorr"   ÚKeyError)
r$   ZFDr*   r%   ÚrÚfr
   Úpollsterr/   r1   r   r   r   Útest_poll_unit_testsL   s6    





zPollTests.test_poll_unit_testsc       
      C   sÞ   d}t j|dt jdd}| ¡  |  |jd d d ¡ |j}t ¡ }| 	|tj
¡ xŠdD ]‚}| |¡}|g krlqT|d \}}|tj@ r | ¡ }	|	dkrT|  d¡ qTqT|tj
@ rÈ| ¡ }	|	s¸P |  |	d¡ qTqT|  d	| ¡ qTW d S )
Nz?for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; doneTr   )ÚshellÚstdoutÚbufsize)r   iè  iÐ  i   i@  i€>  éÿÿÿÿr?   r?   r?   r?   r?   r?   r?   r?   r?   ó    z6error: pipe seems to be closed, but still returns datas   testing...
z,Unexpected return value from select.poll: %s)Ú
subprocessÚPopenÚPIPEÚ	__enter__Ú
addCleanupÚ__exit__r=   r   r   r   r   ÚPOLLHUPÚreadlineÚfailr    )
r$   ÚcmdÚprocr%   r:   ZtoutZfdlistr
   ÚflagsÚliner   r   r   Ú
test_poll2y   s2    




zPollTests.test_poll2c             C   s„   t  ¡ }| d¡ |  t|jd¡ d}|dkr8|  d¡ |  t|jdd¡ |  t|jdd¡ |  t|jdd¡ |  t|jdd¡ d S )Né   l            é   zOverflow must have occurredr   r?   )r   r   r   r5   ÚOverflowErrorrI   r   )r$   r:   Úxr   r   r   Ú
test_poll3–   s    

zPollTests.test_poll3c             C   s~   ddl m}m}m} t ¡ }| d¡ |  t|jd|d ¡ |  t|j	d|d ¡ |  t|j|d ¡ |  t|j|d ¡ d S )Nr   )Ú	USHRT_MAXÚINT_MAXÚUINT_MAXrO   )
Ú	_testcapirT   rU   rV   r   r   r   r5   rQ   r   )r$   rT   rU   rV   r:   r   r   r   Útest_poll_c_limits§   s    
zPollTests.test_poll_c_limitsc          
   C   sø   t  ¡ \}}|  t j|¡ |  t j|¡ g }x2tdƒD ]&}t  |¡}|  t j|¡ | |¡ q6W t ¡ }x|D ]}| 	|tj
¡ qnW tj|jd}| ¡  zBt d¡ x|D ]}| |¡ q¬W | 	|tj¡ |  t|j¡ W d t  |d¡ | ¡  X d S )Né
   )Útargetg      à?s   spam)r   r   rE   r!   r   Údupr   r   r   r   r   Ú	threadingÚThreadÚstartÚtimeÚsleepr"   r   r5   r   r   Újoin)r$   r8   r*   Zrfdsr&   r
   r:   Útr   r   r   Útest_threaded_poll³   s*    



zPollTests.test_threaded_pollz!Threading required for this test.c             C   sž   x˜dD ]}t  ¡ \}}t ¡ }| |tj¡ tj|j|fd}| ¡  |j	dd |  
| ¡ ¡ t  |d¡ | 	¡  |  | ¡ ¡ t  |¡ t  |¡ qW d S )N)Niüÿÿr?   g      ð¿gš™™™™™¹¿g0Žä.ÿ+«)rZ   Úargsgš™™™™™¹?)Útimeouts   spam)r   r   r   r   r   r   r\   r]   r^   ra   Ú
assertTrueÚis_aliver   ÚassertFalser!   )r$   Z
timeout_msr8   r*   r:   Zpoll_threadr   r   r   Ú!test_poll_blocks_with_negative_msÏ   s    

z+PollTests.test_poll_blocks_with_negative_msN)r,   r-   r.   r)   r;   rN   rS   r   rX   r   rc   ÚunittestÚ
skipUnlessr\   ri   r   r   r   r   r      s   1-
r   c               C   s   t tƒ d S )N)r   r   r   r   r   r   Ú	test_mainæ   s    rl   Ú__main__)r   rA   r   r   r\   r_   rj   Ztest.supportr   r   r   r   r   ÚAttributeErrorÚSkipTestr   ÚTestCaser   rl   r,   r   r   r   r   Ú<module>   s"   
 N