ó
    Ö›‘h1  ã                   óì   • S r  SSKrSSKJr  SSKJr  SSKJr  SSK	J
r
  SSKJr  SSKJrJr   " S	 S
5      r " S S\
5      r\" 5       R'                  \R)                  5       5        g! \ a    Sr Njf = f)z6
Tests for implementations of L{IReactorWin32Events}.
é    N)ÚverifyObject)ÚDeferred)ÚIReactorWin32Events)ÚReactorBuilder)ÚFailure)ÚgetThreadIDÚisInIOThreadc                   óL   • \ rS rSrSrSrS=r=rrS r	S r
S rS rS	 rS
 rSrg)ÚListeneré   aœ  
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                 ó   • Xl         g ©N)Ú	_finished)ÚselfÚfinisheds     ÚjC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/internet/test/test_win32events.pyÚ__init__ÚListener.__init__/   s   € Ø!�ó    c                 ó"   • [        5       U l        g)Nr   )r   ÚlogThreadID©r   s    r   Ú	logPrefixÚListener.logPrefix2   s   € Ü&›=ˆÔØr   c                 óf   • SU l         [        5       U l        U R                  R	                  S 5        g )NT)Úsuccessr   ÚeventThreadIDr   Úcallbackr   s    r   ÚoccurredÚListener.occurred6   s%   € ØˆŒÜ(›]ˆÔØ�‰×Ñ Õ%r   c                 ó   • [        S5      e)NzSome problem)ÚRuntimeErrorr   s    r   ÚbrokenOccurredÚListener.brokenOccurred;   s   € Ü˜>Ó*Ð*r   c                 ó   • [        S5      $ )NzEntirely different problem)ÚEnvironmentErrorr   s    r   ÚreturnValueOccurredÚListener.returnValueOccurred>   s   € ÜÐ <Ó=Ð=r   c                 óX   • [        5       U l        U R                  R                  U5        g r   )r   ÚconnLostThreadIDr   Úerrback)r   Úreasons     r   ÚconnectionLostÚListener.connectionLostA   s   € Ü +£ˆÔØ�‰×Ñ˜vÕ&r   )r   r*   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r   r*   r   r   r   r#   r'   r-   Ú__static_attributes__© r   r   r   r      s<   † ñð* €GØ59Ð9€KÐ9�-Ð"2ò"òò&ò
+ò>õ'r   r   c                   óB   • \ rS rSrSr\/rS rS rS r	S r
S rS rS	rg
)ÚWin32EventsTestsBuilderéF   z<
Builder defining tests relating to L{IReactorWin32Events}.
c                 óD   • U R                  5       n[        [        U5        g)zV
An instance of the reactor has all of the methods defined on
L{IReactorWin32Events}.
N)ÚbuildReactorr   r   )r   Úreactors     r   Útest_interfaceÚ&Win32EventsTestsBuilder.test_interfaceM   s   € ð
 ×#Ñ#Ó%ˆÜÔ(¨'Õ2r   c                 óè  ^• [        5       nU R                  5       m[        R                  " SSSS5      n[	        5       nUR                  U4S j5        [        U5      nTR                  X$S5        TR                  [        R                  U5        U R                  T5        U R                  UR                  5        U R                  XR                  5        U R                  XR                  5        g)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                 ó$   >• TR                  5       $ r   ©Ústop©Úignoredr;   s    €r   Ú<lambda>Ú7Win32EventsTestsBuilder.test_addEvent.<locals>.<lambda>^   s   ø€ ¨W¯\©\¬^r   r   )r   r:   Ú
win32eventÚCreateEventr   ÚaddCallbackr   ÚaddEventÚcallWhenRunningÚSetEventÚ
runReactorÚ
assertTruer   ÚassertEqualr   r   )r   ÚreactorThreadIDÚeventr   Úlistenerr;   s        @r   Útest_addEventÚ%Win32EventsTestsBuilder.test_addEventU   s¼   ø€ ô
 &›-ˆØ×#Ñ#Ó%ˆÜ×&Ò& t¨U°E¸4Ó@ˆÜ“:ˆØ×ÑÔ;Ô<Ü˜HÓ%ˆØ×Ñ˜¨*Ô5Ø×Ñ¤
× 3Ñ 3°UÔ;Ø�‰˜Ô Ø�‰˜×(Ñ(Ô)Ø×Ñ˜×*>Ñ*>Ô?Ø×Ñ˜×*@Ñ*@ÕAr   c                 óš  ^^• / mUU4S jnU R                  5       m[        R                  " SSSS5      n[        5       n[	        U5      nUR                  U5        TR                  X$S5        TR                  [        R                  U5        U R                  T5        U R                  UR                  5        U R                  S/T5        g)zc
Using L{IReactorWin32Events.addEvent} does not change which thread is
reported as the I/O thread.
c                 óX   >• TR                  [        5       5        TR                  5         g r   )Úappendr	   rA   )rC   r;   Úresultss    €€r   ÚcheckÚAWin32EventsTestsBuilder.test_ioThreadDoesNotChange.<locals>.checkn   s   ø€ Ø�N‰Nœ<›>Ô*Ø�L‰L�Nr   NFr   T)r:   rF   rG   r   r   rH   rI   rJ   rK   rL   rM   r   rN   )r   rX   rP   r   rQ   r;   rW   s        @@r   Útest_ioThreadDoesNotChangeÚ2Win32EventsTestsBuilder.test_ioThreadDoesNotChangeg   sª   ù€ ð
 ˆö	ð ×#Ñ#Ó%ˆÜ×&Ò& t¨U°E¸4Ó@ˆÜ“:ˆÜ˜HÓ%ˆØ×Ñ˜UÔ#Ø×Ñ˜¨*Ô5Ø×Ñ¤
× 3Ñ 3°UÔ;Ø�‰˜Ô Ø�‰˜×(Ñ(Ô)Ø×Ñ˜$˜ Õ)r   c                 ót  ^• [        5       nU R                  5       m[        R                  " SSSS5      n/ n[	        5       nUR                  UR                  5        UR                  U4S j5        [        U5      nTR                  X%S5        TR                  [        R                  U5        U R                  T5        U R                  US   [        5        US   R                  [        5        U R!                  XR"                  5        U R!                  S[%        U R'                  [        5      5      5        g)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                 ó$   >• TR                  5       $ r   r@   rB   s    €r   rD   ÚBWin32EventsTestsBuilder.test_disconnectedOnError.<locals>.<lambda>Š   ó   ø€ ¨¯©¬r   r#   r   é   )r   r:   rF   rG   r   ÚaddBothrV   r   rI   rJ   rK   rL   ÚassertIsInstancer   Útrapr"   rN   r*   ÚlenÚflushLoggedErrors©r   rO   rP   Úresultr   rQ   r;   s         @r   Útest_disconnectedOnErrorÚ0Win32EventsTestsBuilder.test_disconnectedOnError}   sò   ø€ ô &›-ˆØ×#Ñ#Ó%ˆÜ×&Ò& t¨U°E¸4Ó@ˆàˆÜ“:ˆØ×Ñ˜Ÿ™Ô'Ø×ÑÔ7Ô8ä˜HÓ%ˆØ×Ñ˜Ð*:Ô;Ø×Ñ¤
× 3Ñ 3°UÔ;Ø�‰˜Ô à×Ñ˜f Q™i¬Ô1Øˆq‰	�‰”|Ô$à×Ñ˜×*CÑ*CÔDØ×Ñ˜œC × 6Ñ 6´|Ó DÓEÕFr   c                 ó  ^• [        5       nU R                  5       m[        R                  " SSSS5      n/ n[	        5       nUR                  UR                  5        UR                  U4S j5        [        U5      nTR                  X%S5        TR                  [        R                  U5        U R                  T5        U R                  US   [        5        US   R                  [        5        U R!                  XR"                  5        g)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                 ó$   >• TR                  5       $ r   r@   rB   s    €r   rD   ÚFWin32EventsTestsBuilder.test_disconnectOnReturnValue.<locals>.<lambda>¤   r_   r   r'   r   )r   r:   rF   rG   r   ra   rV   r   rI   rJ   rK   rL   rb   r   rc   r&   rN   r*   rf   s         @r   Útest_disconnectOnReturnValueÚ4Win32EventsTestsBuilder.test_disconnectOnReturnValue—   sÓ   ø€ ô &›-ˆØ×#Ñ#Ó%ˆÜ×&Ò& t¨U°E¸4Ó@ˆàˆÜ“:ˆØ×Ñ˜Ÿ™Ô'Ø×ÑÔ7Ô8ä˜HÓ%ˆØ×Ñ˜Ð*?Ô@Ø×Ñ¤
× 3Ñ 3°UÔ;Ø�‰˜Ô à×Ñ˜f Q™i¬Ô1Øˆq‰	�‰Ô'Ô(à×Ñ˜×*CÑ*CÕDr   c                 ó2  • U R                  5       n[        R                  " SSSS5      n[        5       n[	        U5      nUR                  X$S5        UR                  UR                  5        U R                  U5        U R                  UR                  5        g)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   )r:   rF   rG   r   r   rI   rJ   rA   rL   ÚassertIsNoner*   )r   r;   rP   r   rQ   s        r   Útest_notDisconnectedOnShutdownÚ6Win32EventsTestsBuilder.test_notDisconnectedOnShutdown°   s{   € ð ×#Ñ#Ó%ˆÜ×&Ò& t¨U°E¸4Ó@ˆÜ“:ˆÜ˜HÓ%ˆØ×Ñ˜¨*Ô5Ø×Ñ §¡Ô-Ø�‰˜Ô Ø×Ñ˜(×3Ñ3Õ4r   r5   N)r/   r0   r1   r2   r3   r   ÚrequiredInterfacesr<   rR   rZ   rh   rm   rq   r4   r5   r   r   r7   r7   F   s3   † ñð .Ð.Ðò3òBò$*ò,Gò4Eõ25r   r7   )r3   rF   ÚImportErrorÚzope.interface.verifyr   Útwisted.internet.deferr   Útwisted.internet.interfacesr   Ú#twisted.internet.test.reactormixinsr   Útwisted.python.failurer   Útwisted.python.threadabler   r	   r   r7   ÚglobalsÚupdateÚmakeTestCaseClassesr5   r   r   Ú<module>r~      ss   ðñðÛõ /å +Ý ;Ý >Ý *ß ?÷-'ñ -'ô`w5˜nô w5ñt ƒ	× Ñ Ð(×<Ñ<Ó>Õ ?øðm ó Ø‚Jðús   „A( Á(A3Á2A3