ó
    Ö›‘hÎ9  ã                   óÔ  • 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  SS	KJrJrJr  SS
KJr  SSKJr  SSKJrJrJr  SSKJr  SSKJr  SSKJrJ r    SSK!r"\"r!\" S5      r$\	" \\5       " S S5      5       r% " S S\ 5      r&S r' " S S5      r( " S S\(\ 5      r) " S S\(\ 5      r* " S S\5      r+\" \!(       + S5       " S S \ 5      5       r,g! \# a    Sr! N€f = f)!z%
Tests for L{twisted.internet.base}.
é    N)ÚQueue)ÚCallable)ÚskipIf)Úimplementer)Ú	ParamSpec)ÚFirstOneWins)ÚDelayedCallÚReactorBaseÚThreadedResolver)ÚDeferred)ÚDNSLookupError)ÚIReactorThreadsÚIReactorTimeÚIResolverSimple)ÚClock)Ú
ThreadPool)ÚSkipTestÚTestCaseÚ_Pc                   óÜ   • \ rS rSrSrS rS\\\4   S\R                  S\R                  SS4S	 jrS
 rS rS rS\4S jrS\\\4   S\R                  S\R                  SS4S jrS rSrg)ÚFakeReactoré$   z`
A fake reactor implementation which just supports enough reactor APIs for
L{ThreadedResolver}.
c                 óà   ^ • [        5       T l        T R                  R                  T l        [        5       T l        T R                  R                  5         U 4S jT l        [        5       T l        g )Nc                  ó   >• T R                   $ ©N)Ú_threadpool©Úselfs   €ÚcC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/internet/test/test_base.pyÚ<lambda>Ú&FakeReactor.__init__.<locals>.<lambda>1   s   ø€  T×%5Ò%5ó    )	r   Ú_clockÚ	callLaterr   r   ÚstartÚgetThreadPoolr   Ú_threadCallsr   s   `r   Ú__init__ÚFakeReactor.__init__+   sK   ø€ Ü“gˆŒØŸ™×.Ñ.ˆŒä%›<ˆÔØ×Ñ×ÑÔ Ü5ˆÔä!›GˆÕr"   ÚcallableÚargsÚkwargsÚreturnNc                 ó>   • U R                   R                  XU45        g r   )r'   Úput©r   r*   r+   r,   s       r   ÚcallFromThreadÚFakeReactor.callFromThread5   s   € ð 	×Ñ×Ñ˜x¨vÐ6Õ7r"   c                 óN   • U R                   R                  5       u  pnU" U0 UD6  g r   )r'   Úget)r   Úfr+   r,   s       r   Ú_runThreadCallsÚFakeReactor._runThreadCalls:   s'   € Ø×+Ñ+×/Ñ/Ó1‰ˆ�Ù	ˆ4Ð�6Ór"   c                 ó8   • U R                   R                  5         g r   )r   Ústopr   s    r   Ú_stopÚFakeReactor._stop>   s   € Ø×Ñ×ÑÕr"   c                 ó   • g r   © r   s    r   ÚgetDelayedCallsÚFakeReactor.getDelayedCallsA   ó   € àr"   c                 ó   • g r   r=   r   s    r   ÚsecondsÚFakeReactor.secondsE   r@   r"   c                 ó   • g r   r=   r0   s       r   ÚcallInThreadÚFakeReactor.callInThreadI   s   € ð 	r"   c                 ó   • g r   r=   )r   Úsizes     r   ÚsuggestThreadPoolSizeÚ!FakeReactor.suggestThreadPoolSizeO   r@   r"   )r#   r'   r   r$   r&   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r(   r   r   Úobjectr+   r,   r1   r6   r:   r>   ÚfloatrB   rE   rI   Ú__static_attributes__r=   r"   r   r   r   $   s˜   † ñò
$ð8Ø   V Ñ,ð8Ø57·W±Wð8ØHJÏ	É	ð8à	ô8ò
ò òð˜ô ðØ   V Ñ,ðØ57·W±WðØHJÏ	É	ðà	ôõr"   r   c                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	ÚThreadedResolverTestséT   z 
Tests for L{ThreadedResolver}.
c                 ó  ^^	• SmSnSn[        5       nU R                  UR                  5        / m	/ nUU	4S jnU R                  [        SU5        [        U5      nUR                  X45      nUR                  UR                  5        UR                  5         U R                  T	U/5        U R                  UT/5        UR                  R                  US-   5        U R                  UR                  R                  / 5        g)zÍ
L{ThreadedResolver.getHostByName} returns a L{Deferred} which fires
with the value returned by the call to L{socket.gethostbyname} in the
threadpool of the reactor passed to L{ThreadedResolver.__init__}.
z	10.0.0.17zfoo.bar.example.comé   c                 ó*   >• TR                  U 5        T$ r   )Úappend)ÚnameÚipÚlookedUps    €€r   ÚfakeGetHostByNameÚ=ThreadedResolverTests.test_success.<locals>.fakeGetHostByNamei   s   ø€ Ø�O‰O˜DÔ!ØˆIr"   Úgethostbynameé   N)r   Ú
addCleanupr:   ÚpatchÚsocketr   ÚgetHostByNameÚaddCallbackrY   r6   ÚassertEqualr#   ÚadvanceÚcalls)
r   rZ   ÚtimeoutÚreactorÚ
resolvedTor]   ÚresolverÚdr[   r\   s
           @@r   Útest_successÚ"ThreadedResolverTests.test_successY   sÝ   ù€ ð ˆØ$ˆØˆä“-ˆØ�‰˜Ÿ™Ô&àˆØˆ
ö	ð 	�
‰
”6˜?Ð,=Ô>ä# GÓ,ˆØ×"Ñ" 4¨Ó4ˆØ	�‰�j×'Ñ'Ô(à×ÑÔ!à×Ñ˜ D 6Ô*Ø×Ñ˜ b TÔ*ð 	�‰×Ñ˜w¨™{Ô+Ø×Ñ˜Ÿ™×-Ñ-¨rÕ2r"   c                 ó  • Sn[        5       nU R                  UR                  5        S nU R                  [        SU5        / n[        U5      nUR                  SU45      nU R                  U[        5        UR                  UR                  5        UR                  5         U R                  [        U5      S5        UR                  R                  US-   5        U R                  UR                  R                   / 5        g)zŽ
L{ThreadedResolver.getHostByName} returns a L{Deferred} which fires a
L{Failure} if the call to L{socket.gethostbyname} raises an exception.
rW   c                 ó   • [        S5      e)NzENOBUFS (this is a funny joke))ÚOSError)rZ   s    r   r]   Ú=ThreadedResolverTests.test_failure.<locals>.fakeGetHostByName†   s   € ÜÐ:Ó;Ð;r"   r_   ú	some.namer`   N)r   ra   r:   rb   rc   r   rd   ÚassertFailurer   re   rY   r6   rf   Úlenr#   rg   rh   )r   ri   rj   r]   Ú
failedWithrl   rm   s          r   Útest_failureÚ"ThreadedResolverTests.test_failure|   sÏ   € ð
 ˆä“-ˆØ�‰˜Ÿ™Ô&ò	<ð 	�
‰
”6˜?Ð,=Ô>àˆ
Ü# GÓ,ˆØ×"Ñ" ;°°
Ó;ˆØ×Ñ˜1œnÔ-Ø	�‰�j×'Ñ'Ô(à×ÑÔ!à×Ñœ˜Z›¨!Ô,ð 	�‰×Ñ˜w¨™{Ô+Ø×Ñ˜Ÿ™×-Ñ-¨rÕ2r"   c                 óD  ^• Sn[        5       nU R                  UR                  5        [        5       mU4S jnU R	                  [
        SU5        / n[        U5      nUR                  SU45      nU R                  U[        5        UR                  UR                  5        UR                  R                  US-
  5        U R                  U/ 5        UR                  R                  S5        U R                  [        U5      S5        TR!                  [#        S5      5        g)z°
If L{socket.gethostbyname} does not complete before the specified
timeout elapsed, the L{Deferred} returned by
L{ThreadedResolver.getHostByName} fails with L{DNSLookupError}.
é
   c                 ó$   >• TR                  5       er   )r4   )rZ   Úresults    €r   r]   Ú=ThreadedResolverTests.test_timeout.<locals>.fakeGetHostByName¦   s   ø€ Ø—*‘*“,Ðr"   r_   rt   r`   zThe I/O was errorfulN)r   ra   r:   r   rb   rc   r   rd   ru   r   re   rY   r#   rg   rf   rv   r/   ÚIOError)r   ri   rj   r]   rw   rl   rm   r}   s          @r   Útest_timeoutÚ"ThreadedResolverTests.test_timeout™   så   ø€ ð ˆä“-ˆØ�‰˜Ÿ™Ô&ä“ˆõ	ð 	�
‰
”6˜?Ð,=Ô>àˆ
Ü# GÓ,ˆØ×"Ñ" ;°°
Ó;ˆØ×Ñ˜1œnÔ-Ø	�‰�j×'Ñ'Ô(à�‰×Ñ˜w¨™{Ô+Ø×Ñ˜ RÔ(Ø�‰×Ñ˜qÔ!Ø×Ñœ˜Z›¨!Ô,ð 	�
‰
”7Ð1Ó2Õ3r"   c                 óL  ^• / m[        [        5       " U4S jS5      5       n " S S[        5      nU" 5       nU" 5       nUR                  U5        [	        [        5       5      nUR                  R                  US5        UR                  R                  US5        UR                  R                  US5        UR                  R                  US5        UR                  R                  US5        U R                  [        T5      S	5        U R                  [        [        [        T5      5      [        /S	-  5        U R                  STS
   5        U R                  STS   5        U R                  STS   5        U R                  STS   5        U R                  STS   5        g)zU
L{ThreadedResolver.getHostByName} is passed L{str}, encoded using IDNA
if required.
c                   ó&   >• \ rS rSrSU 4S jjrSrg)ÚAThreadedResolverTests.test_resolverGivenStr.<locals>.FakeResolveréÁ   r=   c                 ó:   >• TR                  U5        [        5       $ r   )rY   r   )r   rZ   Útimeoutsrh   s      €r   rd   ÚOThreadedResolverTests.test_resolverGivenStr.<locals>.FakeResolver.getHostByNameÃ   s   ø€ Ø—‘˜TÔ"Ü“zÐ!r"   N)r=   )rK   rL   rM   rN   rd   rR   )rh   s   €r   ÚFakeResolverr„   Á   s   ø† ÷"ò "r"   r‰   c                   ó   • \ rS rSrS rSrg)ÚFThreadedResolverTests.test_resolverGivenStr.<locals>.JustEnoughReactoréÇ   c                 ó   • g r   r=   r   s    r   ÚinstallWakerÚSThreadedResolverTests.test_resolverGivenStr.<locals>.JustEnoughReactor.installWakerÈ   s   € Ør"   r=   N)rK   rL   rM   rN   rŽ   rR   r=   r"   r   ÚJustEnoughReactorr‹   Ç   s   † õr"   r�   zexample.exampleu   vÃ¤Ã¤ntynyt.exampleu   Ñ€Ñ„.examplezxn----7sbb4ac0ad0be6cf.xn--p1aié   r   r`   zxn--vntynyt-5waa.exampleé   zxn--p1ai.exampleé   é   N)r   r   r
   ÚinstallResolverr   r   ÚnameResolverÚresolveHostNamerf   rv   ÚlistÚmapÚtypeÚstr)r   r‰   r�   Úfakerj   Úrecrh   s         @r   Útest_resolverGivenStrÚ+ThreadedResolverTests.test_resolverGivenStrº   so  ø€ ð
 ˆä	”_Ó	%÷	"ó 	"ó 
&ð	"ô
	¤ô 	ñ ‹~ˆÙ#Ó%ˆØ×Ñ Ô%Üœ8›:Ó&ˆØ×Ñ×,Ñ,¨SÐ2CÔDØ×Ñ×,Ñ,¨SÐ2CÔDØ×Ñ×,Ñ,¨SÐ2KÔLØ×Ñ×,Ñ,¨SÐ2HÔIØ×Ñ×,Ñ,¨SÐ2SÔTà×Ñœ˜U› QÔ'Ø×Ñœœc¤$¨Ó.Ó/´#°¸±Ô;Ø×ÑÐ*¨E°!©HÔ5Ø×ÑÐ*¨E°!©HÔ5Ø×ÑÐ3°U¸1±XÔ>Ø×ÑÐ+¨U°1©XÔ6Ø×ÑÐ:¸EÀ!¹HÕEr"   r=   N)
rK   rL   rM   rN   rO   rn   rx   r€   rž   rR   r=   r"   r   rT   rT   T   s   † ñò!3òF3ò:4õB!Fr"   rT   c                  ó   • g)z0
Function used by L{DelayedCallTests.test_str}.
Nr=   r=   r"   r   Únothingr¡   Þ   ó   � r"   c                   óT   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rSrg)ÚDelayedCallMixinéä   ú
L{DelayedCall}
c           	      ó*   • S n[        US S0 X"S5      $ )z�
Get a L{DelayedCall} instance at a given C{time}.

@param time: The absolute time at which the returned L{DelayedCall}
    will be scheduled.
c                 ó   • g r   r=   )Úcalls    r   ÚnoopÚ0DelayedCallMixin._getDelayedCallAt.<locals>.noopñ   s   € Ør"   c                  ó   • g r   r=   r=   r"   r   r    Ú4DelayedCallMixin._getDelayedCallAt.<locals>.<lambda>ô   s   € ¨r"   r=   N)r	   )r   Útimerª   s      r   Ú_getDelayedCallAtÚ"DelayedCallMixin._getDelayedCallAté   s   € ò	ô ˜4¡¨r°2°tÀ4ÓHÐHr"   c                 ó\   • U R                  S5      U l        U R                  S5      U l        g)zJ
Create two L{DelayedCall} instanced scheduled to run at different
times.
r   r`   N)r¯   ÚzeroÚoner   s    r   ÚsetUpÚDelayedCallMixin.setUpö   s(   € ð
 ×*Ñ*¨1Ó-ˆŒ	Ø×)Ñ)¨!Ó,ˆ�r"   c           	      ó„   • [        S[        SSS0SSS 5      nU R                  [        U5      S[	        U5      4-  5        g)úÇ
The string representation of a L{DelayedCall} instance, as returned by
L{str}, includes the unsigned id of the instance, as well as its state,
the function to be called, and the function arguments.
é   ©r“   ÚAr‘   Nc                  ó   • g©Ng      ø?r=   r=   r"   r   r    Ú+DelayedCallMixin.test_str.<locals>.<lambda>  ó   € È#r"   z?<DelayedCall 0x%x [10.5s] called=0 cancelled=0 nothing(3, A=5)>)r	   r¡   rf   r›   Úid©r   Údcs     r   Útest_strÚDelayedCallMixin.test_strþ   sD   € ô ˜œW d¨S°!¨H°d¸DÁ+ÓNˆØ×ÑÜ�‹GØMÜ�"‹vˆiñõ	
r"   c           	      ó|   • [        S[        SSS0SSS 5      nU R                  [        U5      [	        U5      5        g)zy
The string representation of a L{DelayedCall} instance, as returned by
{repr}, is identical to that returned by L{str}.
é   )é   rº   é	   Nc                  ó   • g)Ngš™™™™™ù?r=   r=   r"   r   r    Ú,DelayedCallMixin.test_repr.<locals>.<lambda>  r¾   r"   )r	   r¡   rf   r›   ÚreprrÀ   s     r   Ú	test_reprÚDelayedCallMixin.test_repr  s6   € ô
 ˜œW d¨S°!¨H°d¸DÁ+ÓNˆØ×Ñœ˜R›¤$ r£(Õ+r"   c                 óÊ   • U R                   U R                  p!U R                  X:  5        U R                  X!:  5        U R                  X:  5        U R                  X":  5        g)zz
For two instances of L{DelayedCall} C{a} and C{b}, C{a < b} is true
if and only if C{a} is scheduled to run before C{b}.
N©r²   r³   Ú
assertTrueÚassertFalse©r   r²   r³   s      r   Útest_ltÚDelayedCallMixin.test_lt  sQ   € ð
 —I‘I˜tŸx™xˆcØ�‰˜™
Ô#Ø×Ñ˜™Ô$Ø×Ñ˜™Ô%Ø×Ñ˜™Õ#r"   c                 óÊ   • U R                   U R                  p!U R                  X:*  5        U R                  X!:*  5        U R                  X:*  5        U R                  X":*  5        g)z—
For two instances of L{DelayedCall} C{a} and C{b}, C{a <= b} is true
if and only if C{a} is scheduled to run before C{b} or at the same
time as C{b}.
NrÎ   rÑ   s      r   Útest_leÚDelayedCallMixin.test_le  sM   € ð —I‘I˜tŸx™xˆcØ�‰˜™Ô$Ø×Ñ˜™Ô%Ø�‰˜™Ô%Ø�‰˜™
Õ#r"   c                 óÊ   • U R                   U R                  p!U R                  X!:„  5        U R                  X:„  5        U R                  X:„  5        U R                  X":„  5        g)zy
For two instances of L{DelayedCall} C{a} and C{b}, C{a > b} is true
if and only if C{a} is scheduled to run after C{b}.
NrÎ   rÑ   s      r   Útest_gtÚDelayedCallMixin.test_gt*  sQ   € ð
 —I‘I˜tŸx™xˆcØ�‰˜™
Ô#Ø×Ñ˜™Ô$Ø×Ñ˜™Ô%Ø×Ñ˜™Õ#r"   c                 óÊ   • U R                   U R                  p!U R                  X!:¬  5        U R                  X:¬  5        U R                  X:¬  5        U R                  X":¬  5        g)z•
For two instances of L{DelayedCall} C{a} and C{b}, C{a > b} is true
if and only if C{a} is scheduled to run after C{b} or at the same
time as C{b}.
NrÎ   rÑ   s      r   Útest_geÚDelayedCallMixin.test_ge5  sM   € ð —I‘I˜tŸx™xˆcØ�‰˜™Ô$Ø×Ñ˜™Ô%Ø�‰˜™Ô%Ø�‰˜™
Õ#r"   c                 óô   • U R                  U R                  U R                  :H  5        U R                  U R                  U R                  :H  5        U R                  U R                  U R                  :H  5        g)z4
A L{DelayedCall} instance is only equal to itself.
N)rÐ   r²   r³   rÏ   r   s    r   Útest_eqÚDelayedCallMixin.test_eqA  sQ   € ð 	×Ñ˜Ÿ™ d§h¡hÑ.Ô/Ø�‰˜Ÿ	™	 T§Y¡YÑ.Ô/Ø�‰˜Ÿ™ D§H¡HÑ,Õ-r"   c                 óô   • U R                  U R                  U R                  :g  5        U R                  U R                  U R                  :g  5        U R                  U R                  U R                  :g  5        g)z=
A L{DelayedCall} instance is not equal to any other object.
N)rÏ   r²   r³   rÐ   r   s    r   Útest_neÚDelayedCallMixin.test_neK  sS   € ð 	�‰˜Ÿ	™	 T§X¡XÑ-Ô.Ø×Ñ˜Ÿ™ d§i¡iÑ/Ô0Ø×Ñ˜Ÿ™ T§X¡XÑ-Õ.r"   )r³   r²   N)rK   rL   rM   rN   rO   r¯   r´   rÂ   rË   rÒ   rÕ   rØ   rÛ   rÞ   rá   rR   r=   r"   r   r¤   r¤   ä   s:   † ñòIò-ò
ò,ò	$ò
$ò	$ò
$ò.õ/r"   r¤   c                   ó*   • \ rS rSrSrS rS rS rSrg)ÚDelayedCallNoDebugTestsiV  r¦   c                 ó\   • U R                  [        SS5        [        R                  U 5        g)z
Turn debug off.
ÚdebugFN©rb   r	   r¤   r´   r   s    r   r´   ÚDelayedCallNoDebugTests.setUp[  s"   € ð 	�
‰
”; ¨Ô/Ü×Ñ˜tÕ$r"   c           	      óž   • [        S[        SSS0SSS 5      nSR                  [        U5      5      nU R	                  [        U5      U5        g)r·   r¸   r¹   rº   r‘   Nc                  ó   • gr¼   r=   r=   r"   r   r    Ú2DelayedCallNoDebugTests.test_str.<locals>.<lambda>h  r¾   r"   zA<DelayedCall 0x{:x} [10.5s] called=0 cancelled=0 nothing(3, A=5)>)r	   r¡   Úformatr¿   rf   r›   )r   rÁ   Úexpecteds      r   rÂ   Ú DelayedCallNoDebugTests.test_strb  sK   € ô ˜œW d¨S°!¨H°d¸DÁ+ÓNˆðß%™v¤b¨£f›~ð 	ð 	×Ñœ˜R› (Õ+r"   c           	      ó~   • [        SS S0 [        [        S 5      nSUl        U R                  S[	        U5      5        g)zÅ
If L{DelayedCall.debug} changes from C{0} to C{1} between
L{DelayeCall.__init__} and L{DelayedCall.__repr__} then
L{DelayedCall.__repr__} returns a string that does not include the
creator stack.
r“   c                  ó   • g r   r=   r=   r"   r   r    Ú<DelayedCallNoDebugTests.test_switchToDebug.<locals>.<lambda>v  ó   €  Dr"   r=   c                  ó   • g©Nr’   r=   r=   r"   r   r    rñ   v  ó   € ÈAr"   r`   útraceback at creationN)r	   r¡   ræ   ÚassertNotInrÊ   rÀ   s     r   Útest_switchToDebugÚ*DelayedCallNoDebugTests.test_switchToDebugo  s6   € ô ˜™L¨"¨b´'¼7ÁIÓNˆØˆŒØ×ÑÐ0´$°r³(Õ;r"   r=   N)	rK   rL   rM   rN   rO   r´   rÂ   rø   rR   r=   r"   r   rä   rä   V  s   † ñò%ò,õ	<r"   rä   c                   ó*   • \ rS rSrSrS rS rS rSrg)ÚDelayedCallDebugTestsi{  r¦   c                 ó\   • U R                  [        SS5        [        R                  U 5        g)z
Turn debug on.
ræ   TNrç   r   s    r   r´   ÚDelayedCallDebugTests.setUp€  s"   € ð 	�
‰
”; ¨Ô.Ü×Ñ˜tÕ$r"   c           	      óž   • [        S[        SSS0SSS 5      nSR                  [        U5      5      nU R	                  [        U5      U5        g)r·   r¸   r¹   rº   r‘   Nc                  ó   • gr¼   r=   r=   r"   r   r    Ú0DelayedCallDebugTests.test_str.<locals>.<lambda>�  r¾   r"   z\<DelayedCall 0x{:x} \[10.5s\] called=0 cancelled=0 nothing\(3, A=5\)

traceback at creation:)r	   r¡   rì   r¿   ÚassertRegexr›   )r   rÁ   ÚexpectedRegexps      r   rÂ   ÚDelayedCallDebugTests.test_str‡  sK   € ô ˜œW d¨S°!¨H°d¸DÁ+ÓNˆð%ç%+¡V¬B¨r«F£^ð 	ð
 	×Ñœ˜R› .Õ1r"   c           	      ó~   • [        SS S0 [        [        S 5      nSUl        U R                  S[	        U5      5        g)zë
If L{DelayedCall.debug} changes from C{1} to C{0} between
L{DelayeCall.__init__} and L{DelayedCall.__repr__} then
L{DelayedCall.__repr__} returns a string that includes the creator
stack (we captured it, we might as well display it).
r“   c                  ó   • g r   r=   r=   r"   r   r    Ú<DelayedCallDebugTests.test_switchFromDebug.<locals>.<lambda>œ  rò   r"   r=   c                  ó   • grô   r=   r=   r"   r   r    r  œ  rõ   r"   r   rö   N)r	   r¡   ræ   ÚassertInrÊ   rÀ   s     r   Útest_switchFromDebugÚ*DelayedCallDebugTests.test_switchFromDebug•  s4   € ô ˜™L¨"¨b´'¼7ÁIÓNˆØˆŒØ�‰Ð-¬t°B«xÕ8r"   r=   N)	rK   rL   rM   rN   rO   r´   rÂ   r	  rR   r=   r"   r   rû   rû   {  s   † ñò%ò2õ	9r"   rû   c                   ó   • \ rS rSrSrS rSrg)ÚTestSpySignalCapturingReactori¡  zU
Subclass of ReactorBase to capture signals delivered to the
reactor for inspection.
c                 ó   • g)z
Required method, unused.
Nr=   r   s    r   rŽ   Ú*TestSpySignalCapturingReactor.installWaker¨  r¢   r"   r=   N)rK   rL   rM   rN   rO   rŽ   rR   r=   r"   r   r  r  ¡  s   † ñõ
r"   r  zsignal module not availablec                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	ÚReactorBaseSignalTestsi®  z=
Tests to exercise ReactorBase's signal exit reporting path.
c                 óP   • [        5       nU R                  SUR                  5        g)z9
The default value of the _exitSignal attribute is None.
N)r  ÚassertIsÚ_exitSignal©r   rj   s     r   Útest_exitSignalDefaultsToNoneÚ4ReactorBaseSignalTests.test_exitSignalDefaultsToNoneµ  s    € ô 0Ó1ˆØ�‰�d˜G×/Ñ/Õ0r"   c                 ó¬   • [        5       nUR                  [        R                  S5        U R	                  [        R                  UR
                  5        g)zV
ReactorBase's SIGINT handler saves the value of SIGINT to the
_exitSignal attribute.
N)r  ÚsigIntÚsignalÚSIGINTÚassertEqualsr  r  s     r   Útest_captureSIGINTÚ)ReactorBaseSignalTests.test_captureSIGINT¼  s8   € ô
 0Ó1ˆØ�‰”v—}‘} dÔ+Ø×Ñœ&Ÿ-™-¨×)<Ñ)<Õ=r"   c                 ó¬   • [        5       nUR                  [        R                  S5        U R	                  [        R                  UR
                  5        g)zX
ReactorBase's SIGTERM handler saves the value of SIGTERM to the
_exitSignal attribute.
N)r  ÚsigTermr  ÚSIGTERMr  r  r  s     r   Útest_captureSIGTERMÚ*ReactorBaseSignalTests.test_captureSIGTERMÅ  s8   € ô
 0Ó1ˆØ�‰œŸ™¨Ô-Ø×Ñœ&Ÿ.™.¨'×*=Ñ*=Õ>r"   c                 óì   • [        [        S5      (       d  [        S5      e[        5       nUR	                  [        R
                  S5        U R                  [        R
                  UR                  5        g)zZ
ReactorBase's SIGBREAK handler saves the value of SIGBREAK to the
_exitSignal attribute.
ÚSIGBREAKz$signal module does not have SIGBREAKN)Úhasattrr  r   r  ÚsigBreakr$  r  r  r  s     r   Útest_captureSIGBREAKÚ+ReactorBaseSignalTests.test_captureSIGBREAKÎ  sS   € ô
 ”v˜z×*Ñ*ÜÐAÓBÐBä/Ó1ˆØ×ÑœŸ™¨$Ô/Ø×Ñœ&Ÿ/™/¨7×+>Ñ+>Õ?r"   r=   N)
rK   rL   rM   rN   rO   r  r  r!  r'  rR   r=   r"   r   r  r  ®  s   † ñò1ò>ò?õ
@r"   r  )-rO   rc   Úqueuer   Útypingr   Úunittestr   Úzope.interfacer   Útyping_extensionsr   Útwisted.internet._resolverr   Útwisted.internet.baser	   r
   r   Útwisted.internet.deferr   Útwisted.internet.errorr   Útwisted.internet.interfacesr   r   r   Útwisted.internet.taskr   Útwisted.python.threadpoolr   Útwisted.trial.unittestr   r   r  Ú_signalÚImportErrorr   r   rT   r¡   r¤   rä   rû   r  r  r=   r"   r   Ú<module>r8     s  ðñó Ý Ý Ý å &å 'å 3ß LÑ LÝ +Ý 1ß VÑ VÝ 'Ý 0ß 5ðÛð €Fáˆtƒ_€ñ ˆ\˜?Ó+÷,ð ,ó ,ð,ô^GF˜Hô GFòT÷o/ñ o/ôd"<Ð.°ô "<ôJ#9Ð,¨hô #9ôL
 Kô 
ñ ˆFŒ
Ð1Ó2ô)@˜Xó )@ó 3ñ)@øðg ó Ø‚Fðús   Á C ÃC'Ã&C'