o
    gn                     @   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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d6d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 d/d0 d0e'Z*G d1d2 d2e'Z+d3d4 Z,e-d5kre,  dS dS )7    N)contextmanager)islicerepeat)import_helper)	os_helperc                   @      e Zd ZdS )BdbExceptionN__name__
__module____qualname__ r   r   C/Users/admin/.pyenv/versions/3.10.0/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enabledZ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   )r.   filenamelinenor   r&   r5   globals_modulefunccoderesr2   r   r   rB   k   s    


zBdb.set_breakc                    s4   t  ||\| _| _| j| j d | _| j| jfS Nr   )r,   	get_stackstackindexr/   )r.   ftr2   r   r   rK      s   zBdb.get_stackc                 C   s   	 |  |}| jd7  _d S N   )get_bpbynumberr    r.   Zbpnumr   r   r   r   
set_ignore   s   
zBdb.set_ignorec                 C      |  |}d|_d S )NTrR   r   rS   r   r   r   
set_enable      

zBdb.set_enablec                 C   rU   )NFrV   rS   r   r   r   set_disable   rX   zBdb.set_disablec                 C   s   |  ||}|rt|d S r   )clear_breakr   )r.   fnamerD   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 framerQ   r   )rM   r   rL   r/   r.   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 )NrQ   zNewest framer   )rM   lenrL   r   r/   r^   r   r   r   set_down   s
   zBdb.set_down)FNN)r
   r   r   r-   rB   rK   rT   rW   rY   r]   r_   ra   __classcell__r   r   r2   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)r.   rg   re   rh   	test_caser2   r   r   rf      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      rQ   )
cur_exceptexpect_set_nobreakpoint_hitslistr   rg   expected_listset_listr^   r   r   r   rj      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)rm   r,   r-   r   )r.   r/   r0   r1   rI   er2   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)r.   r/   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  )	rw   rh   ro   r)   stripsplitprintdelete_temporariesrx   )r.   r/   r(   r%   r   r   r   	user_line   s   zTracer.user_linec                 C   s   |  d|| |   d S )Nreturn)rw   rx   )r.   r/   Zreturn_valuer   r   r   user_return   s   zTracer.user_returnc                 C   s   || _ | d| |   d S rs   )exc_inforw   rx   )r.   r/   r   r   r   r   user_exception   s   zTracer.user_exceptionc                 C   s   | j g}||f| _d S r   )r+   ro   )r.   r1   r'   r   r   r   do_clear   s   zTracer.do_clearc                 C   s(   | j r| j d D ]	}| | qd S d S rP   )ro   Zclear_bpbynumber)r.   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 )NrQ   r   z-expect_set list exhausted, cannot pop item %d)rn   rq   popexpect
IndexErrorr   rr   	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 )Nrt   rl   r   zWrong event type)rv   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   )rR   r   r   r^   r   r   r   !  s    zWrong breakpoint hit countrQ   zWrong temporary breakpointsz/Wrong exception at expect_set item %d, got '%s')r   rK   r+   ro   r0   r   rh   print_stateri   r   check_equalcheck_lno_namecheck_expect_max_sizer`   sortedkeysraise_not_expectedrn   r6   )r.   r0   r/   argstbr'   ZtemporariesZbpnumsr   )r   r.   r   rw      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   rn   )r.   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 )NrQ   zWrong line numberrl   zWrong function name)r`   r   lno_abs2relr   r/   f_coderA   )r.   srD   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)r`   r   r   r0   )r.   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 rP   )canonicr/   r   r?   f_linenor8   r@   r.   r[   rD   r   r   r   r   B  s   zTracer.lno_abs2relc                 C   s.   |r|  ||  tkr| jjj| d S |S rP   )r   r8   r/   r   r@   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}(rQ   )rt   z),     ,)r   r/   r   rA   r0   ro   rR   r   r7   r   r
   ljustr   )r.   rD   rA   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 )NrQ   z%d: %s)rn   r|   r   )r.   ri   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:      )r7   r   r   r   r.   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   rl   rQ   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   r`   getattrr/   r   r   r?   extendr0   r   rh   r   r   r   r   rx   r   )r.   set_typer   Z
set_methodrD   r[   Zremainr   r   r   rx   k  sR   







zTracer.next_set_method)NFNr   )r
   r   r   rf   rj   r-   ry   r~   r   r   r   r}   r   rw   r   r   r   r   r   r   r   r   rx   rb   r   r   r2   r   rc      s,    	
2

rc   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)re   rh   rk   )rk   rh   rc   rg   idtracer_original_tracer)r.   rk   re   r   r   r   rf     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   rr   rn   
issubclassr   r6   BaseExceptionr   rh   r|   rk   fail)r.   Ztype_value	traceback	not_emptyerr_msgr   r   r   __exit__  s,   
zTracerRun.__exit__r   )NNN)r
   r   r   rf   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 rP   )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   rd   )r   BaseTestCaserh   r   rp   r   iterrg   create_modulesr   runcalltfunc_import)modulesrr   re   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[   rN   r   r   r   r     s&   
"r   Fc                 C   s   d|d ||| ffS )Nr   r   )r5   r[   r   r&   r   r   r   break_in_func&  s   r   test_module_for_bdbr   c                  C   s   dd l } |   d S rJ   )r   main)r   r   r   r   r   +  s   r   c                  C   s    d} t   t  d} d} d} d S )Nrl            )tfunc_firsttfunc_secondlnor   r   r   
tfunc_main/  s   r   c                  C   s   d} d} d} d S )Nrl   r      r   r   r   r   r   r   7  s   r   c                  C   s   d} d S )Nrl   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   rh   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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%   rl   r   r   r%   r   r   r   rv   rQ   r   r   r%   rl   r   r   rg   r   r   r   r.   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    q1 sJw   Y  qd S )N)r   r   r   r   r   r   r   r   r   )NonerQ   r   r   r%   r   rQ   r%   r   r   r   )subTestr8   rg   r   r   r   )r.   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   )rv   rQ   r   r   )r%   rl   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%   rl   r   r   r%   r   r   r   TEST_MODULEr   rg   r   r   r   r.   rH   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   rl   r   r   r%   rl   rQ   )r   )i'  r  r   )r   rg   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}t |i}t|7 g d| _dddt f}t| |d}|t W d    n1 s,w   Y  W d    d S W d    d S 1 sDw   Y  d S )Nr  )r  r   r	  r   z
importlib*	zipimportzencodings.*rd   r
  )r.   rH   r   re   r   r   r   r   	test_skip  s   

"zStateTestCase.test_skipc                 C   s"   t dgd}| |d d d S )Nz	anything*rd   F)r*   ZassertIsZis_skipped_module)r.   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   )rg   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   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.pyrQ   )rg   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_FNAMErg   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  rG   Tr   rl   r   r   r%   r   rQ   rl   r   r  r   r   r#  rg   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  rG   r&  T)r   rl   r   r%   r   rQ   )r   r*  r   r   rG   r   rQ   rl   r   r-  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  rG   Fza == 2r&  r   r%   r   rQ   r   r'  r  r   r   r   test_bp_conditionA  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  rG   Fz1 / 0r&  r   r%   r   rQ   r   r'  r  r   r   r   )test_bp_exception_on_condition_evaluationU  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  rG   r&  r    r-  r   r%   r   rQ   rl   r   r'  r  r   r   r   test_bp_ignore_counth  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  rG   r&  r2  r,  r   r%   r   rl   rQ   r.  r+  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%   rG   rQ   r   )r   r   rG   rl   r   )r  r   r#  rg   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   rQ   )r8   rg   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 )
NrQ   rl   r   r   )rQ   rl   r   r   )rl   r   r   r   )r   r   r   r   )r   r*   r   r8   rB   ZassertEqualZget_all_breaksrZ   )r.   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(  r/  r0  r1  r3  r4  r5  r6  r7  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%   rl   <module>r   )r   rl   r9  r   z<string>exec)rg   r   runcompiler   r   )r.   rH   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%   rQ   r9  r   )rv   rl   r   r   )r%   r   r   r   )r   r   r   r   )r   rQ   r9  r   r   ztest_module_for_bdb.main())r  r   rg   r   r   Zrunevalr9   locals)r.   rH   r   r   r   r   r   r   test_runeval_step  s   


	"zRunTestCase.test_runeval_stepN)r
   r   r   r=  r?  r   r   r   r   r8    s    r8  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  rG   ztest_module_for_bdb_2.pyr&  r   r%   r   rQ   r   )r   r   rG   )r%   r   r   r   )r  r   r   rg   r   r   r   )r.   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    q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   rQ   r   rt   
   r   r   )r   rC  r   r   r%   r   rB  )r  r  r   r   r#  rg   r   r   r   r   r   )r.   rH   r   r   r   r   r   r   #test_next_until_return_in_generator&  s6   

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  rB  r&  r   r%   r   rQ   r   rD  )r%   r   rB  )r%   r   rB  rt   	   r   r   )r%      r   r   	r  r   r   r#  r   rg   r   r   r   r  r   r   r   'test_next_command_in_generator_for_loopO  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  rB  r&  r   r%   r   rQ   r   )r%      rB  rt   rG  r   r   r%      r   r   rH  r  r   r   r   /test_next_command_in_generator_with_subiteratorn  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 )NrJ  r  Ztest_subgenr&  r   r%   r   rQ   r  rt   r   rB  rG  r   r   rL  r   rH  r  r   r   r   1test_return_command_in_generator_with_subiterator  s"   


"z@IssuesTestCase.test_return_command_in_generator_with_subiteratorN)r
   r   r   rA  rE  rI  rN  rO  r   r   r   r   r@    s    )r@  c                   C   s   t jtttt d S r   )r   supportZrun_unittestr   r8  r!  r@  r   r   r   r   	test_main  s   rQ  __main__r   ).r  r   r   r!   Zunittestr   r:   r   
contextlibr   	itertoolsr   r   Ztest.supportr   r   r   	Exceptionr   r   r   r   rh   r   r)   r*   rc   r   r   r   r8   r   r  r#  r   r   r   r   ZTestCaser   r   r!  r8  r@  rQ  r
   r   r   r   r   <module>   s\    2@ z
.J

 / m" (
