
    f8                        d dl Z d dlmZmZmZmZmZmZmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZ d
 Zd Ze j:                  j=                  dddg      d        Ze j:                  j=                  dddg      d        Z e j:                  j=                  dg d      d        Z!e j:                  j=                  dg d      d        Z"e j:                  j=                  dg d      d        Z#e j:                  j=                  dg d      d        Z$e j:                  j=                  dddg      d         Z%d! Z&d" Z'd# Z(d$ Z)d% Z*d& Z+e jX                  d'        Z-d( Z.d) Z/d* Z0d+ Z1d, Z2d- Z3d. Z4d/ Z5d0 Z6y)1    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)InMemoryHistory)Buffer)Document)AutoSuggestFromHistory)patchMockc                      dd l mc mc m}  t	        j
                  t        d      5  | j                   d d d        y # 1 sw Y   y xY w)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    `/var/www/cvtools/html/venv/lib/python3.12/site-packages/IPython/terminal/tests/test_shortcuts.pytest_deprectedr"      s6    ;;	(0O	P '&&' ' 's	   >Ac                    t               }t               |_        t               |j                  _        | |j                  _        ||j                  _        ||j                  j                  _        t        | |      |j                  _        |S )N)textcursor_position)r   current_buffer
suggestionr$   r%   r   document)r$   cursorr'   events       r!   
make_eventr+       sm    FE6E&*fE# $E+1E(+5E##($,$$OE!L    ztext, suggestion, expected) def out(tag: str, n=50):r.   )def out(tag: str, n=50):r0   c                     t        | t        |       |      }|j                  }t               |_        t        |       |j                  j                  sJ |j                  j                  d   |fk(  sJ y Nr   )r+   lenr&   r   insert_textr   called	call_args)r$   r'   expectedr*   buffers        r!   test_acceptr9   +   sh     tSY
3E!!FF
5M$$$$''*xk999r,   ztext, suggestion)r-   r.   )r/   r0   c                     t        | t        |       |      }|j                  }t               |_        t        |       |j                  j                  rJ |j                  J y N)r+   r3   r&   r   r4   r	   r5   r'   )r$   r'   r*   r8   s       r!   test_discardr<   ;   sY     tSY
3E!!FFEN!!(((($$$r,   z text, cursor, suggestion, called))123456   	123456789T)r=      r?   F)z123456   
789r>   r?   Tc                     t        | ||      }t               |j                  _        t	        |       |r%|j                  j                  j                          y|j                  j                  j                          y)z?
    test that autosuggest is only applied at end of line.
    N)r+   r   r&   r4   r   assert_calledassert_not_called)r$   r)   r'   r5   r*   s        r!   test_autosuggest_at_EOLrD   K   s]     tVZ0E'+vE$% ((668((::<r,   )r-   r.   r/   def out(tag: str, n=50):zef )de f out(tag: str, n=50):f defz out(tag: str, n=50): )r/   r0   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):rN   )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):rQ   )zdef out(tag: str, n=50):rR   c                    t        | t        |       |      }t               |j                  _        t        |       |j                  j                  j                  sJ |j                  j                  j                  d   |fk(  sJ y r2   )r+   r3   r   r&   r4   r   r5   r6   r$   r'   r7   r*   s       r!   test_autosuggest_tokenrU   b   sp    < tSY
3E'+vE$++2222++55a8XKGGGr,   ))r-   r.   rG   )rG   rH   e)rI   rJ   frL   c                    t        | t        |       |      }t               |j                  _        t        |       |j                  j                  j                  sJ |j                  j                  j                  d   |fk(  sJ y r2   )r+   r3   r   r&   r4   r   r5   r6   rT   s       r!   test_accept_characterrY      sp     tSY
3E'+vE$U++2222++55a8XKGGGr,   )rE   rF   )derJ   rK   rL   )r/   r0   z	out(tag: c                    t        | t        |       |      }t               |j                  _        t        |       |j                  j                  j                  sJ |j                  j                  j                  d   |fk(  sJ y r2   )r+   r3   r   r&   r4   r   r5   r6   rT   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-   r.   r.   r   )r/   r0   r0      c                     t        | ||      }|j                  }t               |_        t	        |       |j                  j
                  sJ |j                  j                  d   |fk(  sJ |j                  |k(  sJ y r2   )r+   r&   r   r4   r   r5   r6   r%   )r$   r'   r7   r)   r*   r8   s         r!   test_accept_and_keep_cursorr_      sy     tVZ0E!!FF5!$$$$''*xk999!!V+++r,   c                     d} t        | t        |       d      }t               |j                  _        t        d      5 }t        |       |j                  j                  j                  rJ |j                  sJ 	 d d d        y # 1 sw Y   y xY w)Nr.   r-   z?prompt_toolkit.key_binding.bindings.named_commands.forward_word)r+   r3   r   r&   r4   r   r   r5   )fullr*   forward_words      r!   test_autosuggest_token_emptyrc      s~    %DtSY+E'+vE$	I
 #	U''33::::""""# # #s   <BBc                      t               } t               }| |_        t               }t	               |_        t        |      J t        |      J y)zHEnsure that swapping autosuggestions does not break with other providersN)r   get_ipythonr   r   r   r&   r   r   )provideripr*   s      r!   test_other_providersrh      sK    %'H	BBOFE!8E!%(000#E*222r,   c                    K   t               t        g d      } t        |       t               }|_        | j                         2 3 d {   }
7 6 d_        d_        t        }t        }t               }|_        fd} |       j                  dk(  sJ  ||        |       j                  dk(  sJ  ||        |       j                  d	k(  sJ  ||        |       j                  dk(  sJ  ||        |       j                  d	k(  sJ  ||        |       j                  dk(  sJ  ||        |       j                  dk(  sJ  ||        |       j                  d	k(  sJ y w)
N)very_averyvery_bvery_chistory_stringshistory   rk   c                  N    j                  j                        } | _        | S r;   get_suggestionr(   r'   r'   r8   rf   s    r!   ru   z/test_navigable_provider.<locals>.get_suggestion   '    ,,VV__E
&r,   _c_b_ar
   r   r   re   r   loadr%   r$   r   r   r   r&   	rq   rg   _updownr*   ru   r8   rf   s	          @@r!   test_navigable_providerr      st    .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E1
AAAE1ADE1c                  2  K   t               t        ddg      } t        |       t               }|_        | j                         2 3 d {   }
7 6 d_        d_        t        }t        }t               }|_        fd} |       j                  dk(  sJ  ||        |       j                  d	k(  sJ  ||        |       j                  d
k(  sJ  ||        |       j                  d	k(  sJ  ||        |       j                  dk(  sJ y w)Nzvery_a
very_brm   rn   rp   rr   rk   c                  N    j                  j                        } | _        | S r;   rt   rv   s    r!   ru   zAtest_navigable_provider_multiline_entries.<locals>.get_suggestion  rw   r,   rx   ry   rz   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    t               } t               | _        | S r;   )r   r   default_buffer)sessions    r!   create_session_mockr   .  s    fG#XGNr,   c                     t               } d| _        t               }| j                  |       | j                  dk(  sJ |j                  j
                  j                          | j                  dk(  sJ t               }| j                  |       d| _        | j                  dk(  sJ |j                  j
                  j                          | j                  dk(  sJ d| _        | j                          |j                  j
                  j                          |j                  j
                  j                          | j                  dk(  sJ y )N   r      r@   )r
   
skip_linesr   connectr   on_text_insertfire
disconnect)rf   	session_1	session_2s      r!   "test_navigable_provider_connectionr   4  s   .0HH#%IY!###++002!####%IYH!###++002!###H++002++002!###r,   c               #      K   t               } t               | _        t        |       | j                  _        	 |  d | _        y # d | _        w xY wwr;   )re   r   pt_appr   key_bindings)rg   s    r!   ipython_with_promptr   N  s?     	BBI5b9BII	D	s   4AA A	AAc                     t               }|j                  j                  j                  D cg c]  }|j                  | k(  r| c}S c c}w r;   )re   r   r   bindingshandler)commandrg   bindings      r!   find_bindings_by_commandr   Y  sG    	B yy--66??g% 	  s   Ac                    t        t              }t        |      dk(  sJ dg ddg| _        t        t              }t        |      dk(  sJ t	        |d   j
                        g dk(  sJ t	        |d   j
                        t	        |d   j
                        k7  sJ |d   j                  |d   j                  k(  sJ dddg| _        t        t              }t        |      dk(  sJ t	        |d   j
                        g dk7  sJ t	        |d   j
                        t	        |d   j
                        k(  sJ |d   j                  |d   j                  k7  sJ y )Nr   !IPython:auto_suggest.accept_token)abcr   new_keysr   always)r   
new_filter)r   r   r3   r   listkeysfilter)r   originalmatcheds      r!   test_modify_unique_shortcutr   b  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                     t        t              }t        |      dk(  sJ dg dg| _        t        t              }t        |      dk(  sJ g | _        t        t              }t        |      dk(  sJ y )Nr   r   r   r   )r   r   r3   r   r   r   s     r!   test_disable_shortcutr   y  sv    &|4Gw<1 8RH%! '|4Gw<1$&!&|4Gw<1r,   c                 z   t        t              }|D ch c]  }|j                  d    }}|h dk(  sJ t        j                  t
        d      5  ddgdg| _        d d d        ddgdd	g| _        t        t              }|D ch c]  }|j                  d    }}|h d
k(  sJ y c c}w # 1 sw Y   PxY wc c}w )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'./!AFF1I/L/4444	z)F	G 
6SEJ)
%
 6T	
%! 'y1G'./!AFF1I/L/4444# 0
 
 0s   B'B,B8,B5c                       y r;    r   r,   r!   example_commandr     s    r,   c                     t        t              }t        |      dk(  sJ t        j                  t
        d      5  ddgdg| _        d d d        t        t              }t        |      dk(  sJ y # 1 sw Y   )xY w)Nr   zexample_command is not a knownr   r   r   r   )r   r   r3   r   r   r   r   r   s     r!   !test_add_shortcut_for_new_commandr     su    &7Gw<1	z)I	J 
)u=)
%
 '7Gw<1
 
s   A00A9c                     t        j                  t        d      5  ddgdgdg| _        d d d        y # 1 sw Y   y xY w)NzNo shortcuts matchingr   r   r   y)r   
match_keysr   )r   r   r   r   )r   s    r!   test_modify_shortcut_failurer     sE    	z)@	A 
 :"e E)
%
 
 
s   4=c                 ^   t        t              }t        |      dk(  sJ t        j                  t
        d      5  dg ddg| _        d d d        ddgddg| _        t        t              }t        |      dk(  sJ g | _        t        t              }t        |      dk(  sJ y # 1 sw Y   \xY w)	Nrr   z"Cannot add a shortcut without keysr   r   Tr   r   creater   r>   )r   r   r3   r   r   r   r   r   s     r!   &test_add_shortcut_for_existing_commandr     s    &y1Gw<1	z)M	N 
6BRVW)
%
 3QUV%! 'y1Gw<1$&!&y1Gw<1
 
s   B##B,c                  t    t               } | j                  J ddgddg}|| _        | j                  |k(  sJ y )Nr   r   Tr   )re   r   r   )ipythonr   s     r!   )test_setting_shortcuts_before_pt_app_initr     sK    mG>>!!!2QUVI "G	)))r,   )7r   r   r   r   r   r   r   r   r	   r
   r   r   %IPython.terminal.shortcuts.auto_matchr   IPython.terminal.shortcutsr   prompt_toolkit.historyr   prompt_toolkit.bufferr   prompt_toolkit.documentr   prompt_toolkit.auto_suggestr   unittest.mockr   r   r"   r+   markparametrizer9   r<   rD   rU   rY   r\   r_   rc   rh   r   r   r   r   fixturer   r   r   r   r   r   r   r   r   r   r   r,   r!   <module>r      s      < ? 2 ( , > %'  D@:: ((%% &==  :H;:H  HH  
H
H (GC,,
#31)h#)L$4  3.5,		
(*r,   