a
    äzeŸ¥  ã                   @   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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d2d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-d.„ d.e%ƒZ(G d/d0„ d0e%ƒZ)e*d1kr–e +¡  dS )3é    N)Úcontextmanager)ÚisliceÚrepeatc                   @   s   e Zd ZdS )ÚBdbExceptionN©Ú__name__Ú
__module__Ú__qualname__© r
   r
   ú#/usr/lib/python3.9/test/test_bdb.pyr   >   ó    r   c                   @   s   e Zd ZdS )ÚBdbErrorNr   r
   r
   r
   r   r   ?   r   r   c                   @   s   e Zd ZdS )ÚBdbSyntaxErrorNr   r
   r
   r
   r   r   @   r   r   c                   @   s   e Zd ZdS )ÚBdbNotExpectedErrorNr   r
   r
   r
   r   r   A   r   r   c                   C   s   dt j_i t j_d gt j_d S ©Né   )Ú_bdbÚ
BreakpointÚnextZbplistÚ
bpbynumberr
   r
   r
   r   Úreset_BreakpointI   s    r   c                  C   sž   dd„ t jjD ƒ} | sdS d}| D ]v}|s2d}d}|jr<dnd}|jrJd	nd
}|d|j|||j|jtj	 
|j¡|jf 7 }|jr|d|jf 7 }|d7 }q"|S )Nc                 S   s   g | ]}|r|‘qS r
   r
   )Ú.0Úbpr
   r
   r   Ú
<listcomp>O   r   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   r   Ú	temporaryÚenabledZnumberÚhitsÚignoreÚosÚpathÚbasenameÚfileÚlineÚcond)Úbp_listZheader_addedr   ÚinfoZdispZenabr
   r
   r   Úinfo_breakpointsN   s&    ÿÿ
r(   c                       sf   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 ©N)Ú	currentbpÚsuperÚtrace_dispatch)ÚselfÚframeÚeventÚarg©Ú	__class__r
   r   r-   f   s    zBdb.trace_dispatchFNc                    s€   t |tƒrT|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   j   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 r   )Úget_bpbynumberr   ©r.   Zbpnumr   r
   r
   r   Ú
set_ignoreƒ   s    
zBdb.set_ignorec                 C   s   |   |¡}d|_d S )NT©rP   r   rQ   r
   r
   r   Ú
set_enableˆ   s    
zBdb.set_enablec                 C   s   |   |¡}d|_d S )NFrS   rQ   r
   r
   r   Úset_disableŒ   s    
zBdb.set_disablec                 C   s   |   ||¡}|rt|ƒ‚d S r*   )Zclear_breakr   )r.   ÚfnamerD   Úerrr
   r
   r   Ú	set_clear   s    zBdb.set_clearc                 C   s2   | j stdƒ‚|  j d8  _ | j| j  d | _d S )NzOldest framer   r   )rM   r   rL   r/   ©r.   r
   r
   r   Úset_up•   s    z
Bdb.set_upc                 C   s@   | j d t| jƒkrtdƒ‚|  j d7  _ | j| j  d | _d S )Nr   zNewest framer   )rM   ÚlenrL   r   r/   rY   r
   r
   r   Úset_downœ   s    zBdb.set_down)FNN)r   r   r	   r-   rB   rK   rR   rT   rU   rX   rZ   r\   Ú__classcell__r
   r
   r2   r   r)   c   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.   rb   r`   rc   Ú	test_caser2   r
   r   ra   ¦   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   é   r   )Ú
cur_exceptÚexpect_set_noÚbreakpoint_hitsÚlistr   rb   Úexpected_listÚset_listrY   r
   r
   r   re   ®   s
    zTracer.init_testc              
      sv   | j d ur| j ‚|dkrbztƒ  |||¡}|W S  ty^ } z|| _ | jW  Y d }~S d }~0 0 ntƒ  |||¡S d S ©NÚ	exception)rh   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  )	rr   rc   rj   r(   ÚstripÚsplitÚprintÚdelete_temporariesrs   )r.   r/   r'   r$   r
   r
   r   Ú	user_lineÐ   s    zTracer.user_linec                 C   s   |   d||¡ |  ¡  d S )NÚreturn)rr   rs   )r.   r/   Zreturn_valuer
   r
   r   Úuser_returnÝ   s    zTracer.user_returnc                 C   s   || _ |  d|¡ |  ¡  d S rn   )Úexc_inforr   rs   )r.   r/   r|   r
   r
   r   Úuser_exceptioná   s    zTracer.user_exceptionc                 C   s   | j g}||f| _d S r*   )r+   rj   )r.   r1   r&   r
   r
   r   Údo_clearæ   s    zTracer.do_clearc                 C   s$   | j r | j d D ]}|  |¡ qd S r   )rj   Zclear_bpbynumber)r.   Únr
   r
   r   rx   ë   s    zTracer.delete_temporariesc                 C   sT   |  j d7  _ z| j d¡| _W n  ty@   td| j  ƒ‚Y n0 | j d¡| _d S )Nr   r   z-expect_set list exhausted, cannot pop item %d)ri   rl   ÚpopÚexpectÚ
IndexErrorr   rm   Ú	set_tuplerY   r
   r
   r   Úpop_nextð   s    ÿÿ
zTracer.pop_nextc                    s‚  d }|dkrˆj d }ˆ ||¡ ˆjd urDˆjsDˆjg}|g fˆ_|ˆ_ˆ ¡  ˆjrhˆ ˆj¡ d S ˆj	rŠˆ 
ˆj	d |d¡ ˆ ¡  |dv ržˆ d¡ nàtˆj	ƒdkr~|dkrFˆj	d \‰ }tˆ  ¡ ƒ}ˆjsèˆ dˆj ¡ ˆ 
|ˆjd d	¡ ˆ 
‡ fd
d„|D ƒ‡fdd„ˆjd D ƒd¡ ˆ 
t|ƒˆjd d¡ n8|dkr~tˆj d ˆj	d ƒs~ˆ dˆjˆj f ¡ d S )Nro   rg   r   zWrong event type)rq   rz   é   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
   )rP   r   r†   rY   r
   r   r      s   ÿzWrong breakpoint hit countr   zWrong temporary breakpointsz/Wrong exception at expect_set item %d, got '%s')r|   rK   r+   rj   r0   r„   rc   Úprint_staterd   r   Úcheck_equalÚcheck_lno_nameÚcheck_expect_max_sizer[   ÚsortedÚkeysÚraise_not_expectedri   r6   )r.   r0   r/   ÚargsÚtbr&   ZtemporariesZbpnumsr
   )r‡   r.   r   rr   ú   s\    


ÿÿÿ
ÿýÿ

ÿÿ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Ž   ri   )r.   ZexpectedÚresultÚmsgr
   r
   r   r‰   ,  s
    
ÿzTracer.check_equalc                 C   sT   t | jƒ}|dkr.|  ¡ }|  | jd |d¡ |dkrP|  | jd | jjjd¡ d S )Nr   zWrong line numberrg   zWrong function name)r[   r   Úlno_abs2relr‰   r/   Úf_coderA   )r.   ÚsrD   r
   r
   r   rŠ   2  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r8|| jjj d S |S r   )Úcanonicr/   r”   r?   Úf_linenor8   r@   ©r.   rV   rD   r
   r
   r   r“   A  s    ÿÿzTracer.lno_abs2relc                 C   s.   |r*|   |¡|   t¡kr*| jjj| d S |S r   )r—   r8   r/   r”   r@   r™   r
   r
   r   Úlno_rel2absG  s    ÿÿþzTracer.lno_rel2absc                 C   sÖ   |   ¡ }| jjj}d| j||f }| jr˜d}| jd D ],}|dkrJ|d7 }|d||  |¡jf 7 }q6|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Ú}ú(r   ú)ro   z), é    ú,)r“   r/   r”   rA   r0   rj   rP   r   r7   r|   r   Úljustrƒ   )r.   rD   rA   Ústater‡   r   r
   r
   r   Ú	get_stateL  s     

zTracer.get_statec                 C   s:   |d ur | j dkr tƒ  t|ƒ td| j |  ¡ f ƒ d S )Nr   z%d: %s)ri   rw   r£   )r.   rd   r
   r
   r   rˆ   ^  s    zTracer.print_statec                 C   s6   |d7 }|dt | jƒ 7 }|d|  ¡  7 }t|ƒ‚d S )Nr   z  Expected: %s
z  Got:      )r7   r   r£   r   ©r.   r’   r
   r
   r   rŽ   d  s    zTracer.raise_not_expectedc                 C   sZ  | j d }t| j ƒdkr"| j d nd }t| d| ƒ}|dv rF|ƒ  d S |dv r\|| jƒ d S |dkr’d }|r‚|  | jjj|d ¡}|| j|ƒ d S |rž|dv s¨|d	v rH|d
v râ|^}}}|  ||¡}||g}| |¡ ||Ž  n"|dv rô||Ž  n|d	v r|ƒ  d | _|  	¡  | j
r$|  ¡  n| jr4|  ¡  |  d¡ |  ¡  ntd| j  ƒ‚d S )Nr   rg   r   Zset_)ÚstepÚcontinueÚquit)r   rz   Ú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„   rc   rˆ   r   rŠ   r‹   rs   r   )r.   Úset_typer   Z
set_methodrD   rV   Zremainr
   r
   r   rs   j  sR    

ÿÿ







ÿzTracer.next_set_method)NFN)N)r   r   r	   ra   re   r-   rt   ry   r{   r}   r~   rx   r„   rr   r‰   rŠ   r‹   r“   rš   r£   rˆ   rŽ   rs   r]   r
   r
   r2   r   r^   £   s(   	
2

r^   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)r`   rc   rf   )rf   rc   r^   rb   ÚidÚtracerÚ_original_tracer)r.   rf   r`   r
   r
   r   ra   Ÿ  s    
ÿzTracerRun.__init__c                 C   s   t ƒ  t ¡ | _| jS r*   )r   ÚsysÚgettracerµ   r´   rY   r
   r
   r   Ú	__enter__¦  s    
zTracerRun.__enter__c                 C   s¶   t ƒ  t | j¡ d}| jjr6|d7 }|d| jj 7 }|d ur’tt|ƒr’t	|t
ƒr’|jr’|jd }|rr|d| 7 }| jr„t|ƒ dS | j |¡ n |r²| jr¦t|ƒ n| j |¡ d S )Nr   z+All paired tuples have not been processed, zthe last one was number %dr   r   T)r   r¶   Úsettracerµ   r´   rm   ri   Ú
issubclassr   r6   ÚBaseExceptionr   rc   rw   rf   Úfail)r.   Útype_ÚvalueÚ	tracebackÚ	not_emptyÚerr_msgr
   r
   r   Ú__exit__¬  s*    ÿ

zTracerRun.__exit__)N)NNN)r   r   r	   ra   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| ƒF t	||d	}| 
t¡ W d   ƒ n1 s~0    Y  W d   ƒ n1 sœ0    Y  d S )
Nc                 s   s<   z"t | ƒ}t |ƒ}|V  |V  qW n ty6   Y d S 0 d S 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>  r   zrun_test.<locals>.<lambda>r
   r_   )r°   ÚBaseTestCaserc   r³   rk   r   Úiterrb   Úcreate_modulesr²   ÚruncallÚtfunc_import)Úmodulesrm   r`   rÈ   ÚslÚtestr´   r
   r
   r   Úrun_testÊ  s    3


rÔ   c                 c   sî   t j ¡ Ð tj t ¡ ¡ zŒ| D ]T}|d }t|dƒ$}| 	t
 | | ¡¡ W d   ƒ n1 sb0    Y  t |¡ q"t ¡  d V  W | D ]}t j |¡ qŒtj ¡  n"| D ]}t j |¡ q®tj ¡  0 W d   ƒ n1 sà0    Y  d S )Nú.pyÚw)rÓ   ÚsupportZtemp_cwdr¶   r!   Úappendr    ÚgetcwdÚopenÚwriteÚtextwrapÚdedentÚ	linecacheÚ
checkcacher:   Úinvalidate_cachesZforgetr€   )rÑ   ÚmrV   rN   r
   r
   r   rÎ     s     2þrÎ   Fc                 C   s   d|d ||| ffS )Nr©   r
   )r5   rV   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 )Nrg   é   é   é   )Útfunc_firstÚtfunc_second©Úlnor
   r
   r   Ú
tfunc_main.  s    rì   c                  C   s   d} d} d} d S )Nrg   r…   é   r
   rê   r
   r
   r   rè   6  s    rè   c                  C   s   d} d S )Nrg   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 ‚d S r*   )ZfailureExceptionr¤   r
   r
   r   r¼   C  s    zBaseTestCase.fail)N)r   r   r	   rc   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   s@   g d¢| _ t| ƒ}| t¡ W d   ƒ n1 s20    Y  d S )N)©r$   rg   rì   rÊ   ©r$   r…   rì   rÊ   ©rq   r   rè   rÊ   ©r$   rg   rè   ©r§   ©rb   r²   rÏ   rì   ©r.   r´   r
   r
   r   Ú	test_stepK  s    

zStateTestCase.test_stepc                 C   s¤   dD ]š}| j |dz 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 sv0    Y  W d   ƒ q1 s”0    Y  qd S )N)r¥   r   ©r±   rï   rÊ   rð   rñ   r©   r…   )ÚNoner   rè   ©r¦   r$   rè   r   ©r$   rí   rè   ró   )ÚsubTestr8   rb   r²   rÏ   rì   )r.   r±   r´   r
   r
   r   Ú test_step_next_on_last_statementU  s    ú
z.StateTestCase.test_step_next_on_last_statementc                 C   s@   g d¢| _ t| ƒ}| t¡ W d   ƒ n1 s20    Y  d S )N)
rï   rÊ   rð   rÉ   ©r$   rí   rì   rÊ   )rq   r   ré   rÊ   )r$   rg   ré   ró   rô   rõ   r
   r
   r   Ú	test_nextc  s    

zStateTestCase.test_nextc              	   C   st   d}t |i}t|ƒL g d¢| _t| ƒ}| t¡ W d   ƒ n1 sH0    Y  W d   ƒ n1 sf0    Y  d S )Nú9
            def main():
                lno = 3
        )©r$   rg   rÐ   rÉ   ©r$   r…   rÐ   ró   ©ÚTEST_MODULErÎ   rb   r²   rÏ   rÐ   ©r.   rH   rÑ   r´   r
   r
   r   Útest_next_over_importn  s    


z#StateTestCase.test_next_over_importc                 C   s@   g d¢| _ t| ƒ}| t¡ W d   ƒ n1 s20    Y  d S )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   s@   g d¢| _ t| ƒ}| t¡ W d   ƒ n1 s20    Y  d S )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   s@   g d¢| _ t| ƒ}| t¡ W d   ƒ n1 s20    Y  d S )N)rï   rÊ   rð   rÊ   rñ   rÊ   rò   ©rz   ©rz   rí   rè   rÊ   rý   ró   rô   rõ   r
   r
   r   Útest_return•  s    

zStateTestCase.test_returnc                 C   s@   g d¢| _ t| ƒ}| t¡ W d   ƒ n1 s20    Y  d S )N)
rï   rÊ   rð   rÊ   rñ   r  r  r
  )rz   rç   rì   ró   rô   rõ   r
   r
   r   Útest_return_in_caller_frame¡  s    

z)StateTestCase.test_return_in_caller_framec                 C   s@   g d¢| _ t| ƒ}| t¡ W d   ƒ n1 s20    Y  d S )N)
rï   rÊ   rð   rÊ   rñ   rÊ   rò   )r¨   )rí   rú   ró   rô   rõ   r
   r
   r   Ú
test_until¬  s    

zStateTestCase.test_untilc              	   C   s`   dt dƒdddddddig ffdd	d
g| _t| ƒ}| t¡ W d   ƒ n1 sR0    Y  d S )Nrï   rè   )rø   rg   rì   rù   r$   rg   r   )r¨   )i'  r  ró   )râ   rb   r²   rÏ   rì   rõ   r
   r
   r   Útest_until_with_too_large_count·  s    ü
z-StateTestCase.test_until_with_too_large_countc                 C   s@   g d¢| _ t| ƒ}| t¡ W d   ƒ n1 s20    Y  d S )N)
rï   rÊ   rð   rÊ   rñ   r  r  )r¨   )ræ   )r$   ræ   rì   ró   rô   rõ   r
   r
   r   Útest_until_in_caller_frameÁ  s    

z(StateTestCase.test_until_in_caller_framec              	   C   s„   d}t |i}t|ƒ\ g d¢| _dddt f}t| |d}| t¡ W d   ƒ n1 sX0    Y  W d   ƒ n1 sv0    Y  d S )Nrÿ   )r   rÊ   r  ró   z
importlib*Z	zipimportzencodings.*r_   r  )r.   rH   rÑ   r`   r´   r
   r
   r   Ú	test_skipÌ  s    

zStateTestCase.test_skipc                 C   s"   t dgd}|  | d ¡d¡ d S )Nz	anything*r_   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   sF   ddg| _ t| ƒ }|  t|jt¡ W d   ƒ n1 s80    Y  d S )Nrï   )r®   )rb   r²   ÚassertRaisesr   rÏ   rì   rõ   r
   r
   r   Ú	test_downä  s    ÿ
zStateTestCase.test_downc                 C   s@   g d¢| _ t| ƒ}| t¡ W d   ƒ n1 s20    Y  d S )N)rï   rÊ   rð   rÊ   rñ   r  r  ró   rô   rõ   r
   r
   r   Útest_upì  s    

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î   H  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S )ÚBreakpointTestCasec                 C   sF   ddg| _ t| ƒ }|  t|jt¡ W d   ƒ n1 s80    Y  d S )Nr   )r©   )z/non/existent/module.pyr   )rb   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|ƒZ ddtdffg| _t| ƒ }|  t|jt¡ W d   ƒ n1 sV0    Y  W d   ƒ n1 st0    Y  d S )Nrÿ   r   r©   rí   )	r  rÎ   ÚTEST_MODULE_FNAMErb   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|ƒ 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 sŒ0    Y  W d   ƒ n1 sª0    Y  d S )Nú
            def func():
                lno = 3

            def main():
                for i in range(2):
                    func()
        r   rG   T©rø   rg   rÐ   rù   r$   r…   r   rg   ró   ©r  rÎ   râ   r  rb   r²   rÏ   rÐ   r  r
   r
   r   Útest_temporary_bp  s    


ù	
z$BreakpointTestCase.test_temporary_bpc                 C   sØ   d}t |i}t|ƒ° 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 s¬0    Y  W d   ƒ n1 sÊ0    Y  d S )Nú
            def func():
                lno = 3

            def main():
                for i in range(3):
                    func()
        r   rG   r  T)r¬   ©rg   rù   r$   r…   r   )r«   r   ©rø   r…   rG   ©r¬   ©r   rg   ©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|ƒn 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 sj0    Y  W d   ƒ n1 sˆ0    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…   r   ró   r  r  r
   r
   r   Útest_bp_condition@  s    
ü
z$BreakpointTestCase.test_bp_conditionc              
   C   s–   d}t |i}t|ƒn 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 sj0    Y  W d   ƒ n1 sˆ0    Y  d S )Nzk
            def func(a):
                lno = 3

            def main():
                func(0)
        r   rG   Fz1 / 0r  rù   r$   r…   r   ró   r  r  r
   r
   r   Ú)test_bp_exception_on_condition_evaluationT  s    
ü
z<BreakpointTestCase.test_bp_exception_on_condition_evaluationc                 C   s–   d}t |i}t|ƒn 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 sj0    Y  W d   ƒ n1 sˆ0    Y  d S )Nr  r   rG   r  ©r   r#  rù   r$   r…   r   rg   ró   r  r  r
   r
   r   Útest_bp_ignore_countg  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 s¤0    Y  W d   ƒ n1 sÂ0    Y  d S )Nr  r   rG   r  r(  r"  rù   r$   r…   rg   r   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|ƒ¸ 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 s´0    Y  W d   ƒ n1 sÒ0    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   r   rª   )rø   rí   rG   rg   ró   )r  rÎ   r  rb   r²   rÏ   rÐ   r  r
   r
   r   Útest_clear_two_bp_on_same_line—  s    	
ø

z1BreakpointTestCase.test_clear_two_bp_on_same_linec                 C   sN   ddt dffg| _t| ƒ }|  t|jt¡ W d   ƒ n1 s@0    Y  d S )Nr   rª   r   )r8   rb   r²   r  r   rÏ   rÐ   rõ   r
   r
   r   Útest_clear_at_no_bp°  s    ÿ
z&BreakpointTestCase.test_clear_at_no_bpN)r   r   r	   r  r  r  r%  r&  r'  r)  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   sR   d}g d¢| _ t| ƒ(}| tt |¡ddƒ¡ W d   ƒ n1 sD0    Y  d S )Nz
            lno = 2
        ))r$   rg   ú<module>rÊ   )rz   rg   r.  ró   z<string>Úexec)rb   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|ƒ\ g d¢| _dd l}t| ƒ"}| dtƒ tƒ ¡ W d   ƒ n1 sX0    Y  W d   ƒ n1 sv0    Y  d S )Nrÿ   )
)r$   r   r.  rÊ   )rq   rg   rä   rÊ   )r$   r…   rä   rÊ   )rz   r…   rä   rÊ   )rz   r   r.  ró   r   ztest_module_for_bdb.main())r  rÎ   rb   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	   r2  r4  r
   r
   r
   r   r-  ·  s   r-  c                   @   s4   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|ƒr 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 sv0    Y  W d   ƒ n1 s”0    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…   r   rÊ   )rz   r…   rG   )r$   rå   rä   ró   )r  rÎ   râ   rb   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 ]ê}| j|dÊ t|ƒ¢ 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 s´0    Y  W d   ƒ n1 sÒ0    Y  W d   ƒ q1 sð0    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¨   rz   r÷   r   Útest_genr  rù   r$   r…   r   rz   ro   é
   rä   rÊ   )rz   r8  rä   ró   ©r$   rí   r7  )r  rû   rÎ   râ   r  rb   r°   rÃ   r²   rÏ   rÐ   )r.   rH   rÑ   r±   r´   r
   r
   r   Ú#test_next_until_return_in_generatorú  s*    
üÿÿÿ
z2IssuesTestCase.test_next_until_return_in_generatorc                 C   s®   d}t |i}t|ƒ† 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 s‚0    Y  W d   ƒ n1 s 0    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   r7  r  rù   r$   r…   r   rÉ   r9  )r$   rå   r7  )r$   ræ   r7  ro   é	   rä   rÊ   )r$   é   rä   ró   ©	r  rÎ   râ   r  rÃ   rb   r²   rÏ   rÐ   r  r
   r
   r   Ú'test_next_command_in_generator_for_loop#  s    
÷
z6IssuesTestCase.test_next_command_in_generator_for_loopc                 C   s¦   d}t |i}t|ƒ~ 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 sz0    Y  W d   ƒ n1 s˜0    Y  d S )Ná4  
            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   r7  r  rù   r$   rç   r   rÉ   )r$   é   r7  ro   r<  rä   rÊ   ©r$   é   rä   ró   r=  r  r
   r
   r   Ú/test_next_command_in_generator_with_subiteratorB  s    
ù

z>IssuesTestCase.test_next_command_in_generator_with_subiteratorc                 C   s®   d}t |i}t|ƒ† 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 s‚0    Y  W d   ƒ n1 s 0    Y  d S )Nr?  r   Ztest_subgenr  rù   r$   r…   r   r
  ro   rç   r7  r<  rä   rÊ   rA  ró   r=  r  r
   r
   r   Ú1test_return_command_in_generator_with_subiteratora  s    
ù

z@IssuesTestCase.test_return_command_in_generator_with_subiteratorN)r   r   r	   r6  r:  r>  rC  rD  r
   r
   r
   r   r5  Ù  s
   )r5  Ú__main__)N),r  r   r¶   r    ZunittestrÜ   r:   rÞ   Ú
contextlibr   Ú	itertoolsr   r   Ztest.supportrÓ   Ú	Exceptionr   r   r   r   rc   r   r(   r)   r^   r²   rÔ   rÎ   r8   râ   r  r  rÐ   rì   rè   ré   ZTestCaserÌ   rî   r  r-  r5  r   rä   r
   r
   r
   r   Ú<module>3   sP   @ z.
J

 / B" )
