
    ^hX:                     ,   S SK r S SKJrJrJrJr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 SKJ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 rS r\ R@                  RC                  SSS/5      S 5       r"\ R@                  RC                  SSS/5      S 5       r#\ R@                  RC                  S/ SQ5      S 5       r$\ R@                  RC                  S/ SQ5      S 5       r%\ R@                  RC                  S/ SQ5      S 5       r&\ R@                  RC                  S/ SQ5      S 5       r'\ R@                  RC                  SSS /5      S! 5       r(S" r)S# r*S$ r+S% r,S& r-S' r.S( r/\ R`                  S) 5       r1S* r2S+ r3S, r4S- r5S. r6S/ r7S0 r8S1 r9S2 r:g)3    N)
acceptaccept_or_jump_to_endaccept_tokenaccept_characteraccept_wordaccept_and_keep_cursordiscardNavigableAutoSuggestFromHistoryswap_autosuggestion_upswap_autosuggestion_down)	skip_over)create_ipython_shortcutsreset_search_buffer)InMemoryHistory)Buffer)Document)AutoSuggestFromHistory)DEFAULT_BUFFER)patchMockc                      SS K Js  Js  Jn   [        R
                  " [        SS9   U R                    S S S 5        g ! , (       d  f       g = f)Nr   z8\.12.+accept_or_jump_to_endmatch)'IPython.terminal.shortcuts.auto_suggestterminal	shortcutsauto_suggestpytestwarnsDeprecationWarningaccept_in_vi_insert_mode)iptsas    _/home/james-whalen/.local/lib/python3.13/site-packages/IPython/terminal/tests/test_shortcuts.pytest_deprectedr$      s.    ;;	(0O	P&& 
Q	P	Ps	   <
A
c                    [        5       n[        5       Ul        [        5       UR                  l        XR                  l        XR                  l        X#R                  R                  l        [        XS9UR                  l        U$ )N)textcursor_position)r   current_buffer
suggestionr&   r'   r   document)r&   cursorr)   events       r#   
make_eventr-   !   se    FE6E&*fE# $+1(+5##($,$$OE!L    ztext, suggestion, expected) def out(tag: str, n=50):r0   )def out(tag: str, n=50):r2   c                     [        U [        U 5      U5      nUR                  n[        5       Ul        [        U5        UR                  R                  (       d   eUR                  R                  S   U4:X  d   eg Nr   )r-   lenr(   r   insert_textr   called	call_args)r&   r)   expectedr,   buffers        r#   test_acceptr;   ,   sh     tSY
3E!!FF
5M$$$$''*xk999r.   ztext, suggestion)r/   r0   )r1   r2   c                     [        U [        U 5      U5      nUR                  n[        5       Ul        [        U5        UR                  R                  (       a   eUR                  b   eg N)r-   r5   r(   r   r6   r	   r7   r)   )r&   r)   r,   r:   s       r#   test_discardr>   <   sY     tSY
3E!!FFEN!!(((($$$r.   z text, cursor, suggestion, called))123456   	123456789T)r?      rA   F)z123456   
789r@   rA   Tc                    [        XU5      n[        5       UR                  l        [	        U5        U(       a%  UR                  R                  R                  5         gUR                  R                  R                  5         g)z7
test that autosuggest is only applied at end of line.
N)r-   r   r(   r6   r   assert_calledassert_not_called)r&   r+   r)   r7   r,   s        r#   test_autosuggest_at_EOLrF   L   s[     tZ0E'+vE$% ((668((::<r.   )r/   r0   r1   def out(tag: str, n=50):zef )de f out(tag: str, n=50):f defz out(tag: str, n=50): )r1   r2   zout()zdef ozut(tag: str, n=50):zut()zdef ouzt(tag: str, n=50):zt()zdef outz(tag: str, n=50):()zdef out(ztag: str, n=50):ztag: )z	def out(tzag: str, n=50):zag: )z
def out(tazg: str, n=50):zg: )zdef out(tagz: str, n=50):z: )zdef out(tag:z str, n=50):rP   )zdef out(tag: zstr, n=50):zstr, )zdef out(tag: sz
tr, n=50):ztr, )zdef out(tag: stz	r, n=50):zr, )zdef out(tag: strz, n=50):z, n)zdef out(tag: str,z n=50):z n)zdef out(tag: str, zn=50):zn=)zdef out(tag: str, nz=50):=)zdef out(tag: str, n=z50):z50))zdef out(tag: str, n=5z0):z0))zdef out(tag: str, n=50):rS   )zdef out(tag: str, n=50):rT   c                    [        U [        U 5      U5      n[        5       UR                  l        [        U5        UR                  R                  R                  (       d   eUR                  R                  R                  S   U4:X  d   eg r4   )r-   r5   r   r(   r6   r   r7   r8   r&   r)   r9   r,   s       r#   test_autosuggest_tokenrW   c   sp    < tSY
3E'+vE$++2222++55a8XKGGGr.   ))r/   r0   rI   )rI   rJ   e)rK   rL   frN   c                    [        U [        U 5      U5      n[        5       UR                  l        [        U5        UR                  R                  R                  (       d   eUR                  R                  R                  S   U4:X  d   eg r4   )r-   r5   r   r(   r6   r   r7   r8   rV   s       r#   test_accept_characterr[      sp     tSY
3E'+vE$U++2222++55a8XKGGGr.   )rG   rH   )derL   rM   rN   )r1   r2   z	out(tag: c                    [        U [        U 5      U5      n[        5       UR                  l        [        U5        UR                  R                  R                  (       d   eUR                  R                  R                  S   U4:X  d   eg r4   )r-   r5   r   r(   r6   r   r7   r8   rV   s       r#   test_accept_wordr^      sp     tSY
3E'+vE$++2222++55a8XKGGGr.   z"text, suggestion, expected, cursor)r/   r0   r0   r   )r1   r2   r2      c                    [        XU5      nUR                  n[        5       Ul        [	        U5        UR                  R
                  (       d   eUR                  R                  S   U4:X  d   eUR                  U:X  d   eg r4   )r-   r(   r   r6   r   r7   r8   r'   )r&   r)   r9   r+   r,   r:   s         r#   test_accept_and_keep_cursorra      sw     tZ0E!!FF5!$$$$''*xk999!!V+++r.   c                  <   Sn [        U [        U 5      S5      n[        5       UR                  l        [        S5       n[        U5        UR                  R                  R                  (       a   eUR                  (       d   e S S S 5        g ! , (       d  f       g = f)Nr0   r/   z?prompt_toolkit.key_binding.bindings.named_commands.forward_word)r-   r5   r   r(   r6   r   r   r7   )fullr,   forward_words      r#   test_autosuggest_token_emptyre      sy    %DtSY+E'+vE$	I
	U''33::::""""
 
 
s   AB
Bc                     [        5       n SU R                  R                  l        [        5       U R                  l        [        5       nSUR                  R                  l        [        5       UR
                  R                  l        [        U 5        U R                  R                  R                  5         [        U5        UR
                  R                  R                  R                  [        5        g )Nz	some textr/   )r   r(   r*   r&   resetapplayoutfocusr   assert_called_onceassert_called_once_withr   )event_with_textevent_emptys     r#   test_reset_search_bufferro      s    fO3>O""++0+/6O""(&K/1K'',#'6KOO (""((;;=$OO  88Hr.   c                      [        5       n [        5       nXl        [        5       n[	        5       Ul        [        U5      b   e[        U5      b   eg)zHEnsure that swapping autosuggestions does not break with other providersN)r   get_ipythonr   r   r   r(   r   r   )provideripr,   s      r#   test_other_providersrt      sI    %'H	BOFE!8E!%(000#E*222r.   c                    ^^#    [        5       m[        / SQS9n [        U S9m[        5       nTUl        U R                  5         S h  vN nM   N
 STl        STl        [        n[        n[        5       nTUl        UU4S jnU" 5       R                  S:X  d   eU" U5        U" 5       R                  S:X  d   eU" U5        U" 5       R                  S	:X  d   eU" U5        U" 5       R                  S:X  d   eU" U5        U" 5       R                  S	:X  d   eU" U5        U" 5       R                  S:X  d   eU" U5        U" 5       R                  S:X  d   eU" U5        U" 5       R                  S	:X  d   eg 7f)
N)very_averyvery_bvery_chistory_stringshistory   rw   c                  N   > TR                  TTR                  5      n U Tl        U $ r=   get_suggestionr*   r)   r)   r:   rr   s    r#   r   /test_navigable_provider.<locals>.get_suggestion   '    ,,VV__E
&r.   _c_b_ar
   r   r   rq   r   loadr'   r&   r   r   r   r(   	r}   rs   _updownr,   r   r:   rr   s	          @@r#   test_navigable_providerr      sm    .0H.TUGG$F	BBO<<> a> FFK	B#DFE!E
   D((( uI  D((( uI  D((( uI  D((( 	K  D(((K  D(((K  D(((K  D(((s+   A E5AA	AE5AD$E5c                  4  ^^#    [        5       m[        SS/S9n [        U S9m[        5       nTUl        U R                  5         S h  vN nM   N
 STl        STl        [        n[        n[        5       nTUl        UU4S jnU" 5       R                  S:X  d   eU" U5        U" 5       R                  S	:X  d   eU" U5        U" 5       R                  S
:X  d   eU" U5        U" 5       R                  S	:X  d   eU" U5        U" 5       R                  S:X  d   eg 7f)Nzvery_a
very_bry   rz   r|   r~   rw   c                  N   > TR                  TTR                  5      n U Tl        U $ r=   r   r   s    r#   r   Atest_navigable_provider_multiline_entries.<locals>.get_suggestion+  r   r.   r   r   r   r   r   s	          @@r#   )test_navigable_provider_multiline_entriesr     s    .0H/?.JKGG$F	BBO<<> a> FFK	B#DFE!E
   D(((uI  D(((uI  D(((K  D(((K  D(((s+   A DAA	ADACDc                  8    [        5       n [        5       U l        U $ r=   )r   r   default_buffer)sessions    r#   create_session_mockr   ?  s    fG#XGNr.   c                     [        5       n SU l        [        5       nU R                  U5        U R                  S:X  d   eUR                  R
                  R                  5         U R                  S:X  d   e[        5       nU R                  U5        SU l        U R                  S:X  d   eUR                  R
                  R                  5         U R                  S:X  d   eSU l        U R                  5         UR                  R
                  R                  5         UR                  R
                  R                  5         U R                  S:X  d   eg )N   r      rB   )r
   
skip_linesr   connectr   on_text_insertfire
disconnect)rr   	session_1	session_2s      r#   "test_navigable_provider_connectionr   E  s   .0HH#%IY!###++002!####%IYH!###++002!###H++002++002!###r.   c               #      #    [        5       n [        5       U l        [        U 5      U R                  l         U v   S U l        g ! S U l        f = f7fr=   )rq   r   pt_appr   key_bindings)rs   s    r#   ipython_with_promptr   _  s>     	BBI5b9BII	D	s   4AA A	AAc                     [        5       nUR                  R                  R                   Vs/ s H  nUR                  U :X  d  M  UPM     sn$ s  snf r=   )rq   r   r   bindingshandler)commandrs   bindings      r#   find_bindings_by_commandr   j  sL    	B yy--666G??g% 	6  s   AAc                    [        [        5      n[        U5      S:X  d   eS/ SQS./U l        [        [        5      n[        U5      S:X  d   e[	        US   R
                  5      / SQ:X  d   e[	        US   R
                  5      [	        US   R
                  5      :w  d   eUS   R                  US   R                  :X  d   eSSS./U l        [        [        5      n[        U5      S:X  d   e[	        US   R
                  5      / SQ:w  d   e[	        US   R
                  5      [	        US   R
                  5      :X  d   eUS   R                  US   R                  :w  d   eg )Nr   !IPython:auto_suggest.accept_token)abcr   new_keysr   always)r   
new_filter)r   r   r5   r   listkeysfilter)r   originalmatcheds      r#   test_modify_unique_shortcutr   s  sR   '5Hx=A 8_U%! '|4Gw<1
 O333
 D!)9)9$::::1: 2 2222 8xP%! '|4Gw<1
 O333
 D!)9)9$::::1: 2 2222r.   c                     [        [        5      n[        U5      S:X  d   eS/ S./U l        [        [        5      n[        U5      S:X  d   e/ U l        [        [        5      n[        U5      S:X  d   eg )Nr   r   r   r   )r   r   r5   r   r   r   s     r#   test_disable_shortcutr     sv    &|4Gw<1 8RH%! '|4Gw<1$&!&|4Gw<1r.   c                    [        [        5      nU Vs1 s H  o"R                  S   iM     nnU1 Sk:X  d   e[        R                  " [
        SS9   SS/S./U l        S S S 5        SS/SS	./U l        [        [        5      nU Vs1 s H  o"R                  S   iM     nnU1 S
k:X  d   eg s  snf ! , (       d  f       NX= fs  snf )Nr   >   "')]}zMultiple shortcuts matchingr   IPython:auto_match.skip_overxr   z6focused_insert & auto_match & followed_by_single_quote)r   r   match_filter>   r   r   r   r   r   )r   r   r   r   raises
ValueErrorr   )r   r   mmatched_keyss       r#   !test_modify_shortcut_with_filtersr     s    &y1G'./w!FF1IwL/4444	z)F	G6SEJ)
% 
H 6T	
%! 'y1G'./w!FF1IwL/4444# 0 
H	G 0s   B+B0C0
B>c                      g r=    r   r.   r#   example_commandr     s    r.   c                    [        [        5      n[        U5      S:X  d   e[        R                  " [
        SS9   SS/S./U l        S S S 5        [        [        5      n[        U5      S:X  d   eg ! , (       d  f       N/= f)Nr   zexample_command is not a knownr   r   r   r   )r   r   r5   r   r   r   r   r   s     r#   !test_add_shortcut_for_new_commandr     sp    &7Gw<1	z)I	J)u=)
% 
K '7Gw<1 
K	Js   A00
A>c                     [         R                  " [        SS9   SS/S/S./U l        S S S 5        g ! , (       d  f       g = f)NzNo shortcuts matchingr   r   r   y)r   
match_keysr   )r   r   r   r   )r   s    r#   test_modify_shortcut_failurer     s=    	z)@	A :"e E)
% 
B	A	As	   2
A c                 j   [        [        5      n[        U5      S:X  d   e[        R                  " [
        SS9   S/ SS./U l        S S S 5        SS/SS./U l        [        [        5      n[        U5      S:X  d   e/ U l        [        [        5      n[        U5      S:X  d   eg ! , (       d  f       Nc= f)	Nr~   z"Cannot add a shortcut without keysr   r   Tr   r   creater   r@   )r   r   r5   r   r   r   r   r   s     r#   &test_add_shortcut_for_existing_commandr     s    &y1Gw<1	z)M	N6BRVW)
% 
O 3QUV%! 'y1Gw<1$&!&y1Gw<1 
O	Ns   B$$
B2c                  v    [        5       n U R                  b   eSS/SS./nXl        U R                  U:X  d   eg )Nr   r   Tr   )rq   r   r   )ipythonr   s     r#   )test_setting_shortcuts_before_pt_app_initr     sI    mG>>!!!2QUVI "	)))r.   );r   r   r   r   r   r   r   r   r	   r
   r   r   %IPython.terminal.shortcuts.auto_matchr   IPython.terminal.shortcutsr   r   prompt_toolkit.historyr   prompt_toolkit.bufferr   prompt_toolkit.documentr   prompt_toolkit.auto_suggestr   prompt_toolkit.enumsr   unittest.mockr   r   r$   r-   markparametrizer;   r>   rF   rW   r[   r^   ra   re   ro   rt   r   r   r   r   fixturer   r   r   r   r   r   r   r   r   r   r   r.   r#   <module>r      s      < T 2 ( , > / %'  D@:: ((%% &==  :H;:H  HH  
H
H (GC,,
#I 31)h#)L$4  3.5,		
(*r.   