
    4hh                     n   S SK r S SKJr  S SKJr  S SKJr  S SKJr  S SK	J
r
Jr  S SKJrJr  S SKJr  S S	KJrJr   " S
 S5      rS"S\S\S-  4S jjrS"S\S\S-  4S jjrS\4S jrS\S\\   4S jrS\
4S jrS\\   S\\
-  4S jr\\4S jr\" \\" \SS9S9r\" \SS9r \" \SS9r! " S  S!\
5      r"g)#    N)InteractiveConsole)partial)Iterable)	MagicMock)ConsoleEvent)ReadlineAlikeReaderReadlineConfig)_strip_final_indent)	unbracketANSI_ESCAPE_SEQUENCEc                   0    \ rS rSr SS\S\S\4S jjrSrg)	ScreenEqualMixin   readerexpectedcleanc                     U(       a  [        U5      OUR                  nUR                  S5      nU R                  XB5        g )N
)clean_screenscreensplitassertListEqual)selfr   r   r   actuals        A/opt/python-3.13.8/usr/lib/python3.13/test/test_pyrepl/support.pyassert_screen_equal$ScreenEqualMixin.assert_screen_equal   s2     */f%FMM>>$'V.     N)F)	__name__
__module____qualname____firstlineno__r	   strboolr   __static_attributes__r    r   r   r   r      s'    HM/)/58/AE/ /r   r   r   	namespacec                     U R                   n [        [         US9U l         S=U l        U l        S=U l        U l        U R                  5       X l         SU l        $ ! X l         SU l        f = f)Nr(   z>>> z... F)
more_linesr   ps1ps2ps3ps4readline
paste_mode)r   r(   saveds      r   multiline_inputr3      sg    E"#J)D"((
VZ"((
VZ !! "!s   >A A)textc                     Uc  0 n[        U 5      n[        USS9n UR                  USS5      nUS L $ ! [        [        [
        4 a     gf = f)Nz<stdin>)filenamesingleF)r   r   compileOverflowErrorSyntaxError
ValueError)r4   r(   srcconsolecodes        r   r+   r+   "   sa    	
d
#C Y?GsIx8 t| ;
3 s   3 A
Ar>   c           
   #   h   #    U  H(  n[        SU[        UR                  S5      5      S9v   M*     g 7f)Nkeyutf-8)evtdataraw)r   	bytearrayencode)r>   cs     r   code_to_eventsrH   /   s,     A9QXXg5F+GHH s   02returnc                 J   / nU R                    H  n[        USS9n[        R                  " SU5      nU R                  U R
                  U R                  U R                  4 H)  nUR                  U5      (       d  M  U[        U5      S n  O   UR                  U5        M     U$ )zCleans color and console characters out of a screen output.

This is useful for screen testing, it increases the test readability since
it strips out all the unreadable side of the screen.
T)including_content N)r   r   r   subr,   r-   r.   r/   
startswithlenappend)r   outputlineprefixs       r   r   r   4   s     F6#''D1zz6::vzz6::FFv&&CKL) G 	d  Mr   r=   c                     [        UR                  SS 5      S9n[        XS9n[        [        S S9Ul        SUl        S[        4S jnXCl        UR                  5        H  u  pV[        X5U5        M     U$ )Nreadline_completer)rU   )r=   configr*   TrI   c                     g)NrL   r    )linenocursor_on_lines     r   
get_prompt"prepare_reader.<locals>.get_promptL   s    r   )
r
   popr	   r   r+   r1   r%   rZ   itemssetattr)r=   kwargsrV   r   rZ   r@   vals          r   prepare_readerra   F   sq    vzz:NPT/UVF @F
d;FFc  #LLNS! # Mr   eventsc                     [        5       nXR                  l        SUl        SUl        UR                  5        H  u  p4[        X#U5        M     U$ Nd   P   )r   	get_eventside_effectheightwidthr]   r^   )rb   r_   r=   r@   r`   s        r   prepare_consolerk   W   sD    kG$*!GNGMLLNc" #Nr   c                     U" U 5      nU" U5      n  UR                  5         M  ! [         a     XC4$ [         a     XC4$ f = fN)handle1StopIterationKeyboardInterrupt)rb   rk   ra   r=   r   s        r   handle_all_eventsrq   a   s`     f%GG$FNN   ?  ?s   % 
A	A A
   )rj   )rk   F)can_colorizeTc                   6   \ rS rSrSSS jjrS S\S\S-  4S jjrS\4S jrS\	\
\
4   4S jrS	\\   S
\	\
\
4   SS4S jrSS jrSS jrS\
S\
SS4S jrS\SS4S jrS\
\-  SS4S jrSS jrSS jrSS jrSS jrSS jrS!S\S-  S\4S jjrSS jrSrg)"FakeConsoley   rI   Nc                 Z    [        U5      U l        X l        / U l        SU l        SU l        g rd   )iterrb   encodingr   ri   rj   )r   rb   ry   s      r   __init__FakeConsole.__init__z   s'    6l 
r   blockc                 ,    [        U R                  5      $ rm   )nextrb   )r   r|   s     r   rg   FakeConsole.get_event   s    DKK  r   c                      U R                  SS9$ )NF)r|   )rg   r   s    r   
getpendingFakeConsole.getpending   s    ~~E~**r   c                 2    U R                   U R                  4$ rm   )ri   rj   r   s    r   getheightwidthFakeConsole.getheightwidth   s    {{DJJ&&r   r   xyc                     g rm   r    )r   r   r   s      r   refreshFakeConsole.refresh       r   c                     g rm   r    r   s    r   prepareFakeConsole.prepare   r   r   c                     g rm   r    r   s    r   restoreFakeConsole.restore   r   r   xyc                     g rm   r    )r   r   r   s      r   move_cursorFakeConsole.move_cursor   r   r   visiblec                     g rm   r    )r   r   s     r   set_cursor_visFakeConsole.set_cursor_vis   r   r   charc                     g rm   r    )r   r   s     r   	push_charFakeConsole.push_char   r   r   c                     g rm   r    r   s    r   beepFakeConsole.beep   r   r   c                     g rm   r    r   s    r   clearFakeConsole.clear   r   r   c                     g rm   r    r   s    r   finishFakeConsole.finish   r   r   c                     g rm   r    r   s    r   flushoutputFakeConsole.flushoutput   r   r   c                     g rm   r    r   s    r   forgetinputFakeConsole.forgetinput   r   r   timeoutc                     g)NTr    )r   r   s     r   waitFakeConsole.wait   s    r   c                     g rm   r    r   s    r   repaintFakeConsole.repaint   r   r   )ry   rb   ri   r   rj   )rA   )rI   N)Trm   )r!   r"   r#   r$   rz   r&   r   rg   r   tupleintr   listr%   r   r   r   r   r   bytesr   r   r   r   r   r   floatr   r   r'   r    r   r   ru   ru   y   s    !t !ut| !+E +'c3h 'd3i U38_  S S T d t cEk d EDL D r   ru   rm   )#osr>   r   	functoolsr   typingr   unittest.mockr   _pyrepl.consoler   r   _pyrepl.readliner	   r
   _pyrepl.simple_interactr   _pyrepl.utilsr   r   r   dictr3   r%   r+   rH   r   r   ra   rk   rq   handle_events_narrow_consolereader_no_colorsreader_force_colorsru   r    r   r   <module>r      s    	 #   # * @ 7 9/ /	"/ 	"D4K 	"
S 
TD[ 
I I
, c $G "HUO )g:M  ,N  'O26  
 >> n4@ 6' 6r   