+
    Bi.                        ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RI	H
t
Ht ^ RI	Ht ^ RIHt ^ RIHtHtHtHtHt ^RIHtHt  ^ RIHt ^ R	IHt ^ R
IHt ]R,          tR t]! ]]R7      t ]! ]]! ]^R7      R7      t!]! ]]! ]^R7      R7      t"]! ]]! ]^R7      R7      t#]PH                  ! ]PJ                  R8H  R4      ]! RR 4      ]! RR 4      ]! RR 4      ]! R4      ] ! R R]4      4       4       4       4       4       4       t&]PH                  ! ]PJ                  R8H  R4       ! R R]4      4       t'R#   ] d     Li ; i)    N)partial)	os_helperforce_not_colorized_test_class)script_helper)TestCase)	MagicMockcallpatchANYMock)handle_all_eventscode_to_events)Event)UnixConsole)_TERMINAL_CAPABILITIESansic                 v  aa \        R R7      p\        V R7      Vn        \        \        RR4      R7      Vn        VP                  R^4      oVP                  R^P4      o\        VV3R lR7      Vn        \        4       Vn        VP                  4        VP                  4        F  w  r4\        W#V4       K  	  V# )	xtermtermside_effectkey )return_valueheightwidthc                     < S S3# N )r   r   s   9/usr/lib/python3.14/test/test_pyrepl/test_unix_console.py<lambda>unix_console.<locals>.<lambda>#   s	    FE?    )r   r   	get_eventr   
getpendinggetgetheightwidthwaitprepareitemssetattr)eventskwargsconsoler   valr   r   s   &,   @@r!   unix_consoler1      s    w'G!f5G"eR0@AGZZ"%FJJw#E&3JKG;GLOOLLNc" #Nr$   )prepare_console)r   )r   win32zNo Unix event queue on Windowsz_pyrepl.terminfo.tparmc                 N    V R ,           RP                  R V 4       4      ,           # )   :   ,c              3   T   "   T F  p\        V4      P                  4       x  K   	  R # 5ir   )strencode).0is   & r!   	<genexpr><lambda>.<locals>.<genexpr>@   s     )H4a#a&--//4s   &()join)sargss   &*r!   r"   r"   @   s    QX		)H4)H HHr$   ztermios.tcgetattrc                     R ^RRRR. RO.# )ik  i K  i  i   )      rC                                              rH      rH   r    _s   &r!   r"   r"   D   s    		
r$   ztermios.tcsetattrc                     R # r   r    )abcs   &&&r!   r"   r"   c   s    Dr$   zos.writec                      a  ] tR t^=t o R tR tR tR tR tR t	R t
R tR	 tR
 tR tR t]P"                  ! ]P&                  R8H  R4      R 4       tRtV tR# )TestConsolec                6   R p\        V4      p\        V4      w  rEVP                  \        R4       VP                  \        R4       VP                  \        R4       VP                  \        R4       VP                  \        R4       VP	                  4        R# )12+34   1   2   +   3   4N)r   handle_events_unix_consoleassert_any_callr   restoreself	_os_writecoder-   rT   cons   &&    r!   test_simple_addition TestConsole.test_simple_additiong   sv    %+F3!!#t,!!#t,!!#t,!!#t,!!#t,r$   c                   R p\        V4      p\        V4      w  rEVP                  \        R4       VP                  \        R4       VP                  \        R4       VP                  \        R4       VP                  \        R4       VP                  \        R4       VP                  \        R4       VP	                  4        R# )	r\   r]   r^   r_   r`      \   
ra   N)r   !handle_events_narrow_unix_consolerc   r   rd   re   s   &&    r!   	test_wrapTestConsole.test_wrapr   s    %26:!!#t,!!#t,!!#t,!!#t,!!#u-!!#u-!!#t,r$   c           
         R p\         P                  ! \        V4      \        RR\	        R4      R7      .4      p\        V4      w  rEVP                  \        \        R,          R,           4       VP                  4        R# )1r   left   ODevtdatarawcub   :1N
	itertoolschainr   r   	bytearrayrb   rc   r   TERM_CAPABILITIESrd   re   s   &&    r!   test_cursor_leftTestConsole.test_cursor_left   sc    4 u6y/CDE
 ,F3!!#'8'?%'GHr$   c                |   R p\         P                  ! \        V4      \        RR\	        R4      R7      \        RR\	        R4      R7      .4      p\        V4      w  rEVP                  \        \        R,          R,           4       VP                  \        \        R	,          R,           4       VP                  4        R
# )rs   r   rt   ru   rv   rights   OCrz   r{   cufNr|   re   s   &&    r!   test_cursor_left_right"TestConsole.test_cursor_left_right   s    4 %f)I2FG%g9Y3GH
 ,F3!!#'8'?%'GH!!#'8'?%'GHr$   c           
         R p\         P                  ! \        V4      \        RR\	        R4      R7      .4      p\        V4      w  rEVP                  \        \        R,          R,           4       VP                  4        R# )1
2+3r   up   OArv   cuur{   Nr|   re   s   &&    r!   test_cursor_upTestConsole.test_cursor_up   sc    4 u4Yy-ABC
 ,F3!!#'8'?%'GHr$   c                |   R p\         P                  ! \        V4      \        RR\	        R4      R7      \        RR\	        R4      R7      .4      p\        V4      w  rEVP                  \        \        R,          R,           4       VP                  \        \        R	,          R,           4       VP                  4        R
# )r   r   r   r   rv   down   OBr   r{   cudNr|   re   s   &&    r!   test_cursor_up_downTestConsole.test_cursor_up_down   s    4 %d	)0DE%f)I2FG
 ,F3!!#'8'?%'GH!!#'8'?%'GHr$   c           
     h   \         P                  ! \        R 4      \        RR\	        R4      R7      .\        R4      4      p\        V4      w  r4VP                  \        R4       VP                  \        \        R,          R,           4       VP                  \        R	4       VP                  4        R
# )rs   r   rt   ru   rv   2r]   rz   r{   r^   Nr|   )rf   rg   r-   rT   ri   s   &&   r!   test_cursor_back_write"TestConsole.test_cursor_back_write   s    3u6y/CDE3

 ,F3!!#t,!!#'8'?%'GH!!#t,r$   c           
        R p\         P                  ! \        V4      \        RR\	        R4      R7      \        RRR7      .4      p\        V4      w  rEVP                  \        \        R,          R	,           4       VP                  4        R# )
def f():
  foor   r   r   rv   scrollNrw   rx   rir5   
r}   r~   r   r   r    handle_events_short_unix_consolerc   r   r   rd   re   s   &&    r!   .test_multiline_function_move_up_short_terminal:TestConsole.test_multiline_function_move_up_short_terminal   sv     	 4 %d	)0DE(.
 2&9!!#'8'>'EFr$   c                   R p\         P                  ! \        V4      \        RR\	        R4      R7      \        RRR7      \        RR\	        R	4      R7      \        RRR7      .4      p\        V4      w  rEVP                  \        \        R
,          R,           4       VP                  \        \        R,          R,           4       VP                  4        R# )r   r   r   r   rv   r   Nr   r   r   r   r5   indr   re   s   &&    r!   3test_multiline_function_move_up_down_short_terminal?TestConsole.test_multiline_function_move_up_down_short_terminal   s     	 4 %d	)0DE(.%f)I2FG(.	
 2&9!!#'8'>'EF!!#'8'?$'FGr$   c                  aa	 R p\         P                  ! \        V4      4      p\        V4      w  o	o^Sn        \        R 4      Sn        V	3R lpV3R lp\        \        RRR7      .VVR7      w  rgVP                  \        \        \        R,          R	,           4      \        \        \        R
,          R,           4      \        \        R4      .4       SP                  4        VP                  4        R# )r   c                     R# )   )r   P   r    rS   s   &r!   r"   FTestConsole.test_resize_bigger_on_multiline_function.<locals>.<lambda>       Wr$   c                    < S# r   r    rT   readers   &r!   same_readerITestConsole.test_resize_bigger_on_multiline_function.<locals>.same_reader       Mr$   c                 *   < \        V R 7      Sn        S# r   r   r%   r-   r/   s   &r!   same_consoleJTestConsole.test_resize_bigger_on_multiline_function.<locals>.same_console        )f =GNr$   resizeNr   prepare_readerr2   r   r5   cup   :0,0s   def f():)r}   r~   r   r   r   r   r(   r   r   assert_has_callsr	   r   r   rd   
rf   rg   rh   r-   r   r   rT   ri   r/   r   s
   &&      @@r!   (test_resize_bigger_on_multiline_function4TestConsole.test_resize_bigger_on_multiline_function   s     	 !56:6B!*+<!=		 #xd+,&(

 	""S+D1D89S+E2W<=S+&	
 	r$   c                  aa	 R p\         P                  ! \        V4      4      p\        V4      w  o	o^Sn        \        R 4      Sn        V	3R lpV3R lp\        \        RRR7      .VVR7      w  rgVP                  \        \        \        R,          R	,           4      \        \        \        R
,          R,           4      \        \        R4      .4       SP                  4        VP                  4        R# )r   c                     R# )   )r   r   r    rS   s   &r!   r"   GTestConsole.test_resize_smaller_on_multiline_function.<locals>.<lambda>  r   r$   c                    < S# r   r    r   s   &r!   r   JTestConsole.test_resize_smaller_on_multiline_function.<locals>.same_reader  r   r$   c                 *   < \        V R 7      Sn        S# r   r   r   s   &r!   r   KTestConsole.test_resize_smaller_on_multiline_function.<locals>.same_console  r   r$   r   Nr   r   r   r5   r   r   s     foo)r}   r~   r   #handle_events_unix_console_height_3r   r   r(   r   r   r   r	   r   r   rd   r   s
   &&      @@r!   )test_resize_smaller_on_multiline_function5TestConsole.test_resize_smaller_on_multiline_function  s     	 !56=fE!*+<!=		 #xd+,&(

 	""S+E2T9:S+E2W<=S(#	
 	r$   c                   \        R R7      p\        P                  ! 4       ;_uu_ 4       pRVR&   V P                  VP	                  4       \
        4       RVR&   V P                  VP	                  4       \
        4       . \        n        V P                  VP	                  4       \
        4       RRR4       R#   + '       g   i     R# ; i)r   r   r   LINESCOLUMNSN)r   r   EnvironmentVarGuardassertIsInstancer(   tupleosenviron)rf   rg   r/   envs   &&  r!   (test_getheightwidth_with_invalid_environ4TestConsole.test_getheightwidth_with_invalid_environ,  s    7+**,,CL!!'"8"8":EBC	N!!'"8"8":EBBJ!!'"8"8":EB -,,,s   BB66C	darwinzrequires macOSc                    \        R R7      p\        P                  ! 4       ;_uu_ 4        . \        n        VP                  4        VP                  4        RRR4       R#   + '       g   i     R# ; i)r   r   N)r   r   r   r   r   r*   rd   )rf   rg   r/   s   && r!   *test_restore_with_invalid_environ_on_macos6TestConsole.test_restore_with_invalid_environ_on_macos7  sG     7+**,,BJOOOO -,,,s   ,A  A1	r    N)__name__
__module____qualname____firstlineno__rj   rp   r   r   r   r   r   r   r   r   r   r   unittest
skipUnlesssysplatformr   __static_attributes____classdictcell____classdict__s   @r!   rZ   rZ   =   sq     T	
&,"H"H	C 13CD Er$   rZ   zNo Unix console on Windowsc                      a  ] tR tRt o ]! R4      ]! R4      R 4       4       t]P                  ! ]P                  R8H  R4      R 4       t
RtV tR	# )
TestUnixConsoleEIOHandlingiA  z_pyrepl.unix_console.tcsetattrz_pyrepl.unix_console.tcgetattrc                F   ^ RI p\        4       p^ Vn        ^ Vn        ^ Vn        ^ Vn        ^ .^ ,          Vn        WDP                  n        WAn        \        RR7      pVP                  4        VP                  \        P                  R4      Vn        VP                  4        R# )r   Nr   r   zInput/output error)termiosr   iflagoflagcflaglflagcccopyr   r   r*   errorerrnoEIOr   rd   )rf   mock_tcgetattrmock_tcsetattrr   mock_termiosr/   s   &&&   r!   "test_eio_error_handling_in_restore=TestUnixConsoleEIOHandling.test_eio_error_handling_in_restoreD  s     	v#()5&&2#7+%,]]599>R%S" 	r$   linuxzOnly valid on Linuxc                   \         P                  P                  \         P                  P                  \        4      R 4      p\
        P                  ! RV\        P                  RR7      pVP                  P                  4       P                  4       pVR8w  g   VP                  4       e   V P                  R4       \         P                  ! VP                  \         P"                  4       VP%                  ^R7      w  rEV P'                  VP(                  ^RVP(                   24       T P+                  R	V9   ;'       g    R
V9   RV 24       R# )zeio_test_script.pyz-ST)stderrtextREADYNz&Child process failed to start properly)timeoutz*Expected EIO/ENXIO error, got return code zGot EIO:z
Got ENXIO:z,Expected EIO/ENXIO error message in stderr: )r   pathr>   dirname__file__r   spawn_python
subprocessPIPEstdoutreadlinestrippollfailkillpidsignalSIGUSR1communicateassertEqual
returncode
assertTrue)rf   script_pathproc
ready_linerT   errs   &     r!   test_repl_eio(TestUnixConsoleEIOHandling.test_repl_eioZ  s    ggll277??8#<>RS))+??
 [[))+113
 DIIK$;II>?
&..)!!!!,OO88IJ	

 	c! ' '3&:3%@	
r$   r    N)r   r   r   r   r
   r   r   r   r   r   r  r   r   r   s   @r!   r   r   A  sY      +,
+, - -( 02GH
 I
r$   r   )(r   r}   r   r  r  r   r   	functoolsr   test.supportr   r   r   r   unittest.mockr   r	   r
   r   r   supportr   r   _pyrepl.consoler   _pyrepl.unix_consoler   ImportError_pyrepl.terminfor   r   r1   rb   ro   r   r   skipIfr   rZ   r   r    r$   r!   <module>r"     s     	   
   B &  ; ; 6	%0 4*62   %   %,L2% ! $+L3$   '.w|A'F' #
 
(*JKH  B 01zX( X    2C 	 LRXv 
(*FG4
 4
 H4
]	  		s   E E
E