
    z%i*                     P   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 ej                  s ej                  d      d dlZd dlZ ej                  e j                  dk(  d       G d d             Z G d d	eej                         Z G d
 deej                         Z G d de      Z G d deej                         Z G d deej                         Z G d de      Z G d deej                         Z G d deej                         Zedk(  r ej4                          yy)    N)supportztest module requires subprocessposixztests requires a posix system.c                   F    e Zd Zd Zd Zd Z	 	 ddZd ZdZd Z	d Z
d	 Zy
)TestFileIOSignalInterruptc                     d | _         y N)_processselfs    H/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_file_eintr.pysetUpzTestFileIOSignalInterrupt.setUp   s	        c                     | j                   r7| j                   j                         	 | j                   j                          y y y # t        $ r Y y w xY wr   )r	   pollkillOSErrorr
   s    r   tearDownz"TestFileIOSignalInterrupt.tearDown    sK    ==T]]//19""$ :=  s   A 	AAc                 "    	 d| j                   z  S )Nz=import %s as io ;infile = io.FileIO(sys.stdin.fileno(), "rb")modnamer
   s    r   _generate_infile_setup_codez5TestFileIOSignalInterrupt._generate_infile_setup_code'   s    	? 	r   c           	      x   	 | j                   j                         0t        j                  d       	 | j                   j	                          |r'| j                   j                         \  }}||z  }||z  }| j                  d|d|j                         d|j                         d       y # t
        $ r Y lw xY w)Ng?zError from IO process z
:
STDOUT:
zSTDERR:

)	r	   r   timesleep	terminater   communicatefaildecode)r   whystdoutstderrr   
stdout_end
stderr_ends          r   fail_with_process_infoz0TestFileIOSignalInterrupt.fail_with_process_info0   s    	 =='JJsO'') %)]]%>%>%@"J
j Fj F		: 	;  s   B- -	B98B9c                 @   	 | j                         }t        j                  t        j                  ddd|z   dz   dz   |z   dz   dz   gt        j
                  t        j
                  t        j
                        | _        | j                  j                  j                  t        d            }|dk7  r| j                  d	|
       | j                  j                  j                  |       d}g }|st        j                  | j                  j                  gddd      \  }}}| j                  j                  t        j                          |dz  }|dkD  r+| j                  j#                          | j%                  d       |s| j                  j                  j'                         }|dk7  r| j                  d|
       | j                  j)                  d      \  }	}
| j                  j*                  r-| j                  d| j                  j*                  z  |	|
d       y y )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    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_codeinfile_setup_code	worm_signsignals_sentrlist_signal_liner!   r"   s              r   _test_readingz'TestFileIOSignalInterrupt._test_readingK   s   	 !<<> #((tJ %% (,, 7	7
 ((
 +// "" !oojoo!( MM((--c/.BC	'''(?/8 ( :!!-0  --)=)=(>BMKE1aMM%%fmm4ALc!""$		HI  mm**335& ''(?/: ( < 222?==##''"T]]%=%==F ( 7 $r   zgot = 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                 b    	 | j                  d| j                  j                  dd             y )N   hello, world!r9   s   hello, world!
read_method_nameexpectedr;   r<   rC   _READING_CODE_TEMPLATEformatr
   s    r   test_readlinez'TestFileIOSignalInterrupt.test_readline   s;    ?.%)%@%@%G%G)3!3 &H &5 	 	6r   c                 f    	 | j                  d| j                  j                  dddg             y )N   hello
world!	readliness   hello
s   world!
rF   rI   rJ   r
   s    r   test_readlinesz(TestFileIOSignalInterrupt.test_readlines   s@    @.%)%@%@%G%G)4",k!: &H &< 	 	=r   c                     	 | j                  d| j                  j                  dd             | j                  d| j                  j                  dd             y )NrO   readall   hello
world!
rF   rI   r2   rJ   r
   s    r   test_readallz&TestFileIOSignalInterrupt.test_readall   ss    >.%)%@%@%G%G)2!3 &H &5 	 	6 	.%)%@%@%G%G)/!3 &H &5 	 	6r   N)r   r   T)__name__
__module____qualname__r   r   r   r%   rC   rK   rM   rQ   rU   r(   r   r   r   r      s@     >A+/;6D7RE 6=6r   r   c                       e Zd ZdZy)CTestFileIOSignalInterrupt_ioNrV   rW   rX   r   r(   r   r   rZ   rZ          Gr   rZ   c                       e Zd ZdZy)PyTestFileIOSignalInterrupt_pyioNr\   r(   r   r   r_   r_          Gr   r_   c                       e Zd Zd Zd Zy)TestBufferedIOSignalInterruptc                 "    	 d| j                   z  S )Nziimport %s as io ;infile = io.open(sys.stdin.fileno(), "rb") ;assert isinstance(infile, io.BufferedReader)r   r
   s    r   r   z9TestBufferedIOSignalInterrupt._generate_infile_setup_code   s    M? 	r   c                 b    	 | j                  d| j                  j                  dd             y )NrO   r2   rT   rF   rI   rJ   r
   s    r   rU   z*TestBufferedIOSignalInterrupt.test_readall   s;    J.%)%@%@%G%G)/!3 &H &5 	 	6r   N)rV   rW   rX   r   rU   r(   r   r   rc   rc      s    6r   rc   c                       e Zd ZdZy)CTestBufferedIOSignalInterruptr[   Nr\   r(   r   r   rg   rg      r]   r   rg   c                       e Zd ZdZy)PyTestBufferedIOSignalInterruptr`   Nr\   r(   r   r   ri   ri      ra   r   ri   c                   $    e Zd Zd Zd Zd Zd Zy)TestTextIOSignalInterruptc                 "    	 d| j                   z  S )Nzimport %s as io ;infile = io.open(sys.stdin.fileno(), encoding="utf-8", newline=None) ;assert isinstance(infile, io.TextIOWrapper)r   r
   s    r   r   z5TestTextIOSignalInterrupt._generate_infile_setup_code   s    L>  	r   c                 b    	 | j                  d| j                  j                  dd             y )NrE   r9   zhello, world!
rF   rI   rJ   r
   s    r   rM   z'TestTextIOSignalInterrupt.test_readline   s;    ?.%)%@%@%G%G)3!2 &H &4 	 	5r   c                 f    	 | j                  d| j                  j                  dddg             y )Ns   hello
world!rP   zhello
zworld!
rF   rI   rJ   r
   s    r   rQ   z(TestTextIOSignalInterrupt.test_readlines   s@    @0%)%@%@%G%G)4"+Z!8 &H &: 	 	;r   c                 b    	 | j                  d| j                  j                  dd             y )NrO   r2   zhello
world!
rF   rI   rJ   r
   s    r   rU   z&TestTextIOSignalInterrupt.test_readall   s;    ;.%)%@%@%G%G)/!2 &H &4 	 	5r   N)rV   rW   rX   r   rM   rQ   rU   r(   r   r   rk   rk      s    5;5r   rk   c                       e Zd ZdZy)CTestTextIOSignalInterruptr[   Nr\   r(   r   r   rq   rq      r]   r   rq   c                       e Zd ZdZy)PyTestTextIOSignalInterruptr`   Nr\   r(   r   r   rs   rs      ra   r   rs   __main__)osr5   r7   r-   r/   r   unittesttestr   has_subprocess_supportSkipTestr[   r`   
skipUnlessnamer   TestCaserZ   r_   rc   rg   ri   rk   rq   rs   rV   mainr(   r   r   <module>r~      s,   
    
   %%
(

=
>>  RWW')IJ[6 [6 K[6|!:H<M<M ";X=N=N 6$= 6%BHDUDU &CXEVEV 5 9 5@!:H<M<M ";X=N=N  zHMMO r   