
    0hhA                        S SK r S SKJrJrJrJrJrJr  S SKJ	r	  S SK
JrJr  \	" S5        \(       d  \(       d  \(       d  \(       a  \ R                  " S5      eS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrSrSr\" \S	5      =(       a	    \" \S
5      r\(       a  S rOS rS rS rS rS r  " S S\ RB                  5      r" " S S\ RB                  5      r#S r$\%S:X  a  \ RL                  " 5         gg)    N)
is_androidis_apple_mobileis_emscriptenis_wasi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                     [        U 5        g N)printmsgs    6/opt/python-3.13.8/usr/lib/python3.13/test/test_pty.pydebugr      s	    c
    c                     g r    r   s    r   r   r   "   s    r   c                     U R                  S5      (       a  U R                  SS5      $ U R                  S5      (       a  U R                  SS5      $ U $ )Ns   
   
   
)endswithreplace)datas    r   normalize_outputr!   0   sI     }}Y||Iu--}}W||GU++Kr   c                 N    [         R                  " U SSS9nUR                  5       $ )NrbF)modeclosefd)ioFileIOreadline)fdreaders     r   	_readliner+   D   s!    YYre4F??r   c                      [         R                  " [        R                  5        [        R
                  " U 5      $ ! [         R                   a     U $ f = fr   )tty	tcgetattrptySTDIN_FILENOunittestexpectedFailureerror)funs    r   expectedFailureIfStdinIsTTYr5   I   sE    c&&''',,99 Js   9< AAc           	          [         R                  " X5      nU[        U5      :w  a  [        SU  S[        U5       SU S35      eg )Nzshort write: os.write(z, z bytes) wrote z bytes)oswritelen	Exception)r)   r    writtens      r   	write_allr<   S   sQ    hhr G#d)0Bs4yk B!!(	1 2 	2 r   c                   L    \ rS rSrS r\S 5       r\S 5       rS r	S r
S rSrg	)
PtyTest]   c                    [         R                   " [         R                  U R                  5      nU R                  [         R                   [         R                  U5        S U l        [
        (       ad   [        R                  " [        R                  5      U l        U R                  [        R                  [        R                  U R                  5        g g ! [        R                   a     g f = fr   )signalSIGHUPhandle_sighup
addCleanup	stdin_dim_HAVE_WINSZr-   tcgetwinsizer/   r0   tcsetwinsizer3   )self
old_sighups     r   setUpPtyTest.setUp^   s    ]]6==$2D2DE
v}}jA ;!$!1!1#2B2B!C 0 0#2B2B $0 
 99 s   2A"C C-,C-c                     g r   r   )signumframes     r   rC   PtyTest.handle_sighupl   s    r   c                     [         R                  " [        R                  5      nS nU R                  (       a   [        S5        [        SU R                   35        U R                  S   S-   U R                  S   S-   4n[        SU 35        [         R                  " [        R                  U5        [         R                  " [        R                  5      nU R                  X#S5         [        S
5         [        R                  " XS5      u  pVn[        SU< SU< SU< 35        U R'                  [(        R*                  U5        U R'                  [(        R*                  U5        U R-                  [(        R.                  " U5      S5        U(       a'  U R                  [         R                  " U5      US5        U(       a'  U R                  [         R                  " U5      US5        [(        R0                  " U5      n [(        R2                  " US5         [(        R4                  " US5      n	U R                  SU	5        [(        R2                  " XX5        [        S5        [;        U[<        5        [?        U5      n	U R                  S[A        U	5      5        [        S5        [;        U[B        S S 5        [;        U[B        SS  5        [?        U5      n
U R                  S[A        U
5      5        g ! [         R                   a    [        S5        S n GNf = f! [         a2  n[        R                  [        5      R                  SUS	9   S nAGNfS nAff = f! [          a    [        R                  " 5       u  pVS n GNmf = f! [         a    ["        R$                  " S5      ef = f! [         a*  nUR6                  [6        R8                  :w  a  e  S nAGNS nAff = f! [(        R2                  " XX5        f = f)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.)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   r   )"r-   r.   r/   r0   r3   r   rE   rH   rG   assertEqualOSErrorlogging	getLogger__name__warningopenpty	TypeErrorr1   SkipTestrD   r7   close
assertTrueisattyget_blockingset_blockingreaderrnoEAGAINr<   TEST_STRING_1r+   r!   TEST_STRING_2)rI   r$   new_dim
target_dime	master_fdslave_fd
slave_nameblockings1s2s              r   test_openptyPtyTest.test_openptyp   sJ   	==!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"1-.(M!"-.y!46Fr6JKa yy 	:;D	,  !!(+33AA 4  	  "&)kkm#	!
"  	T##$RSS	T4  77ell* +
 OOI0s   $K1 B0L +N 7M N O )N& 1!LL
M#'MM#M?;N >M??N !N#&
O0OO OO O5c                    [        S5        [        R                  " 5       u  pU R                  [        R
                  U5        U[        R                  :X  a  [        R                  " S5      (       d!  [        S5        [        R                  " S5        [        S5         [        R                  " 5         [        S5        [        R                  " S5        [        R                  " S5        g [        SU-  5          [        R                  " US5      nU(       d  O9[        R                  R                  [!        UR#                  SS5      SS95        MY  [        R$                  " US5      u  p[        R&                  " U5      n[        SXU4-  5        US:X  a  U R)                  S5        g US:X  a  U R)                  S5        g US:X  a  U R)                  S5        g US:w  a  U R)                  S5        g g ! [         a    [        S5         GN7[         a    [        S	5         GNN  [        S
5        [        R                  " S5         GNs= f! [         a     GM  f = f)Nzcalling pty.fork()rR   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.P   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/   forkrD   r7   r`   CHILDrb   _exitsetsidrX   AttributeErrorre   sysstdoutr8   strr   waitpidwaitstatus_to_exitcodefail)rI   pidrm   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(  s*   G4 <I 4II#"I
IIc                 |   [        S5        [        R                  " 5       u  p[        SU SU S35        U R                  [        R
                  U5        [        S5        [        R
                  " U5        [        S5         [        R                  " US5      nU R                  US5        g ! [         a    Sn N!f = f)	NrT   zGot master_fd 'z', slave_fd ''zClosing slave_fdzReading from master_fdrR   r   )	r   r/   r]   rD   r7   r`   re   rX   rW   )rI   rm   rn   r    s       r   test_master_readPtyTest.test_master_read  s    %&!kkm		{-zCD), !
&'	779a(D 	s#  	D	s   B, ,B;:B;c                   ^ U R                  [        [        5        [        [        S5       nSn[        R
                  " U5      n[        R                  " UR                  5       U5        SmU4S jn [        R                  " [        R                  SS/U5        [        R                  " X25        [        R                  " U5         S S S 5        U R                  TS5        [        [        S5       nU R                  UR                  5       S5        S S S 5        g ! [        R                  " X25        [        R                  " U5        f = f! , (       d  f       N= f! , (       d  f       g = f)	NwbrR   r   c                 @   > [         R                  " U S5      nTU-  mU$ )NrU   )r7   re   )r)   r    bufs     r   master_read3PtyTest.test_spawn_doesnt_hang.<locals>.master_read2  s!    wwr4(tr   z-czprint("hi there")s
   hi there
r#   )rD   r   r
   openr7   dupdup2filenor/   spawnr   
executabler`   rW   re   )rI   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3(D,E2!E.E

E
E
E,)rE   N)r[   
__module____qualname____firstlineno__rK   staticmethodrC   r5   rs   r   r   r   __static_attributes__r   r   r   r>   r>   ]   sF       !SL !SLjHDd$&8r   r>   c                   J    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rSrg)SmallPtyTestsiA  c                    [         R                  U l        [         R                  U l        [         R
                  U l        [         R                  U l        [         R                  U l
        [         R                  U l        [         R                  U l        [         R                  U l        [         R"                  U l        [         R&                  U l        / U l        / U l        / U l        / U l        S U l        g r   )r/   r0   orig_stdin_filenor   orig_stdout_filenor`   orig_pty_close_copyorig_pty__copyr|   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)rI   s    r   rK   SmallPtyTests.setUpD  s    !$!1!1"%"3"3!ii!ii XX"zz"zz"%--"%-- #
&*#r   c                    U R                   [        l        U R                  [        l        U R
                  [        l        U R                  [        l        U R                  [        l
        U R                  [        l        U R                  [        l        U R                  [        l        U R"                  [        l        U R&                  [        l        U R*                   H  n UR                  5         M     U R.                   H  n [0        R                  " U5        M     g ! [,         a     MP  f = f! [,         a     M=  f = fr   )r   r/   r0   r   r   r   r`   r   r   r   r|   r   r   r   r   r   r.   r   r   r   r   r   rX   r   r7   )rI   filer)   s      r   tearDownSmallPtyTests.tearDownU  s    11 33''	''	%%))
))
////++JJD

 
 ((B   
  s$   #D"D3"
D0/D03
E Ec                 f    [         R                  " 5       nU R                  R                  U5        U$ r   )r7   piper   extend)rI   pipe_fdss     r   _pipeSmallPtyTests._pipek  s"    779!r   c                 f    [         R                  " 5       nU R                  R                  U5        U$ r   )socket
socketpairr   r   )rI   r   s     r   _socketpairSmallPtyTests._socketpairp  s(    &&(


*%r   c                     U R                  XU4U R                  R                  S5      5        U R                  R                  S5      $ )Nr   )rW   r   popr   )rI   rfdswfdsxfdss       r   _mock_selectSmallPtyTests._mock_selectu  s?    $d+T->->-B-B1-EF!!%%a((r   c                    ^ U4S jnU$ )Nc                     > T S4$ )N   r   )r   s   r   	mock_fork0SmallPtyTests._make_mock_fork.<locals>.mock_fork{  s    9r   r   )rI   r   r   s    ` r   _make_mock_forkSmallPtyTests._make_mock_forkz  s    	r   c                     X0l         g r   )r   )rI   r   optr$   s       r   _mock_tcsetattrSmallPtyTests._mock_tcsetattr  s    &*#r   c                 :   U R                  5       u  pU[        l        U R                  5       u  p4U[        l        U R	                  5       nU Vs/ s H  ofR                  5       PM     nn[        US   S5        [        US5        U R                  [        l        U R                  R                  X7S   // / 45        U R                  R                  X7S   // / 45        U R                  R                  X7S   /X'S   // 45        U R                  R                  / X'S   // 45        U R                  R                  X7S   // / 45        U R                  [        5         [        R                  " US   5        S S S 5        [        R                  " XS   // / S5      S   nU R                  XS   /U5        U R                  [         R"                  " US5      S5        U R                  [         R"                  " US   S5      S5        g s  snf ! , (       d  f       N= f)NrR   s   from masters
   from stdinr      )r   r/   r   r0   r   r   r<   r   r   r   appendr   assertRaises
IndexErrorr   rW   r7   re   )	rI   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H
Hc                   ^^ U R                  S5      [        l        [        5       mU4S j[        l        S [        l        S [        l        [        5       mU4S j[        l        U R                  [        l	        S [        l
        U R                  [        R                  " / 5      TS5        U R                  U R                  TS5        g )	NrR   c                    > S T/$ r   r   )_1_2status_sentinels     r   <lambda>DSmallPtyTests.test__restore_tty_mode_normal_return.<locals>.<lambda>  s
    dO%<r   c                     g r   r   _s    r   r   r     s    dr   c                     g r   r   )r   r   _3s      r   r   r     s    tr   c                    > T$ r   r   )r)   mode_sentinels    r   r   r     s    =r   c                     g r   r   r   s    r   r   r     s    tr   z4pty.waitpid process status not returned by pty.spawnz1pty.tcsetattr not called with original mode value)r   r/   r|   objectr   r`   r   r.   r   r   r   rW   r   r   )rI   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)r[   r   r   r   rK   r   r   r   r   r   r   r   r   r   r   r   r   r   r   A  s1    +",

)

+A<zr   r   c                      [        5         g r   )r   r   r   r   tearDownModuler     s    Or   __main__)'r1   test.supportr   r   r   r   r   r   test.support.import_helperr	   test.support.os_helperr
   r   r_   rf   r7   r/   r-   r   r   rA   r   r&   warningsrh   ri   hasattrrF   r   r!   r+   r5   r<   TestCaser>   r   r   r[   mainr   r   r   <module>r     s      5 1 i MW


C
DD  	 
 
 
    	 2+c<(GWS,-G
(
2b8h b8HrzH%% rzj zMMO r   