
    5\h@                        d dl mZmZ d dlmZmZ d dlmZ  ed            ed           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d dlZd dlZdZdZ eed	          o eed
          Zerd Znd Zd Zd Zd Zd Z G d dej                  Z G d dej                  Zd Ze dk    r ej!                     dS dS )    )verbosereap_children)TESTFNunlink)import_moduletermiosfcntlN   I wish to buy a fish license.
   For my pet fish, Eric.

TIOCGWINSZ
TIOCSWINSZc                 $    t          |            d S N)printmsgs    7/opt/python-3.11.14/usr/lib/python3.11/test/test_pty.pydebugr      s    c




    c                     d S r    r   s    r   r   r       s    r   c                     |                      d          r|                     dd          S |                      d          r|                     dd          S | S )Ns   
   
   
)endswithreplace)datas    r   normalize_outputr   .   sY     }}Y .||Iu---}}W ,||GU+++Kr   c                 Z    	 t          j        | dd          }|                                S )NrbF)modeclosefd)ioFileIOreadline)fdreaders     r   	_readliner(   B   s+    BYre444F??r   c                     	 t          j        t          j                   t	          j        |           S # t           j        $ r Y nw xY w| S r   )tty	tcgetattrptySTDIN_FILENOunittestexpectedFailureerror)funs    r   expectedFailureIfStdinIsTTYr2   G   sR    c&'''',,,9   Js   14 AAc           	          t          j        | |          }|t          |          k    r&t          d|  dt          |           d| d          d S )Nzshort write: os.write(z, z bytes) wrote z bytes)oswritelen	Exception)r&   r   writtens      r   	write_allr9   Q   ss    hr4  G#d)) 1 1 1s4yy 1 1!(1 1 1 2 2 	2 r   c                   R    e Zd Zd Zed             Zed             Zd Zd Z	d Z
dS )PtyTestc                    t          j         t           j        | j                  }|                     t           j         t           j        |           d | _        t
          rl	 t          j        t          j	                  | _        |                     t          j
        t          j	        | j                   d S # t          j        $ r Y d S w xY wd S r   )signalSIGHUPhandle_sighup
addCleanup	stdin_dim_HAVE_WINSZr*   tcgetwinsizer,   r-   tcsetwinsizer0   )self
old_sighups     r   setUpzPtyTest.setUp\   s    ]6=$2DEE
v}jAAA  	!$!1#2B!C!C 0#2B $0 0 0 0 09   	 	s   AB4 4CCc                     d S r   r   )signumframes     r   r?   zPtyTest.handle_sighupj   s    r   c                    	 t          j        t          j                  }n&# t           j        $ r t          d           d }Y nw xY wd }| j        r	 t          d           t          d| j                    | j        d         dz   | j        d         dz   f}t          d|            t          j        t          j        |           t          j        t          j                  }| 	                    ||d           n$# t          $ r t          j        d           Y nw xY w	 t          d	           	 t          j        ||d
          \  }}}n(# t          $ r t          j                    \  }}d }Y nw xY wt          d|d|d|           n"# t          $ r t          j        d          w xY w|                     t$          j        |           |                     t$          j        |           |                     t%          j        |          d           |r)| 	                    t          j        |          |d           |r)| 	                    t          j        |          |d           t%          j        |          }	 t%          j        |d           	 t%          j        |d          }| 	                    d|           n-# t          $ r }	|	j        t2          j        k    r Y d }	~	nd }	~	ww xY wt%          j        ||           n# t%          j        ||           w xY wt          d           t7          |t8                     t;          |          }| 	                    dt=          |                     t          d           t7          |t>          d d                    t7          |t>          dd                     t;          |          }
| 	                    dt=          |
                     d S )Nz&tty.tcgetattr(pty.STDIN_FILENO) failedz%Setting pty.STDIN_FILENO window size.zoriginal size: (row, col) = r      ztarget size: (row, col) = z&pty.STDIN_FILENO window size unchangedz+Failed to set pty.STDIN_FILENO window size.Calling pty.openpty()TzGot master_fd=z, slave_fd=z, slave_name=z,Pseudo-terminals (seemingly) not functional.zslave_fd is not a ttyz%openpty() failed to set slave termiosz)openpty() failed to set slave window sizeF   r   zWriting to slave_fdr
   zWriting chunked output   r   ) r*   r+   r,   r-   r0   r   rA   rD   rC   assertEqualOSErrorwarningswarnopenpty	TypeErrorr.   SkipTestr@   r4   close
assertTrueisattyget_blockingset_blockingreaderrnoEAGAINr9   TEST_STRING_1r(   r   TEST_STRING_2)rE   r!   new_dim
target_dim	master_fdslave_fd
slave_nameblockings1es2s              r   test_openptyzPtyTest.test_openptyn   sc   	=!122DDy 	 	 	:;;;DDD	
 > 	 =>>>ET^EEFFF"nQ/!3T^A5F5JK
?:??@@@ !1:>>> *3+;<<  *!IK K K K   KLLL	T)***"25+dG>B3D 3D/	8ZZ " " "&)kmm#	8!


" AAAxAAJAABBBB 	T 	T 	T#$RSSS	T 	),,,(+++	(++-DEEE 	FS]844dDF F F 	JS-h77HJ J J ?9--
	1OIu---WY--  b))))   7el** +****
 OIx0000BOIx0000#$$$(M***y!!;)"--	/ 	/ 	/ 	&'''(M"1"-...(M!""-...y!!46Fr6J6JKKKKKs   !  AAB,C> >DD#F 3E F "E30F 2E33F F.L	 +K L	 
K0K+&L	 +K00L	 	L c                    t          d           t          j                    \  }}|                     t          j        |           |t          j        k    rt	          j        d          s#t          d           t	          j        d           t          d           	 t	          j	                     t          d           t	          j        d           n^# t          $ r t          d           Y nCt          $ r t          d	           Y n) t          d
           t	          j        d           Y nxY wt	          j        d           d S t          d|z             	 	 t	          j        |d          }n# t          $ r Y nJw xY w|snCt          j                            t!          |                    dd          d                     mt	          j        |d          \  }}t	          j        |          }t          d|||fz             |dk    r|                     d           d S |dk    r|                     d           d S |dk    r|                     d           d S |dk    r|                     d           d S d S )Nzcalling pty.fork()rL   zChild's fd 1 is not a tty?!   zIn child, calling os.setsid()zos.setsid() succeeded! (bad!)   zGood: OSError was raised.zNo setsid() available?zAn unexpected error was raised.   z!Waiting for child (%d) to finish.TP   r   r   ascii)encodingr   z+Child (%d) exited with code %d (status %d).z3Child raised an unexpected exception in os.setsid()z1pty.fork() failed to make child a session leader.z8Child spawned by pty.fork() did not have a tty as stdoutz&pty.fork() failed for unknown reasons.)r   r,   forkr@   r4   rW   CHILDrY   _exitsetsidrQ   AttributeErrorr\   sysstdoutr5   strr   waitpidwaitstatus_to_exitcodefail)rE   pidrc   r   statusress         r   	test_forkzPtyTest.test_fork   s   "###Y),,,#)9Q<< 3444 1222	" 5666#    1222!   .///
 7888 HQKKKKK5;<<<879b11DD   E 
  T\\'5%A%A.5"7 "7 "7 8 8 88  JsA..MS&+F33C?3VBTTUUUaxx		OPPPPP		MNNNNN		TUUUUU		BCCCCC s*   C D//D/	$D/E2 2
E?>E?c                    t          d           t          j                    \  }}t          d| d| d           |                     t          j        |           t          d           t	          j        |           t          d           	 t	          j        |d          }n# t          $ r d}Y nw xY w|                     |d           d S )	NrM   zGot master_fd 'z', slave_fd ''zClosing slave_fdzReading from master_fdrL   r   )	r   r,   rT   r@   r4   rW   r\   rQ   rP   )rE   rc   rd   r   s       r   test_master_readzPtyTest.test_master_read  s    %&&&!kmm	8C	CCCCCDDD),,, !!!
&'''	79a((DD 	 	 	DDD	 	s#####s   B% %B43B4c                    |                      t          t                     t          t          d          5 }d}t	          j        |          }t	          j        |                                |           dfd}	 t          j	        t          j        ddg|           t	          j        ||           t	          j        |           n.# t	          j        ||           t	          j        |           w xY w	 d d d            n# 1 swxY w Y   |                     d           t          t          d          5 }|                     |                                d           d d d            d S # 1 swxY w Y   d S )	NwbrL   r   c                 <    t          j        | d          }|z  |S )NrN   )r4   r\   )r&   r   bufs     r   master_readz3PtyTest.test_spawn_doesnt_hang.<locals>.master_read.  s"    wr4((tr   z-czprint("hi there")s
   hi there
r    )r@   r   r   openr4   dupdup2filenor,   spawnrw   
executablerW   rP   r\   )rE   fSTDOUT_FILENO
dup_stdoutr   r   s        @r   test_spawn_doesnt_hangzPtyTest.test_spawn_doesnt_hang'  s   '''&$ 	%1M..JGAHHJJ...C    
%	3>41DE%' ' ' 
M222$$$$ 
M222$$$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%  	o...&$ 	81QVVXX777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s<   AD="C	*D	+C44DDD:)E00E47E4N)__name__
__module____qualname__rG   staticmethodr?   r2   rj   r   r   r   r   r   r   r;   r;   [   s             \ !QL QL ! QLfHD HD HDd$ $ $&8 8 8 8 8r   r;   c                   F    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )SmallPtyTestsc                    t           j        | _        t           j        | _        t           j        | _        t           j        | _        t           j	        | _
        t           j        | _        t           j        | _        t           j        | _        t           j        | _        t           j        | _        g | _        g | _        g | _        g | _        d | _        d S r   )r,   r-   orig_stdin_filenor   orig_stdout_filenorW   orig_pty_close_copyorig_pty__copyrr   orig_pty_forkselectorig_pty_selectsetraworig_pty_setrawr+   orig_pty_tcgetattr	tcsetattrorig_pty_tcsetattrrz   orig_pty_waitpidfdsfilesselect_inputselect_outputtcsetattr_mode_setting)rE   s    r   rG   zSmallPtyTests.setUp@  s    !$!1"%"3!i!i X"z"z"%-"%- #
&*###r   c                    | j         t          _        | j        t          _        | j        t          _        | j        t          _        | j	        t          _
        | j        t          _        | j        t          _        | j        t          _        | j        t          _        | j        t          _        | j        D ]'}	 |                                 # t,          $ r Y $w xY w| j        D ]'}	 t1          j        |           # t,          $ r Y $w xY wd S r   )r   r,   r-   r   r   r   rW   r   r   r   rr   r   r   r   r   r   r+   r   r   r   rz   r   rQ   r   r4   )rE   filer&   s      r   tearDownzSmallPtyTests.tearDownQ  s    1 3'	'	%)
)
//+J 	 	D

   ( 	 	B   	 	s$   5C


CC$C99
DDc                 `    t          j                    }| j                            |           |S r   )r4   piper   extend)rE   pipe_fdss     r   _pipezSmallPtyTests._pipeg  s&    799!!!r   c                 `    t          j                    }| j                            |           |S r   )socket
socketpairr   r   )rE   r   s     r   _socketpairzSmallPtyTests._socketpairl  s,    &((

*%%%r   c                     |                      |||f| j                            d                     | j                            d          S )Nr   )rP   r   popr   )rE   rfdswfdsxfdss       r   _mock_selectzSmallPtyTests._mock_selectq  sG    $d+T->-B-B1-E-EFFF!%%a(((r   c                     fd}|S )Nc                       dfS )N   r   )r}   s   r   	mock_forkz0SmallPtyTests._make_mock_fork.<locals>.mock_forkw  s    9r   r   )rE   r}   r   s    ` r   _make_mock_forkzSmallPtyTests._make_mock_forkv  s"    	 	 	 	 	r   c                     || _         d S r   )r   )rE   r   optr!   s       r   _mock_tcsetattrzSmallPtyTests._mock_tcsetattr{  s    &*###r   c                    	 |                                  \  }}|t          _        |                                  \  }}|t          _        |                                 }d |D             }t          |d         d           t          |d           | j        t          _        | j        	                    ||d         gg g f           | j
        	                    ||d         gg g f           | j        	                    ||d         g||d         gg f           | j
        	                    g ||d         gg f           | j        	                    ||d         gg g f           |                     t                    5  t          j        |d                    d d d            n# 1 swxY w Y   t          j        ||d         gg g d          d         }|                     ||d         g|           |                     t          j        |d          d           |                     t          j        |d         d          d           d S )Nc                 6    g | ]}|                                 S r   )r   ).0ss     r   
<listcomp>z4SmallPtyTests.test__copy_to_each.<locals>.<listcomp>  s     222!188::222r   rL   s   from masters
   from stdinr      )r   r,   r   r-   r   r9   r   r   r   appendr   assertRaises
IndexErrorr   rP   r4   r\   )rE   read_from_stdout_fdmock_stdout_fdmock_stdin_fdwrite_to_stdin_fdr   mastersr   s           r   test__copy_to_eachz SmallPtyTests.test__copy_to_each~  st   D.2jjll+^*+/::<<(((%%''
22z222 	'!*n---#]333 &
  ='!*"=r2!FGGG!!M71:#>B"GHHH  ='!*"=PWXYPZ?[]_!`aaa!!2
'CR"HIII  ='!*"=r2!FGGGz** 	" 	"Igaj!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" }171:>BJJ1M-wqz:DAAA!4b99>JJJR00-@@@@@s   :F!!F%(F%c                    	 |                      d          t          _        t                      fdt          _        d t          _        d t          _        t                      fdt          _        | j        t          _	        d t          _
        |                     t          j        g           d           |                     | j        d           d S )	NrL   c                     d gS r   r   )_1_2status_sentinels     r   <lambda>zDSmallPtyTests.test__restore_tty_mode_normal_return.<locals>.<lambda>  s    dO%< r   c                     d S r   r   _s    r   r   zDSmallPtyTests.test__restore_tty_mode_normal_return.<locals>.<lambda>  s    d r   c                     d S r   r   )r   r   _3s      r   r   zDSmallPtyTests.test__restore_tty_mode_normal_return.<locals>.<lambda>  s    t r   c                     S r   r   )r&   mode_sentinels    r   r   zDSmallPtyTests.test__restore_tty_mode_normal_return.<locals>.<lambda>  s    = r   c                     d S r   r   r   s    r   r   zDSmallPtyTests.test__restore_tty_mode_normal_return.<locals>.<lambda>  s    t r   z4pty.waitpid process status not returned by pty.spawnz1pty.tcsetattr not called with original mode value)r   r,   rr   objectrz   rW   r   r+   r   r   r   rP   r   r   )rE   r   r   s    @@r   $test__restore_tty_mode_normal_returnz2SmallPtyTests.test__restore_tty_mode_normal_return  s    Q ''** ((<<<<"N	++	0000,#^
29oppp4mExyyyyyr   N)r   r   r   rG   r   r   r   r   r   r   r   r   r   r   r   r   r   =  s        3+ + +"  ,  
  
) ) )
  
+ + +A A A<z z z z zr   r   c                  "    t                       d S r   )r   r   r   r   tearDownModuler     s    OOOOOr   __main__)"test.supportr   r   test.support.os_helperr   r   test.support.import_helperr   r]   r4   r,   r*   rw   r   r=   r   r#   r.   rR   r_   r`   hasattrrB   r   r   r(   r2   r9   TestCaser;   r   r   r   mainr   r   r   <module>r      s
   / / / / / / / / 1 1 1 1 1 1 1 1 4 4 4 4 4 4 i    g     				 



 



 



    				  2+gc<((GWWS,-G-G
        (  
  2 2 2`8 `8 `8 `8 `8h `8 `8 `8Drz rz rz rz rzH% rz rz rzj   zHMOOOOO r   