§
    Ètºf1  ã                   ó  — d Z 	 ddlZn# e$ r dZY nw xY wddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZmZ  G d	„ d
¦  «        Z G d„ de
¦  «        Z e¦   «                              e                     ¦   «         ¦  «         dS )z6
Tests for implementations of L{IReactorWin32Events}.
é    N)ÚverifyObject)ÚDeferred)ÚIReactorWin32Events)ÚReactorBuilder)ÚFailure)ÚgetThreadIDÚisInIOThreadc                   óF   — e Zd ZdZdZdxZxZZd„ Zd„ Z	d„ Z
d„ Zd„ Zd	„ ZdS )
ÚListeneraÔ  
    L{Listener} is an object that can be added to a L{IReactorWin32Events}
    reactor to receive callback notification when a Windows event is set.  It
    records what thread its callback is invoked in and fires a Deferred.

    @ivar success: A flag which is set to C{True} when the event callback is
        called.

    @ivar logThreadID: The id of the thread in which the C{logPrefix} method is
        called.

    @ivar eventThreadID: The id of the thread in which the event callback is
        called.

    @ivar connLostThreadID: The id of the thread in which the C{connectionLost}
        method is called.

    @ivar _finished: The L{Deferred} which will be fired when the event callback
        is called.
    FNc                 ó   — || _         d S ©N)Ú	_finished)ÚselfÚfinisheds     úe/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/internet/test/test_win32events.pyÚ__init__zListener.__init__/   s   € Ø!ˆŒˆˆó    c                 ó,   — t          ¦   «         | _        dS )Nr   )r   ÚlogThreadID©r   s    r   Ú	logPrefixzListener.logPrefix2   s   € Ý&™=œ=ˆÔØˆzr   c                 ón   — d| _         t          ¦   «         | _        | j                             d ¦  «         d S )NT)Úsuccessr   ÚeventThreadIDr   Úcallbackr   s    r   ÚoccurredzListener.occurred6   s1   € ØˆŒÝ(™]œ]ˆÔØŒ×Ò Ñ%Ô%Ð%Ð%Ð%r   c                 ó    — t          d¦  «        ‚)NzSome problem)ÚRuntimeErrorr   s    r   ÚbrokenOccurredzListener.brokenOccurred;   s   € Ý˜>Ñ*Ô*Ð*r   c                 ó    — t          d¦  «        S )NzEntirely different problem)ÚEnvironmentErrorr   s    r   ÚreturnValueOccurredzListener.returnValueOccurred>   s   € ÝÐ <Ñ=Ô=Ð=r   c                 ó`   — t          ¦   «         | _        | j                             |¦  «         d S r   )r   ÚconnLostThreadIDr   Úerrback)r   Úreasons     r   ÚconnectionLostzListener.connectionLostA   s*   € Ý +¡¤ˆÔØŒ×Ò˜vÑ&Ô&Ð&Ð&Ð&r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r$   r   r   r   r   r"   r'   © r   r   r   r      s�   € € € € € ðð ð* €GØ59Ð9€KÐ9�-Ð"2ð"ð "ð "ðð ð ð&ð &ð &ð
+ð +ð +ð>ð >ð >ð'ð 'ð 'ð 'ð 'r   r   c                   ó<   — e Zd ZdZegZd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ ZdS )	ÚWin32EventsTestsBuilderzD
    Builder defining tests relating to L{IReactorWin32Events}.
    c                 óX   — |                       ¦   «         }t          t          |¦  «         dS )zn
        An instance of the reactor has all of the methods defined on
        L{IReactorWin32Events}.
        N)ÚbuildReactorr   r   )r   Úreactors     r   Útest_interfacez&Win32EventsTestsBuilder.test_interfaceM   s,   € ð
 ×#Ò#Ñ%Ô%ˆÝÕ(¨'Ñ2Ô2Ð2Ð2Ð2r   c                 ó  ‡— t          ¦   «         }|                      ¦   «         Št          j        dddd¦  «        }t	          ¦   «         }|                     ˆfd„¦  «         t          |¦  «        }‰                     ||d¦  «         ‰                     t          j	        |¦  «         |  
                    ‰¦  «         |                      |j        ¦  «         |                      ||j        ¦  «         |                      ||j        ¦  «         dS )zš
        When an event which has been added to the reactor is set, the action
        associated with the event is invoked in the reactor thread.
        NFc                 ó,   •— ‰                      ¦   «         S r   ©Ústop©Úignoredr1   s    €r   ú<lambda>z7Win32EventsTestsBuilder.test_addEvent.<locals>.<lambda>^   s   ø€ ¨W¯\ª\©^¬^€ r   r   )r   r0   Ú
win32eventÚCreateEventr   ÚaddCallbackr   ÚaddEventÚcallWhenRunningÚSetEventÚ
runReactorÚ
assertTruer   ÚassertEqualr   r   )r   ÚreactorThreadIDÚeventr   Úlistenerr1   s        @r   Útest_addEventz%Win32EventsTestsBuilder.test_addEventU   sù   ø€ õ
 &™-œ-ˆØ×#Ò#Ñ%Ô%ˆÝÔ& t¨U°E¸4Ñ@Ô@ˆÝ‘:”:ˆØ×ÒÐ;Ð;Ð;Ð;Ñ<Ô<Ð<Ý˜HÑ%Ô%ˆØ×Ò˜ ¨*Ñ5Ô5Ð5Ø×Ò¥
Ô 3°UÑ;Ô;Ð;Ø�Š˜Ñ Ô Ð Ø�Š˜Ô(Ñ)Ô)Ð)Ø×Ò˜¨(Ô*>Ñ?Ô?Ð?Ø×Ò˜¨(Ô*@ÑAÔAÐAÐAÐAr   c                 óÎ  ‡‡— g Šˆˆfd„}|                       ¦   «         Št          j        dddd¦  «        }t          ¦   «         }t	          |¦  «        }|                     |¦  «         ‰                     ||d¦  «         ‰                     t          j        |¦  «         |  	                    ‰¦  «         |  
                    |j        ¦  «         |                      dg‰¦  «         dS )z{
        Using L{IReactorWin32Events.addEvent} does not change which thread is
        reported as the I/O thread.
        c                 ór   •— ‰                      t          ¦   «         ¦  «         ‰                     ¦   «          d S r   )Úappendr	   r6   )r8   r1   Úresultss    €€r   ÚcheckzAWin32EventsTestsBuilder.test_ioThreadDoesNotChange.<locals>.checkn   s*   ø€ Ø�NŠN�<™>œ>Ñ*Ô*Ð*Ø�LŠL‰NŒNˆNˆNˆNr   NFr   T)r0   r:   r;   r   r   r<   r=   r>   r?   r@   rA   r   rB   )r   rK   rD   r   rE   r1   rJ   s        @@r   Útest_ioThreadDoesNotChangez2Win32EventsTestsBuilder.test_ioThreadDoesNotChangeg   sò   øø€ ð
 ˆð	ð 	ð 	ð 	ð 	ð 	ð ×#Ò#Ñ%Ô%ˆÝÔ& t¨U°E¸4Ñ@Ô@ˆÝ‘:”:ˆÝ˜HÑ%Ô%ˆØ×Ò˜UÑ#Ô#Ð#Ø×Ò˜ ¨*Ñ5Ô5Ð5Ø×Ò¥
Ô 3°UÑ;Ô;Ð;Ø�Š˜Ñ Ô Ð Ø�Š˜Ô(Ñ)Ô)Ð)Ø×Ò˜$˜ Ñ)Ô)Ð)Ð)Ð)r   c                 óâ  ‡— t          ¦   «         }|                      ¦   «         Št          j        dddd¦  «        }g }t	          ¦   «         }|                     |j        ¦  «         |                     ˆfd„¦  «         t          |¦  «        }‰                     ||d¦  «         ‰ 	                    t          j
        |¦  «         |                      ‰¦  «         |                      |d         t          ¦  «         |d                              t          ¦  «         |                      ||j        ¦  «         |                      dt%          |                      t          ¦  «        ¦  «        ¦  «         dS )zÕ
        If the event handler raises an exception, the event is removed from the
        reactor and the handler's C{connectionLost} method is called in the I/O
        thread and the exception is logged.
        NFc                 ó,   •— ‰                      ¦   «         S r   r5   r7   s    €r   r9   zBWin32EventsTestsBuilder.test_disconnectedOnError.<locals>.<lambda>Š   ó   ø€ ¨¯ª©¬€ r   r   r   é   )r   r0   r:   r;   r   ÚaddBothrI   r   r=   r>   r?   r@   ÚassertIsInstancer   Útrapr   rB   r$   ÚlenÚflushLoggedErrors©r   rC   rD   Úresultr   rE   r1   s         @r   Útest_disconnectedOnErrorz0Win32EventsTestsBuilder.test_disconnectedOnError}   sC  ø€ õ &™-œ-ˆØ×#Ò#Ñ%Ô%ˆÝÔ& t¨U°E¸4Ñ@Ô@ˆàˆÝ‘:”:ˆØ×Ò˜œÑ'Ô'Ð'Ø×ÒÐ7Ð7Ð7Ð7Ñ8Ô8Ð8å˜HÑ%Ô%ˆØ×Ò˜ Ð*:Ñ;Ô;Ð;Ø×Ò¥
Ô 3°UÑ;Ô;Ð;Ø�Š˜Ñ Ô Ð à×Ò˜f Qœi­Ñ1Ô1Ð1ØˆqŒ	�Š•|Ñ$Ô$Ð$à×Ò˜¨(Ô*CÑDÔDÐDØ×Ò˜�C × 6Ò 6µ|Ñ DÔ DÑEÔEÑFÔFÐFÐFÐFr   c                 ól  ‡— t          ¦   «         }|                      ¦   «         Št          j        dddd¦  «        }g }t	          ¦   «         }|                     |j        ¦  «         |                     ˆfd„¦  «         t          |¦  «        }‰                     ||d¦  «         ‰ 	                    t          j
        |¦  «         |                      ‰¦  «         |                      |d         t          ¦  «         |d                              t          ¦  «         |                      ||j        ¦  «         dS )zµ
        If the event handler returns a value, the event is removed from the
        reactor and the handler's C{connectionLost} method is called in the I/O
        thread.
        NFc                 ó,   •— ‰                      ¦   «         S r   r5   r7   s    €r   r9   zFWin32EventsTestsBuilder.test_disconnectOnReturnValue.<locals>.<lambda>¤   rO   r   r"   r   )r   r0   r:   r;   r   rQ   rI   r   r=   r>   r?   r@   rR   r   rS   r!   rB   r$   rV   s         @r   Útest_disconnectOnReturnValuez4Win32EventsTestsBuilder.test_disconnectOnReturnValue—   s  ø€ õ &™-œ-ˆØ×#Ò#Ñ%Ô%ˆÝÔ& t¨U°E¸4Ñ@Ô@ˆàˆÝ‘:”:ˆØ×Ò˜œÑ'Ô'Ð'Ø×ÒÐ7Ð7Ð7Ð7Ñ8Ô8Ð8å˜HÑ%Ô%ˆØ×Ò˜ Ð*?Ñ@Ô@Ð@Ø×Ò¥
Ô 3°UÑ;Ô;Ð;Ø�Š˜Ñ Ô Ð à×Ò˜f Qœi­Ñ1Ô1Ð1ØˆqŒ	�ŠÕ'Ñ(Ô(Ð(à×Ò˜¨(Ô*CÑDÔDÐDÐDÐDr   c                 óV  — |                       ¦   «         }t          j        dddd¦  «        }t          ¦   «         }t	          |¦  «        }|                     ||d¦  «         |                     |j        ¦  «         |                      |¦  «         |  	                    |j
        ¦  «         dS )z¾
        Event handlers added with L{IReactorWin32Events.addEvent} do not have
        C{connectionLost} called on them if they are still active when the
        reactor shuts down.
        NFr   )r0   r:   r;   r   r   r=   r>   r6   r@   ÚassertIsNoner$   )r   r1   rD   r   rE   s        r   Útest_notDisconnectedOnShutdownz6Win32EventsTestsBuilder.test_notDisconnectedOnShutdown°   sž   € ð ×#Ò#Ñ%Ô%ˆÝÔ& t¨U°E¸4Ñ@Ô@ˆÝ‘:”:ˆÝ˜HÑ%Ô%ˆØ×Ò˜ ¨*Ñ5Ô5Ð5Ø×Ò ¤Ñ-Ô-Ð-Ø�Š˜Ñ Ô Ð Ø×Ò˜(Ô3Ñ4Ô4Ð4Ð4Ð4r   N)r(   r)   r*   r+   r   ÚrequiredInterfacesr2   rF   rL   rX   r[   r^   r,   r   r   r.   r.   F   sŒ   € € € € € ðð ð .Ð.Ðð3ð 3ð 3ðBð Bð Bð$*ð *ð *ð,Gð Gð Gð4Eð Eð Eð25ð 5ð 5ð 5ð 5r   r.   )r+   r:   ÚImportErrorÚzope.interface.verifyr   Útwisted.internet.deferr   Útwisted.internet.interfacesr   Ú#twisted.internet.test.reactormixinsr   Útwisted.python.failurer   Útwisted.python.threadabler   r	   r   r.   ÚglobalsÚupdateÚmakeTestCaseClassesr,   r   r   ú<module>rj      sF  ððð ðØÐÐÐÐøØð ð ð Ø€J€J€Jðøøøð /Ð .Ð .Ð .Ð .Ð .à +Ð +Ð +Ð +Ð +Ð +Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø >Ð >Ð >Ð >Ð >Ð >Ø *Ð *Ð *Ð *Ð *Ð *Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?ð-'ð -'ð -'ð -'ð -'ñ -'ô -'ð -'ð`w5ð w5ð w5ð w5ð w5˜nñ w5ô w5ð w5ðt €�	„	× Ò Ð(×<Ò<Ñ>Ô>Ñ ?Ô ?Ð ?Ð ?Ð ?s   „	 ‰’