a
    zef*                     @   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Zd dlZe	e j
dkdG dd dZG dd deejZG dd	 d	eejZG d
d deZG dd deejZG dd deejZG dd deZG dd deejZG dd deejZedkre  dS )    Nposixztests requires a posix system.c                   @   sR   e Zd Zdd Zdd Zdd Zdd	d
Zdd ZdZdd Z	dd Z
dd ZdS )TestFileIOSignalInterruptc                 C   s
   d | _ d S N)_processself r   */usr/lib/python3.9/test/test_file_eintr.pysetUp   s    zTestFileIOSignalInterrupt.setUpc                 C   s:   | j r6| j  d u r6z| j   W n ty4   Y n0 d S r   )r   pollkillOSErrorr   r   r   r	   tearDown   s
    z"TestFileIOSignalInterrupt.tearDownc                 C   s
   d| j  S )Nz=import %s as io ;infile = io.FileIO(sys.stdin.fileno(), "rb")modnamer   r   r   r	   _generate_infile_setup_code$   s    z5TestFileIOSignalInterrupt._generate_infile_setup_code    Tc                 C   s|   | j  d u r:td z| j   W n ty8   Y n0 |r\| j  \}}||7 }||7 }| d|| | f  d S )Ng?z/Error from IO process %s:
STDOUT:
%sSTDERR:
%s
)	r   r   timesleep	terminater   communicatefaildecode)r   whystdoutstderrr   Z
stdout_endZ
stderr_endr   r   r	   fail_with_process_info-   s    
z0TestFileIOSignalInterrupt.fail_with_process_infoc                 C   s2  |   }tjtjddd| d d | d d gtjtjtjd| _| jjt	d}|dkrl| j
d	|d
 | jj| d}g }|st| jjgddd\}}}| jtj |d7 }|dkr| j  | d q| jj }|dkr| j
d|d
 | jjdd\}	}
| jjr.| j
d| jj |	|
dd d S )Nz-uz-czXimport signal, sys ;signal.signal(signal.SIGINT, lambda s, f: sys.stderr.write("$\n")) ;z ;z"sys.stderr.write("Worm Sign!\n") ;zinfile.close())stdinr   r   s   Worm Sign!
zwhile awaiting a sign)r   r   r   g?      z,reader process failed to handle our signals.s   $
zwhile awaiting signal   
)inputzexited rc=%dF)r   )r   
subprocessPopensys
executablePIPEr   r   readlenr   r   writeselectsend_signalsignalSIGINTr   r   readliner   
returncode)r   data_to_writeread_and_verify_codeZinfile_setup_codeZ	worm_signZsignals_sentZrlist_Zsignal_liner   r   r   r   r	   _test_readingH   s\    	


z'TestFileIOSignalInterrupt._test_readingzgot = infile.{read_method_name}() ;expected = {expected!r} ;assert got == expected, ("{read_method_name} returned wrong data.\n""got data %r\nexpected %r" % (got, expected))c                 C   s   | j d| jjdddd d S )N   hello, world!r.   s   hello, world!
Zread_method_nameZexpectedr0   r1   r3   _READING_CODE_TEMPLATEformatr   r   r   r	   test_readline   s    z'TestFileIOSignalInterrupt.test_readlinec                 C   s"   | j d| jjdddgdd d S )N   hello
world!	readliness   hello
s   world!
r5   r6   r7   r   r   r   r	   test_readlines   s    z(TestFileIOSignalInterrupt.test_readlinesc                 C   s8   | j d| jjdddd | j d| jjdddd d S )Nr;   readall   hello
world!
r5   r6   r'   r7   r   r   r   r	   test_readall   s    z&TestFileIOSignalInterrupt.test_readallN)r   r   T)__name__
__module____qualname__r
   r   r   r   r3   r8   r:   r=   r@   r   r   r   r	   r      s   	  
Ir   c                   @   s   e Zd ZdZdS )CTestFileIOSignalInterrupt_ioNrA   rB   rC   r   r   r   r   r	   rD      s   rD   c                   @   s   e Zd ZdZdS )PyTestFileIOSignalInterrupt_pyioNrF   r   r   r   r	   rG      s   rG   c                   @   s   e Zd Zdd Zdd ZdS )TestBufferedIOSignalInterruptc                 C   s
   d| j  S )Nziimport %s as io ;infile = io.open(sys.stdin.fileno(), "rb") ;assert isinstance(infile, io.BufferedReader)r   r   r   r   r	   r      s    z9TestBufferedIOSignalInterrupt._generate_infile_setup_codec                 C   s   | j d| jjdddd d S )Nr;   r'   r?   r5   r6   r7   r   r   r   r	   r@      s    z*TestBufferedIOSignalInterrupt.test_readallN)rA   rB   rC   r   r@   r   r   r   r	   rI      s   rI   c                   @   s   e Zd ZdZdS )CTestBufferedIOSignalInterruptrE   NrF   r   r   r   r	   rJ      s   rJ   c                   @   s   e Zd ZdZdS )PyTestBufferedIOSignalInterruptrH   NrF   r   r   r   r	   rK      s   rK   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestTextIOSignalInterruptc                 C   s
   d| j  S )Nzvimport %s as io ;infile = io.open(sys.stdin.fileno(), "rt", newline=None) ;assert isinstance(infile, io.TextIOWrapper)r   r   r   r   r	   r      s    z5TestTextIOSignalInterrupt._generate_infile_setup_codec                 C   s   | j d| jjdddd d S )Nr4   r.   zhello, world!
r5   r6   r7   r   r   r   r	   r:      s    z'TestTextIOSignalInterrupt.test_readlinec                 C   s"   | j d| jjdddgdd d S )Ns   hello
world!r<   zhello
zworld!
r5   r6   r7   r   r   r   r	   r=      s    z(TestTextIOSignalInterrupt.test_readlinesc                 C   s   | j d| jjdddd d S )Nr;   r'   zhello
world!
r5   r6   r7   r   r   r   r	   r@      s    z&TestTextIOSignalInterrupt.test_readallN)rA   rB   rC   r   r:   r=   r@   r   r   r   r	   rL      s   rL   c                   @   s   e Zd ZdZdS )CTestTextIOSignalInterruptrE   NrF   r   r   r   r	   rM      s   rM   c                   @   s   e Zd ZdZdS )PyTestTextIOSignalInterruptrH   NrF   r   r   r   r	   rN      s   rN   __main__)osr*   r,   r"   r$   r   ZunittestrE   rH   Z
skipUnlessnamer   ZTestCaserD   rG   rI   rJ   rK   rL   rM   rN   rA   mainr   r   r   r	   <module>   s*     
