Ë
    oj  ã                  ó†   — d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 edk(  rddl
mZmZ ddlmZ nd	Z G d
„ de	«      Zy)zX
Tests for L{twisted.internet._sigchld}, an alternate, superior SIGCHLD
monitoring API.
é    )ÚannotationsN)ÚplatformType)ÚSynchronousTestCaseÚposix)ÚinstallHandlerÚisDefaultHandler)ÚsetNonBlockingz,These tests can only run on POSIX platforms.c                  óH   — 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
y	)ÚSetWakeupSIGCHLDTestszy
    Tests for the L{signal.set_wakeup_fd} implementation of the
    L{installHandler} and L{isDefaultHandler} APIs.
    c                óä   — t        j                  «       \  }}| j                  t         j                  |«       | j                  t         j                  |«       t	        |«       t	        |«       ||fS )zk
        Create a non-blocking pipe which will be closed after the currently
        running test.
        )ÚosÚpipeÚ
addCleanupÚcloser	   ©ÚselfÚreadÚwrites      úD/usr/lib/python3/dist-packages/twisted/internet/test/test_sigchld.pyr   zSetWakeupSIGCHLDTests.pipe   sQ   € ô
 —g‘g“i‰ˆˆeØ�‰œŸ™ $Ô'Ø�‰œŸ™ %Ô(Ü�tÔÜ�uÔØ�Uˆ{Ðó    c                ót   — t        j                  t         j                  «      | _        t	        d«      | _        y)z�
        Save the current SIGCHLD handler as reported by L{signal.signal} and
        the current file descriptor registered with L{installHandler}.
        éÿÿÿÿN)ÚsignalÚ	getsignalÚSIGCHLDÚsignalModuleHandlerr   ÚoldFD©r   s    r   ÚsetUpzSetWakeupSIGCHLDTests.setUp*   s'   € ô
 $*×#3Ñ#3´F·N±NÓ#CˆÔ Ü# BÓ'ˆ�
r   c                óŠ   — t        | j                  «       t        j                  t        j                  | j                  «       y)zM
        Restore whatever signal handler was present when setUp ran.
        N)r   r   r   r   r   r   s    r   ÚtearDownzSetWakeupSIGCHLDTests.tearDown2   s(   € ô
 	�t—z‘zÔ"Ü�‰”f—n‘n d×&>Ñ&>Õ?r   c                óÞ  — | j                  t        «       «       t        j                  t        j                  t        j                  «       | j                  t        «       «       t        j                  t        j                  t        j                  «       | j                  t        «       «       t        j                  t        j                  d„ «       | j                  t        «       «       y)zn
        L{isDefaultHandler} returns true if the SIGCHLD handler is SIG_DFL,
        false otherwise.
        c                  ó   — y )N© )Úargss    r   ú<lambda>z=SetWakeupSIGCHLDTests.test_isDefaultHandler.<locals>.<lambda>D   s   � r   N)Ú
assertTruer   r   r   ÚSIG_IGNÚassertFalseÚSIG_DFLr   s    r   Útest_isDefaultHandlerz+SetWakeupSIGCHLDTests.test_isDefaultHandler:   s‡   € ð
 	�‰Ô(Ó*Ô+Ü�‰”f—n‘n¤f§n¡nÔ5Ø×ÑÔ)Ó+Ô,Ü�‰”f—n‘n¤f§n¡nÔ5Ø�‰Ô(Ó*Ô+Ü�‰”f—n‘nÑ&8Ô9Ø×ÑÔ)Ó+Õ,r   c                óv   — | j                  «       \  }}t        |«      }| j                  t        |«      |«       y)zV
        L{installHandler} returns the previously registered file descriptor.
        N)r   r   ÚassertEqual)r   r   r   r   s       r   Útest_returnOldFDz&SetWakeupSIGCHLDTests.test_returnOldFDG   s2   € ð —i‘i“k‰ˆˆeÜ˜uÓ%ˆØ×Ñœ¨Ó.°Õ6r   c                óì   — | j                  «       \  }}| j                  t        «       «       t        |«       | j	                  t        «       «       t        d«       | j                  t        «       «       y)zO
        C{installHandler(-1)} removes the SIGCHLD handler completely.
        r   N)r   r'   r   r   r)   r   s      r   Útest_uninstallHandlerz+SetWakeupSIGCHLDTests.test_uninstallHandlerO   sU   € ð —i‘i“k‰ˆˆeØ�‰Ô(Ó*Ô+Ü�uÔØ×ÑÔ)Ó+Ô,Ü�rÔØ�‰Ô(Ó*Õ+r   c                óª  — | j                  «       \  }}t        |«       | j                  t        t        j
                  |d«      }| j                  |j                  t        j                  «       t	        j                  t	        j                  «       t        j                  «       | j                  t        t	        j
                  |d«      «      d«       y)zŒ
        The file descriptor passed to L{installHandler} has a byte written to
        it when SIGCHLD is delivered to the process.
        é   é   N)r   r   ÚassertRaisesÚOSErrorr   r   r-   ÚerrnoÚEAGAINÚkillÚgetpidr   r   Úlen)r   r   r   Úexcs       r   Útest_installHandlerz)SetWakeupSIGCHLDTests.test_installHandlerZ   s…   € ð
 —i‘i“k‰ˆˆeÜ�uÔà×Ñ¤¬¯©°$¸Ó:ˆØ×Ñ˜Ÿ™¤E§L¡LÔ1ä
�‰”—	‘	“œVŸ^™^Ô,à×ÑœœRŸW™W T¨1Ó-Ó.°Õ2r   N)Úreturnztuple[int, int])r=   ÚNone)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r!   r+   r.   r0   r<   r$   r   r   r   r      s+   „ ñó

ó(ó@ó-ó7ó	,ô3r   r   )rB   Ú
__future__r   r6   r   r   Útwisted.python.runtimer   Útwisted.trial.unittestr   Útwisted.internet._signalsr   r   Útwisted.internet.fdescr	   Úskipr   r$   r   r   ú<module>rI      s@   ðñõ #ã Û 	Û å /Ý 6à�7ÒßJÞ5à9€DôO3Ð/õ O3r   