
    daf                      b   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	m
Z
 ddlmZmZ ddlmZ ddlmZ ddlmZ  G d d	e      Z G d
 de      Z G d de      Z G d de      ZdZd Zd Z G d dej4                        Z G d de      Z G d d      Zd/dZe
d        ZeddfdZ dZ!e!dz   Z"d Z#d Z$d  Z%d! Z& G d" d#ejN                        Z( G d$ d%e(      Z) G d& d'e(      Z* G d( d)e(      Z+ G d* d+e(      Z, G d, d-ejN                        Z-e.d.k(  r ej^                          yy)0a   Test the bdb module.

    A test defines a list of tuples that may be seen as paired tuples, each
    pair being defined by 'expect_tuple, set_tuple' as follows:

        ([event, [lineno[, co_name[, eargs]]]]), (set_type, [sargs])

    * 'expect_tuple' describes the expected current state of the Bdb instance.
      It may be the empty tuple and no check is done in that case.
    * 'set_tuple' defines the set_*() method to be invoked when the Bdb
      instance reaches this state.

    Example of an 'expect_tuple, set_tuple' pair:

        ('line', 2, 'tfunc_main'), ('step', )

    Definitions of the members of the 'expect_tuple':
        event:
            Name of the trace event. The set methods that do not give back
            control to the tracer [1] do not trigger a tracer event and in
            that case the next 'event' may be 'None' by convention, its value
            is not checked.
            [1] Methods that trigger a trace event are set_step(), set_next(),
            set_return(), set_until() and set_continue().
        lineno:
            Line number. Line numbers are relative to the start of the
            function when tracing a function in the test_bdb module (i.e. this
            module).
        co_name:
            Name of the function being currently traced.
        eargs:
            A tuple:
            * On an 'exception' event the tuple holds a class object, the
              current exception must be an instance of this class.
            * On a 'line' event, the tuple holds a dictionary and a list. The
              dictionary maps each breakpoint number that has been hit on this
              line to its hits count. The list holds the list of breakpoint
              number temporaries that are being deleted.

    Definitions of the members of the 'set_tuple':
        set_type:
            The type of the set method to be invoked. This may
            be the type of one of the Bdb set methods: 'step', 'next',
            'until', 'return', 'continue', 'break', 'quit', or the type of one
            of the set methods added by test_bdb.Bdb: 'ignore', 'enable',
            'disable', 'clear', 'up', 'down'.
        sargs:
            The arguments of the set method if any, packed in a tuple.
    N)contextmanager)islicerepeat)import_helper)	os_helper)
patch_listc                       e Zd Zy)BdbExceptionN)__name__
__module____qualname__     (/root/Python-3.12.4/Lib/test/test_bdb.pyr
   r
   A   s    r   r
   c                       e Zd ZdZy)BdbErrorz!Error raised by the Bdb instance.Nr   r   r   __doc__r   r   r   r   r   B   s    Er   r   c                       e Zd ZdZy)BdbSyntaxErrorzSyntax error in the test case.Nr   r   r   r   r   r   C   s    $Hr   r   c                       e Zd ZdZy)BdbNotExpectedErrorzUnexpected result.Nr   r   r   r   r   r   D   s    )Ar   r   c                  @    t         j                  j                          y N)_bdb
BreakpointclearBreakpointsr   r   r   reset_Breakpointr   L   s    OO$$&r   c                     t         j                  j                  D  cg c]  } | s| 	 }} |syd}|D ]  } |sd}d}| j                  rdnd}| j                  rdnd}d	| j
                  ||| j                  | j                  t        j                  j                  | j                        | j                  fz  z  }| j                  r|d
| j                  z  }|dz  } S c c} w )N Fz!BpNum Temp Enb Hits Ignore Where
Tzyes zno  yeszno z%-5d %s %s %-4d %-6d at %s:%dz
	stop only if 
)r   r   
bpbynumber	temporaryenablednumberhitsignoreospathbasenamefilelinecond)bpbp_listheader_addedinfodispenabs         r   info_breakpointsr5   O   s    !__77>r2r>G>L 7DLv6

u0YYdBGGRYYWW%%bgg.99 	: 77RWW66D K% ?s
   C C c                   `     e Zd ZdZ fdZ	 	 d fd	Z fdZd Zd Zd Z	d Z
d	 Zd
 Z xZS )Bdbz$Extend Bdb to enhance test coverage.c                 4    d | _         t        | 	  |||      S r   )	currentbpsupertrace_dispatch)selfframeeventarg	__class__s       r   r;   zBdb.trace_dispatchg   s    w%eUC88r   c                 n   t        |t              rt|t        k(  rt               }n$t	        j
                  |d d       }|j                  }t        ||      }|j                  }	|	j                  }|	j                  }|	j                  }t        | 5  |||||      }
t        |
t              rt        |
      |
S )N)r$   r.   funcname)
isinstancestr__file__globals	importlibimport_module__dict__eval__code__co_filenameco_firstlinenoco_namer:   	set_breakr   )r<   filenamelinenor$   r.   rC   globals_modulefunccoderesr@   s              r   rP   zBdb.set_breakk   s    h$8#"9"00#2?!??(+D==D''H((F||Hg&I&*X   ?c33-
r   c                     t         |   ||      \  | _        | _        | j                  | j                     d   | _        | j                  | j                  fS Nr   )r:   	get_stackstackindexr=   )r<   ftr@   s      r   rZ   zBdb.get_stack   sI    !&!21a!8
DJZZ

+A.
zz4::%%r   c                 P    | j                  |      }|xj                  dz  c_        y)z8Increment the ignore count of Breakpoint number 'bpnum'.   N)get_bpbynumberr(   r<   bpnumr/   s      r   
set_ignorezBdb.set_ignore   s      '
		Q	r   c                 4    | j                  |      }d|_        y )NTra   r%   rb   s      r   
set_enablezBdb.set_enable   s      '
r   c                 4    | j                  |      }d|_        y )NFrf   rb   s      r   set_disablezBdb.set_disable   s      '
r   c                 B    | j                  ||      }|rt        |      y r   )clear_breakr   )r<   fnamerR   errs       r   	set_clearzBdb.set_clear   s&    uf-3- r   c                     | j                   st        d      | xj                   dz  c_         | j                  | j                      d   | _        y)zMove up in the frame stack.zOldest framer`   r   N)r\   r   r[   r=   r<   s    r   set_upz
Bdb.set_up   s:    zz>**

a
ZZ

+A.
r   c                     | j                   dz   t        | j                        k(  rt        d      | xj                   dz  c_         | j                  | j                      d   | _        y)zMove down in the frame stack.r`   zNewest framer   N)r\   lenr[   r   r=   rp   s    r   set_downzBdb.set_down   sK    ::>S_,>**

a
ZZ

+A.
r   )FNN)r   r   r   r   r;   rP   rZ   rd   rg   ri   rn   rq   rt   __classcell__r@   s   @r   r7   r7   d   s=    .9 AE(&

 
//r   r7   c                        e Zd ZdZd fd	Zd Z f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dZd Zd Z xZS )Tracerz$A tracer for testing the bdb module.c                 ~    t         |   |       || _        || _        |d|z  nd | _        | j                          y )NskipzDry-run results for %s:)r:   __init__
expect_setdry_runheader	init_test)r<   r}   r{   r~   	test_caser@   s        r   r|   zTracer.__init__   sE    d#$ , 19<26 	r   c                     d | _         d| _        d | _        t        t	        | j
                  dd d            | _        t        t	        | j
                  dd d            | _        y )Nr      r`   )
cur_exceptexpect_set_nobreakpoint_hitslistr   r}   expected_listset_listrp   s    r   r   zTracer.init_test   sP    #!&!T1"EFVDOOQa@Ar   c                     | j                   | j                   |dk(  r	 t        | 	  |||      }|S t        | 	  |||      S # t        $ r}|| _         | j                  cY d }~S d }~ww xY wN	exception)r   r:   r;   r
   )r<   r=   r>   r?   rW   er@   s         r   r;   zTracer.trace_dispatch   sy    
 ??&//!K+g,UE3?

 7)%<<	   +"#***+s   A 	A*A%A*%A*c                 n    | j                  |      sy | j                  d||       | j                          y )Ncall)	stop_hereprocess_eventnext_set_method)r<   r=   argument_lists      r   	user_callzTracer.user_call   s1     ~~e$65-8r   c                     | j                  d|       | j                  rI| j                  r=t               j	                  d      }|j                  d      D ]  }t        d|z           | j                          d | _        | j                          y )Nr-   r"   z  )	r   r~   r   r5   stripsplitprintdelete_temporariesr   )r<   r=   r2   r-   s       r   	user_linezTracer.user_line   sx    65)<<D00#%++D1D

4( #dTk"#!#r   c                 J    | j                  d||       | j                          y )Nreturn)r   r   )r<   r=   return_values      r   user_returnzTracer.user_return   s     8UL9r   c                 V    || _         | j                  d|       | j                          y r   )exc_infor   r   )r<   r=   r   s      r   user_exceptionzTracer.user_exception   s%     ;.r   c                 0    | j                   g}||f| _        y r   )r9   r   )r<   r?   r0   s      r   do_clearzTracer.do_clear   s    >>" '1r   c                 h    | j                   r&| j                   d   D ]  }| j                  |        y y Nr`   )r   clear_bpbynumber)r<   ns     r   r   zTracer.delete_temporaries   s8    ))!, )%%a()  r   c                     | xj                   dz  c_         	 | j                  j                  d      | _        | j                  j                  d      | _        y # t        $ r t        d| j                   z        w xY w)Nr`   r   z-expect_set list exhausted, cannot pop item %d)r   r   popexpect
IndexErrorr   r   	set_tuplerp   s    r   pop_nextzTracer.pop_next   sw    a	$,,003DK
 **1-	  	$%?""#$ $	$s    A "A:c           	         d }|dk(  r| j                   d   }| j                  ||       | j                  "| j                  s| j                  g}|g f| _        || _        | j                          | j                  r| j                  | j                         y | j                  r0| j                  | j                  d   |d       | j                          |dv r| j                  d       y t        | j                        dkD  rT|dk(  r| j                  d   \  }}t        |j                               }| j                  s| j!                  d| j"                  z         | j                  || j                  d   d	       | j                  |D 	cg c]  }	||	   	 c}	| j                  d   D 	cg c]  }	| j%                  |	      j&                   c}	d
       | j                  t        |      | j                  d   d       y |dk(  rRt)        | j                   d   | j                  d         s+| j!                  d| j"                  | j                   fz         y y y y c c}	w c c}	w )Nr   r   r   zWrong event type)r   r      r-   z(No breakpoints hit at expect_set item %dzBreakpoint numbers do not matchzWrong breakpoint hit countr`   zWrong temporary breakpointsz/Wrong exception at expect_set item %d, got '%s')r   rZ   r9   r   r>   r   r~   print_stater   r   check_equalcheck_lno_namecheck_expect_max_sizers   sortedkeysraise_not_expectedr   ra   r'   rD   )
r<   r>   r=   argstbr0   bpstemporariesbpnumsr   s
             r   r   zTracer.process_event   s4    Kq!Bub! >>%d.B.B~~&G$+R=D  
<<T[[) ;;T[[^U4FG!&&&&q)!#';;q> [
+++++B**+,   )=)=a)@57  &!9Q#a&!9!11!46 ((+00 602   !4d6J6J16M13 +%!$--"2DKKNC++I++T]];<= D &# " ":6s   
I)"I
c                 R    ||k(  ry | j                  d|| j                  |fz         y )Nz"%s at expect_set item %d, got '%s')r   r   )r<   expectedresultmsgs       r   r   zTracer.check_equal-  s5    v D!$d&8&8& A!B 	Cr   c                     t        | j                        }|dkD  r0| j                         }| j                  | j                  d   |d       |dkD  r?| j                  | j                  d   | j                  j
                  j                  d       yy)z+Check the line number and function co_name.r`   zWrong line numberr   zWrong function nameN)rs   r   lno_abs2relr   r=   f_coderO   )r<   srR   s      r   r   zTracer.check_lno_name3  sz    q5%%'FT[[^V5HIq5T[[^TZZ->->-F-F0EG r   c                 ~    t        | j                        |kD  r%t        d| j                  d| j                        y )NzInvalid size of the z expect tuple: )rs   r   r   r>   )r<   sizes     r   r   zTracer.check_expect_max_size=  s7    t{{d" "&**dkk"; < < #r   c                    | j                  | j                  j                  j                        }| j                  j                  }|| j                  t
              k(  r&|| j                  j                  j                  z
  dz   S |S r   )canonicr=   r   rM   f_linenorF   rN   r<   rl   rR   s      r   r   zTracer.lno_abs2relB  sl    TZZ..::;$$X.. $**++:::Q> 	<4:	<r   c                     |rM| j                  |      | j                  t              k(  r&| j                  j                  j                  |z   dz
  S |S r   )r   rF   r=   r   rN   r   s      r   lno_rel2abszTracer.lno_rel2absH  sJ    4<<.$,,x2HH 

!!0069A= 		r   c                 B   | j                         }| j                  j                  j                  }d| j                  ||fz  }| j
                  rud}| j
                  d   D ]/  }|dk7  r|dz  }||d| j                  |      j                  z  }1 |dz  }d|z   dz   t        | j
                  d         z   d	z   }|d|z   z  }n.| j                  d
k(  r|d| j                  d   j                  z   z  }|dz  }|j                  d      t        | j                        z   dz   S )Nz('%s', %d, '%s'{r   z, z: }(r`   )r   z),     ,)r   r=   r   rO   r>   r   ra   r'   rE   r   r   ljustr   )r<   rR   rO   stater   r   s         r   	get_statezTracer.get_stateM  s)   !!#**##++!TZZ$AAC))!, C#:4KC1d&9&9!&<&A&ABBC 3JC)d"S)=)=a)@%AACGCTCZEZZ;&TDMM!,5555E{{2T^^!44s::r   c                     |$| j                   dk(  rt                t        |       t        d| j                   | j                         fz         y )Nr`   z%d: %s)r   r   r   )r<   r   s     r   r   zTracer.print_state_  s@    $"4"4"9G&Mh$,,dnn.>??@r   c                     |dz  }|dt        | j                        z  z  }|d| j                         z   z  }t        |      )Nr"   z  Expected: %s
z  Got:      )rE   r   r   r   r<   r   s     r   r   zTracer.raise_not_expectede  sE    t!C$444~ 000!#&&r   c                 4   | j                   d   }t        | j                         dk(  r| j                   d   nd }t        | d|z         }|dv r |        y |dv r || j                         y |dk(  rKd }|r3| j	                  | j                  j
                  j                  |d         } || j                  |       y |r|dv s|d	v r|d
v r2|^}}}| j	                  ||      }||g}|j                  |        ||  n|dv r ||  n|d	v r |        d | _        | j                          | j                  r| j                          n-| j                  r| j                          | j                  d       | j                          y t!        d| j                   z        )Nr   r   r`   set_)stepcontinuequit)nextr   until)breakclearr(   enabledisable)updown)r   r   )r(   r   r   r   z"%s" is an invalid set_tuple)r   rs   getattrr=   r   r   rM   extendr>   r   r~   r   r   r   r   r   r   )r<   set_typer   
set_methodrR   rl   remains          r   r   zTracer.next_set_methodk  s   >>!$$'$71$<t~~a $T6H#45
 33L++tzz" F))$***;*;*G*G*.q'3tzz6* X "/ /3;~3M--)-&v))%8vF#D!<<D!^+ DJMMO||  ";;'')**1-  " !?!%"0 1 1r   )NFNr   )r   r   r   r   r|   r   r;   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ru   rv   s   @r   rx   rx      so    .B=$
2
)
.0=dCG<
<
;$A'01r   rx   c                   &    e Zd ZdZddZd ZddZy)	TracerRunzAProvide a context for running a Tracer instance with a test case.Nc                     || _         |j                  | _        t        |j                  || j                  |j	                               | _        d | _        y )N)r{   r~   r   )r   r~   rx   r}   idtracer_original_tracer)r<   r   r{   s      r   r|   zTracerRun.__init__  sD    " ((Y11%)\\Y\\^M $r   c                 `    t                t        j                         | _        | j                  S r   )r   sysgettracer   r   rp   s    r   	__enter__zTracerRun.__enter__  s      #{{r   c                 |   t                t        j                  | j                         d}| j                  j
                  rC|dz  }|d| j                  j                  z  z  }|t        | j                  j
                        z  }|t        t        |      rpt        |t              rY|j                  rM|j                  d   }|r|d|z   z  }| j                  rt        |       y| j                  j!                  |       nJ d       |r4| j                  rt        |       y | j                  j!                  |       y y )Nr    z+All paired tuples have not been processed, zthe last one was number %d
r   r"   Tz#BdbNotExpectedError with empty args)r   r   settracer   r   r   r   repr
issubclassr   rD   BaseExceptionr   r~   r   r   fail)r<   type_value	traceback	not_emptyerr_msgs         r   __exit__zTracerRun.__exit__  s   T**+	;;FFI8++334 5Idkk2233I ,?!G%/EJJ**Q-ti//G<<'NNN''0CCCu||i ##I.	 r   r   )NNN)r   r   r   r   r|   r   r   r   r   r   r   r     s    K%/r   r   c                 f   d }ddg}|j                  |       t               }d|_        d |_        t	         |t        d      t        |                  |_        t        |       5  t        ||      5 }|j                  t               ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)	a{  Run a test and print the dry-run results.

    'modules':  A dictionary mapping module names to their source code as a
                string. The dictionary MUST include one module named
                'test_module' with a main() function.
    'set_list': A list of set_type tuples to be run on the module.

    For example, running the following script outputs the following results:

    *****************************   SCRIPT   ********************************

    from test.test_bdb import run_test, break_in_func

    code = '''
        def func():
            lno = 3

        def main():
            func()
            lno = 7
    '''

    set_list = [
                break_in_func('func', 'test_module.py'),
                ('continue', ),
                ('step', ),
                ('step', ),
                ('step', ),
                ('quit', ),
            ]

    modules = { 'test_module': code }
    run_test(modules, set_list)

    ****************************   results   ********************************

    1: ('line', 2, 'tfunc_import'),    ('next',),
    2: ('line', 3, 'tfunc_import'),    ('step',),
    3: ('call', 5, 'main'),            ('break', ('test_module.py', None, False, None, 'func')),
    4: ('None', 5, 'main'),            ('continue',),
    5: ('line', 3, 'func', ({1: 1}, [])), ('step',),
      BpNum Temp Enb Hits Ignore Where
      1     no   yes 1    0      at test_module.py:2
    6: ('return', 3, 'func'),          ('step',),
    7: ('line', 7, 'main'),            ('step',),
    8: ('return', 7, 'main'),          ('quit',),

    *************************************************************************

    c              3   j   K   	 	 t        |       }t        |      }| | # t        $ r Y y w xY wwr   )r   StopIteration)abxys       r   genzrun_test.<locals>.gen  sB     	GG	 
  		s   3 $ 	0303r   r   Tc                       y r   r   r   r   r   <lambda>zrun_test.<locals>.<lambda>  s    r   r   rz   N)r   BaseTestCaser~   r   r   r   iterr}   create_modulesr   runcalltfunc_import)modulesr   r{   r  sltestr   s          r   run_testr    s    f j	!BIIh>DDLDG3vbz4845DO		  )t$' 	)6NN<(	)) )	) 	)) )s$   &B'4B
B'B$	 B''B0c           	   #     K   t        j                         5  t        j                  j	                  t        j                                	 | D ]Z  }|dz   }t        |dd      5 }|j                  t        j                  | |                d d d        t        j                  |       \ t        j                          d  | D ]  }t        j                   |        t        j                  j#                          	 d d d        y # 1 sw Y   |xY w# | D ]  }t        j                   |        t        j                  j#                          w xY w# 1 sw Y   y xY ww)N.pywzutf-8)encoding)r   temp_cwdr   r*   appendr)   getcwdopenwritetextwrapdedent	linecache
checkcacherH   invalidate_cachesr   forgetr   )r  mrl   r]   s       r   r  r    s    				 		$	 ,E	%w7 91GGHOOGAJ789$$U+	,
 '') ($$Q'(HHLLN 
9 9  ($$Q'(HHLLN sL   E2E
D"(D
7D:E<	ED
D<EEEEFc                     d|d ||| ffS )Nr   r   )rC   rl   r$   r.   s       r   break_in_funcr'  '  s    UD)T8<<<r   test_module_for_bdbr  c                  ,    dd l } | j                          y rY   )r(  main)r(  s    r   r  r  ,  s    r   c                  <    d} t                t                d} d} d} y )Nr            )tfunc_firsttfunc_secondlnos    r   
tfunc_mainr3  0  s     
CMN
C
C
Cr   c                      d} d} d} y )Nr   r      r   r1  s    r   r/  r/  8  s    
C
C
Cr   c                      d} y )Nr   r   r1  s    r   r0  r0  =  s    
Cr   c                       e Zd ZdZeZddZy)r  zBase class for all tests.Nc                 &    | j                  |      d r   )failureExceptionr   s     r   r   zBaseTestCase.failE  s     ##C(d2r   r   )r   r   r   r   r~   r   r   r   r   r  r  @  s    #G3r   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 eej"                        d        Zd Zd Zd Zy)StateTestCasez;Test the step, next, return, until and quit 'set_' methods.c                     g d| _         t        |       5 }|j                  t               d d d        y # 1 sw Y   y xY w)N)r-   r   r3  r
  r-   r   r3  r
  r   r`   r/  r
  r-   r   r/  r   r}   r   r  r3  r<   r   s     r   	test_stepzStateTestCase.test_stepM  7    
 t_ 	'NN:&	' 	' 	'   4=c                    dD ]j  }| j                  |      5  ddddddt        dffd	d
dddddig ff|fddg| _        t        |       5 }|j	                  t
               d d d        d d d        l y # 1 sw Y   xY w# 1 sw Y   xY w)N)r   r   r   r=  r
  r>  r?  r   r   )Noner`   r/  r   r-   r/  r`   r-   r5  r/  rA  )subTestrF   r}   r   r  r3  )r<   r   r   s      r    test_step_next_on_last_statementz.StateTestCase.test_step_next_on_last_statementW  s    ( 	/Hx0 
/-Z-Z.gRS}=U.^Q1r{;h\.Z# t_ /NN:./
/ 
/	// /
/ 
/s#   0A=A1A=1A:6A==B	c                     g d| _         t        |       5 }|j                  t               d d d        y # 1 sw Y   y xY w)N)
r=  r
  r>  r	  r-   r5  r3  r
  )r   r`   r0  r
  )r-   r   r0  rA  rB  rC  s     r   	test_nextzStateTestCase.test_nexte  7    
 t_ 	'NN:&	' 	' 	'rF  c                     d}t         |i}t        |      5  g d| _        t        |       5 }|j	                  t
               d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)N9
            def main():
                lno = 3
        )r-   r   r  r	  r-   r   r  rA  )TEST_MODULEr  r}   r   r  r  r<   rV   r  r   s       r   test_next_over_importz#StateTestCase.test_next_over_importp  sl      'G$ 	-DO 4 -F|,-	- 	-
- -	- 	-s"   AAAA	AA'c                     g d| _         t        |       5 }|j                  t               d d d        y # 1 sw Y   y xY w)N)r=  r
  r>  r
  r?  r	  r@  rA  rB  rC  s     r   test_next_on_plain_statementz*StateTestCase.test_next_on_plain_statement~  s7    
 t_ 	'NN:&	' 	' 	'rF  c                     g d| _         t        |       5 }|j                  t               d d d        y # 1 sw Y   y xY w)N)
r=  r
  r>  r
  r?  r   rI  r   r3  r	  rO  rA  rB  rC  s     r   test_next_in_caller_framez'StateTestCase.test_next_in_caller_frame  s7    
 t_ 	'NN:&	' 	' 	'rF  c                     g d| _         t        |       5 }|j                  t               d d d        y # 1 sw Y   y xY w)N)r=  r
  r>  r
  r?  r
  r@  r   r   r5  r/  r
  rO  rA  rB  rC  s     r   test_returnzStateTestCase.test_return  s7    
 t_ 	'NN:&	' 	' 	'rF  c                     g d| _         t        |       5 }|j                  t               d d d        y # 1 sw Y   y xY w)N)
r=  r
  r>  r
  r?  r\  r]  r`  )r   r.  r3  rA  rB  rC  s     r   test_return_in_caller_framez)StateTestCase.test_return_in_caller_frame  rQ  rF  c                     g d| _         t        |       5 }|j                  t               d d d        y # 1 sw Y   y xY w)N)
r=  r
  r>  r
  r?  r
  r@  )r   )r5  rK  rA  rB  rC  s     r   
test_untilzStateTestCase.test_until  rQ  rF  c           	          dt        d      dddddddig ffdd	d
g| _        t        |       5 }|j                  t               d d d        y # 1 sw Y   y xY w)Nr=  r/  )rI  r   r3  rJ  r-   r   r`   )r   )i'  ra  rA  )r'  r}   r   r  r3  rC  s     r   test_until_with_too_large_countz-StateTestCase.test_until_with_too_large_count  sb    %]=5Q%^Q1r{35H(Z	
 t_ 	'NN:&	' 	' 	's   AAc                     g d| _         t        |       5 }|j                  t               d d d        y # 1 sw Y   y xY w)N)
r=  r
  r>  r
  r?  r\  r]  )r   )r-  )r-   r-  r3  rA  rB  rC  s     r   test_until_in_caller_framez(StateTestCase.test_until_in_caller_frame  rQ  rF  c                 <   d t         j                  D        t         j                  d d  d}t        |i}t        |      5  g d| _        dddt        f}t        | |      5 }|j                  t               d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc              3   V   K   | ]!  }|j                   j                  d       r| # yw)_frozen_importlibN)r   
startswith).0items     r   	<genexpr>z*StateTestCase.test_skip.<locals>.<genexpr>  s+      
))*=> 
s   ')rS  )rT  r
  rU  rA  z
importlib*	zipimportzencodings.*rz   )r   	meta_pathrV  r  r}   r   r  r  )r<   rV   r  r{   r   s        r   	test_skipzStateTestCase.test_skip  s    

a  'G$ 	-DO !+}kJD4d+ -v|,-	- 	-- -	- 	-s#   !BB5BB	BBc                 `    t        dg      }| j                  |j                  d       d       y )Nz	anything*rz   F)r7   assertIsis_skipped_module)r<   bdbs     r   test_skip_with_no_name_modulez+StateTestCase.test_skip_with_no_name_module  s)     }%c++D159r   c                     ddg| _         t        |       5 }| j                  t        |j                  t
               d d d        y # 1 sw Y   y xY w)Nr=  )r   )r}   r   assertRaisesr   r  r3  rC  s     r   	test_downzStateTestCase.test_down  sL     &z
 t_ 	Dh
C	D 	D 	D   &AAc                     g d| _         t        |       5 }|j                  t               d d d        y # 1 sw Y   y xY w)N)r=  r
  r>  r
  r?  r\  r]  rA  rB  rC  s     r   test_upzStateTestCase.test_up  rE  rF  N)r   r   r   r   rD  rM  rP  rX  rZ  r^  rb  rd  rf  rh  rj  r   r   rs  rt  ry  r|  r  r   r   r   r;  r;  J  si    E'/	'-
''
'	'	''	' - -2:D'r   r;  c                   R    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y)BreakpointTestCasezTest the breakpoint set method.c                     ddg| _         t        |       5 }| j                  t        |j                  t
               d d d        y # 1 sw Y   y xY w)NrT  )r   )z/non/existent/module.pyr`   )r}   r   r{  r   r  r  rC  s     r   test_bp_on_non_existent_modulez1BreakpointTestCase.test_bp_on_non_existent_module  sK    ')R
 t_ 	FhE	F 	F 	Fr}  c                    d}t         |i}t        |      5  ddt        dffg| _        t	        |       5 }| j                  t        |j                  t               d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrS  rT  r   r5  )	rV  r  TEST_MODULE_FNAMEr}   r   r{  r   r  r  rW  s       r   test_bp_after_last_statementz/BreakpointTestCase.test_bp_after_last_statement  s      'G$ 	J+g8I17M-NDO 4 JF!!(FNNLIJ		J 	JJ J		J 	Js"   A6&A*A6*A3	/A66A?c                 D   d}t         |i}t        |      5  dt        dt        d      dt        dt        d      dddddd	d	id	gffddddd
d	id
gffdg
| _        t        |       5 }|j                  t               d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)N
            def func():
                lno = 3

            def main():
                for i in range(2):
                    func()
        rT  rU   TrI  r   r  rJ  r-   r   r`   r   rA  rV  r  r'  r  r}   r   r  r  rW  s       r   test_temporary_bpz$BreakpointTestCase.test_temporary_bp  s      'G$ 	-+!&*;TB+!&*;TB+>FaUQCL1>FaUQCL1:DO 4 -F|,-	- 	-- -	- 	-s$   AB#B
9B
B	BBc                 d   d}t         |i}t        |      5  dt        dt              dt        dt        d      dddddd	dd
d
ig ffddddddd	ddd
idgffddddd	dd
dig ffdg| _        t        |       5 }|j                  t               d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)N
            def func():
                lno = 3

            def main():
                for i in range(3):
                    func()
        rT  rU   r  T)r   r   rJ  r-   r   r`   )r   r  rI  r   rU   r   r`   r   r   r  rA  r  rW  s       r   test_disabled_temporary_bpz-BreakpointTestCase.test_disabled_temporary_bp/  s      'G$ 	-+!&*;<+!&*;TB+3E+>FaUBK03D#3E#>FaUQCL13D#>FaUBK0:DO 4 -F|,-	- 	-- -	- 	-s$   AB&3B	B&B#	B&&B/c           
         d}t         |i}t        |      5  dt        dt        dd      dddd	dd
d	ig ffdg| _        t        |       5 }|j                  t               d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz
            def func(a):
                lno = 3

            def main():
                for i in range(3):
                    func(i)
        rT  rU   Fza == 2r  rJ  r-   r   r`   rA  r  rW  s       r   test_bp_conditionz$BreakpointTestCase.test_bp_conditionK  s      'G$ 	-+!&*;UHM+>FaUBK0:	DO 4 -F|,-	- 	-- -	- 	-#   1A:A.A:.A7	3A::Bc           
         d}t         |i}t        |      5  dt        dt        dd      dddd	dd
d
ig ffdg| _        t        |       5 }|j                  t               d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nzk
            def func(a):
                lno = 3

            def main():
                func(0)
        rT  rU   Fz1 / 0r  rJ  r-   r   r`   rA  r  rW  s       r   )test_bp_exception_on_condition_evaluationz<BreakpointTestCase.test_bp_exception_on_condition_evaluation_  s      'G$ 	-+!&*;UGL+>FaUBK0:	DO 4 -F|,-	- 	-- -	- 	-r  c                    d}t         |i}t        |      5  dt        dt              dddddddd	d
ig ffdg| _        t        |       5 }|j                  t               d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  rT  rU   r  r(   r  rJ  r-   r   r`   r   rA  r  rW  s       r   test_bp_ignore_countz'BreakpointTestCase.test_bp_ignore_countr  s      'G$ 		-+!&*;<+2C+.FaUBK0*DO 4 -F|,-		- 		-- -		- 		-r  c                 \   d}t         |i}t        |      5  dt        dt              dt        dt              dddddddd	dd
dig ffddddd	dd
d
ig ffddd	ddd
ig ffdg| _        t        |       5 }|j                  t               d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  rT  rU   r  r  r  rJ  r-   r   r   r`   r  r  rA  r  rW  s       r    test_ignore_count_on_disabled_bpz3BreakpointTestCase.test_ignore_count_on_disabled_bp  s      'G$ 	-+!&*;<+!&*;<+2C+2D+.FaUBK02C#.FaUBK0.FaUBK0*DO 4 -F|,-	- 	-- -	- 	-s$   AB"/BB"B	B""B+c                 `   d}t         |i}t        |      5  ddt        dffddt        dffddt        dffddddd	d
d
ig ffdddd	dd
ig ffdt        dffddddd	ddig ffdg| _        t	        |       5 }|j                  t               d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz
            def func():
                lno = 3
                lno = 4

            def main():
                for i in range(3):
                    func()
        rT  r   r   r  r5  rJ  r-   rU   r`   r   )rI  r5  rU   r   rA  )rV  r  r  r}   r   r  r  rW  s       r   test_clear_two_bp_on_same_linez1BreakpointTestCase.test_clear_two_bp_on_same_line  s      'G$ 	-+7=NPQ<R2S+7=NPQ<R2S+7=NPQ<R2S+.FaUBK0.FaUBK07=NPQ<R2S#.FaUBK0*	DO 4 -F|,-	- 	-- -	- 	-s$   AB$1BB$B!	B$$B-c                     ddt         dffg| _        t        |       5 }| j                  t        |j
                  t               d d d        y # 1 sw Y   y xY w)NrT  r   r`   )rF   r}   r   r{  r   r  r  rC  s     r   test_clear_at_no_bpz&BreakpointTestCase.test_clear_at_no_bp  sS    ''Ha=)A
 t_ 	FhE	F 	F 	Fs   &AAc                    t                t               }|j                  t              }|j	                  t        d       | j                  |j                         |dgi       t               }|j	                  t        d       |j	                  t        d       |j	                  t        d       | j                  |j                         |dgi       | j                  |j                         |g di       |j                  t        d       | j                  |j                         |dgi       | j                  |j                         |g di       t               }| j                  |j                         |dgi       | j                  |j                         |g di       | j                  |j                         |g di       |j                  t        d       | j                  |j                         |dgi       | j                  |j                         |ddgi       | j                  |j                         |g di       t               }|j	                  t        d       | j                  |j                         |dgi       | j                  |j                         |ddgi       | j                  |j                         |g di       | j                  |j                         |g di       t                t               }|j	                  t        d	       | j                  |j                         |dgi       | j                  |j                         |ddgi       | j                  |j                         |g di       | j                  |j                         |g di       | j                  |j                         |d	gi       y )
Nr`   r   r   r5  )r`   r   r   r5  )r   r   r5  r,  )r   r5  r,  r-  )r   r7   r   rF   rP   assertEqualget_all_breaksrk   )r<   db1rl   db2db3db4db5s          r   (test_load_bps_from_previous_Bdb_instancez;BreakpointTestCase.test_load_bps_from_previous_Bdb_instance  s   eH%h"++-s|<eh"h"h"++-s|<++-|/DE!$++-s|<++-y/ABe++-s|<++-y/AB++-y/AB!$++-s|<++-1v?++-y/ABeh"++-s|<++-1v?++-y/AB++-y/ABeh"++-s|<++-1v?++-y/AB++-y/AB++-s|<r   N)r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r   r   r   r  r    s?    )FJ-.-8-(-&-*-6-2F(=r   r  c                       e Zd ZdZd Zd Zy)RunTestCasez Test run, runeval and set_trace.c                     d}g d| _         t        |       5 }|j                  t        t	        j
                  |      dd             d d d        y # 1 sw Y   y xY w)Nz
            lno = 2
        ))r-   r   <module>r
  )r   r   r  rA  z<string>exec)r}   r   runcompiler  r   )r<   rV   r   s      r   test_run_stepzRunTestCase.test_run_step  sT    
 t_ 	KJJwxt4j&IJ	K 	K 	Ks   0AAc                     d}t         |i}t        |      5  g d| _        dd l}t	        |       5 }|j                  dt               t                      d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrS  )
)r-   r`   r  r
  )r   r   r*  r
  )r-   r   r*  r
  )r   r   r*  r
  )r   r`   r  rA  r   ztest_module_for_bdb.main())rV  r  r}   r(  r   runevalrG   locals)r<   rV   r  r(  r   s        r   test_runeval_stepzRunTestCase.test_runeval_step  s      'G$ 
	RDO '4 RF;WYQR
	R 
	RR R
	R 
	Rs"   A0$A$A0$A-	)A00A9N)r   r   r   r   r  r  r   r   r   r  r    s    *
KRr   r  c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)IssuesTestCasezTest fixed bdb issues.c                    d}d}t         |d|i}t        |      5  dt        dd      ddd	d
dddig ffdddddg
| _        t	        |       5 }|j                  t               d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz
            from test_module_for_bdb_2 import func
            def main():
                func()
                lno = 5
        z9
            def func():
                lno = 3
        test_module_for_bdb_2rT  rU   ztest_module_for_bdb_2.pyr  rJ  r-   r   r`   r
  )r   r   rU   )r-   r,  r*  rA  )rV  r  r'  r}   r   r  r  )r<   code_1code_2r  r   s        r   +test_step_at_return_with_no_trace_in_callerz:IssuesTestCase.test_step_at_return_with_no_trace_in_caller  s    
 #V
 G$ 
	-+!&*DE+.FaUBK0*%*#*DO 4 -F|,-
	- 
	-- -
	- 
	-s#   /A<	A0A<0A9	5A<<Bc                    d}t         |i}dD ]  }| j                  |      5  t        |      5  dt        dt              dddd	dd
d
ig ff|fg| _        |dk(  r(| j
                  j                  dddt        fdddg       n| j
                  j                  ddg       t        |       5 }|j                  t               d d d        d d d        d d d         y # 1 sw Y   xY w# 1 sw Y    xY w# 1 sw Y   xY w)Nz
            def test_gen():
                yield 0
                lno = 4
                return 123

            def main():
                it = test_gen()
                next(it)
                next(it)
                lno = 11
        )r   r   r   rH  rT  test_genr  rJ  r-   r   r`   r   r   
   r*  r
  )r   r  r*  rA  r-   r5  r  )rV  rL  r  r'  r  r}   r   r  r   r  r  )r<   rV   r  r   r   s        r   #test_next_until_return_in_generatorz2IssuesTestCase.test_next_until_return_in_generator0  s   
  '3 	5Hx0 5#G, 53)*6GH3nJ!A<xl	'DO  8+..)2v}Ey3z ..4jB #4 5F|45%55 5	5(5 5%5 55 5s;   C1A:C%(C	>C%C1C"C%%C.*C11C:	c                 ,   d}t         |i}t        |      5  dt        dt              dddddddig ffd	d
d	dd	dd	dddt        fdddg| _        t        |       5 }|j                  t               d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz
            def test_gen():
                yield 0
                lno = 4
                yield 1
                return 123

            def main():
                for i in test_gen():
                    lno = 10
                lno = 11
        rT  r  r  rJ  r-   r   r`   r	  r  )r-   r,  r  )r-   r-  r  r   	   r*  r
  )r-      r*  rA  	rV  r  r'  r  r  r}   r   r  r  rW  s       r   'test_next_command_in_generator_for_loopz6IssuesTestCase.test_next_command_in_generator_for_loopY  s      'G$ 	-+!*.?@+J!A4'''a7$DO 4 -F|,-	- 	-- -	- 	-s$   AB
A>-B
>B	B

Bc                 $   d}t         |i}t        |      5  dt        dt              dddddddig ffd	d
d	dddt        fdddg| _        t        |       5 }|j                  t               d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)N4  
            def test_subgen():
                yield 0
                return 123

            def test_gen():
                x = yield from test_subgen()
                return 456

            def main():
                for i in test_gen():
                    lno = 12
                lno = 13
        rT  r  r  rJ  r-   r.  r`   r	  )r-      r  r   r  r*  r
  r-      r*  rA  r  rW  s       r   /test_next_command_in_generator_with_subiteratorz>IssuesTestCase.test_next_command_in_generator_with_subiteratorx  s      'G$ 	-+!*.?@+.J!A4*'*b&-8*$*	DO 4 -F|,-	- 	-- -	- 	-s#   =BA:)B:B	?BBc                 4   d}t         |i}t        |      5  dt        dt              dddddddig ffd	d
ddt        fd	d
ddt        fdddg| _        t        |       5 }|j                  t               d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  rT  test_subgenr  rJ  r-   r   r`   r`  r   r.  r  r  r*  r
  r  rA  r  rW  s       r   1test_return_command_in_generator_with_subiteratorz@IssuesTestCase.test_return_command_in_generator_with_subiterator  s      'G$ 	-+!-1BC+nMQqE2;7la];lb&-8j$j	DO 4 -F|,-	- 	-- -	- 	-s$   ABB1BB	BBN)	r   r   r   r   r  r  r  r  r  r   r   r   r  r    s     -<'5R->->-r   r  c                       e Zd Zd Zy)TestRegressionsc                 ~    | j                  dt               j                  t        j                         d f             y )NzWarning: lineno is None)assertInr7   format_stack_entryr   	_getframerp   s    r   !test_format_stack_entry_no_linenoz1TestRegressions.test_format_stack_entry_no_lineno  s-    /e../FG	Ir   N)r   r   r   r  r   r   r   r  r    s    Ir   r  __main__r   )0r   rx  r   r   r)   unittestr  rH   r!  
contextlibr   	itertoolsr   r   test.supportr   r   r   	Exceptionr
   r   r   r   r~   r   r5   r7   rx   r   r  r  rF   r'  rV  r  r  r3  r/  r0  TestCaser  r;  r  r  r  r  r   r*  r   r   r   <module>r     sZ  0d  
 	     % $ & " # $9 # E| E H\ H A, A '*>/$(( >/@w1S w1r-/ -/^H)T    #+e$ = $%' 
38$$ 3u'L u'ni= i=X R,  RDe-\ e-PIh'' I zHMMO r   