
    ^hT                      H   S r SSKrSSKrSSKrSSKJr  SSKJr  SSK	J
r
Jr  SSKJr   " S S\R                  5      r " S	 S
\R                  5      r " S S\R                  5      r " S S\5      rS r " S S\R                  5      rS r " S S\R                  5      rg)z:Tests for the TerminalInteractiveShell and related pieces.    N)AutoSuggestFromHistory)tools)_elide(_adjust_completion_text_based_on_context)NavigableAutoSuggestFromHistoryc                       \ rS rSrS rSrg)TestAutoSuggest   c                     [        5       nS Ul        U R                  UR                  S 5        SUl        U R	                  UR                  [
        5        SUl        U R	                  UR                  [        5        g )Nr   r   )get_ipythonautosuggestions_providerassertEqualauto_suggestassertIsInstancer   r   selfips     e/home/james-whalen/.local/lib/python3.13/site-packages/IPython/terminal/tests/test_interactivshell.pytest_changing_provider&TestAutoSuggest.test_changing_provider   s_    ]&*#$/&>#boo/EF&G#boo/NO     N)__name__
__module____qualname____firstlineno__r   __static_attributes__r   r   r   r	   r	      s    Pr   r	   c                   ,    \ rS rSrS rS rS rS rSrg)	TestElide   c                 @   [        SS5        [        SS5        U R                  [        SS5      S5        [        R                  R	                  / SQ5      n[        R                  S-   S-   S	-   [        R                  -   S
-   nU R                  [        US5      U5        g )Nzconcatenate((a1, a2, ...), axis z concatenate((a1, a2, ..), . axisz0aaaa.bbbb.ccccc.dddddd.eeeee.fffff.gggggg.hhhhhhu   aaaa.b…g.hhhhhh)r"   
aaaaaaaaaa
bbbbbbbbbb
ccccccccccr"   au   …br%   )r   r   ossepjoin)r   test_stringexpect_strings      r   
test_elideTestElide.test_elide   s    0"5126ErJ	

 ffkk"HIFFSL44s:RVVChN 	 	R0-@r   c                 :    U R                  [        SSSS9S5        g )N,the quick brown fox jumped over the lazy dogzthe quick brown fox
   	min_elideu"   the…fox jumped over the lazy dogr   r   r   s    r   test_elide_typed_normal!TestElide.test_elide_typed_normal-   s&    >%
 1	
r   c                 :    U R                  [        SSSS9S5        g)A
if the match is too short we don't elide.
avoid the "the...the"
r0   ther1   r2   Nr4   r5   s    r   test_elide_typed_short_match&TestElide.test_elide_typed_short_match7   s#    
 	A5TVW:	
r   c                 :    U R                  [        SSSS9S5        g)r9   r0   zthe quick red foxr1   r2   Nr4   r5   s    r   test_elide_typed_no_match#TestElide.test_elide_typed_no_matchA   s(     	>#
 ;	
r   r   N)	r   r   r   r   r-   r6   r;   r>   r   r   r   r   r   r      s    A


r   r   c                       \ rS rSrS rSrg)TestContextAwareCompletionQ   c                 &   U R                  [        SSS5      S5        U R                  [        SSS5      S5        U R                  [        SSS5      S5        U R                  [        SSS5      S5        U R                  [        SSS5      S5        g )	Nzarg1=z	func1(a=)   arg1zfunc1(a)zfunc1(az%magicfunc2)r   r   r5   s    r   ,test_adjust_completion_text_based_on_contextGTestContextAwareCompletion.test_adjust_completion_text_based_on_contextR   s    4Wk1Mv	

 	4Wj!Lg	
 	4WiKW	
 	4X{ANPX	
 	4Wk1Mw	
r   r   N)r   r   r   r   rG   r   r   r   r   rA   rA   Q   s    
r   rA   c                   0    \ rS rSrSrS rS rS rS rSr	g)	mock_input_helperj   zRMachinery for tests of the main interact loop.

Used by the mock_input decorator.
c                 <    Xl         S U l        [        5       U l        g N)testgen	exceptionr   r   )r   rN   s     r   __init__mock_input_helper.__init__o   s    -r   c                 r    U R                   R                  U l        U R                  U R                   l        U $ rM   )r   prompt_for_codeorig_prompt_for_code
fake_inputr5   s    r   	__enter__mock_input_helper.__enter__t   s)    $(GG$;$;!"&//r   c                 :    U R                   U R                  l        g rM   )rT   r   rS   )r   etypevaluetbs       r   __exit__mock_input_helper.__exit__y   s    "&";";r   c                      [        U R                  5      $ ! [         a    SU R                  l         g  [
        R                  " 5       U l        SU R                  l         g= f)NFr"   )nextrN   StopIterationr   keep_runningsysexc_inforO   r5   s    r   rU   mock_input_helper.fake_input|   sP    	%% 	#(DGG 	 \\^DN#(DGG s    A",A")rO   r   rT   rN   N)
r   r   r   r   __doc__rP   rV   r\   rU   r   r   r   r   rJ   rJ   j   s     

<	r   rJ   c                    ^  U 4S jnU$ )zDecorator for tests of the main interact loop.

Write the test as a generator, yield-ing the input strings, which IPython
will see as if they were typed in at the prompt.
c                   > T" U 5      n[        U5       nUR                  R                  5         S S S 5        WR                  b4  UR                  u  p4nSS KnUR                  U[        R                  S9  AUeg ! , (       d  f       NP= f)Nr   )file)rJ   r   interactrO   	tracebackprint_tbrb   stdout)r   rN   mihrY   rZ   r[   rj   testfuncs          r   test_methodmock_input.<locals>.test_method   ss    4.w'3FFOO ( ==$"}}E"r

3K % ('s   A::
Br   )rn   ro   s   ` r   
mock_inputrq      s     r   c                   0    \ rS rSrS r\S 5       rS rSrg)InteractiveShellTestCase   c                     [        US-
  SS5       Vs/ s H%  nUR                  UR                  5       U-
  5      PM'     sn$ s  snf )z-Get last n readline history entries as a list   )rangeget_history_itemget_current_history_length)r   rlnxs       r   rl_hist_entries(InteractiveShellTestCase.rl_hist_entries   sO     q1ub"-/-A ##B$A$A$Ca$GH-/ 	/ /s   ,Ac              #     #    [        5       nUR                  R                  [        5         [        R
                  " SSS9   Sv   S S S 5        [        R
                  " SSS9   Sv   S S S 5        [        R
                  " SSS9   Sv   S S S 5        UR                  R                  [        5        g ! , (       d  f       Nr= f! , (       d  f       Na= f! , (       d  f       NP= f! UR                  R                  [        5        f = f7f)	N4F)suppressz
print(2*2)zSyntaxError: input containszprint(2345) # syntaxerror16z
print(4*4))r   input_transformers_postappendsyntax_error_transformerttAssertPrintsremover   s     r   !test_inputtransformer_syntaxerror:InteractiveShellTestCase.test_inputtransformer_syntaxerror   s     ]
""))*BC	Hu5## 6 !>O22 P 6## 7 &&--.FG 65 PO 76 &&--.FGsd   *D
C& B3C& $C)C& CC&  D
3
C=C& 
CC& 
C#C& &!DD
c                   ^	 [        5       nUR                  nUR                  S/:X  d   eUR                  R                  (       d   e " S S[
        5      nU" 5       nUR                  U5      u  pVU R                  US[        U5      05         " S SU5      nSm	U	4S jnUR                  R                  R                  S5        S	UR                  R                  S   l        XR                  S'    U" 5       n[        U5        SUR                  R                  S   l        UR                  S	 T	S	:X  d   eg ! SUR                  R                  S   l        UR                  S	 f = f)
Nz
text/plainc                        \ rS rSrS rS rSrg)?InteractiveShellTestCase.test_repl_not_plain_text.<locals>.Test   c                     S[        U 5      -  $ )Nz	<Test %i>)idr5   s    r   __repr__HInteractiveShellTestCase.test_repl_not_plain_text.<locals>.Test.__repr__   s    "RX--r   c                     g)Nz<html>r   r5   s    r   _repr_html_KInteractiveShellTestCase.test_repl_not_plain_text.<locals>.Test._repr_html_   s    r   r   N)r   r   r   r   r   r   r   r   r   r   Testr      s    . r   r   c                       \ rS rSrS rSrg)@InteractiveShellTestCase.test_repl_not_plain_text.<locals>.Test2   c                 0    SSK JnJn  U" U" S5      5        g )Nr   )displayHTMLz<custom>)IPython.displayr   r   )r   r   r   s      r   _ipython_display_RInteractiveShellTestCase.test_repl_not_plain_text.<locals>.Test2._ipython_display_   s    9Z()r   r   N)r   r   r   r   r   r   r   r   r   Test2r      s    *r   r   Fc                     > [        S5        Smg )NzHandler calledT)print)datametadatacalleds     r   handlerBInteractiveShellTestCase.test_repl_not_plain_text.<locals>.handler   s    "#Fr   z	text/htmlT)r   display_formatteractive_typesipython_display_formatterenabledobjectformatr   reprr   
formattersmime_renderersr   )
r   r   	formatterr   objr   _r   r   r   s
            @r   test_repl_not_plain_text1InteractiveShellTestCase.test_repl_not_plain_text   sP   ]((	%%,777 22::::	 6 	  f""3'd3i89	*D 	* 	
 	))00=?C''4<)0+&	/&CCLCHB  ++K8@!!+.~~ DIB  ++K8@!!+.s   3D9 9-E&r   N)	r   r   r   r   r~   rq   r   r   r   r   r   r   rs   rs      s"    /
 H H$-r   rs   c                     U  H7  nUR                  S5      nUS:  d  M  [        S5      nXl        US-   Ul        Ue   U $ )zDTransformer that throws SyntaxError if 'syntaxerror' is in the code.syntaxerrorr   zinput contains "syntaxerror"rv   )findSyntaxErrortextoffset)lineslineposes       r   r   r      sH    ii&!8:;AFQwAHG  Lr   c                       \ rS rSrS rSrg)TerminalMagicsTestCase   c                     [        5       nSnUR                  R                  S   nUR                  USS9  U R	                  UR
                  S   " S5      S5        g)z=Test that code with a blank line doesn't get split (gh-3246).z-def pasted_func(a):
    b = a+1

    return bTerminalMagicsN)namepasted_func6   7   )r   magics_managerregistrystore_or_executer   user_ns)r   r   stms       r   test_paste_magics_blankline2TerminalMagicsTestCase.test_paste_magics_blankline   sZ    ]
 ''(89
AD)M226;r   r   N)r   r   r   r   r   r   r   r   r   r   r      s    <r   r   )re   rb   unittestr(   prompt_toolkit.auto_suggestr   IPython.testingr   r   IPython.terminal.ptutilsr   r   'IPython.terminal.shortcuts.auto_suggestr   TestCaser	   r   rA   r   rJ   rq   rs   r   r   r   r   r   <module>r      s    @   	 > ( U SPh'' P0
!! 0
f
!2!2 
2 :.Fx00 FR	<X.. <r   