U
    /e)                     @   s   d dl Z d dlZddlmZmZmZ d aed d!ddZej	dd	 Z
ej	d
d Zdd Zdd Zdd Zdd Zejje jdkdddd Zdd Zdd Zdd Zdd  ZdS )"    N   )TIMEOUT	get_reply
new_kernelZdebugpyFc                 C   sV   t d7 a | jddt ||pi d}| j| t| |d d dd}|rN|S |d	 S )
zrCarry out a debug request and return the reply content.

    It does not check if the request was successful.
    r   Zdebug_requestrequest)typeseqcommand	argumentsheadermsg_idcontrol)Zchannelcontent)r   sessionmsgZcontrol_channelsendr   )kernelr	   r
   
full_replyr   reply r   A/tmp/pip-unpacked-wheel-g43y689f/ipykernel/tests/test_debugger.pywait_for_debug_request   s    	r   c               	   c   s   t  } | V  W 5 Q R X d S )N)r   )Zkcr   r   r   r   #   s    r   c                 c   sP   t | dddddddddddd
 t | d	 z
| V  W 5 t | d
ddd X d S )N
initializetest-client
testClient pathTen
ZclientIDZ
clientNameZ	adapterIDZ
pathFormatZlinesStartAt1ZcolumnsStartAt1ZsupportsVariableTypeZsupportsVariablePagingZsupportsRunInTerminalRequestlocaleattachZ
disconnectF)ZrestartZterminateDebuggee)r   )r   r   r   r   kernel_with_debug)   s&    

r!   c                 C   s2   t | dddddddddddd
}|d	 s.td S )
Nr   r   r   r   r   Tr   r   successr   AssertionError)r   r   r   r   r   test_debug_initializeG   s     r%   c                 C   s6   t | dddd}|d st|d d dks2td S )	Nevaluatez	'a' + 'b'repl)Z
expressioncontextr"   bodyresultr   r#   )r!   r   r   r   r   test_attach_debug[   s      r+   c                 C   s   d}t | dd|i}|d d }t | dddigd	|id
d}|d sJtt|d d dksbt|d d d d szt|d d d d d	 |kstt | d}|tdd |d d kstt | d}|d std S )N0def f(a, b):
    c = a + b
    return c

f(2, 3)dumpCellcoder)   
sourcePathsetBreakpointsline   r   FbreakpointssourceZsourceModifiedr"   r4   r   r   Zverifiedr5   	debugInfoc                 S   s   | d S )Nr5   r   )br   r   r   <lambda>|       z&test_set_breakpoints.<locals>.<lambda>configurationDone)r   r$   lenmap)r!   r.   rr5   r   r   r   r   test_set_breakpointsc   s&    	 

r>   c                 C   s   d}t | dd|i}|d d }t | d t | ddd	igd
|idd t | ddd | | di d}|ddks|d ddkr| jtd}qj|d d d dkstd S )Nr,   r-   r.   r)   r/   r6   r0   r1   r2   r   Fr3   r:   Tr   r   msg_typer   rA   debug_eventr   eventstoppedtimeoutreason
breakpointr   executegetget_iopub_msgr   r$   r!   r.   r=   r5   r   r   r   r   test_stop_on_breakpoint   s$    



 rN   )   
   z!TODO Does not work on Python 3.10)rG   c                 C   s   d}t | dd|i}|d d }t | d t | ddd	igd
|idd t | ddd | | di d}|ddks|d ddkr| jtd}qj|d d d dkstd S )Nz1
def f(a, b):
    c = a + b
    return c

f(2, 3)r-   r.   r)   r/   r6   r0   r1      r   Fr3   r:   Tr?   r   r@   rA   rB   r   rC   rD   rE   rG   rH   rI   rM   r   r   r   0test_breakpoint_in_cell_with_leading_empty_lines   s$    



 rR   c                 C   s   d}d}| d| d| d}|  |}t| | t| d}|ttdd |d	 d
 ks^tt| dd|i}|d	 d dd| dikstd S )NtextzHello the worldz='z'
print(z)
ZinspectVariablesc                 S   s   | d S )Nnamer   )vr   r   r   r8      r9   z5test_rich_inspect_not_at_breakpoint.<locals>.<lambda>r)   	variablesrichInspectVariablesvariableNamedata
text/plain')rJ   r   r   listr<   r$   )r!   var_namevaluer.   r   r=   r   r   r   r   #test_rich_inspect_not_at_breakpoint   s    


"r_   c           	      C   s>  d}t | dd|i}|d d }t | dddigd	|id
d t | d}t | d}| | di d}|ddks|d ddkr| jtd}qft | dddid d }t | dd|d d id d }t | ddttd d! |d id d }t | d"|d d# |d d d$}|d d% d&|d d' iks:td S )(Nr,   r-   r.   r)   r/   r0   r1   r2   r   Fr3   r6   r:   r   r@   rA   rB   r   rC   rD   rE   
stackTracethreadIdr   stackFramesscopesframeIdr   idrV   variablesReferencec                 S   s   | d dkS NrT   ZLocalsr   sr   r   r   r8   	  r9   z1test_rich_inspect_at_breakpoint.<locals>.<lambda>rW   rT   )rX   rd   rY   rZ   r^   r   rJ   rK   rL   r   nextfilterr$   )	r!   r.   r=   r5   r   stacksrc   locals_r   r   r   r   test_rich_inspect_at_breakpoint   sX    




  
ro   c                  C   s"   t jdkrddlm}  | t d S )Nwin32r   _convert_to_long_pathname)sysplatformZipykernel.compilerrr   __file__rq   r   r   r   test_convert_to_long_pathname  s    
rv   c                 C   s  d}d}d| d}t | dd|i}|d d }t | d	d
digd|idd t | d t | d | | di d}|ddks|d ddkr| jtd}qvt | dddid d }|d d }t | d|||d  t | d!d"|id d! }	t | d#d$ttd%d& |	d$ id d# }
d }|
D ]}||d' kr&|}q&|d k	sNtt | d#d$ttd(d& |	d$ id d# }d }|D ]}||d' kr|}q|d k	st|d) |d) kr|d* |d* kstd S )+NvarZvar_copyz9from IPython.core.display import HTML
def my_test():
    z7 = HTML('<p>test content</p>')
    pass
a = 2
my_test()r-   r.   r)   r/   r0   r1      r   Fr3   r6   r:   r   r@   rA   rB   r   rC   rD   rE   r`   ra   r   rb   r   re   ZcopyToGlobals)ZsrcVariableNameZdstVariableNameZ
srcFrameIdrc   rd   rV   rf   c                 S   s   | d dkS rg   r   rh   r   r   r   r8   _  r9   z&test_copy_to_globals.<locals>.<lambda>ZevaluateNamec                 S   s   | d dkS )NrT   ZGlobalsr   rh   r   r   r   r8   p  r9   r^   r   rj   )r!   Zlocal_var_nameZglobal_var_namer.   r=   r5   r   rm   Zframe_idrc   rn   Z	local_varvariableglobals_Z
global_varr   r   r   test_copy_to_globals  s    




  
 
r{   )NF)rs   Zpytestutilsr   r   r   r   Zimportorskipr   Zfixturer   r!   r%   r+   r>   rN   markZskipifversion_inforR   r_   ro   rv   r{   r   r   r   r   <module>   s&   



"
#: