+
    üÐjÃ9  ã                   óØ  € R t ^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIH	t	 ^ RIH
t
 ^ RIHt ^ RIHtHtHt ^ R	IHt ^ R
IHt ^ RIHtHtHt ^ RIHt ^ RIHt ^ RIHtHt  ^ RI t!]!t ]
! R4      t#]	! ]]4       ! R R4      4       t$ ! R R]4      t%R t& ! R R4      t' ! R R]']4      t( ! R R]']4      t) ! R R]4      t*]! ] '       * R4       ! R R]4      4       t+R#   ]" d    Rt  L‚i ; i) 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                   óx   a € ] tR t^$t o RtR tV 3R lR ltR tR tR t	V 3R lR	 lt
V 3R
 lR ltR tRtV tR# )ÚFakeReactorz`
A fake reactor implementation which just supports enough reactor APIs for
L{ThreadedResolver}.
c                óâ   a € \        4       S n        S P                  P                  S n        \        4       S n        S P                  P                  4        V 3R  lS n        \        4       S n        R# )c                  ó   <€ S P                   # ©N)Ú_threadpool©Úselfs   €ÚA/usr/lib/python3/dist-packages/twisted/internet/test/test_base.pyÚ<lambda>Ú&FakeReactor.__init__.<locals>.<lambda>1   s   ø€  T×%5Ò%5ó    N)	r   Ú_clockÚ	callLaterr   r   ÚstartÚgetThreadPoolr   Ú_threadCallsr   s   fr   Ú__init__ÚFakeReactor.__init__+   sK   ø€ Ü“gˆŒØŸ™×.Ñ.ˆŒä%›<ˆÔØ×Ñ×ÑÔ Ü5ˆÔä!›GˆÖr    c                ón   <€ V ^8„  d   QhRS[ S[S[3,          RS[P                  RS[P                  RR/# ©é   ÚcallableÚargsÚkwargsÚreturnN©r   r   Úobjectr,   r-   )ÚformatÚ__classdict__s   "€r   Ú__annotate__ÚFakeReactor.__annotate__5   s>   ø€ ÷ 8ñ 8Ù ¡¡V Õ,ð8Ù57·W±Wð8ÙHJÏ	É	ð8à	ñ8r    c                ó@   € V P                   P                  WV34       R # r   )r%   Úput©r   r+   r,   r-   s   &&*,r   ÚcallFromThreadÚFakeReactor.callFromThread5   s   € ð 	×Ñ×Ñ˜x¨vÐ6Ö7r    c                óP   € V P                   P                  4       w  rpV! V/ VB  R # r   )r%   Úget)r   Úfr,   r-   s   &   r   Ú_runThreadCallsÚFakeReactor._runThreadCalls:   s'   € Ø×+Ñ+×/Ñ/Ó1‰ˆ�Ù	ˆ4Ð�6Ôr    c                ó:   € V P                   P                  4        R # r   )r   Ústopr   s   &r   Ú_stopÚFakeReactor._stop>   s   € Ø×Ñ×ÑÖr    c                ó   € R # r   © r   s   &r   ÚgetDelayedCallsÚFakeReactor.getDelayedCallsA   ó   € ár    c                ó    <€ V ^8„  d   QhRS[ /# )r*   r.   )Úfloat)r1   r2   s   "€r   r3   r4   E   s   ø€ ÷ ñ ™ñ r    c                ó   € R # r   rD   r   s   &r   ÚsecondsÚFakeReactor.secondsE   rG   r    c                ón   <€ V ^8„  d   QhRS[ S[S[3,          RS[P                  RS[P                  RR/# r)   r/   )r1   r2   s   "€r   r3   r4   I   s>   ø€ ÷ ñ Ù ¡¡V Õ,ðÙ57·W±WðÙHJÏ	É	ðà	ñr    c                ó   € R # r   rD   r7   s   &&*,r   ÚcallInThreadÚFakeReactor.callInThreadI   s   € ñ 	r    c                ó   € R # r   rD   )r   Úsizes   &&r   ÚsuggestThreadPoolSizeÚ!FakeReactor.suggestThreadPoolSizeO   rG   r    )r!   r%   r   r"   r$   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r&   r8   r=   rA   rE   rK   rO   rS   Ú__static_attributes__Ú__classdictcell__©r2   s   @r   r   r   $   sF   ø‡ € ñò
$÷8ð 8ò
ò ò÷ð ÷ð ÷ð r    r   c                   ó<   a € ] tR t^Tt o RtR tR tR tR tRt	V t
R# )ÚThreadedResolverTestsz 
Tests for L{ThreadedResolver}.
c                ó  aa	€ RoRp^p\        4       pV P                  VP                  4       . o	. pVV	3R lpV P                  \        RV4       \        V4      pVP                  W34      pVP                  VP                  4       VP                  4        V P                  S	V.4       V P                  VS.4       VP                  P                  V^,           4       V P                  VP                  P                  . 4       R# )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.comc                 ó*   <€ SP                  V 4       S# r   )Úappend)ÚnameÚipÚlookedUps   &€€r   ÚfakeGetHostByNameÚ=ThreadedResolverTests.test_success.<locals>.fakeGetHostByNamei   s   ø€ Ø�O‰O˜DÔ!ØˆIr    ÚgethostbynameN)r   Ú
addCleanuprA   ÚpatchÚsocketr
   ÚgetHostByNameÚaddCallbackra   r=   ÚassertEqualr!   ÚadvanceÚcalls)
r   rb   ÚtimeoutÚreactorÚ
resolvedTore   ÚresolverÚdrc   rd   s
   &       @@r   Útest_successÚ"ThreadedResolverTests.test_successY   sÝ   ù€ ð ˆØ$ˆØˆä“-ˆØ�‰˜Ÿ™Ô&àˆØˆ
ö	ð 	�
‰
”6˜?Ð,=Ô>ä# GÓ,ˆØ×"Ñ" 4¨Ó4ˆØ	�‰�j×'Ñ'Ô(à×ÑÔ!à×Ñ˜ D 6Ô*Ø×Ñ˜ b TÔ*ð 	�‰×Ñ˜w¨�{Ô+Ø×Ñ˜Ÿ™×-Ñ-¨rÖ2r    c                ó  € ^p\        4       pV P                  VP                  4       R pV P                  \        RV4       . p\        V4      pVP                  RV34      pV P                  V\        4       VP                  VP                  4       VP                  4        V P                  \        V4      ^4       VP                  P                  V^,           4       V P                  VP                  P                   . 4       R# )zŽ
L{ThreadedResolver.getHostByName} returns a L{Deferred} which fires a
L{Failure} if the call to L{socket.gethostbyname} raises an exception.
c                 ó   € \        R 4      h)zENOBUFS (this is a funny joke))ÚOSError)rb   s   &r   re   Ú=ThreadedResolverTests.test_failure.<locals>.fakeGetHostByName†   s   € ÜÐ:Ó;Ð;r    rg   ú	some.nameN)r   rh   rA   ri   rj   r
   rk   ÚassertFailurer   rl   ra   r=   rm   Úlenr!   rn   ro   )r   rp   rq   re   Ú
failedWithrs   rt   s   &      r   Útest_failureÚ"ThreadedResolverTests.test_failure|   sÏ   € ð
 ˆä“-ˆØ�‰˜Ÿ™Ô&ò	<ð 	�
‰
”6˜?Ð,=Ô>àˆ
Ü# GÓ,ˆØ×"Ñ" ;°°
Ó;ˆØ×Ñ˜1œnÔ-Ø	�‰�j×'Ñ'Ô(à×ÑÔ!à×Ñœ˜Z›¨!Ô,ð 	�‰×Ñ˜w¨�{Ô+Ø×Ñ˜Ÿ™×-Ñ-¨rÖ2r    c                óN  a€ ^
p\        4       pV P                  VP                  4       \        4       oV3R lpV P	                  \
        RV4       . p\        V4      pVP                  RV34      pV P                  V\        4       VP                  VP                  4       VP                  P                  V^,
          4       V P                  V. 4       VP                  P                  ^4       V P                  \        V4      ^4       SP!                  \#        R4      4       R# )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                 ó$   <€ SP                  4       hr   )r;   )rb   Úresults   &€r   re   Ú=ThreadedResolverTests.test_timeout.<locals>.fakeGetHostByName¦   s   ø€ Ø—*‘*“,Ðr    rg   r{   zThe I/O was errorfulN)r   rh   rA   r   ri   rj   r
   rk   r|   r   rl   ra   r!   rn   rm   r}   r6   ÚIOError)r   rp   rq   re   r~   rs   rt   rƒ   s   &      @r   Útest_timeoutÚ"ThreadedResolverTests.test_timeout™   så   ø€ ð ˆä“-ˆØ�‰˜Ÿ™Ô&ä“ˆõ	ð 	�
‰
”6˜?Ð,=Ô>àˆ
Ü# GÓ,ˆØ×"Ñ" ;°°
Ó;ˆØ×Ñ˜1œnÔ-Ø	�‰�j×'Ñ'Ô(à�‰×Ñ˜w¨�{Ô+Ø×Ñ˜ RÔ(Ø�‰×Ñ˜qÔ!Ø×Ñœ˜Z›¨!Ô,ð 	�
‰
”7Ð1Ó2Ö3r    c                ó~  a€ . o\        \        4       ! V3R lR4      4       p ! R R\        4      pV! 4       pV! 4       pVP                  V4       \	        \        4       4      pVP                  P                  VR4       VP                  P                  VR4       VP                  P                  VR4       VP                  P                  VR4       VP                  P                  VR4       V P                  \        S4      ^4       V P                  \        \        \        S4      4      \        .^,          4       V P                  RS^ ,          4       V P                  RS^,          4       V P                  R	S^,          4       V P                  R
S^,          4       V P                  RS^,          4       R# )zU
L{ThreadedResolver.getHostByName} is passed L{str}, encoded using IDNA
if required.
c                   ó2   <a € ] tR t^Át o RV3R lltRtV tR# )ÚAThreadedResolverTests.test_resolverGivenStr.<locals>.FakeResolverc                ó:   <€ SP                  V4       \        4       # r   )ra   r   )r   rb   Útimeoutsro   s   &&&€r   rk   ÚOThreadedResolverTests.test_resolverGivenStr.<locals>.FakeResolver.getHostByNameÃ   s   ø€ Ø—‘˜TÔ"Ü“zÐ!r    rD   N)rD   )rU   rV   rW   rX   rk   rZ   r[   )r2   ro   s   @€r   ÚFakeResolverrŠ   Á   s   ù‡ € ÷"õ "r    rŽ   c                   ó&   a € ] tR t^Çt o R tRtV tR# )ÚFThreadedResolverTests.test_resolverGivenStr.<locals>.JustEnoughReactorc                ó   € R # r   rD   r   s   &r   ÚinstallWakerÚSThreadedResolverTests.test_resolverGivenStr.<locals>.JustEnoughReactor.installWakerÈ   s   € Ùr    rD   N)rU   rV   rW   rX   r’   rZ   r[   r\   s   @r   ÚJustEnoughReactorr�   Ç   s   ø‡ € ÷ð r    r”   zexample.exampleu   vÃ¤Ã¤ntynyt.exampleu   Ñ€Ñ„.examplezxn----7sbb4ac0ad0be6cf.xn--p1aizxn--vntynyt-5waa.examplezxn--p1ai.exampleN)r   r   r	   ÚinstallResolverr   r   ÚnameResolverÚresolveHostNamerm   r}   ÚlistÚmapÚtypeÚstr)r   rŽ   r”   Úfakerq   Úrecro   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    rD   N)rU   rV   rW   rX   rY   ru   r   r†   rž   rZ   r[   r\   s   @r   r^   r^   T   s'   ø‡ € ñò!3òF3ò:4÷B!Fð !Fr    r^   c                 ó   € R# )z0
Function used by L{DelayedCallTests.test_str}.
NrD   rD   r    r   Únothingr¡   Þ   ó   ‚ r    c                   ó`   a € ] tR t^ät o RtR tR tR tR tR t	R t
R tR	 tR
 tR tRtV tR# )ÚDelayedCallMixinú
L{DelayedCall}
c           	     ó*   € R p\        VR R/ W"R4      # )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                 ó   € R # r   rD   )Úcalls   &r   ÚnoopÚ0DelayedCallMixin._getDelayedCallAt.<locals>.noopñ   s   € Ùr    c                  ó   € R # r   rD   rD   r    r   r   Ú4DelayedCallMixin._getDelayedCallAt.<locals>.<lambda>ô   s   € ©r    NrD   )r   )r   Útimer©   s   && r   Ú_getDelayedCallAtÚ"DelayedCallMixin._getDelayedCallAté   s   € ò	ô ˜4¡¨r°2°tÀ4ÓHÐHr    c                ó^   € V P                  ^ 4      V n        V P                  ^4      V n        R# )zJ
Create two L{DelayedCall} instanced scheduled to run at different
times.
N)r®   ÚzeroÚoner   s   &r   ÚsetUpÚDelayedCallMixin.setUpö   s(   € ð
 ×*Ñ*¨1Ó-ˆŒ	Ø×)Ñ)¨!Ó,ˆŽr    c           	     óŽ   € \        ^\        RR^/RRR 4      pV P                  \        V4      R\	        V4      3,          4       R# )úÇ
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.
ÚANc                  ó   € R # ©g      ø?rD   rD   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¡   rm   r›   Úid©r   Údcs   & r   Útest_strÚDelayedCallMixin.test_strþ   sD   € ô ˜œW d¨S°!¨H°d¸DÁ+ÓNˆØ×ÑÜ�‹GØMÜ�"‹vˆiõö	
r    c           	     ó~   € \        ^\        RR^	/RRR 4      pV P                  \        V4      \	        V4      4       R# )zy
The string representation of a L{DelayedCall} instance, as returned by
{repr}, is identical to that returned by L{str}.
r·   Nc                  ó   € R # )gš™™™™™ù?rD   rD   r    r   r   Ú,DelayedCallMixin.test_repr.<locals>.<lambda>  r»   r    )é   )r   r¡   rm   r›   Úreprr¿   s   & r   Ú	test_reprÚDelayedCallMixin.test_repr  s6   € ô
 ˜œW d¨S°!¨H°d¸DÁ+ÓNˆØ×Ñœ˜R›¤$ r£(Ö+r    c                óÌ   € V P                   V P                  r!V P                  W8  4       V P                  W!8  4       V P                  W8  4       V P                  W"8  4       R# )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                óÌ   € V P                   V P                  r!V P                  W8*  4       V P                  W!8*  4       V P                  W8*  4       V P                  W"8*  4       R# )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                óÌ   € V P                   V P                  r!V P                  W!8„  4       V P                  W8„  4       V P                  W8„  4       V P                  W"8„  4       R# )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                óÌ   € V P                   V P                  r!V P                  W!8¬  4       V P                  W8¬  4       V P                  W8¬  4       V P                  W"8¬  4       R# )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                óö   € V P                  V P                  V P                  8H  4       V P                  V P                  V P                  8H  4       V P                  V P                  V P                  8H  4       R# )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                óö   € V P                  V P                  V P                  8g  4       V P                  V P                  V P                  8g  4       V P                  V P                  V P                  8g  4       R# )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)rU   rV   rW   rX   rY   r®   r³   rÁ   rÈ   rÏ   rÒ   rÕ   rØ   rÛ   rÞ   rZ   r[   r\   s   @r   r¤   r¤   ä   sB   ø‡ € ñòIò-ò
ò,ò	$ò
$ò	$ò
$ò.÷/ð /r    r¤   c                   ó6   a € ] tR tRt o RtR tR tR tRtV t	R# )ÚDelayedCallNoDebugTestsiV  r¥   c                ó^   € V P                  \        RR4       \        P                  V 4       R# )z
Turn debug off.
ÚdebugFN©ri   r   r¤   r³   r   s   &r   r³   ÚDelayedCallNoDebugTests.setUp[  s"   € ð 	�
‰
”; ¨Ô/Ü×Ñ˜tÖ$r    c           	     ó    € \        ^\        RR^/RRR 4      pRP                  \        V4      4      pV P	                  \        V4      V4       R# )r¶   r·   Nc                  ó   € R # r¹   rD   rD   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   r¡   r1   r¾   rm   r›   )r   rÀ   Úexpecteds   &  r   rÁ   Ú DelayedCallNoDebugTests.test_strb  sK   € ô ˜œW d¨S°!¨H°d¸DÁ+ÓNˆðß%™v¤b¨£f›~ð 	ð 	×Ñœ˜R› (Ö+r    c           	     ó€   € \        ^R R/ \        \        R 4      p^Vn        V P                  R\	        V4      4       R# )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.
c                  ó   € R # r   rD   rD   r    r   r   Ú<DelayedCallNoDebugTests.test_switchToDebug.<locals>.<lambda>v  ó   € ¡Dr    c                  ó   € ^# ©r*   rD   rD   r    r   r   rí   v  ó   € ÉAr    útraceback at creationNrD   )r   r¡   rã   ÚassertNotInrÇ   r¿   s   & r   Útest_switchToDebugÚ*DelayedCallNoDebugTests.test_switchToDebugo  s6   € ô ˜™L¨"¨b´'¼7ÁIÓNˆØˆŒØ×ÑÐ0´$°r³(Ö;r    rD   N)
rU   rV   rW   rX   rY   r³   rÁ   rô   rZ   r[   r\   s   @r   rá   rá   V  s   ø‡ € ñò%ò,÷	<ð 	<r    rá   c                   ó6   a € ] tR tRt o RtR tR tR tRtV t	R# )ÚDelayedCallDebugTestsi{  r¥   c                ó^   € V P                  \        RR4       \        P                  V 4       R# )z
Turn debug on.
rã   TNrä   r   s   &r   r³   ÚDelayedCallDebugTests.setUp€  s"   € ð 	�
‰
”; ¨Ô.Ü×Ñ˜tÖ$r    c           	     ó    € \        ^\        RR^/RRR 4      pRP                  \        V4      4      pV P	                  \        V4      V4       R# )r¶   r·   Nc                  ó   € R # r¹   rD   rD   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¡   r1   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           	     ó€   € \        ^R R/ \        \        R 4      p^ Vn        V P                  R\	        V4      4       R# )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).
c                  ó   € R # r   rD   rD   r    r   r   Ú<DelayedCallDebugTests.test_switchFromDebug.<locals>.<lambda>œ  rî   r    c                  ó   € ^# rð   rD   rD   r    r   r   r  œ  rñ   r    rò   NrD   )r   r¡   rã   ÚassertInrÇ   r¿   s   & r   Útest_switchFromDebugÚ*DelayedCallDebugTests.test_switchFromDebug•  s4   € ô ˜™L¨"¨b´'¼7ÁIÓNˆØˆŒØ�‰Ð-¬t°B«xÖ8r    rD   N)
rU   rV   rW   rX   rY   r³   rÁ   r  rZ   r[   r\   s   @r   r÷   r÷   {  s   ø‡ € ñò%ò2÷	9ð 	9r    r÷   c                   ó*   a € ] tR tRt o RtR tRtV tR# )ÚTestSpySignalCapturingReactori¡  zU
Subclass of ReactorBase to capture signals delivered to the
reactor for inspection.
c                ó   € R# )z
Required method, unused.
NrD   r   s   &r   r’   Ú*TestSpySignalCapturingReactor.installWaker¨  r¢   r    rD   N)rU   rV   rW   rX   rY   r’   rZ   r[   r\   s   @r   r  r  ¡  s   ø‡ € ñ÷
ð r    r  zsignal module not availablec                   ó<   a € ] tR tRt o RtR tR tR tR tRt	V t
R# )	ÚReactorBaseSignalTestsi®  z=
Tests to exercise ReactorBase's signal exit reporting path.
c                óR   € \        4       pV P                  RVP                  4       R# )z9
The default value of the _exitSignal attribute is None.
N)r  ÚassertIsÚ_exitSignal©r   rq   s   & r   Útest_exitSignalDefaultsToNoneÚ4ReactorBaseSignalTests.test_exitSignalDefaultsToNoneµ  s    € ô 0Ó1ˆØ�‰�d˜G×/Ñ/Ö0r    c                ó®   € \        4       pVP                  \        P                  R4       V P	                  \        P                  VP
                  4       R# )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                ó®   € \        4       pVP                  \        P                  R4       V P	                  \        P                  VP
                  4       R# )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                óð   € \        \        R4      '       g   \        R4      h\        4       pVP	                  \        P
                  R4       V P                  \        P
                  VP                  4       R# )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    rD   N)rU   rV   rW   rX   rY   r  r  r  r#  rZ   r[   r\   s   @r   r  r  ®  s%   ø‡ € ñò1ò>ò?÷
@ð 
@r    r  ),rY   rj   Úqueuer   Útypingr   Úunittestr   Úzope.interfacer   r   Ú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   r^   r¡   r¤   rá   r÷   r  r  rD   r    r   Ú<module>r3     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)