
    6bh<&                        	 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Zd dlmZ d d	lmZmZ 	  ed
      Z G d d      Z G d dej&                        Z G d dej&                        Z G d dej&                        Z G d dej&                        Z G d dej&                  e      Z G d dej&                        Zedk(  r ej6                  d       yy)    )debugger)
namedtuple)dedent)Tk)requires)ExtraAssertionsN)mock)Mockpatchz9
    i = 1
    i += 2
    if i == 3:
       print(i)
    c                       e Zd Z	 d Zy)	MockFramec                      || _         || _        y N)f_codef_lineno)selfcodelinenos      I/opt/python-3.12.12/usr/lib/python3.12/idlelib/idle_test/test_debugger.py__init__zMockFrame.__init__   s        N__name__
__module____qualname__r    r   r   r   r      s
    r   r   c                   .    e Zd Zed        Zd Zd Zd Zy)IdbTestc                     t               | _        t        j                  | j                        | _        t        t        dd      }t        |d      }d |_        t        |d      }||_        || _	        d| _
        y )Nzidlelib/file.pyexecmode      zfile.py:2: <module>())r
   guir   Idbidbcompile	TEST_CODEr   f_backframemsg)clscode_objframe1frame2s       r   
setUpClasszIdbTest.setUpClass$   sd    &,,sww' 9&7fE8Q'8Q'	)r   c                 d    | j                  | j                  j                  | j                         y r   )assertIsr'   r%   r   s    r   	test_initzIdbTest.test_init2   s    dhhllDHH-r   c                     t               | j                  _        | j                  j	                  | j
                         | j                  j                  j                  | j                  | j
                         y r   )r
   r%   interactionr'   	user_liner+   assert_called_once_withr,   r4   s    r   test_user_linezIdbTest.test_user_line6   sH    #v4::&44TXXtzzJr   c                 ,   t        t              t               d f}t               | j                  _        | j
                  j                  | j                  |       | j                  j                  j                  | j                  | j                  |       y r   )
type
ValueErrorr
   r%   r7   r'   user_exceptionr+   r9   r,   )r   exc_infos     r   test_user_exceptionzIdbTest.test_user_exception<   sb    $jlD9#v

H544$**h	0r   N)r   r   r   classmethodr1   r5   r:   r@   r   r   r   r   r   "   s$    * *.K0r   r   c                       e Zd Zd Zy)FunctionTestc                 h   t        t        dd      }t        |d      }||_        | j	                  t        j                  |             | j                  t        j                  |      d       t        t        dd      }t        |d      }d |_        | j                  t        j                  |             | j                  t        j                  |      d       ||_        | j                  t        j                  |             ||_        | j	                  t        j                  |             y )	Nzrpc.pyr    r!   r$   zrpc.py:2: <module>()zidlelib/debugger.pyr#   zdebugger.py:1: <module>())
r(   r)   r   r*   
assertTruer   _in_rpc_codeassertEqual_frame2messageassertFalse)r   rpc_obj	rpc_framer.   
code_frames        r   test_functionszFunctionTest.test_functionsH   s    )H6:gq)	$	--i8900;/	1 9&;&Ix+
 
..z:;00<4	6 '
..z:;%
--j9:r   N)r   r   r   rM   r   r   r   rC   rC   E   s    ;r   rC   c                   T    e Zd Z	 ed        Zd Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zy)DebuggerTestc                 t   t               | _        t               | j                  _        t               | _        t	        j
                  t        j                  d      5  t        j                  | j                  | j                        | _        d d d        t               | j                  _        y # 1 sw Y   #xY w)Nmake_gui)r
   pyshellrootr'   r   objectr   Debuggerr-   s    r   r1   zDebuggerTest.setUpClass`   sn    f6&\\(++Z8#,,S[[#''BCL 9 F 98s   0B..B7c                     | j                   j                          | j                  j                  j	                          y r   )r   contr'   set_continueassert_called_oncer4   s    r   	test_contzDebuggerTest.test_conti   s(    002r   c                     | j                   j                          | j                  j                  j	                          y r   )r   stepr'   set_steprZ   r4   s    r   	test_stepzDebuggerTest.test_stepm   (    ,,.r   c                     | j                   j                          | j                  j                  j	                          y r   )r   quitr'   set_quitrZ   r4   s    r   	test_quitzDebuggerTest.test_quitq   r`   r   c                     t        j                  | j                  d      5 }| j                  j                          | j                  j
                  j                  |       d d d        y # 1 sw Y   y xY wNr+   )r   rT   r   nextr'   set_nextr9   r   r+   s     r   	test_nextzDebuggerTest.test_nextu   sJ    \\$--1UMM HH55e< 211   A A**A3c                     t        j                  | j                  d      5 }| j                  j                          | j                  j
                  j                  |       d d d        y # 1 sw Y   y xY wrf   )r   rT   r   retr'   
set_returnr9   ri   s     r   test_retzDebuggerTest.test_retz   sJ    \\$--1UMMHH77> 211rk   c                     | j                   j                  dd       | j                  j                  j	                  dd       y )Ntest.py   )r   clear_breakpointr'   clear_breakr9   r4   s    r   test_clear_breakpointz"DebuggerTest.test_clear_breakpoint   s0    &&y!444YBr   c                     | j                   j                  d       | j                  j                  j	                  d       y )Nrq   )r   clear_file_breaksr'   clear_all_file_breaksr9   r4   s    r   test_clear_file_breaksz#DebuggerTest.test_clear_file_breaks   s,    ''	2&&>>yIr   c                    t        dd       G fddt              }t               | j                  _         |dddg       |dg d      f| j                  j                  _        | j                  j                  d	d
       | j                  j                  j                  d	d
       | j                  j                          | j                  j                  j                  t        j                  d	d
      t        j                  dd      t        j                  dd      t        j                  dd      t        j                  dd      t        j                  dd      g       y )NFileIOfilenamec                       e Zd Z fdZy)>DebuggerTest.test_set_load_breakpoints.<locals>.MockEditWindowc                 .     |      | _         || _        y r   )iobreakpoints)r   fnr   r{   s      r   r   zGDebuggerTest.test_set_load_breakpoints.<locals>.MockEditWindow.__init__   s     *#. r   Nr   )r{   s   r   MockEditWindowr~      s    /r   r   ztest1.pyrr   ztest2.py)   ,   -   ztest0.pyr#   r   r   r   )r   rT   r
   rR   flistinversedictr   set_breakpointr'   	set_breakr9   load_breakpointsassert_has_callsr	   call)r   r   r{   s     @r   test_set_load_breakpointsz&DebuggerTest.test_set_load_breakpoints   s   Hj1	/V 	/
 "V:1v.:|4*
& 	$$Z322:qA&&(++YYz1%YYz1%YYz1%YYz2&YYz2&YYz2&(	)r   c                 j   t        t        dd      }t        |d      }|| j                  _        t               | j                  _        t        dd      5  | j                  j                          d d d        | j                  j                  j                  j                  dd       y # 1 sw Y   :xY w)Nztest_sync.pyr    r#   zidlelib.debugger.os.path.existsTreturn_value)r(   r)   r   r   r+   r
   r   r   sync_source_linegotofileliner9   )r   	test_code
test_frames      r   test_sync_source_linez"DebuggerTest.test_sync_source_line   s    I~v>	y!,
("f44HMM**, I((@@QRS IHs   B))B2N)r   r   r   rA   r1   r[   r_   rd   rj   ro   ru   ry   r   r   r   r   r   rO   rO   ]   sG    6# #3//=
?
CJ)2	Tr   rO   c                   L    e Zd Z	 ed        Zed        Zd Zd Zd Zd Z	d Z
y)	DebuggerGuiTestc                     t        d       t               x| _        }|j                          t	               | _        || j
                  _        t	               | _        y Nr%   )r   r   rS   withdrawr
   rR   r'   )r-   rS   s     r   r1   zDebuggerGuiTest.setUpClass   s>    $4f&r   c                 <    | j                   j                          | ` y r   rS   destroyrV   s    r   tearDownClasszDebuggerGuiTest.tearDownClass       Hr   c                     t        j                  | j                  | j                        | _         | j                  | j                   _        y r   )r   rU   rR   r'   rS   r4   s    r   setUpzDebuggerGuiTest.setUp   s.     ))$,,A!YYr   c                     | j                   j                  dd       | j                  j                  j                  dd       | j	                  | j                   j
                  d       y )Nr#   twor   )r   runr'   r9   rG   interactingr4   s    r   test_run_debuggerz!DebuggerGuiTest.test_run_debugger   sH    !U#,,Q622A6r   c                     | j                   j                          | j                  j                  j	                          y r   )r   closerR   close_debuggerrZ   r4   s    r   
test_closezDebuggerGuiTest.test_close   s(    ##668r   c                     | j                   j                          | j                  | j                   j                  j                  | j                          y r   )r   
show_stackrG   stackviewerr%   r4   s    r   test_show_stackzDebuggerGuiTest.test_show_stack   s6      "2266Fr   c                    t        d d       }|| j                  _        d | j                  _        g df| j                  j
                  _        | j                  j                          | j                  | j                  j                  j                  | j                         | j                  j
                  j                  |d        y )Nr   )r   r   r+   r   r'   	get_stackr   r   rG   r%   r9   )r   r   s     r   test_show_stack_with_framez*DebuggerGuiTest.test_show_stack_with_frame   s    tT*
( %)!+-q''  " 	2266F22:tDr   N)r   r   r   rA   r1   r   r   r   r   r   r   r   r   r   r   r      sJ    
    '7
9
GEr   r   c                   D    e Zd Zed        Zed        Zd Zd Zd Zd Z	y)StackViewerTestc                 l    t        d       t               | _        | j                  j                          y r   r   r   rS   r   rV   s    r   r1   zStackViewerTest.setUpClass   "    4r   c                 <    | j                   j                          | ` y r   r   rV   s    r   r   zStackViewerTest.tearDownClass   r   r   c                 0   t        t        dd      | _        t        | j                  d      dft        | j                  d      dfg| _        t        j                  | j                  d d       | _        | j                  j                  | j                         y )Ntest_stackviewer.pyr    r#   r$   )
r(   r)   r   r   stackr   StackViewerrS   sv
load_stackr4   s    r   r   zStackViewerTest.setUp   st    I'<fE	tyy!$a(tyy!$a(


 &&tyy$=4::&r   c                 v    d }d }| j                   }t        j                  |||      }| j                  |d       y )Nr   )rS   r   r   assertHasAttr)r   r%   r   master_windowr   s        r   r5   zStackViewerTest.test_init   s9    		!!-<2w'r   c                    | j                  | j                  j                  | j                         | j                  d| j                  j	                  d      v        | j                  | j                  j	                  d      d       y )Nz?.<module>(), line 1:r   r#   z?.<module>(), line 2: )rG   r   r   rE   getr4   s    r   test_load_stackzStackViewerTest.test_load_stack  s[     	

3/477;;q>ABQ)ABr   c                 0   t               | j                  _        t        dd      5 }| j                  j	                  d       |j                  d       | j                  j                  j                  j                  d       d d d        y # 1 sw Y   y xY w)Nzidlelib.debugger.os.path.isfileTr   r#   r   )r
   r   r   r   show_sourcer9   open)r   isfiles     r   test_show_sourcez StackViewerTest.test_show_source  si     44HFGG"**+@AGGMM667LM IHHs   ABBN)
r   r   r   rA   r1   r   r   r5   r   r   r   r   r   r   r      s>     
  '(CNr   r   c                   2    e Zd Zed        Zed        Zd Zy)NameSpaceTestc                 l    t        d       t               | _        | j                  j                          y r   r   rV   s    r   r1   zNameSpaceTest.setUpClass  r   r   c                 <    | j                   j                          | ` y r   r   rV   s    r   r   zNameSpaceTest.tearDownClass   r   r   c                 D    t        j                  | j                  d       y )NTest)r   NamespaceViewerrS   r4   s    r   r5   zNameSpaceTest.test_init%  s      F3r   N)r   r   r   rA   r1   r   r5   r   r   r   r   r     s-     
  4r   r   __main__r$   )	verbosity)idlelibr   collectionsr   textwrapr   tkinterr   test.supportr   test.support.testcaser   unittestr	   unittest.mockr
   r   r)   r   TestCaser   rC   rO   r   r   r   r   mainr   r   r   <module>r      s   
  "   ! 1   % /  		  0h  0F;8$$ ;0LT8$$ LT^8Eh'' 8Ev.Nh'' .Nb4H%% 4" zHMMA r   