o
    ±ó®gQ  ã                   @   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	 d dlm
Z
 d dlmZ zej W n eyA   e d¡‚w dd„ ZG dd	„ d	ejƒZd
d„ Zedkr\eƒ  dS dS )é    N)Úrun_unittestÚcpython_only)Úthreading_helper)ÚTESTFNzselect.poll not definedc                 C   s(   g }| D ]\}}||@ r|  |¡ q|S ©N)Úappend)ÚreadyÚflagÚmatchÚfdÚmode© r   úD/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/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	j
dd„ ƒZe ed¡e	j
dd„ ƒƒZdS )Ú	PollTestsc                 C   sr  t  ¡ }d}d}t|ƒ}g }g }i }i }t|ƒD ]-}	t ¡ \}
}| |
¡ | |
t j¡ | |t j	¡ | 
|
¡ | 
|¡ |||
< |
||< qg }|r®| ¡ }t|t j	ƒ}|sZtdƒ‚t |¡}t ||¡ | ¡ }t|t jƒ}|sutdƒ‚t |¡}
t |
|¡}|  t|ƒ|¡ | 
|¡ t ||
 ¡ t |
¡ | ||
 ¡ | |
¡ | ||
 ¡ |sJ|  ||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_LENÚreadersZwritersZr2wZw2rÚiZrdÚwrZbufsr   Zready_writersZready_readersÚbufr   r   r   Ú
test_poll1   sN   







ízPollTests.test_poll1c           
      C   sh  t  ¡ \}}t  |¡ t  |¡ t ¡ }| |¡ | ¡ }|  |d |tjf¡ tt	dƒ#}| 
¡ }t ¡ }| |¡ | ¡ }|  |d d |¡ W d   ƒ n1 sSw   Y  | ¡ }|  |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   ÚNopen   s    r1   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   r2   r   s   z5PollTests.test_poll_unit_tests.<locals>.Almost.filenoN)r.   r/   r0   r2   r   r   r   r   ÚAlmostq   s    r3   )r   r   r"   r   r   r   r!   ÚPOLLNVALÚopenr   r2   ÚunlinkÚassertRaisesÚ	TypeErrorr#   ÚKeyError)
r%   ZFDr,   r&   ÚrÚfr   Úpollsterr1   r3   r   r   r   Útest_poll_unit_testsO   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
¡ dD ]A}| |¡}|g kr5q)|d \}}|tj@ rN| ¡ }	|	dkrM|  d¡ q)|tj
@ rc| ¡ }	|	s\ d S |  |	d¡ q)|  d	| ¡ q)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€>  éÿÿÿÿrA   rA   rA   rA   rA   rA   rA   rA   rA   ó    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_poll2{   s6   ÿ



îzPollTests.test_poll2c                 C   s„   t  ¡ }| d¡ |  t|jd¡ d}|dkr|  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   rA   )r   r   r   r7   ÚOverflowErrorrK   Ú
ValueErrorr   )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_MAXrQ   )
Z	_testcapirW   rX   rY   r   r   r   r7   rS   r   )r%   rW   rX   rY   r<   r   r   r   Útest_poll_c_limits©   s   
zPollTests.test_poll_c_limitsc              
   C   sþ   t  ¡ \}}|  t j|¡ |  t j|¡ g }tdƒD ]}t  |¡}|  t j|¡ | |¡ qt ¡ }|D ]	}| 	|tj
¡ q4tj|jd}| ¡  z*t d¡ |D ]}| |¡ qQ| 	|tj¡ |  t|j¡ W t  |d¡ | ¡  d S t  |d¡ | ¡  w )Né
   )Útargetg      à?ó   spam)r   r   rG   r"   r   Údupr   r   r   r   r   Ú	threadingÚThreadÚstartÚtimeÚsleepr#   r   r7   r   r   Újoin)r%   r:   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š   dD ]H}t  ¡ \}}t ¡ }| |tj¡ tj|j|fd}| ¡  |j	dd |  
| ¡ ¡ t  |d¡ | 	¡  |  | ¡ ¡ t  |¡ t  |¡ qd S )N)NiüÿÿrA   g      ð¿gš™™™™™¹¿g0Žä.ÿ+«)r\   Úargsgš™™™™™¹?)Útimeoutr]   )r   r   r   r   r   r   r_   r`   ra   rd   Z
assertTrueÚis_aliver   ZassertFalser"   )r%   Z
timeout_msr:   r,   r<   Zpoll_threadr   r   r   Ú!test_poll_blocks_with_negative_msÑ   s   
ïz+PollTests.test_poll_blocks_with_negative_msN)r.   r/   r0   r+   r=   rP   rV   r   rZ   r   Zreap_threadsrf   ÚunittestZ
skipUnlessr_   rj   r   r   r   r   r      s    1,


r   c                   C   s   t tƒ d S r   )r   r   r   r   r   r   Ú	test_mainè   s   rl   Ú__main__)r   rC   r   r   r_   rb   rk   Ztest.supportr   r   r   Ztest.support.os_helperr   r   ÚAttributeErrorZSkipTestr   ZTestCaser   rl   r.   r   r   r   r   Ú<module>   s,   

ÿ M
ÿ