
    0hh!                     :   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Jr  S SKJ	r	J
r
  S SKJr  \" S5      r\" S5      r " S S\R                  5      r\R"                  " \" \S	5      S
5       " S S\R                  5      5       r\S:X  a  \R*                  " 5         gg)    N)support)	os_helperthreading_helper)import_modulefcntltermiosc                   f    \ rS rSr\S 5       rS rS rS rSS jr	SS jr
SS	 jrS
 rS rS rSrg)IoctlTestsTty   c           	         [         R                  " [        S5      n [        SS5      nU   [        R                  X![        R                  " SS5      5      nS S S 5        [        R                  " SW5      S   nU[        R                  " 5       [        R                  " S5      4;  a  [
        R                  " S5      eg ! [         a    [
        R                  " S5      ef = f! , (       d  f       N= f)N	TIOCGPGRP/dev/ttyrbzUnable to open /dev/ttyir   zBNeither the process group nor the session are attached to /dev/tty)r   get_attributer   openOSErrorunittestSkipTestr   ioctlstructpackunpackosgetpgrpgetsid)clsr   ttyrrpgrps        8/opt/python-3.13.8/usr/lib/python3.13/test/test_ioctl.py
setUpClassIoctlTestsTty.setUpClass   s    ))';?		?z4(C CFKKQ,?@A  c1%a(ryy|44## %? @ @ 5  	?##$=>>	?Ss   B? ,C#?!C #
C1c                 6   [         R                  " 5       [         R                  " S5      4n[        SS5       nSn[        R                  U[        R                  U5      nU R                  U[        5        [        U5      R                  S5      S   nU R                  XQ5        Sn[        R                  U[        R                  U5      nU R                  U[        5        [        U5      R                  S5      S   nU R                  XQ5        [        R                  U[        R                  [        U5      5      nU R                  U[        5        [        U5      R                  S5      S   nU R                  XQ5        S S S 5        g ! , (       d  f       g = f)Nr   r   r   z        r              )r   r   r   r   r   r   r   r   assertIsInstancebytes
memoryviewcastassertInselfidsr   bufr   r    s         r!   test_ioctl_immutable_buf&IoctlTestsTty.test_ioctl_immutable_buf   s-    zz|RYYq\**d#sCC!2!2C8A!!!U+qM&&s+A.EMM%% CC!2!2C8A!!!U+qM&&s+A.EMM%% C!2!2JsODA!!!U+qM&&s+A.EMM%%' $##s   E	F


Fc                    [         R                  " 5       [         R                  " S5      4n[        SS5       n[	        S5      n[
        R                  U[        R                  U5      nU R                  US5        [        U5      R                  S5      S   nU R                  XQ5        S S S 5        g ! , (       d  f       g = f)Nr   r   r   r%   r   )r   r   r   r   	bytearrayr   r   r   r   assertEqualr(   r)   r*   r+   s         r!   test_ioctl_mutable_buf$IoctlTestsTty.test_ioctl_mutable_buf6   s    zz|RYYq\**d#sF#CC!2!2C8AQ"sO((-a0EMM%% $##s   A1B22
C c                    [         R                  " 5       [         R                  " S5      4n[        SS5       n[	        S5      n[        U5      n[        R                  U[        R                  US5      nU R                  [        U5      U5        U R                  U[
        5        [        U5      R                  S5      S   nU R                  Xa5        S S S 5        g ! , (       d  f       g = f)Nr   r   r   r%   Fr   )r   r   r   r   r2   r'   r   r   r   r   r3   r&   r(   r)   r*   )r,   r-   r   r.   save_bufr   r    s          r!   test_ioctl_no_mutate_buf&IoctlTestsTty.test_ioctl_no_mutate_buf?   s    zz|RYYq\**d#sF#CSzHC!2!2C?AU3Z2!!!U+qM&&s+A.EMM%% $##s   BC
C+Nc                     [         R                   " S5      nUR                  nSnUb7  UR                  U/X-  -  5        U R                  [	        U5      U-  U5        U$ UR                  U5        U$ )Nr   i)arrayitemsizeextendr3   lenappend)r,   nbytesr.   intsizefills        r!   _create_int_bufIoctlTestsTty._create_int_bufJ   sm    kk#,,JJv!234SX/8 
 JJt
    c                 b   [         R                  " 5       [         R                  " S5      4nU R                  U5      n[	        SS5       n[
        R                  U[        R                  U5      nS S S 5        US   nU R                  WS5        U R                  Xb5        g ! , (       d  f       N7= f)Nr   r   r   )r   r   r   rC   r   r   r   r   r   r3   r*   )r,   r@   r-   r.   r   r   r    s          r!   _check_ioctl_mutate_len%IoctlTestsTty._check_ioctl_mutate_lenW   s    zz|RYYq\*""6**d#sC!2!2C8A $AAe!	 $#s   	&B  
B.c                 :   [         R                  " 5       [         R                  " S5      4nU R                  U5      n[	        U5      n[        SS5       n[        R                  U[        R                  US5      nS S S 5        U R                  W[        5        U R                  [        U5      [        U5      5        U R                  [	        U5      U5        [        R                  " SU5      S   n[        U5      R                  S5      S   nU R!                  Xr5        [	        U5      n[        SS5       n[        R                  U[        R                  US5      nS S S 5        U R                  U[        5        U R                  [        U5      [        U5      5        U R                  X45        [        R                  " SU5      S   n[        U5      R                  S5      S   nU R!                  Xr5        g ! , (       d  f       GN= f! , (       d  f       N= f)Nr   r   r   Fr   T)r   r   r   rC   r'   r   r   r   r   r   r&   r3   r>   r;   r(   r)   r*   )r,   r@   r-   r.   r7   r   r   r    s           r!   _check_ioctl_not_mutate_len)IoctlTestsTty._check_ioctl_not_mutate_len`   s   zz|RYYq\*""6*:*d#sC!2!2C?A $a'QX/sX.C#A&1""3'*e!Cj*d#sC!2!2C>A $a'QX/'C#A&1""3'*e!# $# $#s   'G:7'H:
H	
Hc                 D    U R                  5         U R                  5         g NrG   rJ   r,   s    r!   test_ioctl_mutateIoctlTestsTty.test_ioctl_mutatew   s    $$&((*rE   c                 H    U R                  S5        U R                  S5        g )N   rN   rO   s    r!   test_ioctl_mutate_1024$IoctlTestsTty.test_ioctl_mutate_1024{   s      	$$T*((.rE   c                 h    U R                  S5        U R                  [        U R                  S5        g )Ni   )rG   assertRaises
ValueErrorrJ   rO   s    r!   test_ioctl_mutate_2048$IoctlTestsTty.test_ioctl_mutate_2048   s(    $$T**d&F&FMrE    rM   )__name__
__module____qualname____firstlineno__classmethodr"   r/   r4   r8   rC   rG   rJ   rP   rT   rY   __static_attributes__r[   rE   r!   r
   r
      sD    @ @&2&	&"".+/NrE   r
   openptyzneed os.openpty()c                   &   \ rS rSrS r\R                  " \" \S5      S5      S 5       r	\R                  " \
R                  S:H  S5      \R                  " \" \S5      S	5      S
 5       5       rS r\R                  " \" \S5      S5      S 5       rSrg)IoctlTestsPty   c                     [         R                  " 5       u  U l        U l        U R	                  [         R
                  U R                  5        U R	                  [         R
                  U R                  5        g rM   )r   rb   	master_fdslave_fd
addCleanupcloserO   s    r!   setUpIoctlTestsPty.setUp   sB    (*

%$--0$..1rE   TCFLSHzrequires termios.TCFLSHc                 X   U R                   nU R                  n[        R                  S;   n[        R
                  " US5        U R                  [        R                  " US5      S5        U(       a4  [        R                  U[        R                  [        R                  5        O3[        R                  U[        R                  [        R                  5        U R                  [        R                  " US5      S5        U(       a4  [        R                  U[        R                  [        R                  5        O3[        R                  U[        R                  [        R                  5        [        R
                  " US5        U R                  [        R                  " US5      S5        g )N)linuxandroids   abcdef   s   abs   cds   ABCDEFrS   )rh   rg   sysplatformr   writer3   readr   r   r   rm   TCOFLUSHTCIFLUSH)r,   wfdrfdinbufs       r!    test_ioctl_clear_input_or_output.IoctlTestsPty.test_ioctl_clear_input_or_output   s   mmnn  44
i a%0KKW^^W-=-=> KKW^^W-=-=>a%0KKW^^W-=-=> KKW^^W-=-=>
i d+Y7rE   ro   zonly works on LinuxTCXONCzrequires termios.TCXONCc                   ^ ^^^ T R                   mT R                  n[        R                  " 5       m[        R                  " 5       mU UUU4S jn[        R
                  " [        R                  " US9/5         T R                  [        R                  " US5      S5          [        R                  T[        R                  [        R                  5        TR                  5         T R!                  TR#                  S5      S5        [        R                  T[        R                  [        R$                  5        T R'                  TR#                  [(        R*                  5      S5        T R                  [        R                  " US5      S	5        S S S 5        g ! TR                  5         f = f! [        R                  T[        R                  [        R$                  5        f = f! , (       d  f       g = f)
Nc                     > [         R                  " TS5        T R                  TR                  [        R
                  5      5        [         R                  " TS5        TR                  5         g )N   abc   def)r   rt   
assertTruewaitr   SHORT_TIMEOUTset)r,   rx   write_finishedwrite_suspendeds   r!   writerBIoctlTestsPty.test_ioctl_suspend_and_resume_output.<locals>.writer   sH    HHS&!OOO001F1FGHHHS&! rE   )target   r   g      ?zoutput was not suspendedzoutput was not resumedrS   r   )rh   rg   	threadingEventr   start_threadsThreadr3   r   ru   r   r   r   r}   TCOOFFr   assertFalser   TCOONr   r   r   )r,   ry   r   rx   r   r   s   `  @@@r!   $test_ioctl_suspend_and_resume_output2IoctlTestsPty.test_ioctl_suspend_and_resume_output   sS    mmnn#//+"*	! 	! ++Y-=-=V-L,MNRWWS!_f5@*KKW^^W^^D#'')  !4!4S!9!;= C?OON//0E0EF46RWWS$/8 ON $'') C? ONs7   9(G&#3F1F.B	G&F++F..5G##G&&
G4c                    [         R                  S:  a$  [         R                  n[         R                  S-  nOL[         R                  n[        R                  " S[        R                  " S[         R                  5      5      u  n[        R                  " SSSSS5      n[
        R                  U R                  X#5      n[
        R                  U R                  X5      ng )Nr   l    r   IHHHHP      )r   
TIOCSWINSZr   r   r   r   r   rg   )r,   set_winsz_opcode_maybe_negset_winsz_opcode_pos	our_winsz	new_winszs        r!   %test_ioctl_signed_unsigned_code_param3IoctlTestsPty.test_ioctl_signed_unsigned_code_param   s    !)0););&#*#5#5
#B #*#5#5 *0--KKW%7%78+:'& KKr"Qq1	KK0DP	KK0JV	rE   FICLONEzneed fcntl.FICLONEc                 ~   [         R                  " 5       nU R                  [        5         [        R                  U[        R                  U5        S S S 5        U R                  [        5         [        R                  U[        R                  S5        S S S 5        g ! , (       d  f       NR= f! , (       d  f       g = f)Ns                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   )r   make_bad_fdrW   r   r   r   r   )r,   fds     r!   test_bad_fdIoctlTestsPty.test_bad_fd   ss     ""$w'KKEMM2. (w'KKEMM<8 (' ('''s   &B.&B.
B+.
B<)rg   rh   N)r\   r]   r^   r_   rk   r   
skipUnlesshasattrr   r{   rr   rs   r   r   r   r   ra   r[   rE   r!   rd   rd      s    2
 (35NO8 P82 02GH(35NO9 P I96W 	24HI9 J9rE   rd   __main__)r;   r   r   rr   r   r   testr   test.supportr   r   test.support.import_helperr   r   r   TestCaser
   r   r   rd   r\   mainr[   rE   r!   <module>r      s     	  
    4 4g
	
"wNH%% wNt 
WR+-@AR9H%% R9 BR9j zMMO rE   