o
    KXî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re ¡  dS 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   s0   t  t j¡| _| jd urt   t j| j¡ d S d S ©N)ÚsignalÚ	getsignalÚSIGINTÚ_default_handlerÚint_handler©Úself© r   úB/opt/python-3.10.19/usr/lib/python3.10/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w |  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   sP   t  ¡ }|  |t jj¡ t  |¡ z|  |t jj¡ W t  |¡ d S t  |¡ w 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y7   ˆ  	d¡ Y nw ˆ  
|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	y0   Y nw ˆ  
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yB   |  	d¡ Y nw |  
|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
y<   Y d S w |  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y5   Y nw |  |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                   @   ó   e Zd ZejZdS )ÚTestBreakDefaultIntHandlerN)rL   rM   rN   r   Údefault_int_handlerr
   r   r   r   r   ra     ó    
ra   c                   @   r`   )ÚTestBreakSignalIgnoredN)rL   rM   rN   r   r/   r
   r   r   r   r   rd     rc   rd   c                   @   r`   )ÚTestBreakSignalDefaultN)rL   rM   rN   r   ÚSIG_DFLr
   r   r   r   r   re     rc   re   Ú__main__)rA   r<   r   Úsysr   r   r   Z
skipUnlessÚhasattrZskipIfÚplatformZTestCaser   ra   rd   re   rL   Úmainr   r   r   r   Ú<module>   s.     {ÿ