a
    &Rîh%  ã                   @   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 ur(t   t j| j¡ d S ©N)ÚsignalÚ	getsignalÚSIGINTÚ_default_handlerÚint_handler©Úself© r   ú@/opt/python-3.9.24/usr/lib/python3.9/unittest/test/test_break.pyÚsetUp   s    
zTestBreak.setUpc                 C   s(   t   t j| j¡ t ¡ tj_d tj_d S r   )	r   r   r	   ÚweakrefÚWeakKeyDictionaryÚunittestÚsignalsÚ_resultsÚ_interrupt_handlerr   r   r   r   ÚtearDown   s    zTestBreak.tearDownc                 C   st   t  t j¡}t ¡  |  t  t j¡|¡ zt ¡ }t |t j¡ W n t	y^   |  
d¡ Y n0 |  tjjj¡ d S )Nú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   sR   t  ¡ }|  |t jj¡ t  |¡ z|  |t jj¡ W t  |¡ nt  |¡ 0 d S r   )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„}z||ƒ W n tyn   ˆ  	d¡ Y n0 ˆ  
|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>.testr   )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„}z||ƒ W n t	y`   Y n0 ˆ  
d¡ ˆ  |j¡ d S )Nú&test requires SIGINT to not be ignoredc                    sD   t  ¡ }t  |tj¡ d| _ˆ  | j¡ t  |tj¡ ˆ  d¡ d S )NTú#Second KeyboardInterrupt not raised)	r   r   r   r   r   r(   r   r)   r   r*   r   r   r   r+   Q   s    z+TestBreak.testSecondInterrupt.<locals>.testr.   )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„ }z||ƒ W n ty„   |  	d¡ Y n0 |  
|j¡ |  
|j¡ |  |j¡ d S )Nc                 S   s   t  ¡ }t  |tj¡ d S r   )r   r   r   r   r   r*   r   r   r   r+   o   s    z&TestBreak.testTwoResults.<locals>.testr   )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|¡ zt ¡ }t 	|t j¡ W n t
yv   Y n0 |  d¡ d S )Nr-   c                    s   ˆ | |ƒ d S r   r   )ÚframeÚsignum©Úhandlerr   r   r4   ˆ   s    z;TestBreak.testHandlerReplacedButCalled.<locals>.new_handlerz6replaced but delegated handler doesn't raise interrupt)r   r   r   r/   r0   r   r   r   r   r   r   r   )r   r4   r    r   r8   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 r   )r   r"   r#   r   ÚrefÚgcZcollectZassertIsNone)r   r&   r@   r   r   r   ÚtestWeakReferencesœ   s    

zTestBreak.testWeakReferencesc                 C   s|   t  ¡ }t  |¡ t  ¡  |  t  |¡¡ |  t  t  ¡ ¡¡ zt ¡ }t 	|t
j¡ W n tyj   Y n0 |  |j¡ d S r   )r   r"   r#   r   r   r%   r3   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 r   )ÚinitArgsÚappend)r   ÚargsÚkwargsr   r   r   Ú__init__Å   s    z>TestBreak.testMainInstallsHandler.<locals>.FakeRunner.__init__c                    s   | j  |¡ ˆ S r   )ÚrunArgsrE   ©r   r+   ©r&   r   r   r>   Ç   s    z9TestBreak.testMainInstallsHandler.<locals>.FakeRunner.runN)Ú__name__Ú
__module__Ú__qualname__rD   rI   rH   r>   r   rK   r   r   Ú
FakeRunnerÂ   s   rO   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_localsr?   r+   r&   )r   rS   ©rO   rR   r+   rQ   r   r   rH   Ì   s    z;TestBreak.testMainInstallsHandler.<locals>.Program.__init__N)rL   rM   rN   rH   r   rU   r   r   ÚProgramË   s   rV   Fr   )ÚbufferrQ   rR   rT   ÚwarningsT)Úobjectr   r   r   r   ZTestProgramZrunTestsr2   rD   rI   r&   r   )r   r   rV   Úpr   )rO   rR   r&   r+   rQ   r   ÚtestMainInstallsHandler»   s>    	üüz!TestBreak.testMainInstallsHandlerc                 C   sP   t  t j¡}t ¡  t ¡  |  t  t j¡|¡ t ¡  |  t  t j¡|¡ d S r   )r   r   r   r   r   ÚremoveHandlerr2   )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 r   )r2   r   r   r   r   ©r   r   r   r   r+      s    z4TestBreak.testRemoveHandlerAsDecorator.<locals>.test)r   r   r   r   r   r\   r   rJ   r   r^   r   ÚtestRemoveHandlerAsDecoratorü   s    z&TestBreak.testRemoveHandlerAsDecorator)rL   rM   rN   r
   r   r   r!   r'   r,   r1   r5   r:   r?   rB   rC   r[   r]   r_   r   r   r   r   r      s   
7
r   c                   @   s   e Zd ZejZdS )ÚTestBreakDefaultIntHandlerN)rL   rM   rN   r   Údefault_int_handlerr
   r   r   r   r   r`     s   r`   c                   @   s   e Zd ZejZdS )ÚTestBreakSignalIgnoredN)rL   rM   rN   r   r/   r
   r   r   r   r   rb     s   rb   c                   @   s   e Zd ZejZdS )ÚTestBreakSignalDefaultN)rL   rM   rN   r   ÚSIG_DFLr
   r   r   r   r   rc     s   rc   Ú__main__)rA   r<   r   Úsysr   r   r   Z
skipUnlessÚhasattrZskipIfÚplatformZTestCaser   r`   rb   rc   rL   Úmainr   r   r   r   Ú<module>   s*    {
