+
    Bi@                        ^ RI t ^ RIHtHtHtHtHt ^ RIHt ^ RI	H
t
Ht ]! R4       ]'       g   ]'       g	   ]'       d   ] P                  ! R4      h^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RItRtRt]! ]R	4      ;'       d
    ]! ]R
4      t]'       d   R tMR tR tR tR tR t ! R R] P@                  4      t! ! R R] P@                  4      t"R t#]$R8X  d   ] PJ                  ! 4        R# R# )    N)
is_androidis_apple_mobile	is_wasm32reap_childrenverbose)import_module)TESTFNunlinktermiosz%pty is not available on this platform   I wish to buy a fish license.
   For my pet fish, Eric.

TIOCGWINSZ
TIOCSWINSZc                     \        V 4       R # N)printmsgs   &$/usr/lib/python3.14/test/test_pty.pydebugr      s	    c
    c                     R # r    r   s   &r   r   r   "   s    r   c                     V P                  R 4      '       d   V P                  R R4      # V P                  R4      '       d   V P                  RR4      # V # )s   
   
   
)endswithreplace)datas   &r   normalize_outputr    0   sI     }}Y||Iu--}}W||GU++Kr   c                T    \         P                  ! V RRR7      pVP                  4       # )z8Read one line.  May block forever if no newline is read.rbF)modeclosefd)ioFileIOreadline)fdreaders   & r   	_readliner*   D   s!    YYre4F??r   c                      \         P                  ! \        P                  4       \        P
                  ! V 4      #   \         P                   d     T # i ; ir   )tty	tcgetattrptySTDIN_FILENOunittestexpectedFailureerror)funs   &r   expectedFailureIfStdinIsTTYr4   I   sE    c&&''',,99 Js   9< AAc           	          \         P                  ! W4      pV\        V4      8w  d   \        R V  R\        V4       RV R24      hR# )zshort write: os.write(z, z bytes) wrote z bytesN)oswritelen	Exception)r(   r   writtens   && r   	write_allr;   S   sQ    hhr G#d)0Bs4yk B!!(	1 2 	2 r   c                   X   a  ] tR t^]t o R t]R 4       t]R 4       tR t	R t
R tRtV tR# )	PtyTestc                   \         P                   ! \         P                  V P                  4      pV P                  \         P                   \         P                  V4       R V n        \
        '       df    \        P                  ! \        P                  4      V n        V P                  \        P                  \        P                  V P                  4       R # R #   \        P                   d     R # i ; ir   )signalSIGHUPhandle_sighup
addCleanup	stdin_dim_HAVE_WINSZr,   tcgetwinsizer.   r/   tcsetwinsizer2   )self
old_sighups   & r   setUpPtyTest.setUp^   s    ]]6==$2D2DE
v}}jA ;!$!1!1#2B2B!C 0 0#2B2B $0 
 99 s   3A"C C21C2c                    R # r   r   )signumframes   &&r   rA   PtyTest.handle_sighupl   s    r   c                :    \         P                  ! \        P                  4      pRpV P                  '       d    \        R4       \        RV P                   24       V P                  ^ ,          ^,           V P                  ^,          ^,           3p\        RV 24       \         P                  ! \        P                  V4       \         P                  ! \        P                  4      pV P                  W#R4        \        R4        \        P                  ! WR	4      w  rVp\        R
V: RV: RV: 24       T P'                  \(        P*                  T4       T P'                  \(        P*                  T4       T P-                  \(        P.                  ! T4      R4       T'       d(   T P                  \         P                  ! T4      TR4       T'       d(   T P                  \         P                  ! T4      TR4       \(        P0                  ! T4      p \(        P2                  ! TR4        \(        P4                  ! TR4      p	T P                  RT	4       \(        P2                  ! YX4       \        R4       \;        T\<        4       \?        T4      p	T P                  R\A        T	4      4       \        R4       \;        T\B        R,          4       \;        T\B        R,          4       \?        T4      p
T P                  R\A        T
4      4       R#   \         P                   d    \        R 4       Rp ELi ; i  \         d6   p\        P                  \        4      P                  RTR7        Rp?ELvRp?ii ; i  \          d    \        P                  ! 4       w  rVRp EL~i ; i  \         d    \"        P$                  ! R4      hi ; i  \         d,   pTP6                  \6        P8                  8w  d   h  Rp?ELRp?ii ; i  \(        P2                  ! YX4       i ; i)z&tty.tcgetattr(pty.STDIN_FILENO) failedNz%Setting pty.STDIN_FILENO window size.zoriginal size: (row, col) = ztarget size: (row, col) = z&pty.STDIN_FILENO window size unchangedz+Failed to set pty.STDIN_FILENO window size.)exc_info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:N   N:rS   NNr   )"r,   r-   r.   r/   r2   r   rC   rF   rE   assertEqualOSErrorlogging	getLogger__name__warningopenpty	TypeErrorr0   SkipTestrB   r6   close
assertTrueisattyget_blockingset_blockingreaderrnoEAGAINr;   TEST_STRING_1r*   r    TEST_STRING_2)rG   r#   new_dim
target_dime	master_fdslave_fd
slave_nameblockings1s2s   &          r   test_openptyPtyTest.test_openptyp   sH   	==!1!12D >>> =>4T^^4DEF"nnQ/!3T^^A5F5JK
2:,?@  !1!1:> **3+;+;<  !IK	T)*"25++d>B3D/	Z
 OLxkJ=AB 	),(+		(+-DES]]84dDFS--h7HJ ??9-
	1OOIu-WWY-  b) OOI0#$(M*y!;)"-	/ 	&'(M"-.(M"-.y!46Fr6JKa yy 	:;D	,  !!(+33AA 4  	  "&)kkm#	!
"  	T##$RSS	T4  77ell* +
 OOI0s   $L C L6 <N$ M9 "N$ P ,)O	 "L32L36M6*M11M69$N!N$  N!!N$ $"O	O? O:4P :O??P Pc                   \        R 4       \        P                  ! 4       w  rV P                  \        P
                  V4       V\        P                  8X  d   \        P                  ! ^4      '       g"   \        R4       \        P                  ! ^4       \        R4        \        P                  ! 4        \        R4       \        P                  ! ^4       \        P                  ! ^4       R# \        RV,          4         \        P                  ! V^P4      pT'       g   M<\        P                  P                  \!        TP#                  RR	4      R
R7      4       K^  \        P$                  ! T^ 4      w  r\        P&                  ! T4      p\        RYT3,          4       T^8X  d   T P)                  R4       R# T^8X  d   T P)                  R4       R# T^8X  d   T P)                  R4       R# T^8w  d   T P)                  R4       R# R#   \         d    \        R4        ELN\         d    \        R4        ELf \        R4       \        P                  ! ^4        EL; i  \         d     EK  i ; i)zcalling pty.fork()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.r   r   ascii)encodingz+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.N)r   r.   forkrB   r6   r]   CHILDr_   _exitsetsidrU   AttributeErrorrb   sysstdoutr7   strr   waitpidwaitstatus_to_exitcodefail)rG   pidrj   r   statusress   &     r   	test_forkPtyTest.test_fork   s   "#),#))99Q<<34 12		" 56HHQK5;< 779b1D 

  T\\'5%A.5"7 8 JJsA.MS++F3C?3VBTTUax		OP		MN		TU		BC q  12! ./
 78(  s0   !H I% I"%I".I"="I"%I54I5c                   \        R 4       \        P                  ! 4       w  r\        RV RV R24       V P                  \        P
                  V4       \        R4       \        P
                  ! V4       \        R4        \        P                  ! V^4      pV P                  VR4       R#   \         d    Rp L#i ; i)rQ   zGot master_fd 'z', slave_fd ''zClosing slave_fdzReading from master_fdr   N)	r   r.   rZ   rB   r6   r]   rb   rU   rT   )rG   rj   rk   r   s   &   r   test_master_readPtyTest.test_master_read  s    %&!kkm		{-zCD), !
&'	779a(D 	s#  	D	s   B- -B=<B=c                
  a V P                  \        \        4       \        \        R 4      ;_uu_ 4       p^p\        P
                  ! V4      p\        P                  ! VP                  4       V4       RoV3R lp \        P                  ! \        P                  RR.V4       \        P                  ! W24       \        P                  ! V4        RRR4       V P                  SR4       \        \        R4      ;_uu_ 4       pV P                  VP                  4       R4       RRR4       R#   \        P                  ! Y24       \        P                  ! T4       i ; i  + '       g   i     L; i  + '       g   i     R# ; i)wbr   c                 H   < \         P                  ! V R 4      pSV,          oV# )rR   )r6   rb   )r(   r   bufs   & r   master_read3PtyTest.test_spawn_doesnt_hang.<locals>.master_read2  s!    wwr4(tr   z-czprint("hi there")Ns
   hi there
r"   )rB   r
   r	   openr6   dupdup2filenor.   spawnrz   
executabler]   rT   rb   )rG   fSTDOUT_FILENO
dup_stdoutr   r   s   &    @r   test_spawn_doesnt_hangPtyTest.test_spawn_doesnt_hang+  s   '&$1M.JGGAHHJ.C
%		3>>41DE%' 
2$    	o.&$1QVVX7   
2$  "  s0   AE;(D-#,E!E1-.EEE.	1F	)rC   N)rX   
__module____qualname____firstlineno__rI   staticmethodrA   r4   rp   r   r   r   __static_attributes____classdictcell____classdict__s   @r   r=   r=   ]   sN        !SL !SLjHDd$&8 8r   r=   c                   Z   a  ] tR tRt o RtR tR tR tR tR t	R t
R	 tR
 tR tRtV tR# )SmallPtyTestsiA  z)These tests don't spawn children or hang.c                   \         P                  V n        \         P                  V n        \         P
                  V n        \         P                  V n        \         P                  V n
        \         P                  V n        \         P                  V n        \         P                  V n        \         P"                  V n        \         P&                  V n        . V n        . V n        . V n        . V n        R V n        R # r   )r.   r/   orig_stdin_filenor   orig_stdout_filenor]   orig_pty_close_copyorig_pty__copyru   orig_pty_forkselectorig_pty_selectsetraworig_pty_setrawr-   orig_pty_tcgetattr	tcsetattrorig_pty_tcsetattrr}   orig_pty_waitpidfdsfilesselect_inputselect_outputtcsetattr_mode_setting)rG   s   &r   rI   SmallPtyTests.setUpD  s    !$!1!1"%"3"3!ii!ii XX"zz"zz"%--"%-- #
&*#r   c                   V P                   \        n        V P                  \        n        V P
                  \        n        V P                  \        n        V P                  \        n
        V P                  \        n        V P                  \        n        V P                  \        n        V P"                  \        n        V P&                  \        n        V P*                   F  p VP                  4        K  	  V P.                   F  p \0        P                  ! V4       K  	  R #   \,         d     KR  i ; i  \,         d     K@  i ; ir   )r   r.   r/   r   r   r   r]   r   r   r   ru   r   r   r   r   r   r-   r   r   r   r}   r   rU   r   r6   )rG   filer(   s   &  r   tearDownSmallPtyTests.tearDownU  s    11 33''	''	%%))
))
////++JJD

 
 ((B   
  s$   #D#D5#D21D25EEc                f    \         P                  ! 4       pV P                  P                  V4       V# r   )r6   piper   extend)rG   pipe_fdss   & r   _pipeSmallPtyTests._pipek  s"    779!r   c                f    \         P                  ! 4       pV P                  P                  V4       V# r   )socket
socketpairr   r   )rG   r   s   & r   _socketpairSmallPtyTests._socketpairp  s(    &&(


*%r   c                    V P                  WV3V P                  P                  ^ 4      4       V P                  P                  ^ 4      # )r   )rT   r   popr   )rG   rfdswfdsxfdss   &&&&r   _mock_selectSmallPtyTests._mock_selectu  s?    $d+T->->-B-B1-EF!!%%a((r   c                   a V3R  lpV# )c                     < S ^3# )   r   )r   s   r   	mock_fork0SmallPtyTests._make_mock_fork.<locals>.mock_fork{  s    9r   r   )rG   r   r   s   &f r   _make_mock_forkSmallPtyTests._make_mock_forkz  s    	r   c                    W0n         R # r   )r   )rG   r   optr#   s   &&&&r   _mock_tcsetattrSmallPtyTests._mock_tcsetattr  s    &*#r   c                   V P                  4       w  rV\        n        V P                  4       w  r4V\        n        V P	                  4       pV Uu. uF  qfP                  4       NK  	  pp\        V^,          R4       \        VR4       V P                  \        n        V P                  P                  W7^ ,          .. . 34       V P                  P                  W7^ ,          .. . 34       V P                  P                  W7^ ,          .W'^ ,          .. 34       V P                  P                  . W'^ ,          .. 34       V P                  P                  W7^ ,          .. . 34       V P                  \        4      ;_uu_ 4        \        P                  ! V^ ,          4       RRR4       \        P                  ! W^,          .. . ^ 4      ^ ,          pV P                  W^,          .V4       V P                  \         P"                  ! V^4      R4       V P                  \         P"                  ! V^,          ^4      R4       R# u upi   + '       g   i     L; i)z6Test the normal data case on both master_fd and stdin.s   from masters
   from stdinN)r   r.   r   r/   r   r   r;   r   r   r   appendr   assertRaises
IndexErrorr   rT   r6   rb   )	rG   read_from_stdout_fdmock_stdout_fdmock_stdin_fdwrite_to_stdin_fdr   smastersr   s	   &        r   test__copy_to_each SmallPtyTests.test__copy_to_each  s   .2jjl+*+/::<((%%'
'12z!88:z2 	'!*n-#]3 &&
  =!*"=r2!FG!!M1:#>B"GH  =!*"=XYPZ?[]_!`a!!2
'CR"HI  =!*"=r2!FGz**IIgaj! + }}11:>BJ1M-qz:DA!4b9>JR0-@+ 3 +*s   H? II	c                  aa V P                  ^4      \        n        \        4       oV3R l\        n        R \        n        R \        n        \        4       oV3R l\        n        V P                  \        n	        R \        n
        V P                  \        P                  ! . 4      SR4       V P                  V P                  SR4       R# )	zCTest that spawn resets the tty mode no when _copy returns normally.c                    < R S.# r   r   )_1_2status_sentinels   &&r   <lambda>DSmallPtyTests.test__restore_tty_mode_normal_return.<locals>.<lambda>  s
    dO%<r   c                     R # r   r   _s   &r   r   r     s    dr   c                     R # r   r   )r   r   _3s   &&&r   r   r     s    tr   c                    < S# r   r   )r(   mode_sentinels   &r   r   r     s    =r   c                     R # r   r   r   s   &r   r   r     s    tr   z4pty.waitpid process status not returned by pty.spawnz1pty.tcsetattr not called with original mode valueN)r   r.   ru   objectr}   r]   r   r-   r   r   r   rT   r   r   )rG   r   r   s   &@@r   $test__restore_tty_mode_normal_return2SmallPtyTests.test__restore_tty_mode_normal_return  s    
 ''* (<"	+	0,,#
29op44mExyr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   N)rX   r   r   r   __doc__rI   r   r   r   r   r   r   r   r   r   r   r   s   @r   r   r   A  s=     3+",

)

+A<z zr   r   c                      \        4        R # r   )r   r   r   r   tearDownModuler     s    Or   __main__)&r0   test.supportr   r   r   r   r   test.support.import_helperr   test.support.os_helperr	   r
   r\   rc   r6   r.   r,   rz   r   r?   r   r%   warningsre   rf   hasattrrD   r   r    r*   r4   r;   TestCaser=   r   r   rX   mainr   r   r   <module>r     s      5 1 i I


C
DD  	 
 
 
    	 2+c<(GGWS,-G
(
2b8h b8HrzH%% rzj zMMO r   