B
    v9a%  ã               @   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e eedƒd¡e 	ej
dkd¡G dd„ dejƒƒƒZe eedƒd¡e 	ej
dkd¡G dd	„ d	eƒƒƒZe eedƒd¡e 	ej
dkd¡G d
d„ deƒƒƒZe eedƒd¡e 	ej
dkd¡G dd„ deƒƒƒZedkre ¡  dS )é    NÚkillzTest requires os.killÚwin32zTest cannot run on Windowsc               @   s€   e Zd 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S )Ú	TestBreakNc             C   s,   t  t j¡| _| jd k	r(t   t j| j¡ d S )N)ÚsignalÚ	getsignalÚSIGINTÚ_default_handlerÚint_handler)Úself© r   ú /usr/lib/python3.7/test_break.pyÚsetUp   s    
zTestBreak.setUpc             C   s(   t   t j| j¡ t ¡ tj_d tj_d S )N)	r   r   r   ÚweakrefÚWeakKeyDictionaryÚunittestÚsignalsÚ_resultsÚ_interrupt_handler)r
   r   r   r   ÚtearDown   s    zTestBreak.tearDownc             C   sv   t  t j¡}t ¡  |  t  t j¡|¡ yt ¡ }t |t j¡ W n t	k
r`   |  
d¡ Y nX |  tjjj¡ d S )NzKeyboardInterrupt not handled)r   r   r   r   ÚinstallHandlerÚassertNotEqualÚosÚgetpidr   ÚKeyboardInterruptÚfailÚ
assertTruer   r   Zcalled)r
   Údefault_handlerÚpidr   r   r   ÚtestInstallHandler   s    zTestBreak.testInstallHandlerc          	   C   sH   t  ¡ }|  |t jj¡ t  |¡ z|  |t jj¡ W d t  |¡ X d S )N)r   Ú
TestResultZassertNotInr   r   ÚregisterResultÚassertInÚremoveResult)r
   Úresultr   r   r   ÚtestRegisterResult(   s    
zTestBreak.testRegisterResultc                s‚   t  t j¡}t ¡ }t ¡  t |¡ ˆ  t  t j¡|¡ ‡ fdd„}y||ƒ W n tk
rp   ˆ  	d¡ Y nX ˆ  
|j¡ d S )Nc                s,   t  ¡ }t  |tj¡ d| _ˆ  | j¡ d S )NT)r   r   r   r   r   ÚbreakCaughtr   Ú
shouldStop)r#   r   )r
   r   r   Útest;   s    z+TestBreak.testInterruptCaught.<locals>.testzKeyboardInterrupt not handled)r   r   r   r   r   r   r    r   r   r   r   r%   )r
   r   r#   r'   r   )r
   r   ÚtestInterruptCaught2   s    
zTestBreak.testInterruptCaughtc                s~   t  t j¡t jkrˆ  d¡ t ¡ }t ¡  t |¡ ‡ fdd„}y||ƒ W n t	k
rb   Y nX ˆ  
d¡ ˆ  |j¡ d S )Nz&test requires SIGINT to not be ignoredc                sD   t  ¡ }t  |tj¡ d| _ˆ  | j¡ t  |tj¡ ˆ  d¡ d S )NTz#Second KeyboardInterrupt not raised)	r   r   r   r   r   r%   r   r&   r   )r#   r   )r
   r   r   r'   Q   s    z+TestBreak.testSecondInterrupt.<locals>.testz#Second KeyboardInterrupt not raised)r   r   r   ÚSIG_IGNÚskipTestr   r   r   r    r   r   r   r%   )r
   r#   r'   r   )r
   r   ÚtestSecondInterruptH   s    


zTestBreak.testSecondInterruptc             C   s°   t  ¡  t  ¡ }t  |¡ t tj¡}t  ¡ }t  |¡ |  t tj¡|¡ t  ¡ }dd„ }y||ƒ W n tk
r†   |  	d¡ Y nX |  
|j¡ |  
|j¡ |  |j¡ d S )Nc             S   s   t  ¡ }t  |tj¡ d S )N)r   r   r   r   r   )r#   r   r   r   r   r'   o   s    z&TestBreak.testTwoResults.<locals>.testzKeyboardInterrupt not handled)r   r   r   r    r   r   r   ÚassertEqualr   r   r   r&   ÚassertFalse)r
   r#   Únew_handlerZresult2Zresult3r'   r   r   r   ÚtestTwoResultsb   s     

zTestBreak.testTwoResultsc                sˆ   t  t j¡t jkr|  d¡ t ¡  t  t j¡‰ ‡ fdd„}t   t j|¡ yt ¡ }t 	|t j¡ W n t
k
rx   Y nX |  d¡ d S )Nz&test requires SIGINT to not be ignoredc                s   ˆ | |ƒ d S )Nr   )ÚframeZsignum)Úhandlerr   r   r.   ˆ   s    z;TestBreak.testHandlerReplacedButCalled.<locals>.new_handlerz6replaced but delegated handler doesn't raise interrupt)r   r   r   r)   r*   r   r   r   r   r   r   r   )r
   r.   r   r   )r1   r   ÚtestHandlerReplacedButCalled}   s    
z&TestBreak.testHandlerReplacedButCalledc             C   s2   t jt ¡ d}| t  ¡ ¡}|  |t jj¡ d S )N)Ústream)	r   ZTextTestRunnerÚioÚStringIOÚrunZ	TestSuiter!   r   r   )r
   Zrunnerr#   r   r   r   Ú
testRunner”   s    zTestBreak.testRunnerc             C   s>   t  ¡ }t  |¡ t |¡}~t ¡  t ¡  |  |ƒ ¡ d S )N)r   r   r    r   ÚrefÚgcZcollectZassertIsNone)r
   r#   r8   r   r   r   ÚtestWeakReferencesœ   s    

 zTestBreak.testWeakReferencesc             C   s~   t  ¡ }t  |¡ t  ¡  |  t  |¡¡ |  t  t  ¡ ¡¡ yt ¡ }t 	|t
j¡ W n tk
rl   Y nX |  |j¡ d S )N)r   r   r    r   r   r"   r-   r   r   r   r   r   r   r&   )r
   r#   r   r   r   r   ÚtestRemoveResult©   s    
zTestBreak.testRemoveResultc          
      s(  t ƒ ‰t ƒ ‰t ƒ ‰t ƒ ‰t tj¡}G ‡fdd„dt ƒ‰ G ‡ ‡‡‡fdd„dtjƒ}|dƒ}| ¡  |  ˆ jdd ˆˆdd dœfg¡ |  ˆ j	ˆg¡ |  |j
ˆ¡ |  t tj¡|¡ g ˆ _g ˆ _	|dƒ}| ¡  |  ˆ jdd ˆˆdd dœfg¡ |  ˆ j	ˆg¡ |  |j
ˆ¡ |  t tj¡|¡ d S )	Nc                   s(   e Zd Zg Zg Zdd„ Z‡ fdd„ZdS )z5TestBreak.testMainInstallsHandler.<locals>.FakeRunnerc             _   s   | j  ||f¡ d S )N)ÚinitArgsÚappend)r
   ÚargsÚkwargsr   r   r   Ú__init__Å   s    z>TestBreak.testMainInstallsHandler.<locals>.FakeRunner.__init__c                s   | j  |¡ ˆ S )N)ÚrunArgsr=   )r
   r'   )r#   r   r   r6   Ç   s    z9TestBreak.testMainInstallsHandler.<locals>.FakeRunner.runN)Ú__name__Ú
__module__Ú__qualname__r<   rA   r@   r6   r   )r#   r   r   Ú
FakeRunnerÂ   s   rE   c                   s   e Zd Z‡ ‡‡‡fdd„ZdS )z2TestBreak.testMainInstallsHandler.<locals>.Programc                s4   d| _ ˆ| _ˆ| _|| _d| _ˆ | _ˆ| _d | _d S )NF)ÚexitÚ	verbosityÚfailfastÚ
catchbreakÚ	tb_localsr7   r'   r#   )r
   rI   )rE   rH   r'   rG   r   r   r@   Ì   s    z;TestBreak.testMainInstallsHandler.<locals>.Program.__init__N)rB   rC   rD   r@   r   )rE   rH   r'   rG   r   r   ÚProgramË   s   rK   Fr   )ÚbufferrG   rH   rJ   ÚwarningsT)Úobjectr   r   r   r   ZTestProgramZrunTestsr,   r<   rA   r#   r   )r
   r   rK   Úpr   )rE   rH   r#   r'   rG   r   ÚtestMainInstallsHandler»   s:    	z!TestBreak.testMainInstallsHandlerc             C   sP   t  t j¡}t ¡  t ¡  |  t  t j¡|¡ t ¡  |  t  t j¡|¡ d S )N)r   r   r   r   r   ÚremoveHandlerr,   )r
   r   r   r   r   ÚtestRemoveHandlerò   s    zTestBreak.testRemoveHandlerc                sF   t  t j¡‰ t ¡  tj‡ ‡fdd„ƒ}|ƒ  ˆ t  t j¡ˆ ¡ d S )Nc                  s   ˆ  t tj¡ˆ ¡ d S )N)r,   r   r   r   r   )r   r
   r   r   r'      s    z4TestBreak.testRemoveHandlerAsDecorator.<locals>.test)r   r   r   r   r   rQ   r   )r
   r'   r   )r   r
   r   ÚtestRemoveHandlerAsDecoratorü   s
    z&TestBreak.testRemoveHandlerAsDecorator)rB   rC   rD   r	   r   r   r   r$   r(   r+   r/   r2   r7   r:   r;   rP   rR   rS   r   r   r   r   r      s   
7
r   c               @   s   e Zd ZejZdS )ÚTestBreakDefaultIntHandlerN)rB   rC   rD   r   Údefault_int_handlerr	   r   r   r   r   rT     s   rT   c               @   s   e Zd ZejZdS )ÚTestBreakSignalIgnoredN)rB   rC   rD   r   r)   r	   r   r   r   r   rV     s   rV   c               @   s   e Zd ZejZdS )ÚTestBreakSignalDefaultN)rB   rC   rD   r   ÚSIG_DFLr	   r   r   r   r   rW     s   rW   Ú__main__)r9   r4   r   Úsysr   r   r   Z
skipUnlessÚhasattrZskipIfÚplatformZTestCaser   rT   rV   rW   rB   Úmainr   r   r   r   Ú<module>   s*    {



