§
    ÈtºfÎ9  ã                   ó  — d Z ddl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 ddlmZ dd	lmZmZmZ dd
lmZ ddlmZ ddlmZmZmZ ddlmZ ddlmZ ddlmZm Z  	 ddl!Z"e"Z!n# e#$ r dZ!Y nw xY w ed¦  «        Z$ e	ee¦  «         G d„ d¦  «        ¦   «         Z% G d„ de ¦  «        Z&d„ Z' G d„ d¦  «        Z( G d„ de(e ¦  «        Z) G d„ de(e ¦  «        Z* G d„ de¦  «        Z+ ee! d¦  «         G d„ d e ¦  «        ¦   «         Z,dS )!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                   ó´   — e Zd ZdZd„ Zdeeef         dej        dej	        ddfd„Z
d	„ Zd
„ Zd„ Zdefd„Zdeeef         dej        dej	        ddfd„Zd„ ZdS )ÚFakeReactorzl
    A fake reactor implementation which just supports enough reactor APIs for
    L{ThreadedResolver}.
    c                 óâ   ‡ — t          ¦   «         ‰ _        ‰ j        j        ‰ _        t          ¦   «         ‰ _        ‰ j                             ¦   «          ˆ fd„‰ _        t          ¦   «         ‰ _        d S )Nc                  ó   •— ‰ j         S ©N)Ú_threadpool©Úselfs   €ú^/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/internet/test/test_base.pyú<lambda>z&FakeReactor.__init__.<locals>.<lambda>1   s
   ø€  TÔ%5€ ó    )	r   Ú_clockÚ	callLaterr   r   ÚstartÚgetThreadPoolr   Ú_threadCallsr   s   `r   Ú__init__zFakeReactor.__init__+   s^   ø€ Ý‘g”gˆŒØœÔ.ˆŒå%™<œ<ˆÔØÔ×ÒÑ Ô Ð Ø5Ð5Ð5Ð5ˆÔå!™GœGˆÔÐÐr    ÚcallableÚargsÚkwargsÚreturnNc                 ó@   — | j                              |||f¦  «         d S r   )r%   Úput©r   r'   r(   r)   s       r   ÚcallFromThreadzFakeReactor.callFromThread5   s(   € ð 	Ô×Ò˜x¨¨vÐ6Ñ7Ô7Ð7Ð7Ð7r    c                 óP   — | j                              ¦   «         \  }}} ||i |¤Ž d S r   )r%   Úget)r   Úfr(   r)   s       r   Ú_runThreadCallszFakeReactor._runThreadCalls:   s7   € ØÔ+×/Ò/Ñ1Ô1‰ˆˆ4�Ø	ˆˆ4Ð�6ÐÐÐÐÐr    c                 ó8   — | j                              ¦   «          d S r   )r   Ústopr   s    r   Ú_stopzFakeReactor._stop>   s   € ØÔ×ÒÑÔÐÐÐr    c                 ó   — d S r   © r   s    r   ÚgetDelayedCallszFakeReactor.getDelayedCallsA   ó   € àˆr    c                 ó   — d S r   r7   r   s    r   ÚsecondszFakeReactor.secondsE   r9   r    c                 ó   — d S r   r7   r-   s       r   ÚcallInThreadzFakeReactor.callInThreadI   s	   € ð 	ˆr    c                 ó   — d S r   r7   )r   Úsizes     r   ÚsuggestThreadPoolSizez!FakeReactor.suggestThreadPoolSizeO   r9   r    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   r   r   Úobjectr(   r)   r.   r2   r5   r8   Úfloatr;   r=   r@   r7   r    r   r   r   $   s  € € € € € ðð ð
$ð $ð $ð8Ø   V Ô,ð8Ø57´Wð8ØHJÌ	ð8à	ð8ð 8ð 8ð 8ð
ð ð ð ð  ð  ðð ð ð˜ð ð ð ð ðØ   V Ô,ðØ57´WðØHJÌ	ðà	ðð ð ð ðð ð ð ð r    r   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚThreadedResolverTestsz(
    Tests for L{ThreadedResolver}.
    c                 ó0  ‡‡	— dŠd}d}t          ¦   «         }|                      |j        ¦  «         g Š	g }ˆˆ	fd„}|                      t          d|¦  «         t          |¦  «        }|                     ||f¦  «        }|                     |j        ¦  «         | 	                    ¦   «          |  
                    ‰	|g¦  «         |  
                    |‰g¦  «         |j                             |dz   ¦  «         |  
                    |j        j        g ¦  «         dS )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                 ó2   •— ‰                      | ¦  «         ‰S r   )Úappend)ÚnameÚipÚlookedUps    €€r   ÚfakeGetHostByNamez=ThreadedResolverTests.test_success.<locals>.fakeGetHostByNamei   s   ø€ Ø�OŠO˜DÑ!Ô!Ð!ØˆIr    Úgethostbynameé   N)r   Ú
addCleanupr5   ÚpatchÚsocketr   ÚgetHostByNameÚaddCallbackrL   r2   ÚassertEqualr!   ÚadvanceÚcalls)
r   rM   ÚtimeoutÚreactorÚ
resolvedTorP   ÚresolverÚdrN   rO   s
           @@r   Útest_successz"ThreadedResolverTests.test_successY   s+  øø€ ð ˆØ$ˆØˆå‘-”-ˆØ�Š˜œÑ&Ô&Ð&àˆØˆ
ð	ð 	ð 	ð 	ð 	ð 	ð 	�
Š
•6˜?Ð,=Ñ>Ô>Ð>å# GÑ,Ô,ˆØ×"Ò" 4¨'¨Ñ4Ô4ˆØ	�Š�jÔ'Ñ(Ô(Ð(à×ÒÑ!Ô!Ð!à×Ò˜ D 6Ñ*Ô*Ð*Ø×Ò˜ b TÑ*Ô*Ð*ð 	Œ×Ò˜w¨™{Ñ+Ô+Ð+Ø×Ò˜œÔ-¨rÑ2Ô2Ð2Ð2Ð2r    c                 ó:  — d}t          ¦   «         }|                      |j        ¦  «         d„ }|                      t          d|¦  «         g }t          |¦  «        }|                     d|f¦  «        }|                      |t          ¦  «         | 	                    |j
        ¦  «         |                     ¦   «          |                      t          |¦  «        d¦  «         |j                             |dz   ¦  «         |                      |j        j        g ¦  «         dS )z¦
        L{ThreadedResolver.getHostByName} returns a L{Deferred} which fires a
        L{Failure} if the call to L{socket.gethostbyname} raises an exception.
        rJ   c                 ó    — t          d¦  «        ‚)NzENOBUFS (this is a funny joke))ÚOSError)rM   s    r   rP   z=ThreadedResolverTests.test_failure.<locals>.fakeGetHostByName†   s   € ÝÐ:Ñ;Ô;Ð;r    rQ   ú	some.namerR   N)r   rS   r5   rT   rU   r   rV   ÚassertFailurer   rW   rL   r2   rX   Úlenr!   rY   rZ   )r   r[   r\   rP   Ú
failedWithr^   r_   s          r   Útest_failurez"ThreadedResolverTests.test_failure|   s  € ð
 ˆå‘-”-ˆØ�Š˜œÑ&Ô&Ð&ð	<ð 	<ð 	<ð 	�
Š
•6˜?Ð,=Ñ>Ô>Ð>àˆ
Ý# GÑ,Ô,ˆØ×"Ò" ;°°
Ñ;Ô;ˆØ×Ò˜1�nÑ-Ô-Ð-Ø	�Š�jÔ'Ñ(Ô(Ð(à×ÒÑ!Ô!Ð!à×Ò�˜Z™œ¨!Ñ,Ô,Ð,ð 	Œ×Ò˜w¨™{Ñ+Ô+Ð+Ø×Ò˜œÔ-¨rÑ2Ô2Ð2Ð2Ð2r    c                 ó˜  ‡— d}t          ¦   «         }|                      |j        ¦  «         t          ¦   «         Šˆfd„}|                      t
          d|¦  «         g }t          |¦  «        }|                     d|f¦  «        }|                      |t          ¦  «         | 
                    |j        ¦  «         |j                             |dz
  ¦  «         |                      |g ¦  «         |j                             d¦  «         |                      t          |¦  «        d¦  «         ‰                     t#          d¦  «        ¦  «         dS )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                 ó,   •— ‰                      ¦   «         ‚r   )r0   )rM   Úresults    €r   rP   z=ThreadedResolverTests.test_timeout.<locals>.fakeGetHostByName¦   s   ø€ Ø—*’*‘,”,Ðr    rQ   rd   rR   zThe I/O was errorfulN)r   rS   r5   r   rT   rU   r   rV   re   r   rW   rL   r!   rY   rX   rf   r,   ÚIOError)r   r[   r\   rP   rg   r^   r_   rl   s          @r   Útest_timeoutz"ThreadedResolverTests.test_timeout™   s;  ø€ ð ˆå‘-”-ˆØ�Š˜œÑ&Ô&Ð&å‘”ˆð	ð 	ð 	ð 	ð 	ð 	�
Š
•6˜?Ð,=Ñ>Ô>Ð>àˆ
Ý# GÑ,Ô,ˆØ×"Ò" ;°°
Ñ;Ô;ˆØ×Ò˜1�nÑ-Ô-Ð-Ø	�Š�jÔ'Ñ(Ô(Ð(àŒ×Ò˜w¨™{Ñ+Ô+Ð+Ø×Ò˜ RÑ(Ô(Ð(ØŒ×Ò˜qÑ!Ô!Ð!Ø×Ò�˜Z™œ¨!Ñ,Ô,Ð,ð 	�
Š
•7Ð1Ñ2Ô2Ñ3Ô3Ð3Ð3Ð3r    c                 óö  ‡— g Št          t          ¦  «         G ˆfd„d¦  «        ¦   «         } G d„ dt          ¦  «        } |¦   «         } |¦   «         }|                     |¦  «         t	          t          ¦   «         ¦  «        }|j                             |d¦  «         |j                             |d¦  «         |j                             |d¦  «         |j                             |d¦  «         |j                             |d¦  «         |                      t          ‰¦  «        d	¦  «         |                      t          t          t          ‰¦  «        ¦  «        t          gd	z  ¦  «         |                      d‰d
         ¦  «         |                      d‰d         ¦  «         |                      d‰d         ¦  «         |                      d‰d         ¦  «         |                      d‰d         ¦  «         dS )zm
        L{ThreadedResolver.getHostByName} is passed L{str}, encoded using IDNA
        if required.
        c                   ó   •— e Zd Zdˆ fd„	ZdS )úAThreadedResolverTests.test_resolverGivenStr.<locals>.FakeResolverr7   c                 óJ   •— ‰                      |¦  «         t          ¦   «         S r   )rL   r   )r   rM   ÚtimeoutsrZ   s      €r   rV   zOThreadedResolverTests.test_resolverGivenStr.<locals>.FakeResolver.getHostByNameÃ   s   ø€ Ø—’˜TÑ"Ô"Ð"Ý‘z”zÐ!r    N)r7   )rA   rB   rC   rV   )rZ   s   €r   ÚFakeResolverrq   Á   s3   ø€ € € € € ð"ð "ð "ð "ð "ð "ð "ð "r    rt   c                   ó   — e Zd Zd„ ZdS )úFThreadedResolverTests.test_resolverGivenStr.<locals>.JustEnoughReactorc                 ó   — d S r   r7   r   s    r   ÚinstallWakerzSThreadedResolverTests.test_resolverGivenStr.<locals>.JustEnoughReactor.installWakerÈ   s   € Ø�r    N)rA   rB   rC   rx   r7   r    r   ÚJustEnoughReactorrv   Ç   s#   € € € € € ðð ð ð ð r    ry   zexample.exampleu   vÃ¤Ã¤ntynyt.exampleu   Ñ€Ñ„.examplezxn----7sbb4ac0ad0be6cf.xn--p1aié   r   rR   zxn--vntynyt-5waa.exampleé   zxn--p1ai.exampleé   é   N)r   r   r
   ÚinstallResolverr   r   ÚnameResolverÚresolveHostNamerX   rf   ÚlistÚmapÚtypeÚstr)r   rt   ry   Úfaker\   ÚrecrZ   s         @r   Útest_resolverGivenStrz+ThreadedResolverTests.test_resolverGivenStrº   s  ø€ ð
 ˆå	•_Ñ	%Ô	%ð	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ñ 	"ô 	"ñ 
&Ô	%ð	"ð
	ð 	ð 	ð 	ð 	¥ñ 	ô 	ð 	ð ˆ|‰~Œ~ˆØ#Ð#Ñ%Ô%ˆØ×Ò Ñ%Ô%Ð%Ý�8™:œ:Ñ&Ô&ˆØÔ×,Ò,¨SÐ2CÑDÔDÐDØÔ×,Ò,¨SÐ2CÑDÔDÐDØÔ×,Ò,¨SÐ2KÑLÔLÐLØÔ×,Ò,¨SÐ2HÑIÔIÐIØÔ×,Ò,¨SÐ2SÑTÔTÐTà×Ò�˜U™œ QÑ'Ô'Ð'Ø×Ò��c¥$¨Ñ.Ô.Ñ/Ô/µ#°¸±Ñ;Ô;Ð;Ø×ÒÐ*¨E°!¬HÑ5Ô5Ð5Ø×ÒÐ*¨E°!¬HÑ5Ô5Ð5Ø×ÒÐ3°U¸1´XÑ>Ô>Ð>Ø×ÒÐ+¨U°1¬XÑ6Ô6Ð6Ø×ÒÐ:¸EÀ!¼HÑEÔEÐEÐEÐEr    N)rA   rB   rC   rD   r`   rh   rn   r‡   r7   r    r   rH   rH   T   sa   € € € € € ðð ð!3ð !3ð !3ðF3ð 3ð 3ð:4ð 4ð 4ðB!Fð !Fð !Fð !Fð !Fr    rH   c                  ó   — dS )z8
    Function used by L{DelayedCallTests.test_str}.
    Nr7   r7   r    r   Únothingr‰   Þ   ó   € € € r    c                   óN   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ ZdS )ÚDelayedCallMixinú
    L{DelayedCall}
    c           	      ó4   — d„ }t          |d„ di ||d¦  «        S )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                 ó   — d S r   r7   )Úcalls    r   Únoopz0DelayedCallMixin._getDelayedCallAt.<locals>.noopñ   s   € ØˆDr    c                  ó   — d S r   r7   r7   r    r   r   z4DelayedCallMixin._getDelayedCallAt.<locals>.<lambda>ô   s   € ¨€ r    r7   N)r	   )r   Útimer‘   s      r   Ú_getDelayedCallAtz"DelayedCallMixin._getDelayedCallAté   s/   € ð	ð 	ð 	õ ˜4  ¨r°2°t¸TÀ4ÑHÔHÐHr    c                 ón   — |                       d¦  «        | _        |                       d¦  «        | _        dS )zb
        Create two L{DelayedCall} instanced scheduled to run at different
        times.
        r   rR   N)r”   ÚzeroÚoner   s    r   ÚsetUpzDelayedCallMixin.setUpö   s2   € ð
 ×*Ò*¨1Ñ-Ô-ˆŒ	Ø×)Ò)¨!Ñ,Ô,ˆŒˆˆr    c           	      ó¨   — t          dt          dddiddd„ ¦  «        }|                      t          |¦  «        dt	          |¦  «        fz  ¦  «         dS )úç
        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|   ÚArz   Nc                  ó   — dS ©Ng      ø?r7   r7   r    r   r   z+DelayedCallMixin.test_str.<locals>.<lambda>  ó   € È#€ r    z?<DelayedCall 0x%x [10.5s] called=0 cancelled=0 nothing(3, A=5)>)r	   r‰   rX   r„   Úid©r   Údcs     r   Útest_strzDelayedCallMixin.test_strþ   sa   € õ ˜�W d¨S°!¨H°d¸DÀ+À+ÑNÔNˆØ×ÒÝ�‰GŒGØMÝ�"‰vŒvˆiññ	
ô 	
ð 	
ð 	
ð 	
r    c           	      ó    — t          dt          dddiddd„ ¦  «        }|                      t          |¦  «        t	          |¦  «        ¦  «         dS )z‘
        The string representation of a L{DelayedCall} instance, as returned by
        {repr}, is identical to that returned by L{str}.
        é   )é   r�   é	   Nc                  ó   — dS )Ngš™™™™™ù?r7   r7   r    r   r   z,DelayedCallMixin.test_repr.<locals>.<lambda>  r    r    )r	   r‰   rX   r„   Úreprr¢   s     r   Ú	test_reprzDelayedCallMixin.test_repr  sK   € õ
 ˜�W d¨S°!¨H°d¸DÀ+À+ÑNÔNˆØ×Ò�˜R™œ¥$ r¡(¤(Ñ+Ô+Ð+Ð+Ð+r    c                 óê   — | j         | j        }}|                      ||k     ¦  «         |                      ||k     ¦  «         |                      ||k     ¦  «         |                      ||k     ¦  «         dS )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}.
        N©r–   r—   Ú
assertTrueÚassertFalse©r   r–   r—   s      r   Útest_ltzDelayedCallMixin.test_lt  su   € ð
 ”I˜tœxˆcˆØ�Š˜˜sš
Ñ#Ô#Ð#Ø×Ò˜˜tšÑ$Ô$Ð$Ø×Ò˜ šÑ%Ô%Ð%Ø×Ò˜˜sšÑ#Ô#Ð#Ð#Ð#r    c                 óê   — | j         | j        }}|                      ||k    ¦  «         |                      ||k    ¦  «         |                      ||k    ¦  «         |                      ||k    ¦  «         dS )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_lezDelayedCallMixin.test_le  sq   € ð ”I˜tœxˆcˆØ�Š˜ šÑ$Ô$Ð$Ø×Ò˜ šÑ%Ô%Ð%Ø�Š˜ šÑ%Ô%Ð%Ø�Š˜˜sš
Ñ#Ô#Ð#Ð#Ð#r    c                 óê   — | j         | j        }}|                      ||k    ¦  «         |                      ||k    ¦  «         |                      ||k    ¦  «         |                      ||k    ¦  «         dS )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}.
        Nr­   r°   s      r   Útest_gtzDelayedCallMixin.test_gt*  su   € ð
 ”I˜tœxˆcˆØ�Š˜˜dš
Ñ#Ô#Ð#Ø×Ò˜ šÑ$Ô$Ð$Ø×Ò˜ šÑ%Ô%Ð%Ø×Ò˜˜sšÑ#Ô#Ð#Ð#Ð#r    c                 óê   — | j         | j        }}|                      ||k    ¦  «         |                      ||k    ¦  «         |                      ||k    ¦  «         |                      ||k    ¦  «         dS )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_gezDelayedCallMixin.test_ge5  sq   € ð ”I˜tœxˆcˆØ�Š˜˜tšÑ$Ô$Ð$Ø×Ò˜ šÑ%Ô%Ð%Ø�Š˜ šÑ%Ô%Ð%Ø�Š˜˜sš
Ñ#Ô#Ð#Ð#Ð#r    c                 óØ   — |                       | j        | j        k    ¦  «         |                      | j        | j        k    ¦  «         |                      | j        | j        k    ¦  «         dS )zD
        A L{DelayedCall} instance is only equal to itself.
        N)r¯   r–   r—   r®   r   s    r   Útest_eqzDelayedCallMixin.test_eqA  s]   € ð 	×Ò˜œ d¤hÒ.Ñ/Ô/Ð/Ø�Š˜œ	 T¤YÒ.Ñ/Ô/Ð/Ø�Š˜œ D¤HÒ,Ñ-Ô-Ð-Ð-Ð-r    c                 óØ   — |                       | j        | j        k    ¦  «         |                      | j        | j        k    ¦  «         |                      | j        | j        k    ¦  «         dS )zM
        A L{DelayedCall} instance is not equal to any other object.
        N)r®   r–   r—   r¯   r   s    r   Útest_nezDelayedCallMixin.test_neK  s_   € ð 	�Š˜œ	 T¤XÒ-Ñ.Ô.Ð.Ø×Ò˜œ d¤iÒ/Ñ0Ô0Ð0Ø×Ò˜œ T¤XÒ-Ñ.Ô.Ð.Ð.Ð.r    N)rA   rB   rC   rD   r”   r˜   r¤   r«   r±   r³   rµ   r·   r¹   r»   r7   r    r   rŒ   rŒ   ä   s·   € € € € € ðð ðIð Ið Ið-ð -ð -ð
ð 
ð 
ð,ð ,ð ,ð	$ð 	$ð 	$ð
$ð 
$ð 
$ð	$ð 	$ð 	$ð
$ð 
$ð 
$ð.ð .ð .ð/ð /ð /ð /ð /r    rŒ   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚDelayedCallNoDebugTestsr�   c                 ór   — |                       t          dd¦  «         t                               | ¦  «         dS )z!
        Turn debug off.
        ÚdebugFN©rT   r	   rŒ   r˜   r   s    r   r˜   zDelayedCallNoDebugTests.setUp[  s4   € ð 	�
Š
•; ¨Ñ/Ô/Ð/Ý×Ò˜tÑ$Ô$Ð$Ð$Ð$r    c           	      óÊ   — t          dt          dddiddd„ ¦  «        }d                     t          |¦  «        ¦  «        }|                      t          |¦  «        |¦  «         dS )rš   r›   rœ   r�   rz   Nc                  ó   — dS rŸ   r7   r7   r    r   r   z2DelayedCallNoDebugTests.test_str.<locals>.<lambda>h  r    r    zA<DelayedCall 0x{:x} [10.5s] called=0 cancelled=0 nothing(3, A=5)>)r	   r‰   Úformatr¡   rX   r„   )r   r£   Úexpecteds      r   r¤   z DelayedCallNoDebugTests.test_strb  sb   € õ ˜�W d¨S°!¨H°d¸DÀ+À+ÑNÔNˆðß%šv¥b¨¡f¤f™~œ~ð 	ð 	×Ò�˜R™œ (Ñ+Ô+Ð+Ð+Ð+r    c           	      óœ   — t          dd„ di t          t          d„ ¦  «        }d|_        |                      dt	          |¦  «        ¦  «         dS )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                  ó   — d S r   r7   r7   r    r   r   z<DelayedCallNoDebugTests.test_switchToDebug.<locals>.<lambda>v  ó   €  D€ r    r7   c                  ó   — dS ©Nr{   r7   r7   r    r   r   z<DelayedCallNoDebugTests.test_switchToDebug.<locals>.<lambda>v  ó   € ÈA€ r    rR   útraceback at creationN)r	   r‰   r¿   ÚassertNotInrª   r¢   s     r   Útest_switchToDebugz*DelayedCallNoDebugTests.test_switchToDebugo  sK   € õ ˜˜L˜L¨"¨bµ'½7ÀIÀIÑNÔNˆØˆŒØ×ÒÐ0µ$°r±(´(Ñ;Ô;Ð;Ð;Ð;r    N)rA   rB   rC   rD   r˜   r¤   rÍ   r7   r    r   r½   r½   V  sK   € € € € € ðð ð%ð %ð %ð,ð ,ð ,ð	<ð 	<ð 	<ð 	<ð 	<r    r½   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚDelayedCallDebugTestsr�   c                 ór   — |                       t          dd¦  «         t                               | ¦  «         dS )z 
        Turn debug on.
        r¿   TNrÀ   r   s    r   r˜   zDelayedCallDebugTests.setUp€  s4   € ð 	�
Š
•; ¨Ñ.Ô.Ð.Ý×Ò˜tÑ$Ô$Ð$Ð$Ð$r    c           	      óÊ   — t          dt          dddiddd„ ¦  «        }d                     t          |¦  «        ¦  «        }|                      t          |¦  «        |¦  «         dS )rš   r›   rœ   r�   rz   Nc                  ó   — dS rŸ   r7   r7   r    r   r   z0DelayedCallDebugTests.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¤   zDelayedCallDebugTests.test_str‡  sb   € õ ˜�W d¨S°!¨H°d¸DÀ+À+ÑNÔNˆð%ç%+¢V­B¨r©F¬F¡^¤^ð 	ð
 	×Ò�˜R™œ .Ñ1Ô1Ð1Ð1Ð1r    c           	      óœ   — t          dd„ di t          t          d„ ¦  «        }d|_        |                      dt	          |¦  «        ¦  «         dS )a  
        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                  ó   — d S r   r7   r7   r    r   r   z<DelayedCallDebugTests.test_switchFromDebug.<locals>.<lambda>œ  rÇ   r    r7   c                  ó   — dS rÉ   r7   r7   r    r   r   z<DelayedCallDebugTests.test_switchFromDebug.<locals>.<lambda>œ  rÊ   r    r   rË   N)r	   r‰   r¿   ÚassertInrª   r¢   s     r   Útest_switchFromDebugz*DelayedCallDebugTests.test_switchFromDebug•  sI   € õ ˜˜L˜L¨"¨bµ'½7ÀIÀIÑNÔNˆØˆŒØ�ŠÐ-­t°B©x¬xÑ8Ô8Ð8Ð8Ð8r    N)rA   rB   rC   rD   r˜   r¤   rÙ   r7   r    r   rÏ   rÏ   {  sK   € € € € € ðð ð%ð %ð %ð2ð 2ð 2ð	9ð 	9ð 	9ð 	9ð 	9r    rÏ   c                   ó   — e Zd ZdZd„ ZdS )ÚTestSpySignalCapturingReactorza
    Subclass of ReactorBase to capture signals delivered to the
    reactor for inspection.
    c                 ó   — dS )z*
        Required method, unused.
        Nr7   r   s    r   rx   z*TestSpySignalCapturingReactor.installWaker¨  rŠ   r    N)rA   rB   rC   rD   rx   r7   r    r   rÛ   rÛ   ¡  s-   € € € € € ðð ð
ð ð ð ð r    rÛ   zsignal module not availablec                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚReactorBaseSignalTestszE
    Tests to exercise ReactorBase's signal exit reporting path.
    c                 óX   — t          ¦   «         }|                      d|j        ¦  «         dS )zI
        The default value of the _exitSignal attribute is None.
        N)rÛ   ÚassertIsÚ_exitSignal©r   r\   s     r   Útest_exitSignalDefaultsToNonez4ReactorBaseSignalTests.test_exitSignalDefaultsToNoneµ  s,   € õ 0Ñ1Ô1ˆØ�Š�d˜GÔ/Ñ0Ô0Ð0Ð0Ð0r    c                 ó¬   — t          ¦   «         }|                     t          j        d¦  «         |                      t          j        |j        ¦  «         dS )zn
        ReactorBase's SIGINT handler saves the value of SIGINT to the
        _exitSignal attribute.
        N)rÛ   ÚsigIntÚsignalÚSIGINTÚassertEqualsrá   râ   s     r   Útest_captureSIGINTz)ReactorBaseSignalTests.test_captureSIGINT¼  sF   € õ
 0Ñ1Ô1ˆØ�Š•v”} dÑ+Ô+Ð+Ø×Ò�&œ-¨Ô)<Ñ=Ô=Ð=Ð=Ð=r    c                 ó¬   — t          ¦   «         }|                     t          j        d¦  «         |                      t          j        |j        ¦  «         dS )zp
        ReactorBase's SIGTERM handler saves the value of SIGTERM to the
        _exitSignal attribute.
        N)rÛ   ÚsigTermræ   ÚSIGTERMrè   rá   râ   s     r   Útest_captureSIGTERMz*ReactorBaseSignalTests.test_captureSIGTERMÅ  sF   € õ
 0Ñ1Ô1ˆØ�Š�œ¨Ñ-Ô-Ð-Ø×Ò�&œ.¨'Ô*=Ñ>Ô>Ð>Ð>Ð>r    c                 óô   — t          t          d¦  «        st          d¦  «        ‚t          ¦   «         }|                     t          j        d¦  «         |                      t          j        |j        ¦  «         dS )zr
        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_captureSIGBREAKz+ReactorBaseSignalTests.test_captureSIGBREAKÎ  sj   € õ
 •v˜zÑ*Ô*ð 	CÝÐAÑBÔBÐBå/Ñ1Ô1ˆØ×Ò�œ¨$Ñ/Ô/Ð/Ø×Ò�&œ/¨7Ô+>Ñ?Ô?Ð?Ð?Ð?r    N)rA   rB   rC   rD   rã   ré   rí   rò   r7   r    r   rÞ   rÞ   ®  s_   € € € € € ðð ð1ð 1ð 1ð>ð >ð >ð?ð ?ð ?ð
@ð 
@ð 
@ð 
@ð 
@r    rÞ   )-rD   rU   Ú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   rH   r‰   rŒ   r½   rÏ   rÛ   rÞ   r7   r    r   ú<module>r     s  ððð ð €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &à 'Ð 'Ð 'Ð 'Ð 'Ð 'à 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ +Ð +Ð +Ð +Ð +Ð +Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VØ 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5ðØÐÐÐð €F€Føð ð ð ð Ø€F€F€Fðøøøð
 €Yˆt�_„_€ð €ˆ\˜?Ñ+Ô+ð,ð ,ð ,ð ,ð ,ñ ,ô ,ñ ,Ô+ð,ð^GFð GFð GFð GFð GF˜Hñ GFô GFð GFðTð ð ðo/ð o/ð o/ð o/ð o/ñ o/ô o/ð o/ðd"<ð "<ð "<ð "<ð "<Ð.°ñ "<ô "<ð "<ðJ#9ð #9ð #9ð #9ð #9Ð,¨hñ #9ô #9ð #9ðL
ð 
ð 
ð 
ð 
 Kñ 
ô 
ð 
ð €ˆFˆ
Ð1Ñ2Ô2ð)@ð )@ð )@ð )@ð )@˜Xñ )@ô )@ñ 3Ô2ð)@ð )@ð )@s   Á A' Á'A1Á0A1