o
    GXh                     @   s  	 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 deZG d	d
 d
eZG dd deZG dd deZd Zdd Zdd ZG dd dejZG dd deZG dd dZd7ddZe	dd ZeddfddZd Z e d! Z!d"d# Z"d$d% Z#d&d' Z$d(d) Z%G d*d+ d+ej&Z'G d,d- d-e'Z(G d.d/ d/e'Z)G d0d1 d1e'Z*G d2d3 d3e'Z+G d4d5 d5ej&Z,e-d6kre.  dS dS )8    N)contextmanager)islicerepeat)import_helper)	os_helper)
patch_listc                   @      e Zd ZdS )BdbExceptionN__name__
__module____qualname__ r   r   7/opt/python-3.10.19/usr/lib/python3.10/test/test_bdb.pyr	   A       r	   c                   @   r   )BdbErrorNr
   r   r   r   r   r   B   r   r   c                   @   r   )BdbSyntaxErrorNr
   r   r   r   r   r   C   r   r   c                   @   r   )BdbNotExpectedErrorNr
   r   r   r   r   r   D   r   r   c                   C   s   t j  d S N)_bdb
BreakpointZclearBreakpointsr   r   r   r   reset_BreakpointL   s   r   c                  C   s   dd t jjD } | sdS d}| D ];}|sd}d}|jrdnd}|jr%d	nd
}|d|j|||j|jtj	
|j|jf 7 }|jrH|d|jf 7 }|d7 }q|S )Nc                 S   s   g | ]}|r|qS r   r   ).0bpr   r   r   
<listcomp>P       z$info_breakpoints.<locals>.<listcomp> Fz!BpNum Temp Enb Hits Ignore Where
Tzyes zno  Zyeszno z%-5d %s %s %-4d %-6d at %s:%dz
	stop only if %s
)r   r   Z
bpbynumber	temporaryenablednumberhitsignoreospathbasenamefilelinecond)bp_listZheader_addedr   infoZdispZenabr   r   r   info_breakpointsO   s&   
r+   c                       sl   e Zd Z	  fddZ		d fdd	Z fddZd	d
 Zdd Zdd Zdd Z	dd Z
dd Z  ZS )Bdbc                    s   d | _ t |||S r   )	currentbpsupertrace_dispatch)selfframeeventarg	__class__r   r   r/   g   s   zBdb.trace_dispatchFNc                    s   t |tr*|tkrt }nt|d d }|j}t||}|j}	|	j	}|	j
}|	j}t j|||||d}
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   )r0   filenamelinenor   r(   r7   globals_modulefunccoderesr4   r   r   rD   k   s    


zBdb.set_breakc                    s4   t  ||\| _| _| j| j d | _| j| jfS Nr   )r.   	get_stackstackindexr1   )r0   ftr4   r   r   rM      s   zBdb.get_stackc                 C   s   	 |  |}| jd7  _d S N   )get_bpbynumberr"   r0   Zbpnumr   r   r   r   
set_ignore   s   
zBdb.set_ignorec                 C      |  |}d|_d S )NTrT   r   rU   r   r   r   
set_enable      

zBdb.set_enablec                 C   rW   )NFrX   rU   r   r   r   set_disable   rZ   zBdb.set_disablec                 C   s   |  ||}|rt|d S r   )clear_breakr   )r0   fnamerF   errr   r   r   	set_clear   s   zBdb.set_clearc                 C   s4   	 | j std|  j d8  _ | j| j  d | _d S )NzOldest framerS   r   )rO   r   rN   r1   r0   r   r   r   set_up   s
   z
Bdb.set_upc                 C   sB   	 | j d t| jkrtd|  j d7  _ | j| j  d | _d S )NrS   zNewest framer   )rO   lenrN   r   r1   r`   r   r   r   set_down   s
   zBdb.set_down)FNN)r   r   r   r/   rD   rM   rV   rY   r[   r_   ra   rc   __classcell__r   r   r4   r   r,   d   s    r,   c                       s   e Zd Z	 d+ fdd	Zdd Z fddZd	d
 Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd,d%d&Zd'd( Zd)d* Z  ZS )-TracerNFc                    s<   t  j|d || _|| _|d urd| nd | _|   d S )NskipzDry-run results for %s:)r.   __init__
expect_setdry_runheader	init_test)r0   ri   rg   rj   	test_caser4   r   r   rh      s   zTracer.__init__c                 C   sB   d | _ d| _d | _tt| jdd d| _tt| jdd d| _d S )Nr      rS   )
cur_exceptexpect_set_nobreakpoint_hitslistr   ri   expected_listset_listr`   r   r   r   rl      s
   zTracer.init_testc              
      sp   | j d ur| j |dkr0zt |||}|W S  ty/ } z|| _ | jW  Y d }~S d }~ww t |||S N	exception)ro   r.   r/   r	   )r0   r1   r2   r3   rK   er4   r   r   r/      s   
zTracer.trace_dispatchc                 C   s(   |  |sd S | d|| |   d S )Ncall)Z	stop_hereprocess_eventnext_set_method)r0   r1   Zargument_listr   r   r   	user_call   s   
zTracer.user_callc                 C   sZ   |  d| | jr | jr t d}|dD ]}td|  q|   d | _|   d S )Nr'   r   z  )	ry   rj   rq   r+   stripsplitprintdelete_temporariesrz   )r0   r1   r*   r'   r   r   r   	user_line   s   zTracer.user_linec                 C   s   |  d|| |   d S )Nreturn)ry   rz   )r0   r1   Zreturn_valuer   r   r   user_return   s   zTracer.user_returnc                 C   s   || _ | d| |   d S ru   )exc_infory   rz   )r0   r1   r   r   r   r   user_exception   s   zTracer.user_exceptionc                 C   s   | j g}||f| _d S r   )r-   rq   )r0   r3   r)   r   r   r   do_clear   s   zTracer.do_clearc                 C   s(   | j r| j d D ]	}| | qd S d S rR   )rq   Zclear_bpbynumber)r0   nr   r   r   r      s
   zTracer.delete_temporariesc                 C   sP   |  j d7  _ z	| jd| _W n ty   td| j  w | jd| _d S )NrS   r   z-expect_set list exhausted, cannot pop item %d)rp   rs   popexpect
IndexErrorr   rt   	set_tupler`   r   r   r   pop_next   s   zTracer.pop_nextc                    s  d }|dkrj d }|| jd ur"js"jg}|g f_|_  jr4j d S j	rE
j	d |d   |dv rPd d S tj	dkr|dkrj	d \ }t  }jssdj  
|jd d	 
 fd
d|D fddjd D d 
t|jd d d S |dkrtj d j	d sÈdjj f  d S d S d S d S )Nrv   rn   r   zWrong event type)rx   r      r'   z(No breakpoints hit at expect_set item %dzBreakpoint numbers do not matchc                    s   g | ]} | qS r   r   r   r   )bpsr   r   r      r   z(Tracer.process_event.<locals>.<listcomp>c                    s   g | ]}  |jqS r   )rT   r!   r   r`   r   r   r   !  s    zWrong breakpoint hit countrS   zWrong temporary breakpointsz/Wrong exception at expect_set item %d, got '%s')r   rM   r-   rq   r2   r   rj   print_staterk   r   check_equalcheck_lno_namecheck_expect_max_sizerb   sortedkeysraise_not_expectedrp   r8   )r0   r2   r1   argstbr)   ZtemporariesZbpnumsr   )r   r0   r   ry      sb   



zTracer.process_eventc                 C   s&   ||krd S |  d|| j|f  d S )Nz"%s at expect_set item %d, got '%s')r   rp   )r0   Zexpectedresultmsgr   r   r   r   -  s
   

zTracer.check_equalc                 C   sZ   	 t | j}|dkr|  }| | jd |d |dkr+| | jd | jjjd d S d S )NrS   zWrong line numberrn   zWrong function name)rb   r   lno_abs2relr   r1   f_coderC   )r0   srF   r   r   r   r   3  s   
zTracer.check_lno_namec                 C   s&   t | j|krtd| j| jf d S )Nz'Invalid size of the %s expect tuple: %s)rb   r   r   r2   )r0   sizer   r   r   r   =  s
   
zTracer.check_expect_max_sizec                 C   s<   |  | jjj}| jj}||  tkr|| jjj d S |S rR   )canonicr1   r   rA   f_linenor:   rB   r0   r]   rF   r   r   r   r   B  s   zTracer.lno_abs2relc                 C   s.   |r|  ||  tkr| jjj| d S |S rR   )r   r:   r1   r   rB   r   r   r   r   lno_rel2absH  s   zTracer.lno_rel2absc                 C   s   |   }| jjj}d| j||f }| jrLd}| jd D ]}|dkr%|d7 }|d|| |jf 7 }q|d7 }d| d t| jd  d	 }|d| 7 }n| jd
kr[|d| j	d j
 7 }|d7 }|dt| j d S )Nz('%s', %d, '%s'{r   z, z%s: %s}(rS   )rv   z),     ,)r   r1   r   rC   r2   rq   rT   r!   r9   r   r   ljustr   )r0   rF   rC   stater   r   r   r   r   	get_stateM  s    

zTracer.get_statec                 C   s:   |d ur| j dkrt  t| td| j |  f  d S )NrS   z%d: %s)rp   r~   r   )r0   rk   r   r   r   r   _  s   zTracer.print_statec                 C   s2   |d7 }|dt | j 7 }|d|   7 }t|)Nr   z  Expected: %s
z  Got:      )r9   r   r   r   r0   r   r   r   r   r   e  s   zTracer.raise_not_expectedc                 C   sP  | j d }t| j dkr| j d nd }t| d| }|dv r#|  d S |dv r.|| j d S |dkrId }|rA| | jjj|d }|| j| d S |rO|dv sS|d	v r|d
v rp|^}}}| ||}||g}|| ||  n|dv ry||  n|d	v r|  d | _| 	  | j
r|   n| jr|   | d |   d S td| j  )Nr   rn   rS   Z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   rb   getattrr1   r   r   rA   extendr2   r   rj   r   r   r   r   rz   r   )r0   set_typer   Z
set_methodrF   r]   Zremainr   r   r   rz   k  sP   







zTracer.next_set_method)NFNr   )r   r   r   rh   rl   r/   r{   r   r   r   r   r   r   ry   r   r   r   r   r   r   r   r   rz   rd   r   r   r4   r   re      s,    	
2

re   c                   @   s*   e Zd Z	 dddZdd Zd	ddZdS )
	TracerRunNc                 C   s2   || _ |j| _t|j|| j| d| _d | _d S )N)rg   rj   rm   )rm   rj   re   ri   idtracer_original_tracer)r0   rm   rg   r   r   r   rh     s   

zTracerRun.__init__c                 C   s   t   t | _| jS r   )r   sysgettracer   r   r`   r   r   r   	__enter__  s   
zTracerRun.__enter__c                 C   s   t   t| j d}| jjr|d7 }|d| jj 7 }|d urHtt|rHt	|t
rH|jrH|jd }|r9|d| 7 }| jrBt| dS | j| |r[| jrSt| d S | j| d S d S )Nr   z+All paired tuples have not been processed, zthe last one was number %dr   r   T)r   r   settracer   r   rt   rp   
issubclassr   r8   BaseExceptionr   rj   r~   rm   fail)r0   Ztype_value	traceback	not_emptyerr_msgr   r   r   __exit__  s,   
zTracerRun.__exit__r   )NNN)r   r   r   rh   r   r   r   r   r   r   r     s
    
r   c              	   C   s   	 dd }ddg}| | t }d|_dd |_t|tdt||_t| , t	||d	}|
t W d    n1 s@w   Y  W d    d S W d    d S 1 sXw   Y  d S )
Nc                 s   s8    z	 t | }t |}|V  |V  q ty   Y d S w r   )r   StopIteration)abxyr   r   r   gen  s   zrun_test.<locals>.genr   r   Tc                   S   s   d S r   r   r   r   r   r   <lambda>  s    zrun_test.<locals>.<lambda>r   rf   )r   BaseTestCaserj   r   rr   r   iterri   create_modulesr   runcalltfunc_import)modulesrt   rg   r   sltestr   r   r   r   run_test  s   2


"r   c                 c   s    t  i tjt  zG| D ],}|d }t|ddd}|t	
| |  W d    n1 s3w   Y  t| qt  d V  W | D ]}t| qHtj  n| D ]}t| qXtj  w W d    d S 1 sqw   Y  d S )N.pywzutf-8)encoding)r   Ztemp_cwdr   r$   appendr#   getcwdopenwritetextwrapdedent	linecache
checkcacher<   invalidate_cachesr   Zforgetr   )r   mr]   rP   r   r   r   r     s&   
"r   Fc                 C   s   d|d ||| ffS )Nr   r   )r7   r]   r   r(   r   r   r   break_in_func&  s   r   test_module_for_bdbr   c                  C   s   dd l } |   d S rL   )r   main)r   r   r   r   r   +  s   r   c                  C   s    d} t   t  d} d} d} d S )Nrn            )tfunc_firsttfunc_secondlnor   r   r   
tfunc_main/  s   r   c                  C   s   d} d} d} d S )Nrn   r      r   r   r   r   r   r   7  s   r   c                  C   s   d} d S )Nrn   r   r   r   r   r   r   <  s   r   c                   @   s   e Zd Z	 eZdddZdS )r   Nc                 C   s   |  |d r   )ZfailureExceptionr   r   r   r   r   D  s   zBaseTestCase.failr   )r   r   r   rj   r   r   r   r   r   r   ?  s    r   c                   @   s   e Zd Z	 dd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zeejdd Zdd Zdd Zdd ZdS ) StateTestCasec                 C   B   g d| _ t| }|t W d    d S 1 sw   Y  d S )N)r'   rn   r   r   r'   r   r   r   rx   rS   r   r   r'   rn   r   r   ri   r   r   r   r0   r   r   r   r   	test_stepL     

"zStateTestCase.test_stepc                 C   s   dD ]M}| j |d= 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| }|t W d    n1 s;w   Y  W d    n1 sJw   Y  qd S )N)r   r   r   r   r   r   r   r   r   )NonerS   r   r   r'   r   rS   r'   r   r   r   )subTestr:   ri   r   r   r   )r0   r   r   r   r   r    test_step_next_on_last_statementV  s    
z.StateTestCase.test_step_next_on_last_statementc                 C   r   )N)
r   r   r   r   r'   r   r   r   )rx   rS   r   r   )r'   rn   r   r   r   r   r   r   r   	test_nextd     

"zStateTestCase.test_nextc              	   C   s   d}t |i}t|/ g d| _t| }|t W d    n1 s$w   Y  W d    d S W d    d S 1 s<w   Y  d S )N9
            def main():
                lno = 3
        )r'   rn   r   r   r'   r   r   r   )TEST_MODULEr   ri   r   r   r   r0   rJ   r   r   r   r   r   test_next_over_importo  s   


"z#StateTestCase.test_next_over_importc                 C   r   )N)r   r   r   r   r   r   r   r   r   r   r   r   r   test_next_on_plain_statement}  s   

"z*StateTestCase.test_next_on_plain_statementc                 C   r   )N)
r   r   r   r   r   r   r  r   r   r   r  r   r   r   r   r   r   test_next_in_caller_frame  s   

"z'StateTestCase.test_next_in_caller_framec                 C   r   )N)r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   test_return  s   

"zStateTestCase.test_returnc                 C   r   )N)
r   r   r   r   r   r  r  r  )r   r   r   r   r   r   r   r   r   test_return_in_caller_frame  r  z)StateTestCase.test_return_in_caller_framec                 C   r   )N)
r   r   r   r   r   r   r   )r   )r   r  r   r   r   r   r   r   
test_until  r  zStateTestCase.test_untilc              	   C   sb   dt ddddddddig ffdd	d
g| _t| }|t W d    d S 1 s*w   Y  d S )Nr   r   )r  rn   r   r  r'   rn   rS   )r   )i'  r  r   )r   ri   r   r   r   r   r   r   r   test_until_with_too_large_count  s   
"z-StateTestCase.test_until_with_too_large_countc                 C   r   )N)
r   r   r   r   r   r  r  )r   )r   )r'   r   r   r   r   r   r   r   r   test_until_in_caller_frame  r  z(StateTestCase.test_until_in_caller_framec              	   C   s   dd t jD t jd d < d}t|i}t|7 g d| _dddtf}t| |d}|t W d    n1 s9w   Y  W d    d S W d    d S 1 sQw   Y  d S )	Nc                 s   s     | ]}|j d r|V  qdS )_frozen_importlibN)r   
startswith)r   itemr   r   r   	<genexpr>  s    

z*StateTestCase.test_skip.<locals>.<genexpr>r	  )r
  r   r  r   z
importlib*Z	zipimportzencodings.*rf   )r   	meta_pathr  r   ri   r   r   r   )r0   rJ   r   rg   r   r   r   r   	test_skip  s   

"zStateTestCase.test_skipc                 C   s"   t dgd}| |d d d S )Nz	anything*rf   F)r,   ZassertIsZis_skipped_module)r0   bdbr   r   r   test_skip_with_no_name_module  s   z+StateTestCase.test_skip_with_no_name_modulec                 C   H   ddg| _ t| }| t|jt W d    d S 1 sw   Y  d S )Nr   )r   )ri   r   assertRaisesr   r   r   r   r   r   r   	test_down  s
   
"zStateTestCase.test_downc                 C   r   )N)r   r   r   r   r   r  r  r   r   r   r   r   r   test_up  r   zStateTestCase.test_upN)r   r   r   r   r  r  r  r  r  r  r  r  r  r  r   r   r  r  r!  r$  r%  r   r   r   r   r   I  s$    


r   c                   @   sf   e Zd Z	 dd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )BreakpointTestCasec                 C   r"  )Nr
  )r   )z/non/existent/module.pyrS   )ri   r   r#  r   r   r   r   r   r   r   test_bp_on_non_existent_module  s
   
"z1BreakpointTestCase.test_bp_on_non_existent_modulec              	   C   s   d}t |i}t|6 ddtdffg| _t| }| t|jt W d    n1 s+w   Y  W d    d S W d    d S 1 sCw   Y  d S )Nr	  r
  r   r   )	r  r   TEST_MODULE_FNAMEri   r   r#  r   r   r   r  r   r   r   test_bp_after_last_statement
  s   

"z/BreakpointTestCase.test_bp_after_last_statementc                 C   s   d}t |i}t|Q 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| }|t W d    n1 sFw   Y  W d    d S W d    d S 1 s^w   Y  d S )N
            def func():
                lno = 3

            def main():
                for i in range(2):
                    func()
        r
  rI   Tr  rn   r   r  r'   r   rS   rn   r   r  r   r   r(  ri   r   r   r   r  r   r   r   test_temporary_bp  s"   



	
"z$BreakpointTestCase.test_temporary_bpc                 C   s   d}t |i}t|a 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| }|t W d    n1 sVw   Y  W d    d S W d    d S 1 snw   Y  d S )N
            def func():
                lno = 3

            def main():
                for i in range(3):
                    func()
        r
  rI   r+  T)r   rn   r  r'   r   rS   )r   r/  r  r   rI   r   rS   rn   r   r2  r   r,  r  r   r   r   test_disabled_temporary_bp.  s,   


"z-BreakpointTestCase.test_disabled_temporary_bpc              
   C   s   d}t |i}t|@ dtdtdddddd	dd
d	ig ffdg| _t| }|t W d    n1 s5w   Y  W d    d S W d    d S 1 sMw   Y  d S )Nz
            def func(a):
                lno = 3

            def main():
                for i in range(3):
                    func(i)
        r
  rI   Fza == 2r+  r  r'   r   rS   r   r,  r  r   r   r   test_bp_conditionJ  s   

"z$BreakpointTestCase.test_bp_conditionc              
   C   s   d}t |i}t|@ dtdtdddddd	dd
d
ig ffdg| _t| }|t W d    n1 s5w   Y  W d    d S W d    d S 1 sMw   Y  d S )Nzk
            def func(a):
                lno = 3

            def main():
                func(0)
        r
  rI   Fz1 / 0r+  r  r'   r   rS   r   r,  r  r   r   r   )test_bp_exception_on_condition_evaluation^  s   

"z<BreakpointTestCase.test_bp_exception_on_condition_evaluationc                 C   s   d}t |i}t|@ dtdtdddddddd	d
ig ffdg| _t| }|t W d    n1 s5w   Y  W d    d S W d    d S 1 sMw   Y  d S )Nr*  r
  rI   r+  r"   r2  r  r'   r   rS   rn   r   r,  r  r   r   r   test_bp_ignore_countq  s   

"z'BreakpointTestCase.test_bp_ignore_countc                 C   s   d}t |i}t|] 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| }|t W d    n1 sRw   Y  W d    d S W d    d S 1 sjw   Y  d S )Nr.  r
  rI   r+  r7  r1  r  r'   r   rn   rS   r3  r0  r   r,  r  r   r   r    test_ignore_count_on_disabled_bp  s*   

"z3BreakpointTestCase.test_ignore_count_on_disabled_bpc                 C   s   d}t |i}t|e 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| }|t W d    n1 sZw   Y  W d    d S W d    d S 1 srw   Y  d S )Nz
            def func():
                lno = 3
                lno = 4

            def main():
                for i in range(3):
                    func()
        r
  r   r   r+  r   r  r'   rI   rS   r   )r  r   rI   rn   r   )r  r   r(  ri   r   r   r   r  r   r   r   test_clear_two_bp_on_same_line  s$   	


"z1BreakpointTestCase.test_clear_two_bp_on_same_linec                 C   sP   ddt dffg| _t| }| t|jt W d    d S 1 s!w   Y  d S )Nr
  r   rS   )r:   ri   r   r#  r   r   r   r   r   r   r   test_clear_at_no_bp  s
   
"z&BreakpointTestCase.test_clear_at_no_bpc                 C   sh  t   t }|t}|td | | |dgi t }|td |td |td | | |dgi | | |g di |td | | |dgi | | |g di t }| | |dgi | | |g di | | |g di |td | | |dgi | | |ddgi | | |g di t }|td | | |dgi | | |ddgi | | |g di | | |g di t   t }|td	 | | |dgi | | |ddgi | | |g di | | |g di | | |d	gi d S )
NrS   rn   r   r   )rS   rn   r   r   )rn   r   r   r   )r   r   r   r   )r   r,   r   r:   rD   ZassertEqualZget_all_breaksr\   )r0   Zdb1r]   Zdb2Zdb3Zdb4Zdb5r   r   r   (test_load_bps_from_previous_Bdb_instance  sH   
z;BreakpointTestCase.test_load_bps_from_previous_Bdb_instanceN)r   r   r   r'  r)  r-  r4  r5  r6  r8  r9  r:  r;  r<  r   r   r   r   r&     s    r&  c                   @   s   e Zd Z	 dd Zdd ZdS )RunTestCasec                 C   sT   d}g d| _ t| }|tt|dd W d    d S 1 s#w   Y  d S )Nz
            lno = 2
        ))r'   rn   <module>r   )r   rn   r>  r   z<string>exec)ri   r   runcompiler   r   )r0   rJ   r   r   r   r   test_run_step  s
   

"zRunTestCase.test_run_stepc              	   C   s   d}t |i}t|7 g d| _dd l}t| }|dt t  W d    n1 s,w   Y  W d    d S W d    d S 1 sDw   Y  d S )Nr	  )
)r'   rS   r>  r   )rx   rn   r   r   )r'   r   r   r   )r   r   r   r   )r   rS   r>  r   r   ztest_module_for_bdb.main())r  r   ri   r   r   Zrunevalr;   locals)r0   rJ   r   r   r   r   r   r   test_runeval_step  s   


	"zRunTestCase.test_runeval_stepN)r   r   r   rB  rD  r   r   r   r   r=    s    r=  c                   @   s6   e Zd Z	 dd Zdd Zdd Zdd Zd	d
 ZdS )IssuesTestCasec                 C   s   d}d}t |d|i}t|B dtddddd	d
dddig ffdddddg
| _t| }|t W d    n1 s;w   Y  W d    d S W d    d S 1 sSw   Y  d S )Nz
            from test_module_for_bdb_2 import func
            def main():
                func()
                lno = 5
        z9
            def func():
                lno = 3
        Ztest_module_for_bdb_2r
  rI   ztest_module_for_bdb_2.pyr+  r  r'   r   rS   r   )r   r   rI   )r'   r   r   r   )r  r   r   ri   r   r   r   )r0   Zcode_1Zcode_2r   r   r   r   r   +test_step_at_return_with_no_trace_in_caller  s&   

	"z:IssuesTestCase.test_step_at_return_with_no_trace_in_callerc                 C   s   d}t |i}dD ]u}| j|de t|Q dtdtdddd	dd
d
ig ff|fg| _|dkr>| jdddtfdddg n| jddg t| }|	t
 W d    n1 sZw   Y  W d    n1 siw   Y  W d    n1 sxw   Y  qd S )Nz
            def test_gen():
                yield 0
                lno = 4
                return 123

            def main():
                it = test_gen()
                next(it)
                next(it)
                lno = 11
        )r   r   r   r   r
  test_genr+  r  r'   r   rS   r   rv   
   r   r   )r   rH  r   r   r'   r   rG  )r  r  r   r   r(  ri   r   r   r   r   r   )r0   rJ   r   r   r   r   r   r   #test_next_until_return_in_generator/  s8   

z2IssuesTestCase.test_next_until_return_in_generatorc                 C   s   d}t |i}t|L 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| }|t W d    n1 sAw   Y  W d    d S W d    d S 1 sYw   Y  d S )Nz
            def test_gen():
                yield 0
                lno = 4
                yield 1
                return 123

            def main():
                for i in test_gen():
                    lno = 10
                lno = 11
        r
  rG  r+  r  r'   r   rS   r   rI  )r'   r   rG  )r'   r   rG  rv   	   r   r   )r'      r   r   	r  r   r   r(  r   ri   r   r   r   r  r   r   r   'test_next_command_in_generator_for_loopX  s&   

"z6IssuesTestCase.test_next_command_in_generator_for_loopc                 C   s   d}t |i}t|H 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| }|t W d    n1 s=w   Y  W d    d S W d    d S 1 sUw   Y  d S )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
        r
  rG  r+  r  r'   r   rS   r   )r'      rG  rv   rL  r   r   r'      r   r   rM  r  r   r   r   /test_next_command_in_generator_with_subiteratorw  s"   


"z>IssuesTestCase.test_next_command_in_generator_with_subiteratorc                 C   s   d}t |i}t|L 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| }|t W d    n1 sAw   Y  W d    d S W d    d S 1 sYw   Y  d S )NrO  r
  Ztest_subgenr+  r  r'   r   rS   r  rv   r   rG  rL  r   r   rQ  r   rM  r  r   r   r   1test_return_command_in_generator_with_subiterator  s"   


"z@IssuesTestCase.test_return_command_in_generator_with_subiteratorN)r   r   r   rF  rJ  rN  rS  rT  r   r   r   r   rE    s    )rE  c                   @   s   e Zd Zdd ZdS )TestRegressionsc                 C   s   t  t d f d S r   )r,   Zformat_stack_entryr   	_getframer`   r   r   r   !test_format_stack_entry_no_lineno  s   z1TestRegressions.test_format_stack_entry_no_linenoN)r   r   r   rW  r   r   r   r   rU    s    rU  __main__r   )/r   r   r   r#   Zunittestr   r<   r   
contextlibr   	itertoolsr   r   Ztest.supportr   r   r   	Exceptionr	   r   r   r   rj   r   r+   r,   re   r   r   r   r:   r   r  r(  r   r   r   r   ZTestCaser   r   r&  r=  rE  rU  r   r   r   r   r   r   <module>   s\    2@ z
.J

 8 m" )