
    ch%                        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j        d           dS dS )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dS )	MockFramezMinimal mock frame.c                 "    || _         || _        d S N)f_codef_lineno)selfcodelinenos      1lib/python3.11/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                   6    e Zd Zed             Zd Zd Zd ZdS )IdbTestc                    t                      | _        t          j        | j                  | _        t          t          dd          }t          |d          }d |_        t          |d          }||_        || _	        d| _
        d S )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#   su    &&,sw'' 9&7fEEE8Q''8Q''	)r   c                 P    |                      | j        j        | j                   d S r   )assertIsr&   r$   r   s    r   	test_initzIdbTest.test_init1   s"    dhlDH-----r   c                     t                      | j        _        | j                            | j                   | j        j                            | j        | j                   d S r   )r	   r$   interactionr&   	user_liner*   assert_called_once_withr+   r3   s    r   test_user_linezIdbTest.test_user_line5   sM    #vv4:&&&44TXtzJJJJJr   c                    t          t                    t                      d f}t                      | j        _        | j                            | j        |           | j        j                            | j	        | j        |           d S r   )
type
ValueErrorr	   r$   r6   r&   user_exceptionr*   r8   r+   )r   exc_infos     r   test_user_exceptionzIdbTest.test_user_exception;   st    $$jllD9#vv
H55544$*h	0 	0 	0 	0 	0r   N)r   r   r   classmethodr0   r4   r9   r?   r   r   r   r   r   !   s]        * * [*. . .K K K0 0 0 0 0r   r   c                       e Zd Zd ZdS )FunctionTestc                    t          t          dd          }t          |d          }||_        |                     t          j        |                     |                     t          j        |          d           t          t          dd          }t          |d          }d |_        | 	                    t          j        |                     |                     t          j        |          d           ||_        | 	                    t          j        |                     ||_        |                     t          j        |                     d S )	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89990;;/	1 	1 	1 9&;&IIIx++
 
.z::;;;0<<4	6 	6 	6 '
.z::;;;%
-j99:::::r   N)r   r   r   rL   r   r   r   rB   rB   D   s#        ; ; ; ; ;r   rB   c                   ^    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dS )DebuggerTestz0Tests for Debugger that do not need a real root.c                 h   t                      | _        t                      | j        _        t                      | _        t	          j        t          j        d          5  t          j        | j        | j                  | _        d d d            n# 1 swxY w Y   t                      | j        _        d S )Nmake_gui)r	   pyshellrootr&   r
   objectr   Debuggerr,   s    r   r0   zDebuggerTest.setUpClass_   s    ff66&&\(+Z88 	C 	C#,S[#'BBCL	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C FFs   %BBBc                 t    | j                                          | j        j                                         d S r   )r   contr&   set_continueassert_called_oncer3   s    r   	test_contzDebuggerTest.test_conth   s3    0022222r   c                 t    | j                                          | j        j                                         d S r   )r   stepr&   set_steprY   r3   s    r   	test_stepzDebuggerTest.test_stepl   3    ,,.....r   c                 t    | j                                          | j        j                                         d S r   )r   quitr&   set_quitrY   r3   s    r   	test_quitzDebuggerTest.test_quitp   r_   r   c                     t          j        | j        d          5 }| j                                         | j        j                            |           d d d            d S # 1 swxY w Y   d S Nr*   )r
   rS   r   nextr&   set_nextr8   r   r*   s     r   	test_nextzDebuggerTest.test_nextt   s    \$-11 	=UM   H55e<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=   9A!!A%(A%c                     t          j        | j        d          5 }| j                                         | j        j                            |           d d d            d S # 1 swxY w Y   d S re   )r
   rS   r   retr&   
set_returnr8   rh   s     r   test_retzDebuggerTest.test_rety   s    \$-11 	?UMH77>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?rj   c                 |    | j                             dd           | j        j                            dd           d S )Ntest.py   )r   clear_breakpointr&   clear_breakr8   r3   s    r   test_clear_breakpointz"DebuggerTest.test_clear_breakpoint~   s;    &&y!44444YBBBBBr   c                 x    | j                             d           | j        j                            d           d S )Nrp   )r   clear_file_breaksr&   clear_all_file_breaksr8   r3   s    r   test_clear_file_breaksz#DebuggerTest.test_clear_file_breaks   s7    ''	222&>>yIIIIIr   c                    t          dd           G fddt                    }t                      | j        _         |dddg           |dg d          f| j        j        _        | j                            d	d
           | j        j	        
                    d	d
           | 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           d S )NFileIOfilenamec                       e Zd Z fdZdS )>DebuggerTest.test_set_load_breakpoints.<locals>.MockEditWindowc                 6     |          | _         || _        d S 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   sZ   Hj11	/ 	/ 	/ 	/ 	/ 	/ 	/V 	/ 	/ 	/
 "VVN:1v..N:|||44*
& 	$$Z33322:qAAA&&(((++Yz1%%Yz1%%Yz1%%Yz2&&Yz2&&Yz2&&(	) 	) 	) 	) 	)r   c                 h   t          t          dd          }t          |d          }|| j        _        t                      | j        _        t          dd          5  | j                                         d d d            n# 1 swxY w Y   | j        j        j	        
                    dd           d S )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!,,
("ff44HHH 	- 	-M**,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-(@@QRSSSSSs   BB	BN)r   r   r   r   r@   r0   rZ   r^   rc   ri   rn   rt   rx   r   r   r   r   r   rN   rN   \   s        66# # [#3 3 3/ / // / /= = =
? ? ?
C C CJ J J) ) )2	T 	T 	T 	T 	Tr   rN   c                   \    e Zd ZdZed             Zed             Zd Zd Zd Z	d Z
d Zd	S )
DebuggerGuiTestzbTests for debugger.Debugger that need tk root.

    close needs debugger.top set in make_gui.
    c                     t          d           t                      x| _        }|                                 t	                      | _        || j        _        t	                      | _        d S Nr$   )r   r   rR   withdrawr	   rQ   r&   )r,   rR   s     r   r0   zDebuggerGuiTest.setUpClass   sN    $$4ff&&r   c                 <    | j                                          | ` d S r   rR   destroyrU   s    r   tearDownClasszDebuggerGuiTest.tearDownClass       HHHr   c                 p    t          j        | j        | j                  | _         | j        | j         _        d S r   )r   rT   rQ   r&   rR   r3   s    r   setUpzDebuggerGuiTest.setUp   s,     )$,AA!Yr   c                     | j                             dd           | j        j                            dd           |                     | j         j        d           d S )Nr"   twor   )r   runr&   r8   rF   interactingr3   s    r   test_run_debuggerz!DebuggerGuiTest.test_run_debugger   sU    !U###,,Q6662A66666r   c                 t    | j                                          | j        j                                         d S r   )r   closerQ   close_debuggerrY   r3   s    r   
test_closezDebuggerGuiTest.test_close   s3    #6688888r   c                     | j                                          |                     | j         j        j        | j                    d S r   )r   
show_stackrF   stackviewerr$   r3   s    r   test_show_stackzDebuggerGuiTest.test_show_stack   s<      """26FFFFFr   c                 B   t          d d           }|| j        _        d | j        _        g df| j        j        _        | j                                         |                     | j        j        j	        | j                   | j        j        
                    |d            d S )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6FFF22:tDDDDDr   N)r   r   r   r   r@   r0   r   r   r   r   r   r   r   r   r   r   r      s         
   [   [' ' '7 7 7
9 9 9
G G GE E E E Er   r   c                   R    e Zd Zed             Zed             Zd Zd Zd Zd Z	dS )StackViewerTestc                 |    t          d           t                      | _        | j                                         d S r   r   r   rR   r   rU   s    r   r0   zStackViewerTest.setUpClass   2    44r   c                 <    | j                                          | ` d S r   r   rU   s    r   r   zStackViewerTest.tearDownClass   r   r   c                     t          t          dd          | _        t          | j        d          dft          | j        d          dfg| _        t          j        | j        d d           | _        | j        	                    | j                   d S )Ntest_stackviewer.pyr   r"   r#   )
r'   r(   r   r   stackr   StackViewerrR   sv
load_stackr3   s    r   r   zStackViewerTest.setUp   s    I'<fEE	ty!$$a(ty!$$a(


 &ty$==4:&&&&&r   c                     d }d }| j         }t          j        |||          }|                     t	          |d                     d S )Nr   )rR   r   r   rD   hasattr)r   r$   r   master_windowr   s        r   r4   zStackViewerTest.test_init   sI    	!-<<G,,-----r   c                 
   |                      | j        j        | j                   |                     d| j                            d          v            |                      | j                            d          d           d S )Nz?.<module>(), line 1:r   r"   z?.<module>(), line 2: )rF   r   r   rD   getr3   s    r   test_load_stackzStackViewerTest.test_load_stack  sm     	
333/47;;q>>ABBBQ)ABBBBBr   c                 0   t                      | j        _        t          dd          5 }| j                            d           |                    d           | j        j        j                            d           d d d            d S # 1 swxY w Y   d S )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  s     44HHH 	NFG"""**+@AAAGM667LMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	Ns   ABBBN)
r   r   r   r@   r0   r   r   r4   r   r   r   r   r   r   r      s          [
   [' ' '. . .C C CN N N N Nr   r   c                   @    e Zd Zed             Zed             Zd ZdS )NameSpaceTestc                 |    t          d           t                      | _        | j                                         d S r   r   rU   s    r   r0   zNameSpaceTest.setUpClass  r   r   c                 <    | j                                          | ` d S r   r   rU   s    r   r   zNameSpaceTest.tearDownClass  r   r   c                 :    t          j        | j        d           d S )NTest)r   NamespaceViewerrR   r3   s    r   r4   zNameSpaceTest.test_init$  s     F33333r   N)r   r   r   r@   r0   r   r4   r   r   r   r   r     sW          [
   [4 4 4 4 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      sA   
       " " " " " "             ! ! ! ! ! !        % % % % % % % % /F  	 		        0  0  0  0  0h  0  0  0F; ; ; ; ;8$ ; ; ;0LT LT LT LT LT8$ LT LT LT^8E 8E 8E 8E 8Eh' 8E 8E 8Ev.N .N .N .N .Nh' .N .N .Nb4 4 4 4 4H% 4 4 4" zHMA r   