
    %pf%                        d 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$                        Z G d dej$                        Zedk(  r ej4                  d       yy)zeTest debugger, coverage 66%

Try to make tests pass with draft bdbx, which may replace bdb in 3.13+.
    )debugger)
namedtuple)dedent)Tk)requiresN)mock)Mockpatchz9
    i = 1
    i += 2
    if i == 3:
       print(i)
    c                       e Zd ZdZd Zy)	MockFramezMinimal mock frame.c                      || _         || _        y N)f_codef_lineno)selfcodelinenos      1lib/python3.12/idlelib/idle_test/test_debugger.py__init__zMockFrame.__init__   s        N)__name__
__module____qualname____doc__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_init1   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+   r3   s    r   test_user_linezIdbTest.test_user_line5   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$   r6   r&   user_exceptionr*   r8   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   classmethodr0   r4   r9   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_functionsG   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   rL   r   r   r   rB   rB   D   s    ;r   rB   c                   V    e Zd 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)DebuggerTestz0Tests for Debugger that do not need a real root.c                 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   r0   zDebuggerTest.setUpClass_   sy    f6&\\(++Z8 	C#,,S[[#''BCL	C F	C 	Cs   0B..B7c                     | j                   j                          | j                  j                  j	                          y r   )r   contr&   set_continueassert_called_oncer3   s    r   	test_contzDebuggerTest.test_conth   s(    002r   c                     | j                   j                          | j                  j                  j	                          y r   )r   stepr&   set_steprY   r3   s    r   	test_stepzDebuggerTest.test_stepl   (    ,,.r   c                     | j                   j                          | j                  j                  j	                          y r   )r   quitr&   set_quitrY   r3   s    r   	test_quitzDebuggerTest.test_quitp   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
   rS   r   nextr&   set_nextr8   r   r*   s     r   	test_nextzDebuggerTest.test_nextt   sS    \\$--1 	=UMM HH55e<	= 	= 	=   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re   )r
   rS   r   retr&   
set_returnr8   rh   s     r   test_retzDebuggerTest.test_rety   sS    \\$--1 	?UMMHH77>	? 	? 	?rj   c                     | j                   j                  dd       | j                  j                  j	                  dd       y )Ntest.py   )r   clear_breakpointr&   clear_breakr8   r3   s    r   test_clear_breakpointz"DebuggerTest.test_clear_breakpoint~   s0    &&y!444YBr   c                     | j                   j                  d       | j                  j                  j	                  d       y )Nrp   )r   clear_file_breaksr&   clear_all_file_breaksr8   r3   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   rz   s      r   r   zGDebuggerTest.test_set_load_breakpoints.<locals>.MockEditWindow.__init__   s     *#. r   N)r   r   r   r   )rz   s   r   MockEditWindowr}      s    /r   r   ztest1.pyrq   ztest2.py)   ,   -   ztest0.pyr"   r   r   r   )r   rS   r	   rQ   flistinversedictr   set_breakpointr&   	set_breakr8   load_breakpointsassert_has_callsr   call)r   r   rz   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gotofileliner8   )r   	test_code
test_frames      r   test_sync_source_linez"DebuggerTest.test_sync_source_line   s    I~v>	y!,
("f44H 	-MM**,	-((@@QRS	- 	-s   B))B2N)r   r   r   r   r@   r0   rZ   r^   rc   ri   rn   rt   rx   r   r   r   r   r   rN   rN   \   sG    6# #3//=
?
CJ)2	Tr   rN   c                   N    e Zd ZdZed        Zed        Zd Zd Zd Z	d Z
d Zy	)
DebuggerGuiTestzbTests for debugger.Debugger that need tk root.

    close needs debugger.top set in make_gui.
    c                     t        d       t               x| _        }|j                          t	               | _        || j
                  _        t	               | _        y Nr$   )r   r   rR   withdrawr	   rQ   r&   )r,   rR   s     r   r0   zDebuggerGuiTest.setUpClass   s>    $4f&r   c                 <    | j                   j                          | ` y r   rR   destroyrU   s    r   tearDownClasszDebuggerGuiTest.tearDownClass       Hr   c                     t        j                  | j                  | j                        | _         | j                  | j                   _        y r   )r   rT   rQ   r&   rR   r3   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&   r8   rF   interactingr3   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   closerQ   close_debuggerrY   r3   s    r   
test_closezDebuggerGuiTest.test_close   s(    ##668r   c                     | j                   j                          | j                  | j                   j                  j                  | j                          y r   )r   
show_stackrF   stackviewerr$   r3   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   rF   r$   r8   )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   r   r@   r0   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   rR   r   rU   s    r   r0   zStackViewerTest.setUpClass   "    4r   c                 <    | j                   j                          | ` y r   r   rU   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   StackViewerrR   sv
load_stackr3   s    r   r   zStackViewerTest.setUp   st    I'<fE	tyy!$a(tyy!$a(


 &&tyy$=4::&r   c                     d }d }| j                   }t        j                  |||      }| j                  t	        |d             y )Nr   )rR   r   r   rD   hasattr)r   r$   r   master_windowr   s        r   r4   zStackViewerTest.test_init   s<    		!!-<G,-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: )rF   r   r   rD   getr3   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_sourcer8   open)r   isfiles     r   test_show_sourcez StackViewerTest.test_show_source  su     44H 	NFGG"**+@AGGMM667LM	N 	N 	Ns   ABBN)
r   r   r   r@   r0   r   r   r4   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   rU   s    r   r0   zNameSpaceTest.setUpClass  r   r   c                 <    | j                   j                          | ` y r   r   rU   s    r   r   zNameSpaceTest.tearDownClass  r   r   c                 D    t        j                  | j                  d       y )NTest)r   NamespaceViewerrR   r3   s    r   r4   zNameSpaceTest.test_init$  s      F3r   N)r   r   r   r@   r0   r   r4   r   r   r   r   r     s-     
  4r   r   __main__r#   )	verbosity)r   idlelibr   collectionsr   textwrapr   tkinterr   test.supportr   unittestr   unittest.mockr	   r
   r(   r   TestCaser   rB   rN   r   r   r   r   mainr   r   r   <module>r      s   
  "   !   % /  		  0h  0F;8$$ ;0LT8$$ LT^8Eh'' 8Ev.Nh'' .Nb4H%% 4" zHMMA r   