ó
    Ö›‘hó§  ã                   ó  • S r SSKrSSK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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  SSKJr   " S S\R8                  5      r " S S\R8                  5      r " S S\R>                  5      r  " S S\RB                  5      r" " S S\R8                  5      r# " S S\RB                  5      r$ " S S\RB                  5      r% " S S5      r& " S S\&\RN                  5      r( " S  S!5      r) " S" S#\RB                  \)5      r* " S$ S%\)5      r+ " S& S'5      r, " S( S)\&\RZ                  5      r. " S* S+\RB                  \+\,5      r/ " S, S-\&\R`                  5      r1 " S. S/\RB                  \+\,5      r2 " S0 S1\&\Rf                  5      r4 " S2 S3\RB                  \+\,5      r5 " S4 S55      r6 " S6 S7\R8                  5      r7 " S8 S9\RB                  5      r8 " S: S;\Rr                  5      r:g)<z,
Test cases for L{twisted.protocols.basic}.
é    N)ÚBytesIO)ÚListÚOptionalÚType)ÚverifyObject)ÚprotocolÚtask)Ú	IProducer)ÚconnectionDone)Úbasic)Ú	iterbytes)ÚFailure)Úproto_helpers)Úunittestc                   ó.   • \ rS rSrSrSrS rS rS rSr	g)	ÚFlippingLineTesteré   zL
A line receiver that flips between line and raw data modes after one byte.
ó   
c                 ó   • / U l         g ©N©Úlines©Úselfs    ÚeC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/protocols/test/test_basic.pyÚ__init__ÚFlippingLineTester.__init__!   s	   € Øˆ�
ó    c                 óZ   • U R                   R                  U5        U R                  5         g)z
Set the mode to raw.
N)r   ÚappendÚ
setRawMode©r   Úlines     r   ÚlineReceivedÚFlippingLineTester.lineReceived$   s    € ð 	�
‰
×Ñ˜$ÔØ�‰Õr   c                 ó,   • U R                  USS 5        g)z
Set the mode back to line.
é   N)ÚsetLineMode©r   Údatas     r   ÚrawDataReceivedÚ"FlippingLineTester.rawDataReceived+   s   € ð 	×Ñ˜˜a˜b˜Õ"r   r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú	delimiterr   r$   r+   Ú__static_attributes__© r   r   r   r      s   † ñð €Iòòõ#r   r   c                   óB   • \ rS rSrSrSrSrSS jrS rS r	S	 r
S
 rSrg)Ú
LineTesteré2   a³  
A line receiver that parses data received and make actions on some tokens.

@type delimiter: C{bytes}
@ivar delimiter: character used between received lines.
@type MAX_LENGTH: C{int}
@ivar MAX_LENGTH: size of a line when C{lineLengthExceeded} will be called.
@type clock: L{twisted.internet.task.Clock}
@ivar clock: clock simulating reactor callLater. Pass it to constructor if
    you want to use the pause/rawpause functionalities.
r   é@   Nc                 ó   • Xl         g)z0
If given, use a clock to make callLater calls.
N)Úclock)r   r:   s     r   r   ÚLineTester.__init__B   s	   € ð �
r   c                 ó   • / U l         g©z+
Create/clean data received on connection.
N©Úreceivedr   s    r   ÚconnectionMadeÚLineTester.connectionMadeH   ó   € ð ˆ�r   c                 óâ  • U R                   R                  U5        US:X  a  U R                  5         gUS:X  a7  U R                  5         U R                  R                  SU R                  5        gUS:X  ab  U R                  5         U R                  5         U R                   R                  S5        U R                  R                  SU R                  5        gUS:X  a  U R                  5         gUSS S:X  a  [        USS 5      U l	        gUR                  S	5      (       a  U R                  R                  U S
5        gUR                  S5      (       a  U R                  R                  5         gg)zd
Receive line and make some action for some tokens: pause, rawpause,
stop, len, produce, unproduce.
r   ó   pauser   ó   rawpauseó   stopNé   s   len ó   produceFó	   unproduce)r?   r    r!   ÚpauseProducingr:   Ú	callLaterÚresumeProducingÚstopProducingÚintÚlengthÚ
startswithÚ	transportÚregisterProducerÚunregisterProducerr"   s     r   r$   ÚLineTester.lineReceivedN   s  € ð
 	�‰×Ñ˜TÔ"Ø�3‹;Ø�O‰OÕØ�XÓØ×ÑÔ!Ø�J‰J× Ñ   D×$8Ñ$8Õ9Ø�[Ó Ø×ÑÔ!Ø�O‰OÔØ�M‰M× Ñ  Ô%Ø�J‰J× Ñ   D×$8Ñ$8Õ9Ø�W‹_Ø×ÑÕ Ø�"�1ˆX˜Ó Ü˜d 1 2˜h›-ˆD�KØ�_‰_˜Z×(Ñ(Ø�N‰N×+Ñ+¨D°%Õ8Ø�_‰_˜\×*Ñ*Ø�N‰N×-Ñ-Õ/ð +r   c                 óø   • USU R                    XR                   S p!U R                   [        U5      -
  U l         U R                  S   U-   U R                  S'   U R                   S:X  a  U R                  U5        gg)zR
Read raw data, until the quantity specified by a previous 'len' line is
reached.
Néÿÿÿÿr   )rO   Úlenr?   r(   )r   r*   Úrests      r   r+   ÚLineTester.rawDataReceivedg   sn   € ð
 ˜-˜DŸK™KÐ(¨$¯{©{¨}Ð*=ˆdØ—k‘k¤C¨£IÑ-ˆŒØ ŸM™M¨"Ñ-°Ñ4ˆ�‰�bÑØ�;‰;˜!ÓØ×Ñ˜TÕ"ð r   c                 ó~   • [        U5      U R                  S-   :”  a!  U R                  XR                  S-   S 5        gg)z,
Adjust line mode when long lines received.
r'   N)rW   Ú
MAX_LENGTHr(   r"   s     r   ÚlineLengthExceededÚLineTester.lineLengthExceededr   s;   € ô ˆt‹9�t—‘¨Ñ*Ó*Ø×Ñ˜T§/¡/°AÑ"5Ð"7Ð8Õ9ð +r   )r:   rO   r?   r   )r-   r.   r/   r0   r1   r2   r[   r   r@   r$   r+   r\   r3   r4   r   r   r6   r6   2   s,   † ñ
ð €IØ€Jôòò0ò2	#õ:r   r6   c                   ó,   • \ rS rSrSrSrSrS rS rSr	g)	ÚLineOnlyTesteréz   z!
A buffering line only receiver.
r   r8   c                 ó   • / U l         gr=   r>   r   s    r   r@   ÚLineOnlyTester.connectionMade‚   rB   r   c                 ó:   • U R                   R                  U5        g)z
Save received data.
N©r?   r    r"   s     r   r$   ÚLineOnlyTester.lineReceivedˆ   s   € ð 	�‰×Ñ˜TÕ"r   r>   N)
r-   r.   r/   r0   r1   r2   r[   r@   r$   r3   r4   r   r   r_   r_   z   s   † ñð €IØ€Jòõ#r   r_   c                   óª   • \ rS rSrSrSr/ SQrS rSr/ SQr	\	S/-   r
S	 rS
r/ SQr/ SQrS rSr/ SQrS rS rS rS rS rS rS rS rS rS rSrg)ÚLineReceiverTestsé�   zP
Test L{twisted.protocols.basic.LineReceiver}, using the C{LineTester}
wrapper.
sž   len 10

0123456789len 5

1234
len 20
foo 123

0123456789
012345678len 0
foo 5

1234567890123456789012345678901234567890123456789012345678901234567890
len 1

a)s   len 10ó
   0123456789ó   len 5s   1234
s   len 20s   foo 123s   0123456789
012345678s   len 0s   foo 5r   s   67890s   len 1ó   ac                 ó¤  • [        SS5       HÀ  n[        R                  " 5       n[        5       nUR	                  [
        R                  " U5      5        [        [        U R                  5      U-  S-   5       H+  nU R                  XA-  US-   U-   nUR                  U5        M-     U R                  U R                  UR                  5        MÂ     g)zT
Test buffering for different packet size, checking received matches
expected data.
r'   é
   N)Úranger   ÚStringIOWithoutClosingr6   ÚmakeConnectionr   ÚFileWrapperrW   ÚbufferÚdataReceivedÚassertEqualÚoutputr?   ©r   Úpacket_sizeÚtÚaÚiÚss         r   Útest_bufferÚLineReceiverTests.test_buffer·   s¦   € ô
 !  Bž<ˆKÜ×4Ò4Ó6ˆAÜ“ˆAØ×ÑœX×1Ò1°!Ó4Ô5Üœ3˜tŸ{™{Ó+¨{Ñ:¸QÑ>Ö?�Ø—K‘K ¡°1°q±5¸KÑ2GÐH�Ø—‘˜qÖ!ñ @ð ×Ñ˜TŸ[™[¨!¯*©*Ö5ò (r   s!   twiddle1
twiddle2
pause
twiddle3
)ó   twiddle1ó   twiddle2rD   ó   twiddle3c                 óB  • [        SS5       GH  n[        R                  " 5       n[        R                  " 5       n[        U5      nUR                  [        R                  " U5      5        [        [        U R                  5      U-  S-   5       H+  nU R                  XQ-  US-   U-   nUR                  U5        M-     U R                  U R                  UR                  5        UR                  S5        U R                  U R                   UR                  5        GM     g)zW
Test pause inside data receiving. It uses fake clock to see if
pausing/resuming work.
r'   rm   r   N)rn   r   ro   r	   ÚClockr6   rp   r   rq   rW   ÚpauseBufrs   rt   ÚpauseOutput1r?   ÚadvanceÚpauseOutput2©r   rw   rx   r:   ry   rz   r{   s          r   Útest_pausingÚLineReceiverTests.test_pausingÊ   sÜ   € ô
 !  BŸ<ˆKÜ×4Ò4Ó6ˆAÜ—J’J“LˆEÜ˜5Ó!ˆAØ×ÑœX×1Ò1°!Ó4Ô5Üœ3˜tŸ}™}Ó-°Ñ<¸qÑ@ÖA�Ø—M‘M !¡/°Q¸±U¸kÑ4IÐJ�Ø—‘˜qÖ!ñ Bð ×Ñ˜T×.Ñ.°·
±
Ô;Ø�M‰M˜!ÔØ×Ñ˜T×.Ñ.°·
±
×;ò (r   s/   twiddle1
twiddle2
len 5
rawpause
12345twiddle3
)r~   r   rj   rE   r   )r~   r   rj   rE   s   12345r€   c                 óB  • [        SS5       GH  n[        R                  " 5       n[        R                  " 5       n[        U5      nUR                  [        R                  " U5      5        [        [        U R                  5      U-  S-   5       H+  nU R                  XQ-  US-   U-   nUR                  U5        M-     U R                  U R                  UR                  5        UR                  S5        U R                  U R                   UR                  5        GM     g)z'
Test pause inside raw date receiving.
r'   rm   r   N)rn   r   ro   r	   r‚   r6   rp   r   rq   rW   ÚrawpauseBufrs   rt   ÚrawpauseOutput1r?   r…   ÚrawpauseOutput2r‡   s          r   Útest_rawPausingÚ!LineReceiverTests.test_rawPausingç   sà   € ô !  BŸ<ˆKÜ×4Ò4Ó6ˆAÜ—J’J“LˆEÜ˜5Ó!ˆAØ×ÑœX×1Ò1°!Ó4Ô5Üœ3˜t×/Ñ/Ó0°KÑ?À!ÑCÖD�Ø×$Ñ$ Q¡_¸¸A¹ÀÑ7LÐM�Ø—‘˜qÖ!ñ Eð ×Ñ˜T×1Ñ1°1·:±:Ô>Ø�M‰M˜!ÔØ×Ñ˜T×1Ñ1°1·:±:×>ò (r   s"   twiddle1
twiddle2
stop
more
stuff
)r~   r   rF   c                 ó¤  • [        SS5       HÀ  n[        R                  " 5       n[        5       nUR	                  [
        R                  " U5      5        [        [        U R                  5      U-  S-   5       H+  nU R                  XA-  US-   U-   nUR                  U5        M-     U R                  U R                  UR                  5        MÂ     g)z
Test stop inside producing.
r'   rm   N)rn   r   ro   r6   rp   r   rq   rW   Ústop_bufrs   rt   Ústop_outputr?   rv   s         r   Útest_stopProducingÚ$LineReceiverTests.test_stopProducingû   s¨   € ô !  Bž<ˆKÜ×4Ò4Ó6ˆAÜ“ˆAØ×ÑœX×1Ò1°!Ó4Ô5Üœ3˜tŸ}™}Ó-°Ñ<¸qÑ@ÖA�Ø—M‘M !¡/°Q¸±U¸kÑ4IÐJ�Ø—‘˜qÖ!ñ Bð ×Ñ˜T×-Ñ-¨q¯z©zÖ:ò (r   c                 óê   • [        5       n[        R                  " 5       nUR                  [        R
                  " U5      5        UR                  S5        U R                  UR                  / SQ5        g)z&
Test produce/unproduce in receiving.
s&   produce
hello world
unproduce
goodbye
)rH   s   hello worldrI   ó   goodbyeN)	r6   r   ro   rp   r   rq   rs   rt   r?   )r   ry   rx   s      r   Útest_lineReceiverAsProducerÚ-LineReceiverTests.test_lineReceiverAsProducer  sW   € ô ‹LˆÜ×0Ò0Ó2ˆØ	×Ñœ×-Ò-¨aÓ0Ô1Ø	�‰ÐDÔEØ×ÑØ�J‰JÒNõ	
r   c                 ól  •  " S S[         R                  5      nU" 5       nUR                  " S5        U R                  UR                  S5        U R                  UR
                  S5        UR                  " S5        U R                  UR                  S5        U R                  UR
                  S5        g	)
zˆ
L{LineReceiver.clearLineBuffer} removes all buffered data and returns
it as a C{bytes} and can be called from beneath C{dataReceived}.
c                   ó   • \ rS rSrS rSrg)Ú@LineReceiverTests.test_clearLineBuffer.<locals>.ClearingReceiveri  c                 ó:   • Xl         U R                  5       U l        g r   )r#   ÚclearLineBufferrX   r"   s     r   r$   ÚMLineReceiverTests.test_clearLineBuffer.<locals>.ClearingReceiver.lineReceived  s   € Ø ”	Ø ×0Ñ0Ó2�•	r   )r#   rX   N)r-   r.   r/   r0   r$   r3   r4   r   r   ÚClearingReceiverr›     s   † õ3r   rŸ   s   foo
bar
bazó   foos   bar
bazs   quux
s   quuxr   N)r   ÚLineReceiverrs   rt   r#   rX   )r   rŸ   r   s      r   Útest_clearLineBufferÚ&LineReceiverTests.test_clearLineBuffer  s�   € ô	3œu×1Ñ1ô 	3ñ
 $Ó%ˆØ×ÒÐ2Ô3Ø×Ñ˜Ÿ™¨Ô/Ø×Ñ˜Ÿ™¨Ô6ð 	×Ò˜kÔ*Ø×Ñ˜Ÿ™¨Ô0Ø×Ñ˜Ÿ™¨Õ,r   c                 ó:  • [        5       n[        R                  " 5       nUR                  [        R
                  " U5      5        [        R                  " 5       nUR                  SU-  5        U R                  SU-  SR                  UR                  5      5        g)z3
Test switching modes many times on the same data.
s   x
xó   xr   N)r   r   ro   rp   r   rq   ÚsysÚgetrecursionlimitrs   rt   Újoinr   )r   ÚprotorQ   Úlimits       r   Útest_stackRecursionÚ%LineReceiverTests.test_stackRecursion*  st   € ô #Ó$ˆÜ!×8Ò8Ó:ˆ	Ø×ÑœX×1Ò1°)Ó<Ô=Ü×%Ò%Ó'ˆØ×Ñ˜7 U™?Ô+Ø×Ñ˜ ™ s§x¡x°·±Ó'<Õ=r   c                 óø   • [         R                  " 5       n[        R                  " 5       nUR	                  U5        UR                  SUR                  S-   -  S-   5        U R                  UR                  5        g©z`
C{LineReceiver} disconnects the transport if it receives a line longer
than its C{MAX_LENGTH}.
r¥   r'   ó   
rN©	r   r¡   r   ÚStringTransportrp   rs   r[   Ú
assertTrueÚdisconnecting©r   r©   rQ   s      r   Útest_maximumLineLengthÚ(LineReceiverTests.test_maximumLineLength5  óc   € ô
 ×"Ò"Ó$ˆÜ!×1Ò1Ó3ˆ	Ø×Ñ˜YÔ'Ø×Ñ˜4 5×#3Ñ#3°aÑ#7Ñ8¸8ÑCÔDØ�‰˜	×/Ñ/Õ0r   c                 óò  • [        5       nSUl        [        R                  " 5       nUR	                  U5        SUR                  S-
  -  nUR                  U5        UR                  UR                  SS 5        UR                  UR                  SS U-   5        U R                  UR                  5        U R                  [        UR                  5      S5        U R                  X1R                  S   5        g)aF  
C{LineReceiver} doesn't disconnect the transport when it
receives a finished line as long as its C{MAX_LENGTH}, when
the second-to-last packet ended with a pattern that could have
been -- and turns out to have been -- the start of a
delimiter, and that packet causes the total input to exceed
C{MAX_LENGTH} + len(delimiter).
rG   r¥   r'   NrV   r   )r6   r[   r   r±   rp   rs   r2   ÚassertFalser³   rt   rW   r?   )r   r©   rx   r#   s       r   Ú&test_maximumLineLengthPartialDelimiterÚ8LineReceiverTests.test_maximumLineLengthPartialDelimiter@  sË   € ô “ˆØˆÔÜ×)Ò)Ó+ˆØ×Ñ˜QÔà�u×'Ñ'¨!Ñ+Ñ,ˆØ×Ñ˜4Ô Ø×Ñ˜5Ÿ?™?¨3¨BÐ/Ô0Ø×Ñ˜5Ÿ?™?¨2¨3Ð/°$Ñ6Ô7Ø×Ñ˜Ÿ™Ô)Ø×Ñœ˜UŸ^™^Ó,¨aÔ0Ø×Ñ˜Ÿ~™~¨aÑ0Õ1r   c                 óF  • [         R                  " 5       nSUl        [        R                  " 5       nUR                  U5        UR                  SUR                  -  UR                  S[        UR                  5      S-
   -   5        U R                  UR                  5        g)a  
C{LineReceiver} doesn't disconnect the transport it if
receives a non-finished line whose length, counting the
delimiter, is longer than its C{MAX_LENGTH} but shorter than
its C{MAX_LENGTH} + len(delimiter). (When the first part that
exceeds the max is the beginning of the delimiter.)
s   
r¥   Nr'   )r   r¡   r2   r   r±   rp   rs   r[   rW   r¹   r³   r´   s      r   Ú(test_notQuiteMaximumLineLengthUnfinishedÚ:LineReceiverTests.test_notQuiteMaximumLineLengthUnfinishedV  s‰   € ô ×"Ò"Ó$ˆð "ˆŒÜ!×1Ò1Ó3ˆ	Ø×Ñ˜YÔ'Ø×ÑØ�E×$Ñ$Ñ$¨¯©Ð8R¼#¸e¿o¹oÓ:NÐQRÑ:RÐ(SÑSô	
ð 	×Ñ˜×0Ñ0Õ1r   c                 óø   • [         R                  " 5       nS Ul        [        R                  " 5       nUR                  U5        UR                  5         UR                  S5      nU R                  U[        5        g)zN
C{LineReceiver.dataReceived} forwards errors returned by
C{rawDataReceived}.
c                 ó   • [        S5      $ )NÚoops)ÚRuntimeError©r*   s    r   Ú<lambda>Ú5LineReceiverTests.test_rawDataError.<locals>.<lambda>o  s	   € ¬\¸&Ô-Ar   s   dataN)
r   r¡   r+   r   r±   rp   r!   rs   ÚassertIsInstancerÂ   )r   r©   rQ   Úwhys       r   Útest_rawDataErrorÚ#LineReceiverTests.test_rawDataErrori  sb   € ô
 ×"Ò"Ó$ˆÙ AˆÔÜ!×1Ò1Ó3ˆ	Ø×Ñ˜YÔ'Ø×ÑÔØ× Ñ  Ó)ˆØ×Ñ˜c¤<Õ0r   c                 óp   • [         R                  " 5       nU R                  [        UR                  S5        g)zq
When L{LineReceiver.rawDataReceived} is not overridden in a
subclass, calling it raises C{NotImplementedError}.
ÚfooN)r   r¡   ÚassertRaisesÚNotImplementedErrorr+   ©r   r©   s     r   Ú"test_rawDataReceivedNotImplementedÚ4LineReceiverTests.test_rawDataReceivedNotImplementedv  s+   € ô
 ×"Ò"Ó$ˆØ×ÑÔ-¨u×/DÑ/DÀeÕLr   c                 óp   • [         R                  " 5       nU R                  [        UR                  S5        g)zn
When L{LineReceiver.lineReceived} is not overridden in a subclass,
calling it raises C{NotImplementedError}.
rË   N)r   r¡   rÌ   rÍ   r$   rÎ   s     r   Útest_lineReceivedNotImplementedÚ1LineReceiverTests.test_lineReceivedNotImplemented~  s+   € ô
 ×"Ò"Ó$ˆØ×ÑÔ-¨u×/AÑ/AÀ5ÕIr   r4   N)r-   r.   r/   r0   r1   rr   ru   r|   rƒ   r„   r†   rˆ   r‹   rŒ   r�   rŽ   r‘   r’   r“   r—   r¢   r«   rµ   rº   r½   rÈ   rÏ   rÒ   r3   r4   r   r   rg   rg   �   s�   † ñð
€Fò$€Fò 6ð 8€Hâ7€LØ ; -Ñ/€Lò<ð" J€KâL€Oò€Oò?ð  :€Hâ5€Kò;ò

ò-ò,	>ò	1ò2ò,2ò&1òMõJr   rg   c                   ó*   • \ rS rSrSrS rS rS rSrg)ÚExcessivelyLargeLineCatcheri‡  zž
Helper for L{LineReceiverLineLengthExceededTests}.

@ivar longLines: A L{list} of L{bytes} giving the values
    C{lineLengthExceeded} has been called with.
c                 ó   • / U l         g r   ©Ú	longLinesr   s    r   r@   Ú*ExcessivelyLargeLineCatcher.connectionMade�  s	   € Øˆ�r   c                 ó   • g)z
Disregard any received lines.
Nr4   r"   s     r   r$   Ú(ExcessivelyLargeLineCatcher.lineReceived’  s   � r   c                 ó:   • U R                   R                  U5        g)z6
Record any data that exceeds the line length limits.
N)rØ   r    r)   s     r   r\   Ú.ExcessivelyLargeLineCatcher.lineLengthExceeded—  s   € ð 	�‰×Ñ˜dÕ#r   r×   N)	r-   r.   r/   r0   r1   r@   r$   r\   r3   r4   r   r   rÕ   rÕ   ‡  s   † ñòòõ
$r   rÕ   c                   óB   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)Ú#LineReceiverLineLengthExceededTestsiž  zG
Tests for L{twisted.protocols.basic.LineReceiver.lineLengthExceeded}.
c                 óÂ   • [        5       U l        SU R                  l        [        R                  " 5       U l        U R                  R                  U R
                  5        g )Né   )rÕ   r©   r[   r   r±   rQ   rp   r   s    r   ÚsetUpÚ)LineReceiverLineLengthExceededTests.setUp£  s>   € Ü0Ó2ˆŒ
Ø !ˆ�
‰
ÔÜ&×6Ò6Ó8ˆŒØ�
‰
×!Ñ! $§.¡.Õ1r   c                 óÆ   • SU R                   R                  S-  S-   -  nU R                   R                  U5        U R                  U/U R                   R                  5        g)zª
If more bytes than C{LineReceiver.MAX_LENGTH} arrive containing no line
delimiter, all of the bytes are passed as a single string to
L{LineReceiver.lineLengthExceeded}.
r¥   é   N)r©   r[   rs   rt   rØ   ©r   Ú	excessives     r   Útest_longUnendedLineÚ8LineReceiverLineLengthExceededTests.test_longUnendedLine©  sP   € ð ˜DŸJ™J×1Ñ1°AÑ5¸Ñ9Ñ:ˆ	Ø�
‰
×Ñ 	Ô*Ø×Ñ˜)˜ d§j¡j×&:Ñ&:Õ;r   c                 óú   • SU R                   R                  S-  S-   -  nU R                   R                  SU R                   R                  -   U-   5        U R	                  U/U R                   R
                  5        g)a  
If L{LineReceiver.dataReceived} is called with bytes representing a
short line followed by bytes that exceed the length limit without a
line delimiter, L{LineReceiver.lineLengthExceeded} is called with all
of the bytes following the short line's delimiter.
r¥   rå   N)r©   r[   rs   r2   rt   rØ   ræ   s     r   Útest_longLineAfterShortLineÚ?LineReceiverLineLengthExceededTests.test_longLineAfterShortLine³  sd   € ð ˜DŸJ™J×1Ñ1°AÑ5¸Ñ9Ñ:ˆ	Ø�
‰
×Ñ  t§z¡z×';Ñ';Ñ ;¸iÑ GÔHØ×Ñ˜)˜ d§j¡j×&:Ñ&:Õ;r   c                 ó  • U R                   R                  R                  SU R                   R                  S-  S-   -  /S-  5      nU R                   R	                  U5        U R                  U/U R                   R                  5        g)zï
If L{LineReceiver.dataReceived} is called with more than
C{LineReceiver.MAX_LENGTH} bytes containing a line delimiter somewhere
not in the first C{MAX_LENGTH} bytes, the entire byte string is passed
to L{LineReceiver.lineLengthExceeded}.
r¥   rå   N)r©   r2   r¨   r[   rs   rt   rØ   ræ   s     r   Útest_longLineWithDelimiterÚ>LineReceiverLineLengthExceededTests.test_longLineWithDelimiter¾  sr   € ð —J‘J×(Ñ(×-Ñ-Ø�T—Z‘Z×*Ñ*¨QÑ.°Ñ2Ñ3Ð4°qÑ8ó
ˆ	ð 	�
‰
×Ñ 	Ô*Ø×Ñ˜)˜ d§j¡j×&:Ñ&:Õ;r   c                 óú   • SU R                   R                  S-  S-   -  U R                   R                  -   S-  nU R                   R                  U5        U R	                  U/U R                   R
                  5        g)z÷
If L{LineReceiver.dataReceived} is called with more than
C{LineReceiver.MAX_LENGTH} bytes containing multiple line delimiters
somewhere not in the first C{MAX_LENGTH} bytes, the entire byte string
is passed to L{LineReceiver.lineLengthExceeded}.
r¥   rå   N)r©   r[   r2   rs   rt   rØ   ræ   s     r   Útest_multipleLongLinesÚ:LineReceiverLineLengthExceededTests.test_multipleLongLinesË  se   € ð ˜TŸZ™Z×2Ñ2°QÑ6¸Ñ:Ñ;¸d¿j¹j×>RÑ>RÑRÐVWÑWˆ	Ø�
‰
×Ñ 	Ô*Ø×Ñ˜)˜ d§j¡j×&:Ñ&:Õ;r   c                 óø   • [         R                  " 5       n[        R                  " 5       nUR	                  U5        UR                  SUR                  S-   -  S-   5        U R                  UR                  5        gr®   r°   r´   s      r   rµ   Ú:LineReceiverLineLengthExceededTests.test_maximumLineLengthÖ  r·   r   c                 ó  • [         R                  " 5       n[        R                  " 5       nUR	                  U5        UR                  SUR                  [        UR                  5      -   -  5        U R                  UR                  5        g)zm
C{LineReceiver} disconnects the transport it if receives a non-finished
line longer than its C{MAX_LENGTH}.
r¥   N)r   r¡   r   r±   rp   rs   r[   rW   r2   r²   r³   r´   s      r   Útest_maximumLineLengthRemainingÚCLineReceiverLineLengthExceededTests.test_maximumLineLengthRemainingá  sg   € ô
 ×"Ò"Ó$ˆÜ!×1Ò1Ó3ˆ	Ø×Ñ˜YÔ'Ø×Ñ˜4 5×#3Ñ#3´c¸%¿/¹/Ó6JÑ#JÑKÔLØ�‰˜	×/Ñ/Õ0r   )r©   rQ   N)r-   r.   r/   r0   r1   râ   rè   rë   rî   rñ   rµ   rö   r3   r4   r   r   rß   rß   ž  s*   † ñò2ò<ò	<ò<ò	<ò	1õ	1r   rß   c                   ó.   • \ rS rSrSrSrS rS rS rSr	g)	ÚLineOnlyReceiverTestsií  z8
Tests for L{twisted.protocols.basic.LineOnlyReceiver}.
s7   foo
    bleakness
    desolation
    plastic forks
    c                 ó.  • [         R                  " 5       n[        5       nUR                  U5        [	        U R
                  5       H  nUR                  U5        M     U R                  UR                  U R
                  R                  S5      SS 5        g)zG
Test buffering over line protocol: data received should match buffer.
r   NrV   )
r   r±   r_   rp   r   rr   rs   rt   r?   Úsplit)r   rx   ry   Úcs       r   r|   Ú!LineOnlyReceiverTests.test_bufferø  sq   € ô ×)Ò)Ó+ˆÜÓˆØ	×Ñ˜ÔÜ˜4Ÿ;™;Ö'ˆAØ�N‰N˜1Öñ (à×Ñ˜Ÿ™ T§[¡[×%6Ñ%6°uÓ%=¸c¸rÐ%BÕCr   c                 ó  • [        5       n[        R                  " 5       nUR                  U5        UR	                  SUR
                  [        UR                  5      -   S-   -  S-   5        U R                  UR                  5        g)zu
C{LineOnlyReceiver} disconnects the transport if it receives a
line longer than its C{MAX_LENGTH} + len(delimiter).
r¥   r'   r¯   N)
r_   r   r±   rp   rs   r[   rW   r2   r²   r³   r´   s      r   Ú!test_greaterThanMaximumLineLengthÚ7LineOnlyReceiverTests.test_greaterThanMaximumLineLength  sp   € ô
 Ó ˆÜ!×1Ò1Ó3ˆ	Ø×Ñ˜YÔ'Ø×ÑØ�E×$Ñ$¤s¨5¯?©?Ó';Ñ;¸aÑ?Ñ@À8ÑKô	
ð 	�‰˜	×/Ñ/Õ0r   c                 óp   • [         R                  " 5       nU R                  [        UR                  S5        g)zr
When L{LineOnlyReceiver.lineReceived} is not overridden in a subclass,
calling it raises C{NotImplementedError}.
rË   N)r   ÚLineOnlyReceiverrÌ   rÍ   r$   rÎ   s     r   rÒ   Ú5LineOnlyReceiverTests.test_lineReceivedNotImplemented  s+   € ô
 ×&Ò&Ó(ˆØ×ÑÔ-¨u×/AÑ/AÀ5ÕIr   r4   N)
r-   r.   r/   r0   r1   rr   r|   rÿ   rÒ   r3   r4   r   r   rù   rù   í  s   † ñð€Fò	Dò1õJr   rù   c                   ó@   • \ rS rSrS rS rSrSr\4S\	SS4S	 jjr
S
rg)Ú	TestMixini  c                 ó   • / U l         g r   r>   r   s    r   r@   ÚTestMixin.connectionMade  s	   € Øˆ�r   c                 ó:   • U R                   R                  U5        g r   rd   ©r   r{   s     r   ÚstringReceivedÚTestMixin.stringReceived  s   € Ø�‰×Ñ˜QÕr   r7   r   ÚreasonÚreturnNc                 ó   • SU l         g )Nr'   )Úclosed)r   r  s     r   ÚconnectionLostÚTestMixin.connectionLost#  s	   € Øˆ�r   )r  r?   )r-   r.   r/   r0   r@   r
  r[   r  r   r   r  r3   r4   r   r   r  r    s3   † òò ð €JØ€Fà/=ñ  Wð À$÷ ð r   r  c                   ó   • \ rS rSrS rSrg)ÚTestNetstringi'  c                 óp   • U R                   R                  U5        U R                  R                  U5        g r   )r?   r    rQ   Úwriter	  s     r   r
  ÚTestNetstring.stringReceived(  s&   € Ø�‰×Ñ˜QÔØ�‰×Ñ˜QÕr   r4   N)r-   r.   r/   r0   r
  r3   r4   r   r   r  r  '  s   † õ r   r  c                   óJ   • \ rS rSr% / r\\\      \S'   Sr	S\S'   S r
S rSrg)	ÚLPTestCaseMixini-  ÚillegalStringsNú!Optional[Type[protocol.Protocol]]r   c                 ór   • [         R                  " 5       nU R                  5       nUR                  U5        U$ )zl
Return a new instance of C{self.protocol} connected to a new instance
of L{proto_helpers.StringTransport}.
)r   r±   r   rp   )r   rx   ry   s      r   ÚgetProtocolÚLPTestCaseMixin.getProtocol1  s0   € ô
 ×)Ò)Ó+ˆØ�M‰M‹OˆØ	×Ñ˜ÔØˆr   c                 óÚ   • U R                    H[  nU R                  5       n[        U5       H  nUR                  U5        M     U R	                  UR
                  R                  5        M]     g)z?
Assert that illegal strings cause the transport to be closed.
N)r  r  r   rs   r²   rQ   r³   ©r   r{   Úrrü   s       r   Útest_illegalÚLPTestCaseMixin.test_illegal;  sR   € ð ×$Ô$ˆAØ× Ñ Ó"ˆAÜ˜q–\�Ø—‘˜qÖ!ñ "à�O‰O˜AŸK™K×5Ñ5Ö6ò	 %r   r4   )r-   r.   r/   r0   r  r   r   ÚbytesÚ__annotations__r   r  r!  r3   r4   r   r   r  r  -  s*   ‡ Ø,.€N�H˜T %™[Ñ)Ó.Ø48€HÐ1Ó8òõ7r   r  c                   ó°   • \ rS rSrSr/ SQr/ SQr\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S rS rS rS rS rS rS rS rSrg)ÚNetstringReceiverTestsiF  z9
Tests for L{twisted.protocols.basic.NetstringReceiver}.
)ó   helloó   worlds   hows   ares   you123s   :todays  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)s   9999999999999999999999s   abcs   4:abcdes7   51:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab,c                 ó    • [         R                  " 5       U l        [        5       U l        U R                  R                  U R                  5        g r   )r   r±   rQ   r  ÚnetstringReceiverrp   r   s    r   râ   ÚNetstringReceiverTests.setUpV  s4   € Ü&×6Ò6Ó8ˆŒÜ!.£ˆÔØ×Ñ×-Ñ-¨d¯n©nÕ=r   c                 óÜ  • [        SS5       HÜ  n[        R                  " 5       n[        5       nSUl        UR                  U5        U R                   H  nUR                  U5        M     UR                  5       n[        [        U5      U-  S-   5       H*  nXVU-  US-   U-   nU(       d  M  UR                  U5        M,     U R                  UR                  U R                  5        MÞ     g)z9
Strings can be received in chunks of different lengths.
r'   rm   i»  N)rn   r   r±   r  r[   rp   ÚstringsÚ
sendStringÚvaluerW   rs   rt   r?   )r   rw   rx   ry   r{   Úoutrz   s          r   r|   Ú"NetstringReceiverTests.test_buffer[  sÁ   € ô !  Bž<ˆKÜ×-Ò-Ó/ˆAÜ“ˆAØˆAŒLØ×Ñ˜QÔØ—\”\�Ø—‘˜Q–ñ "à—'‘'“)ˆCÜœ3˜s›8 {Ñ2°QÑ6Ö7�Ø˜K™¨1¨q©5°KÑ*?Ð@�ß�1Ø—N‘N 1Ö%ñ 8ð ×Ñ˜QŸZ™Z¨¯©Ö6ò (r   c                 óˆ   • U R                   R                  S5        U R                  U R                   R                  S/5        g)z5
Empty netstrings (with length '0') can be received.
s   0:,r   N©r*  rs   rt   r?   r   s    r   Útest_receiveEmptyNetstringÚ1NetstringReceiverTests.test_receiveEmptyNetstringm  s6   € ð 	×Ñ×+Ñ+¨FÔ3Ø×Ñ˜×/Ñ/×8Ñ8¸3¸%Õ@r   c                 óˆ   • U R                   R                  S5        U R                  U R                   R                  S/5        g)z+
One-character netstrings can be received.
ó   1:a,rk   Nr3  r   s    r   Útest_receiveOneCharacterÚ/NetstringReceiverTests.test_receiveOneCharactert  s6   € ð 	×Ñ×+Ñ+¨GÔ4Ø×Ñ˜×/Ñ/×8Ñ8¸4¸&ÕAr   c                 óˆ   • U R                   R                  S5        U R                  U R                   R                  S/5        g)z+
Two-character netstrings can be received.
s   2:ab,ó   abNr3  r   s    r   Útest_receiveTwoCharactersÚ0NetstringReceiverTests.test_receiveTwoCharacters{  s6   € ð 	×Ñ×+Ñ+¨HÔ5Ø×Ñ˜×/Ñ/×8Ñ8¸5¸'ÕBr   c                 óˆ   • U R                   R                  S5        U R                  U R                   R                  S/5        g)z¹
Netstrings with embedded netstrings. This test makes sure that
the parser does not become confused about the ',' and ':'
characters appearing inside the data portion of the netstring.
s   4:1:a,,r7  Nr3  r   s    r   Útest_receiveNestedNetstringÚ2NetstringReceiverTests.test_receiveNestedNetstring‚  s6   € ð 	×Ñ×+Ñ+¨JÔ7Ø×Ñ˜×/Ñ/×8Ñ8¸7¸)ÕDr   c                 ó„   • U R                   R                  S5        U R                  U R                  R                  5        g)z<
Netstrings containing more data than expected are refused.
s   2:aaa,N©r*  rs   r²   rQ   r³   r   s    r   Útest_moreDataThanSpecifiedÚ1NetstringReceiverTests.test_moreDataThanSpecified‹  s.   € ð 	×Ñ×+Ñ+¨IÔ6Ø�‰˜Ÿ™×4Ñ4Õ5r   c                 ó„   • U R                   R                  S5        U R                  U R                  R                  5        g)zk
Netstrings that should be empty according to their length
specification are refused if they contain data.
s   0:a,NrB  r   s    r   Ú$test_moreDataThanSpecifiedBorderCaseÚ;NetstringReceiverTests.test_moreDataThanSpecifiedBorderCase’  ó.   € ð
 	×Ñ×+Ñ+¨GÔ4Ø�‰˜Ÿ™×4Ñ4Õ5r   c                 ó„   • U R                   R                  S5        U R                  U R                  R                  5        g)zH
Netstrings without leading digits that specify the length
are refused.
s   :aaa,NrB  r   s    r   Útest_missingNumberÚ)NetstringReceiverTests.test_missingNumberš  ó.   € ð
 	×Ñ×+Ñ+¨HÔ5Ø�‰˜Ÿ™×4Ñ4Õ5r   c                 ó„   • U R                   R                  S5        U R                  U R                  R                  5        g)zO
Netstrings without a colon between length specification and
data are refused.
s   3aaa,NrB  r   s    r   Útest_missingColonÚ(NetstringReceiverTests.test_missingColon¢  rL  r   c                 ó„   • U R                   R                  S5        U R                  U R                  R                  5        g)zA
Netstrings that have no leading digits nor a colon are
refused.
s   aaa,NrB  r   s    r   Útest_missingNumberAndColonÚ1NetstringReceiverTests.test_missingNumberAndColonª  rH  r   c                 ó„   • U R                   R                  S5        U R                  U R                  R                  5        g)z1
Netstrings consisting only of data are refused.
s   aaaNrB  r   s    r   Útest_onlyDataÚ$NetstringReceiverTests.test_onlyData²  s.   € ð 	×Ñ×+Ñ+¨FÔ3Ø�‰˜Ÿ™×4Ñ4Õ5r   c                 ó  • U R                   R                  S5        U R                   R                  S5        U R                  U R                   R                  S/5        U R	                  U R                   R                  5       5        g)z-
Netstrings can be received in two portions.
s   4:aas   aa,s   aaaaN)r*  rs   rt   r?   r²   Ú_payloadCompleter   s    r   Útest_receiveNetstringPortions_1Ú6NetstringReceiverTests.test_receiveNetstringPortions_1¹  se   € ð 	×Ñ×+Ñ+¨GÔ4Ø×Ñ×+Ñ+¨FÔ3Ø×Ñ˜×/Ñ/×8Ñ8¸7¸)ÔDØ�‰˜×.Ñ.×?Ñ?ÓAÕBr   c                 óš   • S H  nU R                   R                  U5        M      U R                  U R                   R                  S/5        g)zv
Netstrings can be received in more than two portions, even if
the length specification is split across two portions.
)ó   1s   0:01234s   56789ó   ,ri   Nr3  ©r   Úparts     r   Útest_receiveNetstringPortions_2Ú6NetstringReceiverTests.test_receiveNetstringPortions_2Â  s@   € ó
 7ˆDØ×"Ñ"×/Ñ/°Ö5ñ 7à×Ñ˜×/Ñ/×8Ñ8¸=¸/ÕJr   c                 óš   • S H  nU R                   R                  U5        M      U R                  U R                   R                  S/5        g)z5
Netstrings can be received one character at a time.
)ó   2ó   :rk   ó   br\  r;  Nr3  r]  s     r   Útest_receiveNetstringPortions_3Ú6NetstringReceiverTests.test_receiveNetstringPortions_3Ë  s@   € ó 3ˆDØ×"Ñ"×/Ñ/°Ö5ñ 3à×Ñ˜×/Ñ/×8Ñ8¸5¸'ÕBr   c                 ó`  • U R                   R                  S5        U R                  U R                   R                  5       5        U R	                  U R                   R
                  S/5        U R                   R                  S5        U R	                  U R                   R
                  SS/5        g)z±
A stream of two netstrings can be received in two portions,
where the first portion contains the complete first netstring
and the length specification of the second netstring.
s   1:a,1rk   s   :b,rd  N)r*  rs   r²   rW  rt   r?   r   s    r   Útest_receiveTwoNetstringsÚ0NetstringReceiverTests.test_receiveTwoNetstringsÓ  s…   € ð 	×Ñ×+Ñ+¨HÔ5Ø�‰˜×.Ñ.×?Ñ?ÓAÔBØ×Ñ˜×/Ñ/×8Ñ8¸4¸&ÔAØ×Ñ×+Ñ+¨FÔ3Ø×Ñ˜×/Ñ/×8Ñ8¸4À¸,ÕGr   c                 óò   • U R                   R                  S-   nU R                   R                  SR                  [	        U5      SSU-  45      5        U R                  U R                  R                  5        g)z[
Netstrings with a length specification exceeding the specified
C{MAX_LENGTH} are refused.
r'   r   rc  rk   N)r*  r[   rs   r¨   r#  r²   rQ   r³   )r   ÚtooLongs     r   Útest_maxReceiveLimitÚ+NetstringReceiverTests.test_maxReceiveLimitß  sa   € ð
 ×(Ñ(×3Ñ3°aÑ7ˆØ×Ñ×+Ñ+Ø�H‰H”e˜G“n d¨D°7©NÐ;Ó<ô	
ð 	�‰˜Ÿ™×4Ñ4Õ5r   c                 ó¦   • SU R                   l        U R                   R                  5         U R                  U R                   R                  S5        g)z_
C{_consumeLength} returns the expected length of the
netstring, including the trailing comma.
ó   12:é   N)r*  Ú_remainingDataÚ_consumeLengthrt   Ú_expectedPayloadSizer   s    r   Útest_consumeLengthÚ)NetstringReceiverTests.test_consumeLengthê  s@   € ð
 17ˆ×ÑÔ-Ø×Ñ×-Ñ-Ô/Ø×Ñ˜×/Ñ/×DÑDÀbÕIr   c                 óÈ   • SU R                   l        SU R                   l        U R                   R                  5         U R	                  U R                   R
                  S5        g)zt
C{_consumeLength} works as expected if the length specification
contains the value of C{MAX_LENGTH} (border case).
ro  é   rp  N)r*  rq  r[   rr  rt   rs  r   s    r   Útest_consumeLengthBorderCase1Ú4NetstringReceiverTests.test_consumeLengthBorderCase1ó  sN   € ð
 17ˆ×ÑÔ-Ø,.ˆ×ÑÔ)Ø×Ñ×-Ñ-Ô/Ø×Ñ˜×/Ñ/×DÑDÀbÕIr   c                 ó°   • SU R                   l        SU R                   l        U R                  [        R
                  U R                   R                  5        g)zŒ
C{_consumeLength} raises a L{basic.NetstringParseError} if
the length specification exceeds the value of C{MAX_LENGTH}
by 1 (border case).
ro  é   N©r*  rq  r[   rÌ   r   ÚNetstringParseErrorrr  r   s    r   Útest_consumeLengthBorderCase2Ú4NetstringReceiverTests.test_consumeLengthBorderCase2ý  sE   € ð 17ˆ×ÑÔ-Ø,.ˆ×ÑÔ)Ø×ÑÜ×%Ñ% t×'=Ñ'=×'LÑ'Lõ	
r   c                 ó°   • SU R                   l        SU R                   l        U R                  [        R
                  U R                   R                  5        g)zˆ
C{_consumeLength} raises a L{basic.NetstringParseError} if
the length specification exceeds the value of C{MAX_LENGTH}
by more than 1.
s   1000:r{  Nr|  r   s    r   Útest_consumeLengthBorderCase3Ú4NetstringReceiverTests.test_consumeLengthBorderCase3	  sE   € ð 19ˆ×ÑÔ-Ø,.ˆ×ÑÔ)Ø×ÑÜ×%Ñ% t×'=Ñ'=×'LÑ'Lõ	
r   c                 óp   • [         R                  " 5       nU R                  [        UR                  S5        g)zu
When L{NetstringReceiver.stringReceived} is not overridden in a
subclass, calling it raises C{NotImplementedError}.
rË   N)r   ÚNetstringReceiverrÌ   rÍ   r
  rÎ   s     r   Ú!test_stringReceivedNotImplementedÚ8NetstringReceiverTests.test_stringReceivedNotImplemented  s+   € ô
 ×'Ò'Ó)ˆØ×ÑÔ-¨u×/CÑ/CÀUÕKr   )r*  rQ   N) r-   r.   r/   r0   r1   r-  r  r  r   râ   r|   r4  r8  r<  r?  rC  rF  rJ  rN  rQ  rT  rX  r_  re  rh  rl  rt  rx  r~  r�  r…  r3   r4   r   r   r&  r&  F  s–   † ñò U€Gò€Nð €Hò>ò
7ò$AòBòCòEò6ò6ò6ò6ò6ò6òCòKòCò
Hò	6òJòJò

ò

õLr   r&  c                   óš   • \ rS rSr% SrSrS\S'   Sr\\	\
      \S'   Sr\\	\
      \S'   Sr\\	\
      \S'   S	 rS
 rS rS rS rS rSrg)ÚIntNTestCaseMixini  z,
TestCase mixin for int-prefixed protocols.
Nr  r   r-  r  ÚpartialStringsc           	      ó2  • U R                  5       nU R                   HQ  n[        [        R                  " UR
                  [        U5      5      U-   5       H  nUR                  U5        M     MS     U R                  UR                  U R                  5        g)z.
Test receiving data find the same data send.
N)
r  r-  r   ÚstructÚpackÚstructFormatrW   rs   rt   r?   )r   r   r{   rü   s       r   Útest_receiveÚIntNTestCaseMixin.test_receive(  sn   € ð ×ÑÓˆØ—”ˆAÜœvŸ{š{¨1¯>©>¼3¸q»6ÓBÀQÑFÖG�Ø—‘˜qÖ!ó Hñ ð 	×Ñ˜Ÿ™ T§\¡\Õ2r   c                 óÈ   • U R                    HR  nU R                  5       n[        U5       H  nUR                  U5        M     U R	                  UR
                  / 5        MT     g)z;
Send partial data, nothing should be definitely received.
N)r‰  r  r   rs   rt   r?   r  s       r   Útest_partialÚIntNTestCaseMixin.test_partial2  sP   € ð ×$Ô$ˆAØ× Ñ Ó"ˆAÜ˜q–\�Ø—‘˜qÖ!ñ "à×Ñ˜QŸZ™Z¨Ö,ò	 %r   c                 óÞ   • U R                  5       nUR                  S5        U R                  UR                  R	                  5       [
        R                  " UR                  S5      S-   5        g)z"
Test sending data over protocol.
ó   bbbbbbbbbbbbbbbbé   N)r  r.  rt   rQ   r/  r‹  rŒ  r�  ©r   r   s     r   Ú	test_sendÚIntNTestCaseMixin.test_send<  sR   € ð ×ÑÓˆØ	�‰�YÔØ×ÑØ�K‰K×ÑÓ¤§¢¨Q¯^©^¸RÓ!@À9Ñ!Lõ	
r   c                 óÞ   • / nU R                  5       nUR                  Ul        SUl        UR	                  [
        R                  " UR                  S5      5        U R                  US/5        g)z­
When a length prefix is received which is greater than the protocol's
C{MAX_LENGTH} attribute, the C{lengthLimitExceeded} method is called
with the received length prefix.
rm   r{  N)	r  r    ÚlengthLimitExceededr[   rs   r‹  rŒ  r�  rt   )r   rO   r   s      r   Útest_lengthLimitExceededÚ*IntNTestCaseMixin.test_lengthLimitExceededF  sW   € ð ˆØ×ÑÓˆØ &§¡ˆÔØˆŒØ	�‰”v—{’{ 1§>¡>°2Ó6Ô7Ø×Ñ˜ " Õ&r   c                 óÐ   • U R                  5       nSUl        UR                  [        R                  " UR
                  S5      S-   5        U R                  UR                  / 5        g)z±
If a length prefix for a string longer than C{MAX_LENGTH} is delivered
to C{dataReceived} at the same time as the entire string, the string is
not passed to C{stringReceived}.
rm   r{  s   xxxxxxxxxxxN)r  r[   rs   r‹  rŒ  r�  rt   r?   r–  s     r   Útest_longStringNotDeliveredÚ-IntNTestCaseMixin.test_longStringNotDeliveredS  sM   € ð ×ÑÓˆØˆŒØ	�‰”v—{’{ 1§>¡>°2Ó6¸ÑBÔCØ×Ñ˜Ÿ™ RÕ(r   c                 óp   • [         R                  " 5       nU R                  [        UR                  S5        g)zv
When L{IntNStringReceiver.stringReceived} is not overridden in a
subclass, calling it raises C{NotImplementedError}.
rË   N)r   ÚIntNStringReceiverrÌ   rÍ   r
  rÎ   s     r   r…  Ú3IntNTestCaseMixin.test_stringReceivedNotImplemented^  s+   € ô
 ×(Ò(Ó*ˆØ×ÑÔ-¨u×/CÑ/CÀUÕKr   r4   )r-   r.   r/   r0   r1   r   r$  r-  r   r   r#  r  r‰  rŽ  r‘  r—  r›  rž  r…  r3   r4   r   r   rˆ  rˆ    sl   ‡ ñð 59€HÐ1Ó8Ø%)€GˆX�d˜5‘kÑ"Ó)Ø,0€N�H˜T %™[Ñ)Ó0Ø,0€N�H˜T %™[Ñ)Ó0ò3ò-ò
ò'ò	)õLr   rˆ  c                   ó6   • \ rS rSrSrS rS rS rS rS r	Sr
g	)
ÚRecvdAttributeMixinig  zÀ
Mixin defining tests for string receiving protocols with a C{recvd}
attribute which should be settable by application code, to be combined with
L{IntNTestCaseMixin} on a L{TestCase} subclass
c                 ó\   • [         R                  " UR                  [        U5      5      U-   $ )zO
Return C{data} prefixed with message length in C{protocol.structFormat}
form.
)r‹  rŒ  r�  rW   )r   r   r*   s      r   ÚmakeMessageÚRecvdAttributeMixin.makeMessagen  s$   € ô
 �{Š{˜8×0Ñ0´#°d³)Ó<¸tÑCÐCr   c                 ó$  ^^• / mU R                  5       mUU4S jnUTl        [        R                  " TR                  S5      S-   n[        R                  " TR                  S5      S-   nTR                  X#-   5        U R                  TU/5        g)z€
In stringReceived, recvd contains the remaining data that was passed to
dataReceived that was not part of the current message.
c                 ó<   >• TR                  TR                  5        g r   ©r    Úrecvd)ÚreceivedStringr   Úresults    €€r   r
  ÚKRecvdAttributeMixin.test_recvdContainsRemainingData.<locals>.stringReceived}  s   ø€ Ø�M‰M˜!Ÿ'™'Õ"r   é   ó   aaaaas   bbbbN)r  r
  r‹  rŒ  r�  rs   rt   )r   r
  ÚcompleteMessageÚincompleteMessager   r­  s       @@r   Útest_recvdContainsRemainingDataÚ3RecvdAttributeMixin.test_recvdContainsRemainingDatau  s}   ù€ ð
 ˆØ×ÑÓˆö	#ð *ˆÔÜ Ÿ+š+ a§n¡n°aÓ8¸HÑEˆÜ"ŸKšK¨¯©¸Ó:¸hÑGÐà	�‰�Ñ:Ô;Ø×Ñ˜Ð"3Ð!4Õ5r   c                 ó  ^^^	• U R                  5       m/ m	SnU R                  TU5      mUUU	4S jnUTl        SnSnU R                  TU5      nU R                  TU5      nTR                  XV-   5        U R	                  T	X1/5        g)zr
In stringReceived, if recvd is changed, messages should be parsed from
it rather than the input to dataReceived.
s   cccccc                 óD   >• T(       d  TTl         TR                  U 5        g r   )r«  r    )r¬  ÚmessageCr   r­  s    €€€r   r
  Ú=RecvdAttributeMixin.test_recvdChanged.<locals>.stringReceived‘  s   ø€ ÞØ"�”Ø�M‰M˜.Õ)r   r°  s   bbbbbN)r  r¦  r
  rs   rt   )
r   ÚpayloadCr
  ÚpayloadAÚpayloadBÚmessageAÚmessageBr·  r   r­  s
          @@@r   Útest_recvdChangedÚ%RecvdAttributeMixin.test_recvdChanged‡  sŽ   ú€ ð
 ×ÑÓˆØˆØˆØ×#Ñ# A xÓ0ˆ÷	*ð
 *ˆÔØˆØˆØ×#Ñ# A xÓ0ˆØ×#Ñ# A xÓ0ˆØ	�‰�xÑ*Ô+Ø×Ñ˜ (Ð!5Õ6r   c                 ó°  ^^^• U R                  5       m/ nSmU R                   H5  nUR                  U R                  TU5      5        UR                  T5        M7     / mUUU4S jnUTl        TR                  SR                  U5      5        TR                  S5        U R                  TU R                  5        U R                  TR                  S5        g)z™
Data already parsed by L{IntNStringReceiver.dataReceived} is not
reparsed if C{stringReceived} consumes some of the
L{IntNStringReceiver.recvd} buffer.
s       c                 ób   >• TR                  U 5        TR                  [        T5      S  Tl        g r   )r    r«  rW   )r¬  ÚSWITCHr©   r­  s    €€€r   r
  Ú:RecvdAttributeMixin.test_switching.<locals>.stringReceived­  s%   ø€ Ø�M‰M˜.Ô)ØŸ+™+¤c¨&£k mÐ4ˆE�Kr   r   ó   N)	r  r-  r    r¦  r
  rs   r¨   rt   r«  )r   Úmixr{   r
  rÂ  r©   r­  s       @@@r   Útest_switchingÚ"RecvdAttributeMixin.test_switchingž  s´   ú€ ð × Ñ Ó"ˆØˆØ$ˆØ—”ˆAØ�J‰J�t×'Ñ'¨¨qÓ1Ô2Ø�J‰J�vÖñ ð ˆ÷	5ð  .ˆÔØ×Ñ˜3Ÿ8™8 C›=Ô)ð 	×Ñ˜7Ô#Ø×Ñ˜ §¡Ô.à×Ñ˜Ÿ™ gÕ.r   c                 ó  ^^• U R                  5       mSn[        U5      S-
  Tl        U R                  TU5      n/ mUU4S jnUTl        TR                  U5        U R                  TS   [        U5      5        U R                  TS   U5        g)zž
The L{IntNStringReceiver.recvd} buffer contains all data not yet
processed by L{IntNStringReceiver.dataReceived} if the
C{lengthLimitExceeded} event occurs.
s   too longr'   c                 ó^   >• TR                  U 5        TR                  TR                  5        g r   rª  )rO   r©   r­  s    €€r   rš  ÚPRecvdAttributeMixin.test_recvdInLengthLimitExceeded.<locals>.lengthLimitExceededÇ  s   ø€ Ø�M‰M˜&Ô!Ø�M‰M˜%Ÿ+™+Õ&r   r   N)r  rW   r[   r¦  rš  rs   rt   )r   ÚDATAÚmessagerš  r©   r­  s       @@r   Útest_recvdInLengthLimitExceededÚ3RecvdAttributeMixin.test_recvdInLengthLimitExceededº  sˆ   ù€ ð × Ñ Ó"ˆØˆÜ˜t›9 q™=ˆÔØ×"Ñ" 5¨$Ó/ˆàˆö	'ð %8ˆÔ!Ø×Ñ˜7Ô#Ø×Ñ˜ ™¤C¨£IÔ.Ø×Ñ˜ ™ GÕ,r   r4   N)r-   r.   r/   r0   r1   r¦  r³  r¾  rÆ  rÍ  r3   r4   r   r   r¤  r¤  g  s!   † ñòDò6ò$7ò./õ8-r   r¤  c                   ó   • \ rS rSrSrSrg)Ú	TestInt32iÑ  zw
A L{basic.Int32StringReceiver} storing received strings in an array.

@ivar received: array holding received strings.
r4   N©r-   r.   r/   r0   r1   r3   r4   r   r   rÐ  rÐ  Ñ  ó   † ôr   rÐ  c                   ó8   • \ rS rSrSr\rSS/rS/r/ SQr	S r
Srg	)
Ú
Int32TestsiÙ  z'
Test case for int32-prefixed protocol
rk   r”  s
      aaaaaa)s      ó   hello therer   c                 óö   • U R                  5       nUR                  S5        U R                  UR                  R	                  5       S5        UR                  S5        U R                  UR                  S/5        g)z/
Test specific behavior of the 32-bits length.
r    s      foos      ubaró   ubarN©r  r.  rt   rQ   r/  rs   r?   r–  s     r   Ú	test_dataÚInt32Tests.test_dataã  s_   € ð ×ÑÓˆØ	�‰�VÔØ×Ñ˜Ÿ™×*Ñ*Ó,Ð.DÔEØ	�‰Ð.Ô/Ø×Ñ˜Ÿ™ g YÕ/r   r4   N)r-   r.   r/   r0   r1   rÐ  r   r-  r  r‰  rÙ  r3   r4   r   r   rÔ  rÔ  Ù  s*   † ñð €HØ�YÐ€GØ/Ð0€NÚ;€Nõ0r   rÔ  c                   ó   • \ rS rSrSrSrg)Ú	TestInt16iî  zw
A L{basic.Int16StringReceiver} storing received strings in an array.

@ivar received: array holding received strings.
r4   NrÑ  r4   r   r   rÜ  rÜ  î  rÒ  r   rÜ  c                   ó>   • \ rS rSrSr\rSS/rS/r/ SQr	S r
S rS	rg
)Ú
Int16Testsiö  z'
Test case for int16-prefixed protocol
rk   r”  s    aaaaaa)ó    rÕ  r   c                 óö   • U R                  5       nUR                  S5        U R                  UR                  R	                  5       S5        UR                  S5        U R                  UR                  S/5        g)z/
Test specific behavior of the 16-bits length.
r    s    foos    ubarr×  NrØ  r–  s     r   rÙ  ÚInt16Tests.test_data   s]   € ð ×ÑÓˆØ	�‰�VÔØ×Ñ˜Ÿ™×*Ñ*Ó,¨nÔ=Ø	�‰�Ô'Ø×Ñ˜Ÿ™ g YÕ/r   c                 ó–   • U R                  5       nSSUR                  S-  -  S-   -  nU R                  [        UR                  U5        g©z1
Send too much data: that should cause an error.
rd  rå   é   r'   N©r  ÚprefixLengthrÌ   ÚAssertionErrorr.  ©r   r   ÚtooSends      r   Útest_tooLongSendÚInt16Tests.test_tooLongSend
  óE   € ð ×ÑÓˆØ˜! §¡°Ñ 2Ñ3°aÑ7Ñ8ˆØ×Ñœ.¨!¯,©,¸Õ@r   r4   N)r-   r.   r/   r0   r1   rÜ  r   r-  r  r‰  rÙ  rê  r3   r4   r   r   rÞ  rÞ  ö  s0   † ñð €HØ�YÐ€GØ'Ð(€NÚ3€Nò0õAr   rÞ  c                   ó   • \ rS rSrSrSrg)ÚTestInt8i  zv
A L{basic.Int8StringReceiver} storing received strings in an array.

@ivar received: array holding received strings.
r4   NrÑ  r4   r   r   rî  rî    rÒ  r   rî  c                   ó>   • \ rS rSrSr\rSS/rS/r/ SQr	S r
S rS	rg
)Ú	Int8Testsi  z&
Test case for int8-prefixed protocol
rk   r”  s     aaaaaa)ó   s   dzadzr   c                 óö   • U R                  5       nUR                  S5        U R                  UR                  R	                  5       S5        UR                  S5        U R                  UR                  S/5        g)z.
Test specific behavior of the 8-bits length.
r    s   foos   ubarr×  NrØ  r–  s     r   rÙ  ÚInt8Tests.test_data%  s]   € ð ×ÑÓˆØ	�‰�VÔØ×Ñ˜Ÿ™×*Ñ*Ó,¨jÔ9Ø	�‰�{Ô#Ø×Ñ˜Ÿ™ g YÕ/r   c                 ó–   • U R                  5       nSSUR                  S-  -  S-   -  nU R                  [        UR                  U5        grã  rå  rè  s      r   rê  ÚInt8Tests.test_tooLongSend/  rì  r   r4   N)r-   r.   r/   r0   r1   rî  r   r-  r  r‰  rÙ  rê  r3   r4   r   r   rð  rð    s0   † ñð €HØ�YÐ€GØ'Ð(€NÚ-€Nò0õAr   rð  c                   ó8   • \ rS rSrSrSrSrS rS rS r	S r
Srg	)
ÚOnlyProducerTransporti8  za
Transport which isn't really a transport, just looks like one to
someone not looking very hard.
Fc                 ó   • / U l         g r   rÃ   r   s    r   r   ÚOnlyProducerTransport.__init__A  s	   € Øˆ�	r   c                 ó   • SU l         g )NT©Úpausedr   s    r   rJ   Ú$OnlyProducerTransport.pauseProducingD  s	   € Øˆ�r   c                 ó   • SU l         g )NFrû  r   s    r   rL   Ú%OnlyProducerTransport.resumeProducingG  s	   € Øˆ�r   c                 ó:   • U R                   R                  U5        g r   )r*   r    )r   r#  s     r   r  ÚOnlyProducerTransport.writeJ  s   € Ø�	‰	×Ñ˜Õr   )r*   rü  N)r-   r.   r/   r0   r1   rü  r³   r   rJ   rL   r  r3   r4   r   r   r÷  r÷  8  s'   † ñð
 €FØ€Mòòòõ r   r÷  c                   ó   • \ rS rSrSrS rSrg)ÚConsumingProtocoliN  z;
Protocol that really, really doesn't want any more bytes.
c                 óZ   • U R                   R                  U5        U R                  5         g r   )rQ   r  rJ   r"   s     r   r$   ÚConsumingProtocol.lineReceivedS  s    € Ø�‰×Ñ˜TÔ"Ø×ÑÕr   r4   N)r-   r.   r/   r0   r1   r$   r3   r4   r   r   r  r  N  s   † ñõr   r  c                   ó   • \ rS rSrSrS rSrg)ÚProducerTestsiX  zE
Tests for L{basic._PausableMixin} and L{basic.LineReceiver.paused}.
c                 óŽ  • [        5       n[        5       nUR                  U5        UR                  S5        U R	                  UR
                  / 5        U R                  UR                  5        U R                  UR                  5        UR                  S5        U R	                  UR
                  S/5        U R                  UR                  5        U R                  UR                  5        UR                  5         U R	                  UR
                  S/5        U R                  UR                  5        U R                  UR                  5        UR                  S5        U R	                  UR
                  SS/5        U R                  UR                  5        U R                  UR                  5        UR                  5         U R	                  UR
                  / SQ5        U R                  UR                  5        U R                  UR                  5        UR                  S5        U R	                  UR
                  / SQ5        U R                  UR                  5        U R                  UR                  5        UR                  5         U R	                  UR
                  / SQ5        U R                  UR                  5        U R                  UR                  5        UR                  5         U R	                  UR
                  / SQ5        U R                  UR                  5        U R                  UR                  5        g	)
a  
When L{basic.LineReceiver} is paused, it doesn't deliver lines to
L{basic.LineReceiver.lineReceived} and delivers them immediately upon
being resumed.

L{ConsumingProtocol} is a L{LineReceiver} that pauses itself after
every line, and writes that line to its transport.
s   hello, s   world
ó   hello, worlds   hello
world
r'  )r	  r'  r(  s	   goodbye
)r	  r'  r(  r–   N)
r  r÷  rp   rs   rt   r*   r¹   rü  r²   rL   )r   Úprx   s      r   Útest_pauseResumeÚProducerTests.test_pauseResume]  sN  € ô ÓˆÜ!Ó#ˆØ	×Ñ˜Ôð 	
�‰�zÔ"Ø×Ñ˜Ÿ™ Ô$Ø×Ñ˜Ÿ™Ô"Ø×Ñ˜Ÿ™Ô"ð 	
�‰�|Ô$Ø×Ñ˜Ÿ™ /Ð!2Ô3Ø�‰˜Ÿ™Ô!Ø�‰˜Ÿ™Ô!ð 	
×ÑÔØ×Ñ˜Ÿ™ /Ð!2Ô3Ø×Ñ˜Ÿ™Ô"Ø×Ñ˜Ÿ™Ô"ð 	
�‰Ð,Ô-Ø×Ñ˜Ÿ™ /°8Ð!<Ô=Ø�‰˜Ÿ™Ô!Ø�‰˜Ÿ™Ô!ð 	
×ÑÔØ×Ñ˜Ÿ™Ò!FÔGØ�‰˜Ÿ™Ô!Ø�‰˜Ÿ™Ô!ð 	
�‰�~Ô&Ø×Ñ˜Ÿ™Ò!FÔGØ�‰˜Ÿ™Ô!Ø�‰˜Ÿ™Ô!ð 	
×ÑÔØ×Ñ˜Ÿ™Ò!RÔSØ�‰˜Ÿ™Ô!Ø�‰˜Ÿ™Ô!ð 	
×ÑÔØ×Ñ˜Ÿ™Ò!RÔSØ×Ñ˜Ÿ™Ô"Ø×Ñ˜Ÿ™Õ"r   r4   N)r-   r.   r/   r0   r1   r  r3   r4   r   r   r  r  X  s   † ñõA#r   r  c                   ó<   • \ rS rSrSrS rS rS rS rS r	S r
S	rg
)ÚFileSenderTestsi¡  z 
Tests for L{basic.FileSender}.
c                 ól   • [         R                  " 5       nU R                  [        [        U5      5        g)z@
L{basic.FileSender} implements the L{IPullProducer} interface.
N)r   Ú
FileSenderr²   r   r
   )r   Úsenders     r   Útest_interfaceÚFileSenderTests.test_interface¦  s%   € ô ×!Ò!Ó#ˆØ�‰œ¤Y°Ó7Õ8r   c                 óþ   • [        S5      n[        R                  " 5       n[        R                  " 5       nUR                  X5        U R                  UR                  U5        U R                  UR                  5        g)z€
When L{basic.FileSender.beginFileTransfer} is called, it registers
itself with provided consumer, as a non-streaming producer.
ó   Test contentN)
r   r   r±   r   r  ÚbeginFileTransferrt   Úproducerr¹   Ú	streaming)r   ÚsourceÚconsumerr  s       r   Útest_producerRegisteredÚ'FileSenderTests.test_producerRegistered­  sb   € ô
 ˜Ó)ˆÜ ×0Ò0Ó2ˆÜ×!Ò!Ó#ˆØ× Ñ  Ô2Ø×Ñ˜×*Ñ*¨FÔ3Ø×Ñ˜×+Ñ+Õ,r   c                 óˆ  • [        S5      n[        R                  " 5       n[        R                  " 5       nUR                  X5      nUR                  5         UR                  5         U R                  UR                  5        U R                  SU R                  U5      5        U R                  SUR                  5       5        g)z°
L{basic.FileSender} sends the content of the given file using a
C{IConsumer} interface via C{beginFileTransfer}. It returns a
L{Deferred} which fires with the last byte sent.
r  ó   tN)r   r   r±   r   r  r  rL   ÚassertIsNoner  rt   ÚsuccessResultOfr/  ©r   r  r  r  Úds        r   Útest_transferÚFileSenderTests.test_transfer¹  s˜   € ô ˜Ó)ˆÜ ×0Ò0Ó2ˆÜ×!Ò!Ó#ˆØ×$Ñ$ VÓ6ˆØ×ÑÔ à×ÑÔ Ø×Ñ˜(×+Ñ+Ô,à×Ñ˜˜t×3Ñ3°AÓ6Ô7Ø×Ñ˜¨(¯.©.Ó*:Õ;r   c                 ó`  • [        S5      n[        R                  " 5       n[        R                  " 5       nSUl        UR                  X5      nUR                  5         U R                  SUR                  5       5        UR                  5         U R                  SUR                  5       5        UR                  5         U R                  SUR                  5       5        UR                  5         U R                  SU R                  U5      5        U R                  SUR                  5       5        g)zR
L{basic.FileSender} reads at most C{CHUNK_SIZE} every time it resumes
producing.
r  rG   s   Tests   Test conr  N)r   r   r±   r   r  Ú
CHUNK_SIZEr  rL   rt   r/  r   r!  s        r   Útest_transferMultipleChunksÚ+FileSenderTests.test_transferMultipleChunksË  sé   € ô
 ˜Ó)ˆÜ ×0Ò0Ó2ˆÜ×!Ò!Ó#ˆØˆÔØ×$Ñ$ VÓ6ˆà×ÑÔ Ø×Ñ˜ (§.¡.Ó"2Ô3Ø×ÑÔ Ø×Ñ˜ h§n¡nÓ&6Ô7Ø×ÑÔ Ø×Ñ˜¨(¯.©.Ó*:Ô;à×ÑÔ à×Ñ˜˜t×3Ñ3°AÓ6Ô7Ø×Ñ˜¨(¯.©.Ó*:Õ;r   c                 óZ  • S n[        S5      n[        R                  " 5       n[        R                  " 5       nUR                  X#U5      nUR                  5         UR                  5         U R                  SU R                  U5      5        U R                  SUR                  5       5        g)zu
L{basic.FileSender.beginFileTransfer} takes a C{transform} argument
which allows to manipulate the data on the fly.
c                 ó"   • U R                  5       $ r   )Úswapcase)Úchunks    r   Ú	transformÚ=FileSenderTests.test_transferWithTransform.<locals>.transformè  s   € Ø—>‘>Ó#Ð#r   r  ó   Ts   tEST CONTENTN)
r   r   r±   r   r  r  rL   rt   r   r/  )r   r-  r  r  r  r"  s         r   Útest_transferWithTransformÚ*FileSenderTests.test_transferWithTransformâ  s‹   € ò	$ô ˜Ó)ˆÜ ×0Ò0Ó2ˆÜ×!Ò!Ó#ˆØ×$Ñ$ V°yÓAˆØ×ÑÔ à×ÑÔ à×Ñ˜˜t×3Ñ3°AÓ6Ô7Ø×Ñ˜¨(¯.©.Ó*:Õ;r   c                 óF  • [        S5      n[        R                  " 5       n[        R                  " 5       nUR                  X5      nUR                  5         U R                  U5      nUR                  [        5        U R                  S[        UR                  5      5        g)z•
The C{Deferred} returned by L{basic.FileSender.beginFileTransfer} fails
with an C{Exception} if C{stopProducing} when the transfer is not
complete.
r  z#Consumer asked us to stop producingN)r   r   r±   r   r  r  rM   ÚfailureResultOfÚtrapÚ	Exceptionrt   Ústrr/  )r   r  r  r  r"  Úfailures         r   Útest_abortedTransferÚ$FileSenderTests.test_abortedTransferö  s|   € ô ˜Ó)ˆÜ ×0Ò0Ó2ˆÜ×!Ò!Ó#ˆØ×$Ñ$ VÓ6ˆà×ÑÔà×&Ñ& qÓ)ˆØ�‰”YÔØ×ÑÐ>ÄÀGÇMÁMÓ@RÕSr   r4   N)r-   r.   r/   r0   r1   r  r  r#  r'  r0  r8  r3   r4   r   r   r  r  ¡  s&   † ñò9ò
-ò<ò$<ò.<õ(Tr   r  );r1   r‹  r¦   Úior   Útypingr   r   r   Úzope.interface.verifyr   Útwisted.internetr   r	   Útwisted.internet.interfacesr
   Útwisted.internet.protocolr   Útwisted.protocolsr   Útwisted.python.compatr   Útwisted.python.failurer   Útwisted.testr   Útwisted.trialr   r¡   r   r6   r  r_   ÚSynchronousTestCaserg   rÕ   rß   rù   r  r„  r  r  r&  rˆ  r¤  ÚInt32StringReceiverrÐ  rÔ  ÚInt16StringReceiverrÜ  rÞ  ÚInt8StringReceiverrî  rð  r÷  r  r  ÚTestCaser  r4   r   r   Ú<module>rJ     sð  ðñó
 Û 
Ý ß 'Ñ 'å .ç +Ý 1Ý 4Ý #Ý +Ý *Ý &Ý "ô#˜×+Ñ+ô #ô0E:�×#Ñ#ô E:ôP#�U×+Ñ+ô #ô*uJ˜×4Ñ4ô uJôp$ %×"4Ñ"4ô $ô.L1¨(×*FÑ*Fô L1ô^)J˜H×8Ñ8ô )J÷Xñ ô �I˜u×6Ñ6ô  ÷7ñ 7ô2UL˜X×9Ñ9¸?ô ULôpFL˜ô FL÷Rg-ñ g-ôT�	˜5×4Ñ4ô ô0�×-Ñ-Ð/@ÐBUô 0ô*�	˜5×4Ñ4ô ôA�×-Ñ-Ð/@ÐBUô Aô:ˆy˜%×2Ñ2ô ôA�×,Ñ,Ð.?ÐATô A÷: ñ  ô,˜×*Ñ*ô ôF#�H×0Ñ0ô F#ôRdT�h×'Ñ'õ dTr   