
    }e                     h   d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	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mZmZ dd
lmZ ddlmZ  G d de      Z  G d dejB                        Z" G d dejB                        Z# G d dejH                        Z% G d de%      Z&e	jN                  jQ                  dg d      d        Z) G d de%      Z* G d dejH                        Z+ G d dejX                        Z- G d d ejB                        Z. G d! d"ejB                        Z/ G d# d$ejX                        Z0 G d% d&ejB                        Z1 G d' d(ejX                        Z2 G d) d*ejB                        Z3 G d+ d,ejX                        Z4 G d- d.ejB                        Z5d/ Z6 G d0 d1e7      Z8d2 Z9d3 Z: G d4 d5ejB                        Z; G d6 d7ejB                        Z< G d8 d9ejH                        Z=d: Z>d; Z?d< Z@d= ZAd> ZBd? ZC G d@ dAejB                        ZDy)Ba  Tests for the key interactiveshell module.

Historically the main classes in interactiveshell have been under-tested.  This
module should grow as many single-method tests as possible to trap many of the
recurring bugs we seem to encounter with high-level interaction.
    N)mock)join)InputRejected)InputTransformer)interactiveshell)OInfo)skipif
skip_win32onlyif_unicode_pathsonlyif_cmds_exist)tools)find_cmdc                       e Zd Zy)DerivedInterruptN)__name__
__module____qualname__     J/usr/lib/python3/dist-packages/IPython/core/tests/test_interactiveshell.pyr   r   ,   s    r   r   c                   ,   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$ e%jL                  d#      d$        Z'd% Z(d& Z)d' Z*d( Z+d) Z,d* Z-y+),InteractiveShellTestCasec                     t         j                  d       | j                  t         j                  d   d       t         j                  d       | j                  t         j                  d   d       y)z:Test that cells with only naked strings are fully executedz"a"
_az
"""a
b"""
a
bNiprun_cellassertEqualuser_nsselfs    r   test_naked_string_cellsz0InteractiveShellTestCase.test_naked_string_cells0   sL     	GC#.
N#C&1r   c                     t         j                  }t         j                  d      }| j                  t         j                  |       | j                  |j                  d       y)zjJust make sure we don't get a horrible error with a blank
        cell of input. Yes, I did overlook that. Nr   execution_countr   r    )r#   old_xcress      r   test_run_empty_cellz,InteractiveShellTestCase.test_run_empty_cell9   sH     ##kk"o++V4,,d3r   c                 P   dj                  g d      }t        j                  |      }| j                  t        j                  d   d       | j                  t        j                  d   d       | j                  |j
                  d       | j                  |j                  d       y)	z>Multi-block, multi-line cells must execute correctly.
        
)zx=1zy=2zif 1:z
    x += 1z
    y += 1x   y   TN)r   r   r   r    r!   successresult)r#   srcr*   s      r   test_run_cell_multilinez0InteractiveShellTestCase.test_run_cell_multilineA   s     ii ( )
 kk#C!,C!,d+T*r   c                 T   t         j                  d       | j                  t         j                  d   d       t         j                  d      }| j                  t         j                  d   d       | j                  |j                  d       | j                  |j
                  d       y)	z=Code sprinkled with multiline strings should execute (GH-306)ztmp=0tmpr   ztmp=1;"""a
b"""
   Tr   N)r   r   r    r!   r2   r3   r#   r*   s     r   test_multiline_string_cellsz4InteractiveShellTestCase.test_multiline_string_cellsO   sw    
GE*A.kk./E*A.d+V,r   c                    t        t        j                  d         }dD ]b  }t        j                  |d      }t        t        j                  d         }| j	                  ||       | j                  |j                         d d}dD ]O  }t        j                  |d       t        t        j                  d         }|dz  }| j	                  ||z   |       Q y)	zJEnding a line with semicolon should not cache the returned object (GH-307)Out)1;z1;1;Tstore_historyr   )1z1;1r8   N)lenr   r!   r   r    assertIsNoner3   )r#   oldlencellr*   newlenis         r   test_dont_cache_with_semicolonz7InteractiveShellTestCase.test_dont_cache_with_semicolonX   s    RZZ&'" 	*D++d$+7CE*+FVV,cjj)		*
   	/DKKDK1E*+FFAVAXv.		/r   c                 n    t         j                  d      }| j                  |j                  t               y )Nz	raise = 3)r   r   assertIsInstanceerror_before_execSyntaxErrorr9   s     r   test_syntax_errorz*InteractiveShellTestCase.test_syntax_errorh   s&    kk+&c33[Ar   c                 n    t         j                  d      }| j                  |j                  t               y )Nzopen(0)r   r   rI   error_in_exec
ValueErrorr9   s     r   test_open_standard_input_streamz8InteractiveShellTestCase.test_open_standard_input_streaml   &    kk)$c//<r   c                 n    t         j                  d      }| j                  |j                  t               y )Nzopen(1)rN   r9   s     r    test_open_standard_output_streamz9InteractiveShellTestCase.test_open_standard_output_streamp   rR   r   c                 n    t         j                  d      }| j                  |j                  t               y )Nzopen(2)rN   r9   s     r   test_open_standard_error_streamz8InteractiveShellTestCase.test_open_standard_error_streamt   rR   r   c                    t        t        j                  d         }t        j                  dd       t        t        j                  d         }| j	                  |dz   |       | j	                  t        j                  d   d   d       y)z6Verify that In variable grows with user input (GH-284)Inr=   Tr>   r8   N)rA   r   r!   r   r    )r#   rC   rE   s      r   test_In_variablez)InteractiveShellTestCase.test_In_variablex   sj    RZZ%&
D-RZZ%&6*D)"-d3r   c                 t    t         j                  d       | j                  t         j                  d   d       y )Nza = """
%exit
"""r   z
%exit
r   r"   s    r   test_magic_names_in_stringz3InteractiveShellTestCase.test_magic_names_in_string   s'    
)*C+6r   c                 \    t         j                  dd       t         j                  dd       y)z9test that running !(command) does not raise a SyntaxErrorz!(true)
Fz
!(true)


N)r   r   r"   s    r   test_trailing_newlinez.InteractiveShellTestCase.test_trailing_newline   s    
K'
OU+r   c                      G d dt               }ddl}|j                  j                  j	                         } | |        |       g       y)zQPretty-printing lists of objects with non-ascii reprs may cause
        problems.c                       e Zd Zd Zy)2InteractiveShellTestCase.test_gh_597.<locals>.Spamc                      y)Nud   éééééééééééééééééééééééééééééééééééééééééééééééééér   r"   s    r   __repr__z;InteractiveShellTestCase.test_gh_597.<locals>.Spam.__repr__   s     r   N)r   r   r   rc   r   r   r   Spamra      s    !r   rd   r   N)objectIPython.core.formatterscore
formattersPlainTextFormatter)r#   rd   IPythonfs       r   test_gh_597z$InteractiveShellTestCase.test_gh_597   s;    	!6 	! 	'LL##668	46$&/r   c                    t         j                  d       	 t         j                  d       dt         j                  v sJ 	 t         j                  j	                          y# t         j                  j	                          w xY w)z:Check that future flags are used for parsing code (gh-777)z%from __future__ import barry_as_FLUFLzprfunc_return_val = 1 <> 2prfunc_return_valN)r   r   r!   compilereset_compiler_flagsr"   s    r   test_future_flagsz*InteractiveShellTestCase.test_future_flags   sV    
;<	.KK45&"**444 JJ++-BJJ++-s   )A    B c                    t               }|j                          |j                  d       |j                  d       ddlm} t
        j                  d   }|j                  t
        j                  d<   	  ||j                  d         }|t
        j                  d<   | j                  t        |t                     y# |t
        j                  d<   w xY w)z3Can we pickle objects defined interactively (GH-29)zNclass Mylist(list):
    def __init__(self,x=[]):
        list.__init__(self,x)zw=Mylist([1,2,3])r   )dumps__main__wN)get_ipythonresetr   picklers   sysmodulesuser_moduler!   
assertTrue
isinstancebytes)r#   r   rs   _mainr*   s        r   test_can_picklez(InteractiveShellTestCase.test_can_pickle   s    ]


 5 	7 	'( 
 J'"$..J	,

3(C&+CKK
#
3./ ',CKK
#s   4B< <Cc                     t               }|j                  d       |j                  d       |j                  d       | j                  |j                  d   d       y)z@Code in functions must be able to access variables outside them.za = 10zdef f(x):
    return x + az	b = f(12)b   N)rv   r   r    r!   )r#   r   s     r   test_global_nsz'InteractiveShellTestCase.test_global_ns   sJ    ]
H
 ( 	*
K C"-r   c                 H   t         j                  t        fd        | j                  t         j                  t        f       t        j                  dd      5  t         j                  d       ddd       | j                  t         j                  d       y# 1 sw Y   *xY w)zKCheck that InteractiveShell is protected from bad custom exception handlersc                     ddz  S )Nr8   r   r   )etypevaluetbs      r   <lambda>z=InteractiveShellTestCase.test_bad_custom_tb.<locals>.<lambda>   s
    QqS r   Custom TB Handler failedstderrchannelzraise IOError("foo")Nr   )r   set_custom_excIOErrorr    custom_exceptionsttAssertPrintsr   r"   s    r   test_bad_custom_tbz+InteractiveShellTestCase.test_bad_custom_tb   st    
7*&@A--z:__7J 	1KK/0	1--r2	1 	1s   BB!c                 J   t         j                  t        fdd       | j                  t         j                  t        f       t        j                  dd      5  t         j                  d       ddd       | j                  t         j                  d       y# 1 sw Y   *xY w)	z[Check that InteractiveShell is protected from bad return types in custom exception handlersNc                      yNr8   r   )r   r   r   	tb_offsets       r   r   zDInteractiveShellTestCase.test_bad_custom_tb_return.<locals>.<lambda>       r   r   r   r   za=abracadabrar   N)r   r   	NameErrorr    r   r   r   r   r"   s    r   test_bad_custom_tb_returnz2InteractiveShellTestCase.test_bad_custom_tb_return   st    
9,'OP--	|<__7J 	*KK()	*--r2	* 	*s   BB"c                    t               t               t               d}t        j                  |d       |D ]4  }|t        j                  v sJ |       |t        j                  v r/J |        dt        j                  d<   t        j                  |       dD ]4  }|t        j                  vsJ |       |t        j                  vr/J |        t        j                  d   dk(  sJ t        j                          y )N)r   r   cF)interactive   r   )r   r   )re   r   pushr!   user_ns_hidden
drop_by_idrw   )r#   myvarsnames      r   test_drop_by_idz(InteractiveShellTestCase.test_drop_by_id   s    hFH68<
E* 	3D2::%+t+%2,,,2d2,	3 

3
f 	7Drzz)/4/)r0006$60	7 zz#"$$$

r   c                    dt         j                  d<   | j                  t         j                  d      d       | j                  t         j                  d      d       | j                  t         j                  d      d       | j                  t         j                  d      d	       | j                  t         j                  d
      d
       dt         j                  d<   t         j                  d       y )Nu   Cañork   zecho $fu
   echo Cañozecho {f}zecho {f[:-1]}u	   echo Cañz
echo {1*2}zecho 2zgrep x | awk '{print $1}'s   Caño)r   r!   r    
var_expandr"   s    r   test_var_expandz(InteractiveShellTestCase.test_var_expand   s    $

3z2OD{3_E'78.I}5yA'CDFbc(

3
j!r   c                 :   t         j                  d       t        j                  d          }| j                  d|       t         j                  d       dt         j                  d<   t         j                  d       | j                  dt         j                         y	)
z9Test local variable expansion in !system and %magic callszFdef test():
    lvar = "ttt"
    ret = !echo {lvar}
    return ret[0]
testtttzZdef makemacro():
    macroname = "macro_var_expand_locals"
    %macro {macroname} codestr
zstr(12)codestrzmakemacro()macro_var_expand_localsN)r   r   r!   assertInr9   s     r   test_var_expand_localz.InteractiveShellTestCase.test_var_expand_local   sx     	"	
 jj "eS! 	/	

 !*

9
M"/<r   c                     t         j                  d       | j                  dt        j                  d          j	                                y)zTest variable expansion with the name 'self', which was failing.
        
        See https://github.com/ipython/ipython/issues/1878#issuecomment-7698218
        zoclass cTest:
  classvar="see me"
  def test(self):
    res = !echo Variable: {self.classvar}
    return res[0]
zsee mecTestN)r   r   r   r!   r   r"   s    r   test_var_expand_selfz-InteractiveShellTestCase.test_var_expand_self   s:    
 	"	
 	h

7 3 5 : : <=r   c                     | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       y)z-var_expand on invalid formats shouldn't raisez{'a':5}z{asdf}z{1/0}N)r    r   r   r"   s    r   test_bad_var_expandz,InteractiveShellTestCase.test_bad_var_expand  sO     	z2J?y19=x0(;r   c                    t        j                         }t        j                         }t        j                         }t        j                         }||||g}t        j                  j	                  d|       t        j                  j	                  d|       t        j                  j	                  d|       t        j                  j	                  d|       	 t        j                  dd       |j                  sJ |j                  rJ |j                  sJ |j                  rJ t        j                  d       |j                  sJ |j                  sJ |j                  d   \  }|j                  d   \  }| j                  ||j                         |D cg c]  }|j                          c} t        j                  d	       |j                  sJ |j                  sJ |j                  sJ |j                  sJ |j                  d   \  }|j                  d   \  }| j                  ||j                         t        j                  j                  d|       t        j                  j                  d|       t        j                  j                  d|       t        j                  j                  d|       y
c c}w # t        j                  j                  d|       t        j                  j                  d|       t        j                  j                  d|       t        j                  j                  d|       w xY w)z@run_cell(silent=True) doesn't invoke pre/post_run_cell callbackspre_run_cellpre_executepost_run_cellpost_executer@   Tsilentr   zsyntax errorN)r   Mockr   eventsregisterr   called	call_argsr    info
reset_mock
unregister)	r#   pre_explicit
pre_alwayspost_explicitpost_always	all_mocksr   r3   ms	            r   test_silent_postexecz-InteractiveShellTestCase.test_silent_postexec  s   yy{YY[
		iik!:}kJ	
		><8
		=*5
		?M:
		>;7	>KKDK)$$$$#****%%%%$++++ KK&&&& '''' **1-ED#--a0GFT6;;/%./Q\\^/KK'$$$$&&&&%%%% '''' **1-ED#--a0GFT6;;/ II  >II  
;II  -@II  = 0 II  >II  
;II  -@II  =s!   CK K 1BK  K BMc                    t         j                  }t         j                  ddd       | j                  |t         j                         t         j                  dd       | j                  |dz   t         j                         y)z5run_cell(silent=True) doesn't advance execution_countr@   T)r?   r   r>   r8   Nr'   )r#   ecs     r   test_silent_noadvancez.InteractiveShellTestCase.test_silent_noadvanceA  sa    
CtD9R//0 	Ct,Ar112r   c                 t   t        d      t        j                  }|j                  }fd}	 ||_        t        j	                  dd      }| j                  d          | j                  |j                         t        j	                  d       | j                  d          ||_        y# ||_        w xY w)	z1run_cell(silent=True) doesn't trigger displayhookF)r   c                      dd<   y )NTr   r   )argskwargsds     r   failing_hookzHInteractiveShellTestCase.test_silent_nodisplayhook.<locals>.failing_hookT  s    AhKr   r@   Tr   r   N)	dictr   display_traphookr   assertFalserB   r3   r|   )r#   trap	save_hookr   r*   r   s        @r   test_silent_nodisplayhookz2InteractiveShellTestCase.test_silent_nodisplayhookM  s    II		
	"$DI++c$+/CQx[)cjj) KKOOAhK(!DI	DIs   A6B. .	B7c                     ddl m} |d        }t        j                  d      }t	        dddd|d       }| j                  ||       y )	Nr   )register_line_magicc                      y)zA line magicNr   )lines    r   lmagicz>InteractiveShellTestCase.test_ofind_line_magic.<locals>.lmagicf  r   r   r   TFIPython internalfoundisaliasismagic	namespaceobjparent)IPython.core.magicr   r   _ofindr   r    )r#   r   r   lfindr   s        r   test_ofind_line_magicz.InteractiveShellTestCase.test_ofind_line_magicc  sU    :		 
	 		(#(
 	%r   c                     ddl m} |d        }t        j                  d      }t	        dddd|d       }| j                  ||       y )	Nr   )register_cell_magicc                      y)zA cell magicNr   )r   rD   s     r   cmagicz>InteractiveShellTestCase.test_ofind_cell_magic.<locals>.cmagicy  r   r   r   TFr   r   )r   r   r   r   r   r    )r#   r   r   findr   s        r   test_ofind_cell_magicz.InteractiveShellTestCase.test_ofind_cell_magicv  sU    :		 
	 yy"(
 	t$r   c                      G d dt               } |       }t        j                  ddt               fg      }t	        dddd|j
                  |      }| j                  ||       y )Nc                       e Zd Zed        Zy)BInteractiveShellTestCase.test_ofind_property_with_error.<locals>.Ac                     t               r   NotImplementedErrorr"   s    r   foozFInteractiveShellTestCase.test_ofind_property_with_error.<locals>.A.foo      )++r   Nr   r   r   propertyr   r   r   r   Ar         , ,r   r   a.foolocalsTFr   re   r   r   r   r   r   r    r#   r   r   r   r   s        r   test_ofind_property_with_errorz7InteractiveShellTestCase.test_ofind_property_with_error  sc    	, 	,
 C		'Xvx$8#9:
 	%r   c                 8    G d dt               } |       } |       |_         |       |j                  _        t        j                  ddt	               fg      }t        dddd|j                  |j                  j                        }| j                  ||       y )Nc                       e Zd Zed        Zy)IInteractiveShellTestCase.test_ofind_multiple_attribute_lookups.<locals>.Ac                     t               r   r   r"   s    r   r   zMInteractiveShellTestCase.test_ofind_multiple_attribute_lookups.<locals>.A.foo  r   r   Nr   r   r   r   r   r    r   r   r   z	a.a.a.foor   TFr   )re   r   r   r   r   r   r   r    r  s        r   %test_ofind_multiple_attribute_lookupsz>InteractiveShellTestCase.test_ofind_multiple_attribute_lookups  s    	, 	,
 Cc		+68(<'=>3355
 	%r   c                 >    G d dt               } |       }t        j                  ddt               fg      }t	        dddd|j
                  |      }| j                  ||       t        j                  ddt               fg      }t	        dddd d |      }||k(  sJ y )	Nc                       e Zd ZdgZd Zy)AInteractiveShellTestCase.test_ofind_slotted_attributes.<locals>.Ar   c                     d| _         y Nbar)r   r"   s    r   __init__zJInteractiveShellTestCase.test_ofind_slotted_attributes.<locals>.A.__init__  s	     r   N)r   r   r   	__slots__r  r   r   r   r   r    s    I!r   r   r   r   TFr   za.barr  )r#   r   r   r   r   expecteds         r   test_ofind_slotted_attributesz6InteractiveShellTestCase.test_ofind_slotted_attributes  s    	! 	!
 C		'Xvx$8#9:
 	%		'Xvx$8#9:
    r   c                     G d dt               } |       }d|j                  d<   | j                  |j                  d       t        j                  ddt               fg      }| j                  |j                  |j                         y )Nc                       e Zd Zed        Zy)[InteractiveShellTestCase.test_ofind_prefers_property_to_instance_level_attribute.<locals>.Ac                      yr  r   r"   s    r   r   z_InteractiveShellTestCase.test_ofind_prefers_property_to_instance_level_attribute.<locals>.A.foo  s    r   Nr   r   r   r   r   r    s     r   r   bazr   r  r   r   )	re   __dict__r    r   r   r   r   assertIsr   )r#   r   r   r   s       r   7test_ofind_prefers_property_to_instance_level_attributezPInteractiveShellTestCase.test_ofind_prefers_property_to_instance_level_attribute  si    	 	 C!

5&		'Xvx$8#9:eii'r   c                    g dfd	}t         j                  t        f|       	 t         j                  d       | j	                  t        g       t         j                  dd        y # t         j                  dd        w xY w)Nc                 T    j                  |       | j                  |||f|       y N)r   appendshowtracebackshellr   r   r   r   r   s        r   
my_handlerzNInteractiveShellTestCase.test_custom_syntaxerror_exception.<locals>.my_handler  )    MM% r 2iHr   1fr   r   )r   r   rK   r   r    )r#   r#  r   s     @r   !test_custom_syntaxerror_exceptionz:InteractiveShellTestCase.test_custom_syntaxerror_exception  sh    	I 	;.*5	(KKVk]3 b$'Bb$'s   ,A) )Bc                 H   g dfd	}t         j                  t        f|       	 t         j                  d      }| j	                  t        g       | j                  |j                  t               t         j                  dd        y # t         j                  dd        w xY w)Nc                 T    j                  |       | j                  |||f|       y r  r  r!  s        r   r#  zBInteractiveShellTestCase.test_custom_exception.<locals>.my_handler  r$  r   zraise ValueError('test')r   r   )r   r   rP   r   r    rI   rO   )r#   r#  r*   r   s      @r   test_custom_exceptionz.InteractiveShellTestCase.test_custom_exception  s    	I 	:-4	(++89CVj\2!!#"3"3Z@ b$'Bb$'s   AB	 	B!zbuiltins.printc                    g ddt         j                  dffd	}||_        t        j                  j                  t        d d t        d             | j                  |j                  d       | j                  t        d      dg       y )N r-   Fc                 t    j                  |        | t        d      k(  rt        dt        d      ddd      y )N  utf-8r   r8   r&   )r  chrUnicodeEncodeError)r   sependfileflushvaluess        r   mock_print_funczTInteractiveShellTestCase.test_showtraceback_with_surrogates.<locals>.mock_print_func  s7    MM% F#(#f+q!RHH $r   r-  r/   z\ud8ff)
ry   stdoutside_effectr   InteractiveShell_showtracebackr   r/  r    
call_count)r#   mocked_printr6  r5  s      @r   "test_showtraceback_with_surrogatesz;InteractiveShellTestCase.test_showtraceback_with_surrogates  st    '*3::U 	I $3  	))88T4VU00!4#f+y!9:r   c                 F   t         j                         }t        |dd      5 }|j                  d       d d d        t         j                  d      }t        |dd      5 }| j	                  |j                         d       d d d        y # 1 sw Y   WxY w# 1 sw Y   y xY w)Nru   r.  encodingabcblah)datar)r   
mktempfileopenwriter    read)r#   filenamerk   s      r   test_mktempfilez(InteractiveShellTestCase.test_mktempfile  s    ==?(C'2 	aGGEN	 ==f=-(C'2 	/aQVVXv.	/ 	/		 		/ 	/s   B!!BBB c                 r    d}t         j                  d|z  |      }| j                  |j                  |       y )Njiefmwz%s.py)r   new_main_modr    r   )r#   r   mods      r   test_new_main_modz*InteractiveShellTestCase.test_new_main_mod  s/    oohot4t,r   c                     	 t         # t         $ r t        j                         }Y nw xY w| j                  |d       	 t	        d      # t         $ r t        j                         }Y nw xY w| j                  |d       y )NzKeyboardInterrupt
r   z?IPython.core.tests.test_interactiveshell.DerivedInterrupt: foo
)KeyboardInterruptr   get_exception_onlyr    r   )r#   msgs     r   test_get_exception_onlyz0InteractiveShellTestCase.test_get_exception_only  sy    	*##  	*'')C	*34	*"5))  	*'')C	*`as    ((A	 	A)(A)c                     t         j                  d       t         j                  d      }| j                  |t               y )Na = 5r   )r   r   object_inspect_textrI   str)r#   texts     r   test_inspect_textz*InteractiveShellTestCase.test_inspect_text)  s.    
G%%c*dC(r   c                    t         j                  d      }| j                  t         j                         | j	                  t         j
                  j                  d       t         j                  d      }| j                  t         j                         | j                  t         j
                  j                         | j                  t         j
                  j                  t               y)z@ Check that last execution result gets set correctly (GH-10702) za = 5; a   za = x_invalid_id_xN)r   r   r|   last_execution_succeededr    last_execution_resultr3   r   r2   rI   rO   r   r#   r3   s     r   test_last_execution_resultz3InteractiveShellTestCase.test_last_execution_result.  s    Z(3341188!<124451199:b66DDiPr   c                     t         j                  dk7  ryt        j                          dD ]6  }t        j	                  d|z         }| j                  |j                  d       8 y)z6 Check that standard posix aliases work after %reset. posixN)clearmorelessman%T)osr   r   rw   r   r    r2   )r#   cmdr*   s      r   test_reset_aliasingz,InteractiveShellTestCase.test_reset_aliasing9  sO    77g

3 	0C++cCi(CS[[$/	0r   N).r   r   r   r$   r+   r5   r:   rG   rL   rQ   rT   rV   rZ   r\   r^   rl   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r&  r)  r   patchr=  rJ  rO  rT  rZ  r`  rj  r   r   r   r   r   /   s    24+-/ B===47,
.0,.33"=,><*>X
3",&&%&&&&*!:	(((" TZZ !; ";$/-b)
	Q0r   r   c                   2    e Zd Zed        Zd Zed        Zy)TestSafeExecfileNonAsciiPathc                    t        j                         | _        t        | j                  d      | _        t        j                  | j                         t        t        | j                  d      dd      5 }|j                  d       d d d        t        j                         | _
        t        j                  | j                         d| _        y # 1 sw Y   IxY w)Nu   åäöu   åäötestscript.pyru   r.  r?  zpass
)tempfilemkdtempBASETESTDIRr   TESTDIRrh  mkdirrF  rG  getcwdoldpathchdirfname)r#   sfiles     r   setUpz"TestSafeExecfileNonAsciiPath.setUpF  s    #++-D,,i8
45sW
 	"KK!	" yy{
+
	" 	"s   6CCc                     t        j                  | j                         t        j                  | j
                         y r   )rh  rv  ru  shutilrmtreerq  r"   s    r   tearDownz%TestSafeExecfileNonAsciiPath.tearDownS  s$    
d&&'r   c                 H    t         j                  | j                  i d       y)z/Test safe_execfile with non-ascii path
        T)raise_exceptionsN)r   safe_execfilerw  r"   s    r   test_1z#TestSafeExecfileNonAsciiPath.test_1W  s     	R$?r   N)r   r   r   r   ry  r}  r  r   r   r   rm  rm  D  s/    
, 
,( @ @r   rm  c                   f    e Zd Zd Zd Zd Z e eed             d        Z	 e
d      d        Zy)	ExitCodeChecksc                 .    t         j                  | _        y r   )r   
system_rawsystemr"   s    r   ry  zExitCodeChecks.setUp_  s    mmr   c                 l    | j                  d       | j                  t        j                  d   d       y )Nzexit 0
_exit_coder   r  r    r   r!   r"   s    r   test_exit_code_okz ExitCodeChecks.test_exit_code_okb  '    HL115r   c                 l    | j                  d       | j                  t        j                  d   d       y )Nzexit 1r  r8   r  r"   s    r   test_exit_code_errorz#ExitCodeChecks.test_exit_code_errorf  r  r   SIGALRMc                     | j                  d       | j                  t        j                  d| j                         | j                  t        j                  d   t        j                          y )NzLimport signal, time
signal.setitimer(signal.ITIMER_REAL, 0.1)
time.sleep(1)
r+  r  )
mktmpr  ry   
executablerw  r    r   r!   signalr  r"   s    r   test_exit_code_signalz$ExitCodeChecks.test_exit_code_signalj  sM    

 % 	& 	s~~tzz:;L1FNN?Cr   cshc                 D   t         j                  j                  dd       }t        d      t         j                  d<   	 | j	                          ||t         j                  d<   y t         j                  d= y # ||t         j                  d<   w t         j                  d= w xY w)NSHELLr  )rh  environgetr   r  )r#   r  s     r   test_exit_code_signal_cshz(ExitCodeChecks.test_exit_code_signal_cshr  s}    

w-&uo

7	(&&( &+

7#JJw'  &+

7#JJw's   A6 6)BN)r   r   r   ry  r  r  r	   hasattrr  r  r   r  r   r   r   r  r  ]  sO    $66 	**+D ,D u	( 	(r   r  c                        e Zd Z fdZed        Z ej                  de       ej                  de      d               Z	 xZ
S )TestSystemRawc                 L    t         |           t        j                  | _        y r   )superry  r   r  r  r#   	__class__s    r   ry  zTestSystemRaw.setUp  s    mmr   c                 2    d}t         j                  |       y)z+Test system_raw with non-ascii cmd
        u   python -c "'åäö'"   N)r   r  )r#   ri  s     r   r  zTestSystemRaw.test_1  s     -
cr   subprocess.call)r8  	os.systemc                     	 | j                  d       | j                  t        j
                  d   t        j                          y # t        $ r | j                  d       Y Ow xY w)Nzsleep 1 # wont happenzDsystem call should intercept keyboard interrupt from subprocess.callr  )r  rQ  failr    r   r!   r  SIGINT)r#   mockss     r   test_control_czTestSystemRaw.test_control_c  sW    	KK/0 	L1FMM>B ! 	II:	s   A A#"A#)r   r   r   ry  r   r  r   rk  rQ  r  __classcell__r  s   @r   r  r    sX    $   TZZ!/@ATZZ):;C < BCr   r  	magic_cmd)pipcondacdc                    t         j                  dk(  rd}| t               }}n/d}| t        dt        j                  j                  dd             }}t        j                  |d      5 }t        j                  t        d	
      5  t        j                  |        d d d         |j                  |fi | d d d        y # 1 sw Y   %xY w# 1 sw Y   y xY w)Nwin32r  r  Tr  )r"  r  r   return_valuezYou executed the system command)match)ry   platformr   rh  r  r  r   rk  pytestwarnsWarningr   r  assert_called_once_with)r  to_mockexpected_argexpected_kwargsmock_subs        r   test_magic_warningsr    s    
||w(146o#(142::>>'4#@4
o 
G!	, J\\')KL 	%MM)$	%(((IIJ J	% 	%J Js$   )CB?C?C	CCc                   N     e Zd Z fdZed        Zed        Zed        Z xZS )TestSystemPipedExitCodec                 L    t         |           t        j                  | _        y r   )r  ry  r   system_pipedr  r  s    r   ry  zTestSystemPipedExitCode.setUp  s    oor   c                 .    t         j                  |        y r   )r  r  r"   s    r   r  z)TestSystemPipedExitCode.test_exit_code_ok  s    ((.r   c                 .    t         j                  |        y r   )r  r  r"   s    r   r  z,TestSystemPipedExitCode.test_exit_code_error  s    ++D1r   c                 .    t         j                  |        y r   )r  r  r"   s    r   r  z-TestSystemPipedExitCode.test_exit_code_signal  s    ,,T2r   )	r   r   r   ry  r
   r  r  r  r  r  s   @r   r  r    sD    & / / 2 2 3 3r   r  c                       e Zd Zd Zy)TestModulesc                 j    | j                  d       d}t        j                  | j                  |       y)zETest we're not loading modules on startup that we shouldn't.
        zoimport sys
print('numpy' in sys.modules)
print('ipyparallel' in sys.modules)
print('ipykernel' in sys.modules)
zFalse
False
False
N)r  r   ipexec_validaterw  )r#   outs     r   test_extraneous_loadsz!TestModules.test_extraneous_loads  s0     	

 9 	
 &
4::s+r   N)r   r   r   r  r   r   r   r  r    s    	,r   r  c                       e Zd ZdZd Zd Zy)Negatorz&Negates all number literals in an AST.c                 *    |j                    |_         |S r   )nr#   nodes     r   	visit_NumzNegator.visit_Num  s    &&r   c                 \    t        |j                  t              r| j                  |      S |S r   r}   r   intr  r  s     r   visit_ConstantzNegator.visit_Constant  $    djj#&>>$''r   Nr   r   r   __doc__r  r  r   r   r   r  r    s    0r   r  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestAstTransformc                 t    t               | _        t        j                  j	                  | j                         y r   )r  negatorr   ast_transformersr  r"   s    r   ry  zTestAstTransform.setUp  s#    y
""4<<0r   c                 V    t         j                  j                  | j                         y r   )r   r  remover  r"   s    r   r}  zTestAstTransform.tearDown  s    
""4<<0r   c                     t        j                  d      5  t        j                  d       d d d        y # 1 sw Y   y xY w)Nhellozprint("hello")r   r   r   r   r"   s    r   test_non_int_constz#TestAstTransform.test_non_int_const  s0    __W% 	*KK()	* 	* 	*s   5>c                 &   t        j                  d      5  t        j                  d       d d d        dt        j                  d<   t        j
                  d      5  t        j                  d       d d d        y # 1 sw Y   PxY w# 1 sw Y   y xY w)Nz-34zprint(12 + 22)7   r  z-55zprint(n))r   r   r   r   r!   AssertNotPrintsr"   s    r   test_run_cellzTestAstTransform.test_run_cell  ss    __U# 	*KK()	* 

3& 	$KK
#	$ 	$	* 	*
	$ 	$s   A;B;BBc                    t               fd}t        j                  d|i       t        j                  d      5  t        j                  dd       d d d        | j                  dh       j                          t        j                  d      5  t        j                  ddd       d d d        | j                  d	d
h       y # 1 sw Y   vxY w# 1 sw Y   *xY w)Nc                 (    j                  |        y r   addr.   r   s    r   rk   z'TestAstTransform.test_timeit.<locals>.f      JJqMr   rk   std. dev. oftimeit-n1 f(1)rY   -n1 f(2)f(3)	setr   r   r   r   run_line_magicr    rc  run_cell_magicr#   rk   r   s     @r   test_timeitzTestAstTransform.test_timeit  s    	
Q__^, 	4h
3	4"&__^, 	<h
F;	<"b*	4 	4
	< 	<   C	C	CCc                    g fd}t         j                  d|i       t        j                  d      5  t         j	                  dd       d d d        | j                  dg       g d d  t        j                  d      5  t         j	                  dd       d d d        | j                  dg       y # 1 sw Y   ixY w# 1 sw Y   )xY w)	Nc                 (    j                  |        y r   )r  r  s    r   rk   z%TestAstTransform.test_time.<locals>.f  s    MM!r   rk   zWall time: timezf(5+9)iza = f(-3 + -2)r\  )r   r   r   r   r  r    r  s     @r   	test_timezTestAstTransform.test_time  s    	
Q __]+ 	0fh/	0#'q	 __]+ 	8f&67	8!%	0 	0	8 	8s   B4C 4B= C	c                 Z   t         j                  ddi       t         j                  dd       t        j                  d      5  t         j                  d       d d d        t        j                  d      5  t         j                  d       d d d        y # 1 sw Y   =xY w# 1 sw Y   y xY w)Nr   
   amacroza+=1
print(a)98)r   r   define_macror   r   r   r"   s    r   
test_macrozTestAstTransform.test_macro
  s    
R
"23__S! 	"KK!	"__S! 	"KK!	" 	"	" 	"	" 	"s   B6B!B!B*N)
r   r   r   ry  r}  r  r  r  r  r  r   r   r   r  r    s%    11*$+&""r   r  c                       e Zd Zd Zy)TestMiscTransformc                    ddfd}fd}t         j                  j                  j                  |       t         j                  j                  j                  |       t         j                  d       dk(  sJ dk(  sJ y )Nr   c                     dz  | S r   r   )linescleanups    r   count_cleanupzATestMiscTransform.test_transform_only_once.<locals>.count_cleanup  s    qLGLr   c                     dz  | S r   r   )r  line_ts    r   count_line_tz@TestMiscTransform.test_transform_only_once.<locals>.count_line_t  s    aKFLr   r@   r8   )r   input_transformer_managercleanup_transformsr  line_transformsr   )r#   r  r  r  r  s      @@r   test_transform_only_oncez*TestMiscTransform.test_transform_only_once  sq    	
	
 	$$77>>}M
$$44;;LI
C!||{{r   N)r   r   r   r  r   r   r   r  r    s    r   r  c                       e Zd ZdZd Zd Zy)IntegerWrapperz)Wraps all integers in a call to Integer()c                     t        |j                  t              r@t        j                  t        j
                  dt        j                               |gg       S |S )NInteger)idctx)funcr   keywords)r}   r  r  astCallNameLoadr  s     r   r  zIntegerWrapper.visit_Num2  s@    dffc"88YCHHJ!G"&"6 6r   c                 \    t        |j                  t              r| j                  |      S |S r   r  r  s     r   r  zIntegerWrapper.visit_Constant9  r  r   Nr  r   r   r   r  r  ,  s    3
r   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestAstTransform2c                      t                _        t        j                  j	                   j                         g  _         fd}t        j                  d|i       y )Nc                  >    j                   j                  |        | S r   )callsr  )r   r#   s    r   r  z(TestAstTransform2.setUp.<locals>.IntegerE  s    JJd#Kr   r  )r  
intwrapperr   r  r  r&  r   )r#   r  s   ` r   ry  zTestAstTransform2.setUp@  sD    (*
""4??3
	 	G$%r   c                 x    t         j                  j                  | j                         t         j                  d= y )Nr  )r   r  r  r'  r!   r"   s    r   r}  zTestAstTransform2.tearDownJ  s&    
""4??3JJy!r   c                     t         j                  d       | j                  | j                  dg       t         j                  d       | j                  t         j                  d   d       y )Nzn = 2r/   zo = 2.0og       @)r   r   r    r&  r!   r"   s    r   r  zTestAstTransform2.test_run_cellN  sJ    
GdV, 	IC#.r   c                 P    t         j                  d       | j                  g k(  sJ y )Nzn = 'a')r   r   r&  r"   s    r   test_run_cell_non_intz'TestAstTransform2.test_run_cell_non_intV  s     
IzzRr   c                    t               fd}t        j                  d|i       t        j                  d      5  t        j                  dd       d d d        | j                  dh       j                          t        j                  d      5  t        j                  ddd       d d d        | j                  d	d
h       y # 1 sw Y   vxY w# 1 sw Y   *xY w)Nc                 (    j                  |        y r   r  r  s    r   rk   z(TestAstTransform2.test_timeit.<locals>.f\  r  r   rk   r  r  r  )r8   r  r  r*  )r1   r  r  s     @r   r  zTestAstTransform2.test_timeitZ  s    	
Q__^, 	4h
3	4$(__^, 	<h
F;	<$.	4 	4
	< 	<r  N)r   r   r   ry  r}  r  r-  r  r   r   r   r#  r#  ?  s    &"/ /r   r#  c                       e Zd ZdZd Zy)ErrorTransformerz&Throws an error when it sees a number.c                 P    t        |j                  t              rt        d      |S Nr   )r}   r   r  rP   r  s     r   r  zErrorTransformer.visit_Constantl  s     djj#&V$$r   Nr   r   r   r  r  r   r   r   r1  r1  i  s
    0r   r1  c                       e Zd Zd Zy)TestAstTransformErrorc                    t               }t        j                  j                  |       | j	                  t
        d      5  t        j                  d       d d d        | j                  |t        j                         y # 1 sw Y   *xY w)NzIt will be unregistered1 + 2)r1  r   r  r  assertWarnsRegexUserWarningr   assertNotIn)r#   err_transformers     r   test_unregisteringz(TestAstTransformError.test_unregisterings  sh    *,
""?3"";0IJ 	!KK 	! 	"*=*=>		! 	!s    A??BN)r   r   r   r=  r   r   r   r6  r6  r  s    ?r   r6  c                       e Zd ZdZd Zy)StringRejectorzThrows an InputRejected when it sees a string literal.

    Used to verify that NodeTransformers can signal that a piece of code should
    not be executed by throwing an InputRejected.
    c                 P    t        |j                  t              rt        d      |S r3  )r}   r   rX  r   r  s     r   r  zStringRejector.visit_Constant  s     djj#&''r   Nr4  r   r   r   r?  r?  ~  s    r   r?  c                       e Zd Zd Zd Zd Zy)TestAstTransformInputRejectionc                 t    t               | _        t        j                  j	                  | j                         y r   )r?  transformerr   r  r  r"   s    r   ry  z$TestAstTransformInputRejection.setUp  s'    )+
""4#3#34r   c                 V    t         j                  j                  | j                         y r   )r   r  r  rD  r"   s    r   r}  z'TestAstTransformInputRejection.tearDown  s    
""4#3#34r   c                    t        j                  d      }t        j                  dd      }|5  |5  t        j	                  d       ddd       ddd       |5  |5  t        j	                  d      }ddd       ddd       | j                  j                  t               y# 1 sw Y   ]xY w# 1 sw Y   axY w# 1 sw Y   JxY w# 1 sw Y   NxY w)z-Check that NodeTransformers can reject input.zInputRejected: testz'unsafe'F)suppressN)r   r   r  r   r   rI   rJ   r   )r#   expect_exception_tbexpect_no_cell_outputr*   s       r   test_input_rejectionz3TestAstTransformInputRejection.test_input_rejection  s     !oo.CD " 2 2: N ! 	$"7 	$KK
#	$ 	$ ! 	*"7 	*++j)C	* 	* 	c33]C	$ 	$ 	$ 	$	* 	* 	* 	*sF   B0B$B0CB<3C$B-	)B00B9<C	CCN)r   r   r   ry  r}  rJ  r   r   r   rB  rB    s    55Dr   rB  c                      t          y r   )__IPYTHON__r   r   r   test__IPYTHON__rM    s    r   c                       e Zd Zd Zd Zd Zy)	DummyReprc                      y)NrO  r   r"   s    r   rc   zDummyRepr.__repr__  s    r   c                      y)Nz<b>dummy</b>r   r"   s    r   _repr_html_zDummyRepr._repr_html_  s    r   c                     dddifS )Nzconsole.log('hi');keyr   r   r"   s    r   _repr_javascript_zDummyRepr._repr_javascript_  s    #eW%555r   N)r   r   r   rc   rR  rU  r   r   r   rO  rO    s    6r   rO  c                     t         j                  j                  t         j                  _        t	               xt         j
                  d<   } ddh}t         j                  |D ci c]  }|| c}      }|t        |j                               k(  sJ |d   }h dt        |j                               k(  sJ |d   dk(  sJ |d   }|d   }|j                  d      | j                         k(  sJ | j                         \  }}|j                  d	      |k(  sJ |j                  d	      |k(  sJ |d   }	|	d   d
k(  sJ |	d   dk(  sJ dgt         j                  _        y c c}w )Ndummydoesnotexist>   rC  statusmetadatarY  okrC  rZ  z	text/htmlzapplication/javascripterrorenamer   
text/plain)r   display_formatterformat_typesactive_typesrO  r!   user_expressionsr  keysr  rR  rU  )
r   rc  rT  rD  rW  rC  rZ  jsjsmddnes
             r   test_user_variablesrg    s]   (*(<(<(I(IB%'k)BJJw!^$D
6#c#g67A3qvvx=   gJE)S->>>>?d"""=DZ H88K AMMO333""$HB88,-333<<01T999
N
Cx=G###w<;&&& *6B%% 7s   "
Ec                  "   t         j                  j                  t         j                  _        ddd} t         j	                  |       }dd l}|j                  |       t        |j                               t        | j                               k(  sJ |d   }h dt        |j                               k(  sJ |d   dk(  sJ |d	   }|d
   }|j                  d      dk(  sJ |d   }|d   dk(  sJ |d   dk(  sJ dgt         j                  _        y )Nr8  z1/0)r   r   r   r   >   rC  rY  rZ  rY  r[  rC  rZ  r^  3r   r\  r]  ZeroDivisionError)	r   r_  r`  ra  rb  pprintr  rc  r  )queryrD  rk  r   rC  rZ  r   s          r   test_user_expressionrm    s	   (*(<(<(I(IB%E 	E"A
MM!qvvx=C

----	#A)S]:::X;$V9D}H88L!S(((	#AX;'!!!W:,,,, *6B%r   c                   2    e Zd ZdZed        Zd Zd Zd Zy)TestSyntaxErrorTransformerzNCheck that SyntaxError raised by an input transformer is handled by run_cell()c                 |    | D ]6  }|j                  d      }|dk\  st        d      }||_        |dz   |_        | | S )Nsyntaxerrorr   zinput contains "syntaxerror"r8   )r   rK   rY  offset)r  r   poses       r   rD  z&TestSyntaxErrorTransformer.transformer  sO     	D))M*Cax >?7	 r   c                 V    t         j                  j                  | j                         y r   )r   input_transformers_postr  rD  r"   s    r   ry  z TestSyntaxErrorTransformer.setUp      
""))$*:*:;r   c                 V    t         j                  j                  | j                         y r   )r   rv  r  rD  r"   s    r   r}  z#TestSyntaxErrorTransformer.tearDown  rw  r   c                    t        j                  d      5  t        j                  d       d d d        t        j                  d      5  t        j                  d       d d d        t        j                  d      5  t        j                  d       d d d        t        j                  d      5  t        j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   |xY w# 1 sw Y   UxY w# 1 sw Y   y xY w)N1234zSyntaxError: invalid syntaxz1 2 3z)SyntaxError: input contains "syntaxerror"z2345  # syntaxerror3456r  r"   s    r   "test_syntaxerror_input_transformerz=TestSyntaxErrorTransformer.test_syntaxerror_input_transformer  s    __V$ 	 KK	 __:; 	!KK 	!__HI 	/KK-.	/__V$ 	 KK	  	 	  	 	! 	!	/ 	/	  	 s/   C	C<C&/C2CC#&C/2C;N)	r   r   r   r  staticmethodrD  ry  r}  r|  r   r   r   ro  ro    s&    X << r   ro  c                       e Zd Zd Zd Zy)TestWarningSuppressionc                    t         j                  d       	 | j                  t        d      5  t         j                  d       d d d        | j                  t        d      5  t         j                  d       d d d        t         j                  d       y # 1 sw Y   SxY w# 1 sw Y   +xY w# t         j                  d       w xY w)Nzimport warningsasdfzwarnings.warn('asdf')del warnings)r   r   r9  r:  r"   s    r   test_warning_suppressionz/TestWarningSuppression.test_warning_suppression  s    
%&	(&&{F; 5345 &&{F; 5345 KK'5 55 5 KK's:   B- BB- !B!7B- BB- !B*&B- -Cc                 b   t         j                  d       	 | j                  t        d      5  t         j                  d       d d d        t         j                  d       t         j                  d       y # 1 sw Y   4xY w# t         j                  d       t         j                  d       w xY w)Nzs
import warnings
def wrn():
    warnings.warn(
        "I AM  A WARNING",
        DeprecationWarning
    )
        I AM  A WARNINGwrn()r  del wrn)r   r   r9  DeprecationWarningr"   s    r   test_deprecation_warningz/TestWarningSuppression.test_deprecation_warning  s    
  		#&&'9;LM %G$% KK'KK	"	% % KK'KK	"s"   B A6B 6A?;B ,B.N)r   r   r   r  r  r   r   r   r  r    s    ( #r   r  c                   $     e Zd Z fdZd Z xZS )TestImportNoDeprecatec                 D    | j                  d       t        | 	          y)zMake a valid python temp file.zk
import warnings
def wrn():
    warnings.warn(
        "I AM  A WARNING",
        DeprecationWarning
    )
N)r  r  ry  r  s    r   ry  zTestImportNoDeprecate.setUp+  s    

  	 	r   c                    t         j                  dj                  | j                               t	        j
                  d      5  t         j                  d       ddd       t         j                  d       y# 1 sw Y   xY w)zQ
        No deprecation warning should be raised from imported functions
        zfrom {} import wrnr  r  Nr  )r   r   formatrw  r   r  r"   s    r   test_no_depz!TestImportNoDeprecate.test_no_dep7  s\     	(//

;< 12 	!KK 	!
I	! 	!s   A88B)r   r   r   ry  r  r  r  s   @r   r  r  )  s    
r   r  c                  2   t        j                  d       } t        j                  t        f|        t        j
                  }t        j                  dd       t        j                  dd        | j                  dk(  sJ t        j
                  |dz   k(  sJ y )Nr  z	def foo()Tr>   r   r8   )r   r   r   r   rK   r(   r   r;  )r   befores     r   test_custom_exc_countr  B  sw    99$'D{nd+FKK4K0b$??a!+++r   c                  *   t         j                  d       t         j                  d      } t        j                  |       sJ t        j
                         }|j                  |       }t        |t        j                        sJ |j                  dk(  sJ y )Nimport asynciozawait asyncio.sleep(0.01)
5r\  )r   r   run_cell_asyncasyncioiscoroutinenew_event_looprun_until_completer}   r   ExecutionResultr3   )coroloopr3   s      r   test_run_cell_asyncr  M  s{    KK !;<Dt$$$!!#D$$T*Ff.>>???==Ar   c                      t         j                  d       t         j                  d      } t         j                  d   dk(  sJ y )Nr  zawait asyncio.sleep(0.01); 10r   r  r   r   r!   r3   s    r   test_run_cell_awaitr  W  s4    KK ![[89F::c?b   r   c                  <   t         j                  d       t         j                  d      } t         j                  d   dk(  sJ t         j                  d      } t         j                  d   dk(  sJ t         j                  d      } t         j                  d   dk(  sJ y )	Nr  zawait asyncio.sleep(0.01); 1r   r8   z#asyncio.run(asyncio.sleep(0.01)); 2r/   zawait asyncio.sleep(0.01); 3r1   r  r  s    r   test_run_cell_asyncio_runr  ]  s~    KK ![[78F::c?a[[>?F::c?a[[78F::c?ar   c                      t         j                  dd      rJ t         j                  dd      sJ t         j                  dd      sJ y )NrV  )transformed_cellzawait xz&import asyncio; await asyncio.sleep(1))r   should_run_asyncr   r   r   test_should_run_asyncr  g  sW    ""7W"EEEy9EEE0A    r   c                  n   t        t        j                  j                        } d }t        j	                  |d       t        t        j                  j                        | dz   k(  sJ t        j                  j                  d          dk(  sJ t        j                  j
                  j                          y )Nc                       y)NI'm a completer!r   )r   r   s     r   r   z&test_set_custom_completer.<locals>.foos  s    !r   r   r8   r  )rA   r   	Completermatchersset_custom_completercustom_matcherspop)num_completersr   s     r   test_set_custom_completerr  p  s    ../N" C# r||$$%!);;;; <<  #%);;;; LL  $$&r   c                   (    e Zd ZdZd Zd Zd Zd Zy)TestShowTracebackAttackzTest that the interactive shell is resilient against the client attack of
    manipulating the showtracebacks method. These attacks shouldn't result in an
    unhandled exception in the kernel.c                 B    t         j                  j                  | _        y r   )r   r9  r   orig_showtracebackr"   s    r   ry  zTestShowTracebackAttack.setUp  s    "2"C"C"Q"Qr   c                 B    | j                   t        j                  _        y r   )r  r   r9  r   r"   s    r   r}  z TestShowTracebackAttack.tearDown  s    :>:Q:Q))7r   c                     t         j                  d      }t        |       |j                  J t	        |j
                  t              sJ t        |j
                        dk(  sJ y)z:Test the case of the client setting showtracebacks to Nonez
            import IPython.core.interactiveshell
            IPython.core.interactiveshell.InteractiveShell.showtraceback = None

            assert False, "This should not raise an exception"
        Nz!'NoneType' object is not callable)r   r   printr3   r}   rO   	TypeErrorrX  r_  s     r   test_set_show_tracebacks_nonez5TestShowTracebackAttack.test_set_show_tracebacks_none  s`     
 	f}}$$$&..	:::6''(,OOOOr   c                     t         j                  d      }t        |       |j                  J t	        |j
                  t              sJ t        |j
                        dk(  sJ y)zDTest the case of the client setting showtracebacks to a no op lambdaz
            import IPython.core.interactiveshell
            IPython.core.interactiveshell.InteractiveShell.showtraceback = lambda *args, **kwargs: None

            assert False, "This should not raise an exception"
        Nz"This should not raise an exception)r   r   r  r3   r}   rO   AssertionErrorrX  r_  s     r   test_set_show_tracebacks_noopz5TestShowTracebackAttack.test_set_show_tracebacks_noop  s`     
 	f}}$$$&..???6''(,PPPPr   N)r   r   r   r  ry  r}  r  r  r   r   r   r  r    s    *RRP"Qr   r  )Er  r  r  rh  r  r{  ry   ro  unittestr  r   os.pathr   IPython.core.errorr   IPython.core.inputtransformerr   IPython.corer   IPython.core.oinspectr   IPython.testing.decoratorsr	   r
   r   r   IPython.testingr   r   IPython.utils.processr   rQ  r   TestCaser   rm  TempFileMixinr  r  markparametrizer  r  r  NodeTransformerr  r  r  r  r#  r1  r6  r?  rB  rM  re   rO  rg  rm  ro  r  r  r  r  r  r  r  r  r  r   r   r   <module>r     s    
 	   
      , : ) '  ( *	( 	R0x00 R0j@8#4#4 @2(R%% (DCN C4 &<=J >J"3n 3$
,""" 
,
c!! 
="x(( ="~)) 0S(( &(/)) (/Ts** 	?H-- 	?
S(( 
DX%6%6 D2
6 67474 !2!2  >#X.. #DB,, 2,! '$+Qh// +Qr   