+
    üÐjó§  ã                   ó  € R t ^ RIt^ RIt^ RIHt ^ RIHtHtHt ^ RI	H
t
 ^ RIHtHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ^ RIHt ^ RIHt  ! R R]P8                  4      t ! R R]P8                  4      t ! R R]P>                  4      t  ! R R]PB                  4      t" ! R R]P8                  4      t# ! R R]PB                  4      t$ ! R R]PB                  4      t% ! R R4      t& ! R R]&]PN                  4      t( ! R R 4      t) ! R! R"]PB                  ])4      t* ! R# R$])4      t+ ! R% R&4      t, ! R' R(]&]PZ                  4      t. ! R) R*]PB                  ]+],4      t/ ! R+ R,]&]P`                  4      t1 ! R- R.]PB                  ]+],4      t2 ! R/ R0]&]Pf                  4      t4 ! R1 R2]PB                  ]+],4      t5 ! R3 R44      t6 ! R5 R6]P8                  4      t7 ! R7 R8]PB                  4      t8 ! R9 R:]Pr                  4      t:R# );z,
Test cases for L{twisted.protocols.basic}.
N)ÚBytesIO)ÚListÚOptionalÚType)ÚverifyObject)ÚprotocolÚtask)Ú	IProducer)ÚconnectionDone)Úbasic)Ú	iterbytes©ÚFailure)Úproto_helpers)Úunittestc                   ó:   a € ] tR t^t o RtRtR tR tR tRt	V t
R# )ÚFlippingLineTesterzL
A line receiver that flips between line and raw data modes after one byte.
ó   
c                ó   € . V n         R # ©N©Úlines©Úselfs   &ÚC/usr/lib/python3/dist-packages/twisted/protocols/test/test_basic.pyÚ__init__ÚFlippingLineTester.__init__!   s	   € ØˆŽ
ó    c                ó\   € V P                   P                  V4       V P                  4        R# )z
Set the mode to raw.
N)r   ÚappendÚ
setRawMode©r   Úlines   &&r   ÚlineReceivedÚFlippingLineTester.lineReceived$   s    € ð 	�
‰
×Ñ˜$ÔØ�‰Ör   c                ó6   € V P                  VR,          4       R# )z
Set the mode back to line.
:é   NNN)ÚsetLineMode©r   Údatas   &&r   ÚrawDataReceivedÚ"FlippingLineTester.rawDataReceived+   s   € ð 	×Ñ˜˜b�Ö"r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú	delimiterr   r#   r*   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r      s%   ø‡ € ñð €Iòò÷#ð #r   r   c                   óN   a € ] tR t^2t o RtRt^@tR
R ltR tR t	R t
R tR	tV tR# )Ú
LineTestera³  
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                ó   € Wn         R# )z0
If given, use a clock to make callLater calls.
N)Úclock)r   r9   s   &&r   r   ÚLineTester.__init__B   s	   € ð Ž
r   c                ó   € . V n         R# ©z+
Create/clean data received on connection.
N©Úreceivedr   s   &r   ÚconnectionMadeÚLineTester.connectionMadeH   ó   € ð ˆŽr   c                ó  € V P                   P                  V4       VR8X  d   V P                  4        R# VR8X  d9   V P                  4        V P                  P                  ^ V P                  4       R# VR8X  dd   V P                  4        V P                  4        V P                   P                  R4       V P                  P                  ^ V P                  4       R# VR8X  d   V P                  4        R# VR,          R8X  d   \        VR,          4      V n	        R# VP                  R4      '       d   V P                  P                  V R	4       R# VP                  R
4      '       d   V P                  P                  4        R# R# )zd
Receive line and make some action for some tokens: pause, rawpause,
stop, len, produce, unproduce.
r   ó   pauseó   rawpauseó   stop:Né   Ns   len :rF   NNó   produceFó	   unproduceN)r>   r   r    ÚpauseProducingr9   Ú	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Œ_Ø×ÑÖ Ø�"�X˜Ô Ü˜d 2�h›-ˆDŽKØ�_‰_˜Z×(Ò(Ø�N‰N×+Ñ+¨D°%Ö8Ø�_‰_˜\×*Ò*Ø�N‰N×-Ñ-Ö/ñ +r   c                ó  € VRV P                    WP                   R r!V P                   \        V4      ,
          V n         V P                  R,          V,           V P                  R&   V P                   ^ 8X  d   V P                  V4       R# R# )zR
Read raw data, until the quantity specified by a previous 'len' line is
reached.
Néÿÿÿÿ)rN   Ú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                ó”   € \        V4      V P                  ^,           8”  d'   V P                  WP                  ^,           R 4       R# R# )z,
Adjust line mode when long lines received.
N)rV   Ú
MAX_LENGTHr'   r!   s   &&r   ÚlineLengthExceededÚLineTester.lineLengthExceededr   s;   € ô ˆt‹9�t—‘¨Õ*Ô*Ø×Ñ˜T§/¡/°AÕ"5Ð"7Ð8Ö9ñ +r   )r9   rN   r>   r   )r,   r-   r.   r/   r0   r1   rZ   r   r?   r#   r*   r[   r2   r3   r4   s   @r   r7   r7   2   s4   ø‡ € ñ
ð €IØ€Jôòò0ò2	#÷:ð :r   r7   c                   ó8   a € ] tR t^zt o RtRt^@tR tR tRt	V t
R# )ÚLineOnlyTesterz!
A buffering line only receiver.
r   c                ó   € . V n         R# r<   r=   r   s   &r   r?   ÚLineOnlyTester.connectionMade‚   rA   r   c                ó<   € V P                   P                  V4       R# )z
Save received data.
N©r>   r   r!   s   &&r   r#   ÚLineOnlyTester.lineReceivedˆ   s   € ð 	�‰×Ñ˜TÖ"r   r=   N)r,   r-   r.   r/   r0   r1   rZ   r?   r#   r2   r3   r4   s   @r   r^   r^   z   s%   ø‡ € ñð €IØ€Jò÷#ð #r   r^   c                   ó¾   a € ] tR t^�t o RtRt. ROtR tRt. ROt	]	R.,           t
R tRt. ROt. ROtR tR	t. ROtR
 tR tR tR tR tR tR tR tR tR tRtV tR# )ÚLineReceiverTestszP
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

ac                óÎ  € \        ^^
4       FÔ  p\        P                  ! 4       p\        4       pVP	                  \
        P                  ! V4      4       \        \        V P                  4      V,          ^,           4       F7  pV P                  WA,          V^,           V,           pVP                  V4       K9  	  V P                  V P                  VP                  4       KÖ  	  R# )zT
Test buffering for different packet size, checking received matches
expected data.
N)Úranger   ÚStringIOWithoutClosingr7   ÚmakeConnectionr   ÚFileWrapperrV   Ú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
ó   twiddle3c                ól  € \        ^^
4       EF"  p\        P                  ! 4       p\        P                  ! 4       p\        V4      pVP                  \        P                  ! V4      4       \        \        V P                  4      V,          ^,           4       F7  pV P                  WQ,          V^,           V,           pVP                  V4       K9  	  V P                  V P                  VP                  4       VP                  ^ 4       V P                  V P                   VP                  4       EK%  	  R# )zW
Test pause inside data receiving. It uses fake clock to see if
pausing/resuming work.
N)rg   r   rh   r   ÚClockr7   ri   r   rj   rV   ÚpauseBufrl   rm   ÚpauseOutput1r>   ÚadvanceÚpauseOutput2©r   rp   rq   r9   rr   rs   rt   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
c                ól  € \        ^^
4       EF"  p\        P                  ! 4       p\        P                  ! 4       p\        V4      pVP                  \        P                  ! V4      4       \        \        V P                  4      V,          ^,           4       F7  pV P                  WQ,          V^,           V,           pVP                  V4       K9  	  V P                  V P                  VP                  4       VP                  ^ 4       V P                  V P                   VP                  4       EK%  	  R# )z'
Test pause inside raw date receiving.
N)rg   r   rh   r   ry   r7   ri   r   rj   rV   ÚrawpauseBufrl   rm   Ú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
c                óÎ  € \        ^^
4       FÔ  p\        P                  ! 4       p\        4       pVP	                  \
        P                  ! V4      4       \        \        V P                  4      V,          ^,           4       F7  pV P                  WA,          V^,           V,           pVP                  V4       K9  	  V P                  V P                  VP                  4       KÖ  	  R# )z
Test stop inside producing.
N)rg   r   rh   r7   ri   r   rj   rV   Ústop_bufrl   rm   Ústop_outputr>   ro   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                óì   € \        4       p\        P                  ! 4       pVP                  \        P
                  ! V4      4       VP                  R4       V P                  VP                  . RO4       R# )z&
Test produce/unproduce in receiving.
s&   produce
hello world
unproduce
goodbye
N)rG   s   hello worldrH   ó   goodbye)	r7   r   rh   ri   r   rj   rl   rm   r>   )r   rr   rq   s   &  r   Útest_lineReceiverAsProducerÚ-LineReceiverTests.test_lineReceiverAsProducer  sW   € ô ‹LˆÜ×0Ò0Ó2ˆØ	×Ñœ×-Ò-¨aÓ0Ô1Ø	�‰ÐDÔEØ×ÑØ�J‰JÒNö	
r   c                ón  €  ! R R\         P                  4      pV! 4       pVP                  ! R4       V P                  VP                  R4       V P                  VP
                  R4       VP                  ! R4       V P                  VP                  R4       V P                  VP
                  R4       R	# )
zˆ
L{LineReceiver.clearLineBuffer} removes all buffered data and returns
it as a C{bytes} and can be called from beneath C{dataReceived}.
c                   ó&   a € ] tR tRt o R tRtV tR# )Ú@LineReceiverTests.test_clearLineBuffer.<locals>.ClearingReceiveri  c                ó<   € Wn         V P                  4       V n        R # r   )r"   ÚclearLineBufferrW   r!   s   &&r   r#   ÚMLineReceiverTests.test_clearLineBuffer.<locals>.ClearingReceiver.lineReceived  s   € Ø ”	Ø ×0Ñ0Ó2�–	r   )r"   rW   N)r,   r-   r.   r/   r#   r2   r3   r4   s   @r   ÚClearingReceiverr’     s   ø‡ € ÷3ð 3r   r–   s   foo
bar
bazó   foos   bar
bazs   quux
s   quuxr   N)r   ÚLineReceiverrl   rm   r"   rW   )r   r–   r   s   &  r   Útest_clearLineBufferÚ&LineReceiverTests.test_clearLineBuffer  s�   € ô	3œu×1Ñ1ô 	3ñ
 $Ó%ˆØ×ÒÐ2Ô3Ø×Ñ˜Ÿ™¨Ô/Ø×Ñ˜Ÿ™¨Ô6ð 	×Ò˜kÔ*Ø×Ñ˜Ÿ™¨Ô0Ø×Ñ˜Ÿ™¨Ö,r   c                óL  € \        4       p\        P                  ! 4       pVP                  \        P
                  ! V4      4       \        P                  ! 4       pVP                  RV,          4       V P                  RV,          RP                  VP                  4      4       R# )z3
Test switching modes many times on the same data.
s   x
xó   xr   N)r   r   rh   ri   r   rj   ÚsysÚgetrecursionlimitrl   rm   Újoinr   )r   ÚprotorP   Úlimits   &   r   Útest_stackRecursionÚ%LineReceiverTests.test_stackRecursion*  st   € ô #Ó$ˆÜ!×8Ò8Ó:ˆ	Ø×ÑœX×1Ò1°)Ó<Ô=Ü×%Ò%Ó'ˆØ×Ñ˜7 U�?Ô+Ø×Ñ˜ � s§x¡x°·±Ó'<Ö=r   c                ó  € \         P                  ! 4       p\        P                  ! 4       pVP	                  V4       VP                  RVP                  ^,           ,          R,           4       V P                  VP                  4       R# ©z`
C{LineReceiver} disconnects the transport if it receives a line longer
than its C{MAX_LENGTH}.
rœ   ó   
rN©	r   r˜   r   ÚStringTransportri   rl   rZ   Ú
assertTrueÚdisconnecting©r   r    rP   s   &  r   Útest_maximumLineLengthÚ(LineReceiverTests.test_maximumLineLength5  óc   € ô
 ×"Ò"Ó$ˆÜ!×1Ò1Ó3ˆ	Ø×Ñ˜YÔ'Ø×Ñ˜4 5×#3Ñ#3°aÕ#7Õ8¸8ÕCÔDØ�‰˜	×/Ñ/Ö0r   c                ó  € \        4       p^Vn        \        P                  ! 4       pVP	                  V4       RVP                  ^,
          ,          pVP                  V4       VP                  VP                  RR 4       VP                  VP                  RR V,           4       V P                  VP                  4       V P                  \        VP                  4      ^4       V P                  W1P                  ^ ,          4       R# )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).
rœ   NrU   )r7   rZ   r   r¨   ri   rl   r1   ÚassertFalserª   rm   rV   r>   )r   r    rq   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                ó`  € \         P                  ! 4       pRVn        \        P                  ! 4       pVP                  V4       VP                  RVP                  ,          VP                  R\        VP                  4      ^,
           ,           4       V P                  VP                  4       R# )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œ   N)r   r˜   r1   r   r¨   ri   rl   rZ   rV   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                óú   € \         P                  ! 4       pR Vn        \        P                  ! 4       pVP                  V4       VP                  4        VP                  R4      pV P                  V\        4       R# )zN
C{LineReceiver.dataReceived} forwards errors returned by
C{rawDataReceived}.
c                 ó   € \        R 4      # )Úoops)ÚRuntimeError©r)   s   &r   Ú<lambda>Ú5LineReceiverTests.test_rawDataError.<locals>.<lambda>o  s	   € ¬\¸&Ô-Ar   s   dataN)
r   r˜   r*   r   r¨   ri   r    rl   ÚassertIsInstancer¹   )r   r    rP   Úwhys   &   r   Útest_rawDataErrorÚ#LineReceiverTests.test_rawDataErrori  sb   € ô
 ×"Ò"Ó$ˆÙ AˆÔÜ!×1Ò1Ó3ˆ	Ø×Ñ˜YÔ'Ø×ÑÔØ× Ñ  Ó)ˆØ×Ñ˜c¤<Ö0r   c                ór   € \         P                  ! 4       pV P                  \        VP                  R4       R# )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                ór   € \         P                  ! 4       pV P                  \        VP                  R4       R# )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   © N)s   len 10ó
   0123456789ó   len 5s   1234
s   len 20s   foo 123s   0123456789
012345678s   len 0s   foo 5r   s   67890s   len 1ó   a)ó   twiddle1ó   twiddle2rC   )rÏ   rÐ   rÍ   rD   r   )rÏ   rÐ   rÍ   rD   s   12345rw   )rÏ   rÐ   rE   )r,   r-   r.   r/   r0   rk   rn   ru   rz   r{   r}   r   r‚   rƒ   r„   r…   rˆ   r‰   rŠ   rŽ   r™   r¢   r¬   r±   r´   r¿   rÆ   rÉ   r2   r3   r4   s   @r   re   re   �   s™   ø‡ € ñð
€Fò$€Fò 6ð 8€Hâ7€LØ ; -Õ/€Lò<ð" J€KâL€Oò€Oò?ð  :€Hâ5€Kò;ò

ò-ò,	>ò	1ò2ò,2ò&1òM÷Jð Jr   re   c                   ó6   a € ] tR tRt o RtR tR tR tRtV t	R# )ÚExcessivelyLargeLineCatcheri‡  zž
Helper for L{LineReceiverLineLengthExceededTests}.

@ivar longLines: A L{list} of L{bytes} giving the values
    C{lineLengthExceeded} has been called with.
c                ó   € . V n         R # r   ©Ú	longLinesr   s   &r   r?   Ú*ExcessivelyLargeLineCatcher.connectionMade�  s	   € ØˆŽr   c                ó   € R# )z
Disregard any received lines.
NrË   r!   s   &&r   r#   Ú(ExcessivelyLargeLineCatcher.lineReceived’  s   ‚ r   c                ó<   € V P                   P                  V4       R# )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.   r/   r0   r?   r#   r[   r2   r3   r4   s   @r   rÒ   rÒ   ‡  s   ø‡ € ñòò÷
$ð $r   rÒ   c                   óN   a € ] tR tRt o RtR tR tR tR tR t	R t
R	 tR
tV tR# )Ú#LineReceiverLineLengthExceededTestsiž  zG
Tests for L{twisted.protocols.basic.LineReceiver.lineLengthExceeded}.
c                óÄ   € \        4       V n        ^V P                  n        \        P                  ! 4       V n        V P                  P                  V P
                  4       R# )é   N)rÒ   r    rZ   r   r¨   rP   ri   r   s   &r   ÚsetUpÚ)LineReceiverLineLengthExceededTests.setUp£  s>   € Ü0Ó2ˆŒ
Ø !ˆ�
‰
ÔÜ&×6Ò6Ó8ˆŒØ�
‰
×!Ñ! $§.¡.Ö1r   c                óà   € RV P                   P                  ^,          ^,           ,          pV P                   P                  V4       V P                  V.V P                   P                  4       R# )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    rZ   rl   rm   rÕ   ©r   Ú	excessives   & r   Útest_longUnendedLineÚ8LineReceiverLineLengthExceededTests.test_longUnendedLine©  sP   € ð ˜DŸJ™J×1Ñ1°AÕ5¸Õ9Õ:ˆ	Ø�
‰
×Ñ 	Ô*Ø×Ñ˜)˜ d§j¡j×&:Ñ&:Ö;r   c                ó$  € RV P                   P                  ^,          ^,           ,          pV P                   P                  RV P                   P                  ,           V,           4       V P	                  V.V P                   P
                  4       R# )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œ   N)r    rZ   rl   r1   rm   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                ó6  € V P                   P                  P                  RV P                   P                  ^,          ^,           ,          .^,          4      pV P                   P	                  V4       V P                  V.V P                   P                  4       R# )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œ   N)r    r1   rŸ   rZ   rl   rm   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                ó$  € RV P                   P                  ^,          ^,           ,          V P                   P                  ,           ^,          pV P                   P                  V4       V P	                  V.V P                   P
                  4       R# )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œ   N)r    rZ   r1   rl   rm   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                ó  € \         P                  ! 4       p\        P                  ! 4       pVP	                  V4       VP                  RVP                  ^,           ,          R,           4       V P                  VP                  4       R# r¥   r§   r«   s   &  r   r¬   Ú:LineReceiverLineLengthExceededTests.test_maximumLineLengthÖ  r®   r   c                ó*  € \         P                  ! 4       p\        P                  ! 4       pVP	                  V4       VP                  RVP                  \        VP                  4      ,           ,          4       V P                  VP                  4       R# )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¨   ri   rl   rZ   rV   r1   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    rP   N)r,   r-   r.   r/   r0   rß   rä   rç   rê   rí   r¬   rò   r2   r3   r4   s   @r   rÜ   rÜ   ž  s2   ø‡ € ñò2ò<ò	<ò<ò	<ò	1÷	1ð 	1r   rÜ   c                   ó:   a € ] tR tRt o RtRtR tR tR tRt	V t
R# )	ÚLineOnlyReceiverTestsií  z8
Tests for L{twisted.protocols.basic.LineOnlyReceiver}.
s7   foo
    bleakness
    desolation
    plastic forks
    c                ó0  € \         P                  ! 4       p\        4       pVP                  V4       \	        V P
                  4       F  pVP                  V4       K  	  V P                  VP                  V P
                  P                  R4      RR 4       R# )zG
Test buffering over line protocol: data received should match buffer.
r   NrU   )
r   r¨   r^   ri   r   rk   rl   rm   r>   Úsplit)r   rq   rr   Úcs   &   r   ru   Ú!LineOnlyReceiverTests.test_bufferø  sq   € ô ×)Ò)Ó+ˆÜÓˆØ	×Ñ˜ÔÜ˜4Ÿ;™;Ö'ˆAØ�N‰N˜1Öñ (à×Ñ˜Ÿ™ T§[¡[×%6Ñ%6°uÓ%=¸c¸rÐ%BÖCr   c                ó0  € \        4       p\        P                  ! 4       pVP                  V4       VP	                  RVP
                  \        VP                  4      ,           ^,           ,          R,           4       V P                  VP                  4       R# )zu
C{LineOnlyReceiver} disconnects the transport if it receives a
line longer than its C{MAX_LENGTH} + len(delimiter).
rœ   r¦   N)
r^   r   r¨   ri   rl   rZ   rV   r1   r©   rª   r«   s   &  r   Ú!test_greaterThanMaximumLineLengthÚ7LineOnlyReceiverTests.test_greaterThanMaximumLineLength  sp   € ô
 Ó ˆÜ!×1Ò1Ó3ˆ	Ø×Ñ˜YÔ'Ø×ÑØ�E×$Ñ$¤s¨5¯?©?Ó';Õ;¸aÕ?Õ@À8ÕKô	
ð 	�‰˜	×/Ñ/Ö0r   c                ór   € \         P                  ! 4       pV P                  \        VP                  R4       R# )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   rË   N)r,   r-   r.   r/   r0   rk   ru   rû   rÉ   r2   r3   r4   s   @r   rõ   rõ   í  s(   ø‡ € ñð€Fò	Dò1÷Jð Jr   rõ   c                   óL   a € ] tR tRt o R tR t^2t^ t]3V 3R lR llt	Rt
V tR# )Ú	TestMixini  c                ó   € . V n         R # r   r=   r   s   &r   r?   ÚTestMixin.connectionMade  s	   € ØˆŽr   c                ó<   € V P                   P                  V4       R # r   rb   ©r   rt   s   &&r   ÚstringReceivedÚTestMixin.stringReceived  s   € Ø�‰×Ñ˜QÖr   c                ó$   <€ V ^8„  d   QhRS[ RR/# )é   ÚreasonÚreturnNr   )Úformatr5   s   "€r   Ú__annotate__ÚTestMixin.__annotate__#  s   ø€ ÷ ñ ¡Wð À$ñ r   c                ó   € ^V n         R# )r&   N)Úclosed)r   r
  s   &&r   ÚconnectionLostÚTestMixin.connectionLost#  s	   € ØˆŽr   )r  r>   N)r,   r-   r.   r/   r?   r  rZ   r  r
   r  r2   r3   r4   s   @r   r  r    s-   ø‡ € òò ð €JØ€Fà/=÷ ÷ ð r   r  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚTestNetstringi'  c                ór   € V P                   P                  V4       V P                  P                  V4       R # r   )r>   r   rP   Úwriter  s   &&r   r  ÚTestNetstring.stringReceived(  s&   € Ø�‰×Ñ˜QÔØ�‰×Ñ˜QÖr   rË   N)r,   r-   r.   r/   r  r2   r3   r4   s   @r   r  r  '  s   ø‡ € ÷ ð  r   r  c                   ó@   a € ] tR tRt o . tRtR tR tV 3R ltRt	V t
R# )ÚLPTestCaseMixini-  Nc                ór   € \         P                  ! 4       pV P                  4       pVP                  V4       V# )zl
Return a new instance of C{self.protocol} connected to a new instance
of L{proto_helpers.StringTransport}.
)r   r¨   r   ri   )r   rq   rr   s   &  r   ÚgetProtocolÚLPTestCaseMixin.getProtocol1  s0   € ô
 ×)Ò)Ó+ˆØ�M‰M‹OˆØ	×Ñ˜ÔØˆr   c                óÜ   € V P                    F[  pV P                  4       p\        V4       F  pVP                  V4       K  	  V P	                  VP
                  P                  4       K]  	  R# )z?
Assert that illegal strings cause the transport to be closed.
N)ÚillegalStringsr  r   rl   r©   rP   rª   ©r   rt   Úrrø   s   &   r   Útest_illegalÚLPTestCaseMixin.test_illegal;  sR   € ð ×$Ô$ˆAØ× Ñ Ó"ˆAÜ˜q–\�Ø—‘˜qÖ!ñ "à�O‰O˜AŸK™K×5Ñ5Ö6ó	 %r   c                óP   <€ V ^8„  d   Qh/ S[ S[S[,          ,          ;R&   R;R&   # )r	  r  ú!Optional[Type[protocol.Protocol]]r   ©r   r   Úbytes)r  r5   s   "€r   r  ÚLPTestCaseMixin.__annotate__-  s$   ø‡ ‚ Ù™T¡%�[Õ)Ñ.ñ à1Ñ8ò r   rË   )r,   r-   r.   r/   r  r   r  r!  Ú__annotate_func__r2   r3   r4   s   @r   r  r  -  s    ø‡ € Ø,.€NØ48€Hòò7÷ ƒ r   r  c                   ó¼   a € ] tR tRt o Rt. ROt. ROt]tR t	R t
R tR tR tR tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tRtV t R# )ÚNetstringReceiverTestsiF  z9
Tests for L{twisted.protocols.basic.NetstringReceiver}.
c                ó¢   € \         P                  ! 4       V n        \        4       V n        V P                  P                  V P                  4       R # r   )r   r¨   rP   r  ÚnetstringReceiverri   r   s   &r   rß   ÚNetstringReceiverTests.setUpV  s4   € Ü&×6Ò6Ó8ˆŒÜ!.£ˆÔØ×Ñ×-Ñ-¨d¯n©nÖ=r   c                ó  € \        ^^
4       Fñ  p\        P                  ! 4       p\        4       pRVn        VP                  V4       V P                   F  pVP                  V4       K  	  VP                  4       p\        \        V4      V,          ^,           4       F7  pWVV,          V^,           V,           pV'       g   K&  VP                  V4       K9  	  V P                  VP                  V P                  4       Kó  	  R# )z9
Strings can be received in chunks of different lengths.
i»  N)rg   r   r¨   r  rZ   ri   ÚstringsÚ
sendStringÚvaluerV   rl   rm   r>   )r   rp   rq   rr   rt   Úoutrs   s   &      r   ru   Ú"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                óŠ   € V P                   P                  R4       V P                  V P                   P                  R.4       R# )z5
Empty netstrings (with length '0') can be received.
s   0:,r   N©r,  rl   rm   r>   r   s   &r   Útest_receiveEmptyNetstringÚ1NetstringReceiverTests.test_receiveEmptyNetstringm  s6   € ð 	×Ñ×+Ñ+¨FÔ3Ø×Ñ˜×/Ñ/×8Ñ8¸3¸%Ö@r   c                óŠ   € V P                   P                  R4       V P                  V P                   P                  R.4       R# )z+
One-character netstrings can be received.
ó   1:a,rÎ   Nr5  r   s   &r   Útest_receiveOneCharacterÚ/NetstringReceiverTests.test_receiveOneCharactert  s6   € ð 	×Ñ×+Ñ+¨GÔ4Ø×Ñ˜×/Ñ/×8Ñ8¸4¸&ÖAr   c                óŠ   € V P                   P                  R4       V P                  V P                   P                  R.4       R# )z+
Two-character netstrings can be received.
s   2:ab,ó   abNr5  r   s   &r   Útest_receiveTwoCharactersÚ0NetstringReceiverTests.test_receiveTwoCharacters{  s6   € ð 	×Ñ×+Ñ+¨HÔ5Ø×Ñ˜×/Ñ/×8Ñ8¸5¸'ÖBr   c                óŠ   € V P                   P                  R4       V P                  V P                   P                  R.4       R# )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,,r9  Nr5  r   s   &r   Útest_receiveNestedNetstringÚ2NetstringReceiverTests.test_receiveNestedNetstring‚  s6   € ð 	×Ñ×+Ñ+¨JÔ7Ø×Ñ˜×/Ñ/×8Ñ8¸7¸)ÖDr   c                ó†   € V P                   P                  R4       V P                  V P                  P                  4       R# )z<
Netstrings containing more data than expected are refused.
s   2:aaa,N©r,  rl   r©   rP   rª   r   s   &r   Útest_moreDataThanSpecifiedÚ1NetstringReceiverTests.test_moreDataThanSpecified‹  s.   € ð 	×Ñ×+Ñ+¨IÔ6Ø�‰˜Ÿ™×4Ñ4Ö5r   c                ó†   € V P                   P                  R4       V P                  V P                  P                  4       R# )zk
Netstrings that should be empty according to their length
specification are refused if they contain data.
s   0:a,NrD  r   s   &r   Ú$test_moreDataThanSpecifiedBorderCaseÚ;NetstringReceiverTests.test_moreDataThanSpecifiedBorderCase’  ó.   € ð
 	×Ñ×+Ñ+¨GÔ4Ø�‰˜Ÿ™×4Ñ4Ö5r   c                ó†   € V P                   P                  R4       V P                  V P                  P                  4       R# )zH
Netstrings without leading digits that specify the length
are refused.
s   :aaa,NrD  r   s   &r   Útest_missingNumberÚ)NetstringReceiverTests.test_missingNumberš  ó.   € ð
 	×Ñ×+Ñ+¨HÔ5Ø�‰˜Ÿ™×4Ñ4Ö5r   c                ó†   € V P                   P                  R4       V P                  V P                  P                  4       R# )zO
Netstrings without a colon between length specification and
data are refused.
s   3aaa,NrD  r   s   &r   Útest_missingColonÚ(NetstringReceiverTests.test_missingColon¢  rN  r   c                ó†   € V P                   P                  R4       V P                  V P                  P                  4       R# )zA
Netstrings that have no leading digits nor a colon are
refused.
s   aaa,NrD  r   s   &r   Útest_missingNumberAndColonÚ1NetstringReceiverTests.test_missingNumberAndColonª  rJ  r   c                ó†   € V P                   P                  R4       V P                  V P                  P                  4       R# )z1
Netstrings consisting only of data are refused.
s   aaaNrD  r   s   &r   Útest_onlyDataÚ$NetstringReceiverTests.test_onlyData²  s.   € ð 	×Ñ×+Ñ+¨FÔ3Ø�‰˜Ÿ™×4Ñ4Ö5r   c                ó  € V P                   P                  R4       V P                   P                  R4       V P                  V P                   P                  R.4       V P	                  V P                   P                  4       4       R# )z-
Netstrings can be received in two portions.
s   4:aas   aa,s   aaaaN)r,  rl   rm   r>   r©   Ú_payloadCompleter   s   &r   Útest_receiveNetstringPortions_1Ú6NetstringReceiverTests.test_receiveNetstringPortions_1¹  se   € ð 	×Ñ×+Ñ+¨GÔ4Ø×Ñ×+Ñ+¨FÔ3Ø×Ñ˜×/Ñ/×8Ñ8¸7¸)ÔDØ�‰˜×.Ñ.×?Ñ?ÓAÖBr   c                óœ   € R F  pV P                   P                  V4       K   	  V P                  V P                   P                  R.4       R# )zv
Netstrings can be received in more than two portions, even if
the length specification is split across two portions.
rÌ   N)ó   1s   0:01234s   56789ó   ,r5  ©r   Úparts   & r   Útest_receiveNetstringPortions_2Ú6NetstringReceiverTests.test_receiveNetstringPortions_2Â  s@   € ó
 7ˆDØ×"Ñ"×/Ñ/°Ö5ñ 7à×Ñ˜×/Ñ/×8Ñ8¸=¸/ÖJr   c                óœ   € R F  pV P                   P                  V4       K   	  V P                  V P                   P                  R.4       R# )z5
Netstrings can be received one character at a time.
r=  N)ó   2ó   :rÎ   ó   br^  r5  r_  s   & r   Útest_receiveNetstringPortions_3Ú6NetstringReceiverTests.test_receiveNetstringPortions_3Ë  s@   € ó 3ˆDØ×"Ñ"×/Ñ/°Ö5ñ 3à×Ñ˜×/Ñ/×8Ñ8¸5¸'ÖBr   c                ób  € V P                   P                  R4       V P                  V P                   P                  4       4       V P	                  V P                   P
                  R.4       V P                   P                  R4       V P	                  V P                   P
                  RR.4       R# )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,1rÎ   s   :b,rf  N)r,  rl   r©   rY  rm   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                ó  € V P                   P                  ^,           pV P                   P                  RP                  \	        V4      RRV,          34      4       V P                  V P                  P                  4       R# )z[
Netstrings with a length specification exceeding the specified
C{MAX_LENGTH} are refused.
r   re  rÎ   N)r,  rZ   rl   rŸ   r&  r©   rP   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                ó¨   € RV P                   n        V P                   P                  4        V P                  V P                   P                  ^4       R# )z_
C{_consumeLength} returns the expected length of the
netstring, including the trailing comma.
ó   12:N)r,  Ú_remainingDataÚ_consumeLengthrm   Ú_expectedPayloadSizer   s   &r   Útest_consumeLengthÚ)NetstringReceiverTests.test_consumeLengthê  s@   € ð
 17ˆ×ÑÔ-Ø×Ñ×-Ñ-Ô/Ø×Ñ˜×/Ñ/×DÑDÀbÖIr   c                óÊ   € RV P                   n        ^V P                   n        V P                   P                  4        V P	                  V P                   P
                  ^4       R# )zt
C{_consumeLength} works as expected if the length specification
contains the value of C{MAX_LENGTH} (border case).
rq  N)r,  rr  rZ   rs  rm   rt  r   s   &r   Útest_consumeLengthBorderCase1Ú4NetstringReceiverTests.test_consumeLengthBorderCase1ó  sN   € ð
 17ˆ×ÑÔ-Ø,.ˆ×ÑÔ)Ø×Ñ×-Ñ-Ô/Ø×Ñ˜×/Ñ/×DÑDÀbÖIr   c                ó²   € RV P                   n        ^V P                   n        V P                  \        P
                  V P                   P                  4       R# )zŒ
C{_consumeLength} raises a L{basic.NetstringParseError} if
the length specification exceeds the value of C{MAX_LENGTH}
by 1 (border case).
rq  N©r,  rr  rZ   rÃ   r   ÚNetstringParseErrorrs  r   s   &r   Útest_consumeLengthBorderCase2Ú4NetstringReceiverTests.test_consumeLengthBorderCase2ý  sE   € ð 17ˆ×ÑÔ-Ø,.ˆ×ÑÔ)Ø×ÑÜ×%Ñ% t×'=Ñ'=×'LÑ'Lö	
r   c                ó²   € RV P                   n        ^V P                   n        V P                  \        P
                  V P                   P                  4       R# )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:Nr{  r   s   &r   Útest_consumeLengthBorderCase3Ú4NetstringReceiverTests.test_consumeLengthBorderCase3	  sE   € ð 19ˆ×ÑÔ-Ø,.ˆ×ÑÔ)Ø×ÑÜ×%Ñ% t×'=Ñ'=×'LÑ'Lö	
r   c                ór   € \         P                  ! 4       pV P                  \        VP                  R4       R# )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,  rP   N)ó   helloó   worlds   hows   ares   you123s   :todays  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)s   9999999999999999999999s   abcs   4:abcdes7   51:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab,)!r,   r-   r.   r/   r0   r/  r  r  r   rß   ru   r6  r:  r>  rA  rE  rH  rL  rP  rS  rV  rZ  ra  rg  rj  rn  ru  rx  r}  r€  r„  r2   r3   r4   s   @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ð Lr   r*  c                   ód   a € ] tR tRt o RtRtRtRtRtR t	R t
R tR tR tR	 tV 3R
 ltRtV tR# )ÚIntNTestCaseMixini  z,
TestCase mixin for int-prefixed protocols.
Nc           	     ó<  € V P                  4       pV P                   FU  p\        \        P                  ! VP
                  \        V4      4      V,           4       F  pVP                  V4       K  	  KW  	  V P                  VP                  V P                  4       R# )z.
Test receiving data find the same data send.
N)
r  r/  r   ÚstructÚpackÚstructFormatrV   rl   rm   r>   )r   r   rt   rø   s   &   r   Útest_receiveÚIntNTestCaseMixin.test_receive(  sn   € ð ×ÑÓˆØ—”ˆAÜœvŸ{š{¨1¯>©>¼3¸q»6ÓBÀQÕFÖG�Ø—‘˜qÖ!ó Hñ ð 	×Ñ˜Ÿ™ T§\¡\Ö2r   c                óÊ   € V P                    FR  pV P                  4       p\        V4       F  pVP                  V4       K  	  V P	                  VP
                  . 4       KT  	  R# )z;
Send partial data, nothing should be definitely received.
N)ÚpartialStringsr  r   rl   rm   r>   r  s   &   r   Útest_partialÚIntNTestCaseMixin.test_partial2  sP   € ð ×$Ô$ˆAØ× Ñ Ó"ˆAÜ˜q–\�Ø—‘˜qÖ!ñ "à×Ñ˜QŸZ™Z¨Ö,ó	 %r   c                óè   € V P                  4       pVP                  R4       V P                  VP                  P	                  4       \
        P                  ! VP                  ^4      R,           4       R# )z"
Test sending data over protocol.
Nó   bbbbbbbbbbbbbbbb)r  r0  rm   rP   r1  r‹  rŒ  r�  ©r   r   s   & r   Ú	test_sendÚIntNTestCaseMixin.test_send<  sR   € ð ×ÑÓˆØ	�‰�YÔØ×ÑØ�K‰K×ÑÓ¤§¢¨Q¯^©^¸RÓ!@À9Õ!Lö	
r   c                óà   € . pV P                  4       pVP                  Vn        ^
Vn        VP	                  \
        P                  ! VP                  ^4      4       V P                  V^.4       R# )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.
N)	r  r   ÚlengthLimitExceededrZ   rl   r‹  rŒ  r�  rm   )r   rN   r   s   &  r   Útest_lengthLimitExceededÚ*IntNTestCaseMixin.test_lengthLimitExceededF  sW   € ð ˆØ×ÑÓˆØ &§¡ˆÔØˆŒØ	�‰”v—{’{ 1§>¡>°2Ó6Ô7Ø×Ñ˜ " Ö&r   c                óÚ   € V P                  4       p^
Vn        VP                  \        P                  ! VP
                  ^4      R,           4       V P                  VP                  . 4       R# )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}.
Ns   xxxxxxxxxxx)r  rZ   rl   r‹  rŒ  r�  rm   r>   r–  s   & r   Útest_longStringNotDeliveredÚ-IntNTestCaseMixin.test_longStringNotDeliveredS  sM   € ð ×ÑÓˆØˆŒØ	�‰”v—{’{ 1§>¡>°2Ó6¸ÕBÔCØ×Ñ˜Ÿ™ RÖ(r   c                ór   € \         P                  ! 4       pV P                  \        VP                  R4       R# )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   c                ó¨   <€ V ^8„  d   Qh/ R;R&   S[ S[S[,          ,          ;R&   S[ S[S[,          ,          ;R&   S[ S[S[,          ,          ;R&   # )r	  r$  r   r/  r  r‘  r%  )r  r5   s   "€r   r  ÚIntNTestCaseMixin.__annotate__  sT   ø‡ ‚ ð
 2Ñ8ñ ñ ‘d™5•kÕ"Ñ)ñ ñ ™T¡%�[Õ)Ñ0ñ ñ ™T¡%�[Õ)Ñ0ò r   rË   )r,   r-   r.   r/   r0   r   r/  r  r‘  rŽ  r’  r—  r›  rž  r„  r(  r2   r3   r4   s   @r   r‰  r‰    sG   ø‡ € ñð 59€HØ%)€GØ,0€NØ,0€Nò3ò-ò
ò'ò	)òL÷A ƒ r   r‰  c                   óB   a € ] tR tRt o RtR tR tR tR tR t	Rt
V tR	# )
Ú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                ód   € \         P                  ! VP                  \        V4      4      V,           # )zO
Return C{data} prefixed with message length in C{protocol.structFormat}
form.
)r‹  rŒ  r�  rV   )r   r   r)   s   &&&r   ÚmakeMessageÚRecvdAttributeMixin.makeMessagen  s$   € ô
 �{Š{˜8×0Ñ0´#°d³)Ó<¸tÕCÐCr   c                ó>  aa€ . oV P                  4       oVV3R lpVSn        \        P                  ! SP                  ^4      R,           p\        P                  ! SP                  ^4      R,           pSP                  W#,           4       V P                  SV.4       R# )z€
In stringReceived, recvd contains the remaining data that was passed to
dataReceived that was not part of the current message.
c                 ó>   <€ SP                  SP                  4       R # r   ©r   Úrecvd)ÚreceivedStringr   Úresults   &€€r   r  ÚKRecvdAttributeMixin.test_recvdContainsRemainingData.<locals>.stringReceived}  s   ø€ Ø�M‰M˜!Ÿ'™'Ö"r   Nó   aaaaas   bbbb)r  r  r‹  rŒ  r�  rl   rm   )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                ó  aaa	€ V P                  4       o. o	RpV P                  SV4      oVVV	3R lpVSn        RpRpV P                  SV4      pV P                  SV4      pSP                  WV,           4       V P	                  S	W1.4       R# )zr
In stringReceived, if recvd is changed, messages should be parsed from
it rather than the input to dataReceived.
c                 óH   <€ S'       g   SSn         SP                  V 4       R # r   )r­  r   )r®  ÚmessageCr   r¯  s   &€€€r   r  Ú=RecvdAttributeMixin.test_recvdChanged.<locals>.stringReceived‘  s   ø€ ßØ"�”Ø�M‰M˜.Ö)r   Ns   cccccr±  s   bbbbb)r  r¨  r  rl   rm   )
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                ó²  aaa€ V P                  4       o. pRoV P                   F5  pVP                  V P                  SV4      4       VP                  S4       K7  	  . oVVV3R lpVSn        SP                  RP                  V4      4       SP                  R4       V P                  SV P                  4       V P                  SP                  R4       R# )z™
Data already parsed by L{IntNStringReceiver.dataReceived} is not
reparsed if C{stringReceived} consumes some of the
L{IntNStringReceiver.recvd} buffer.
s       c                 ód   <€ SP                  V 4       SP                  \        S4      R  Sn        R # r   )r   r­  rV   )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  rl   rŸ   rm   r­  )r   Úmixrt   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                ó8  aa€ V P                  4       oRp\        V4      ^,
          Sn        V P                  SV4      p. oVV3R lpVSn        SP                  V4       V P                  S^ ,          \        V4      4       V P                  S^,          V4       R# )zž
The L{IntNStringReceiver.recvd} buffer contains all data not yet
processed by L{IntNStringReceiver.dataReceived} if the
C{lengthLimitExceeded} event occurs.
s   too longc                 ó`   <€ SP                  V 4       SP                  SP                  4       R # r   r¬  )rN   r    r¯  s   &€€r   rš  ÚPRecvdAttributeMixin.test_recvdInLengthLimitExceeded.<locals>.lengthLimitExceededÇ  s   ø€ Ø�M‰M˜&Ô!Ø�M‰M˜%Ÿ+™+Ö&r   N)r  rV   rZ   r¨  rš  rl   rm   )r   ÚDATAÚmessagerš  r    r¯  s   &   @@r   Útest_recvdInLengthLimitExceededÚ3RecvdAttributeMixin.test_recvdInLengthLimitExceededº  sˆ   ù€ ð × Ñ Ó"ˆØˆÜ˜t›9 q�=ˆÔØ×"Ñ" 5¨$Ó/ˆàˆö	'ð %8ˆÔ!Ø×Ñ˜7Ô#Ø×Ñ˜ �¤C¨£IÔ.Ø×Ñ˜ � GÖ,r   rË   N)r,   r-   r.   r/   r0   r¨  r´  r¿  rÇ  rÎ  r2   r3   r4   s   @r   r¦  r¦  g  s)   ø‡ € ñòDò6ò$7ò./÷8-ð -r   r¦  c                   ó   € ] tR tRtRtRtR# )Ú	TestInt32iÑ  zw
A L{basic.Int32StringReceiver} storing received strings in an array.

@ivar received: array holding received strings.
rË   N©r,   r-   r.   r/   r0   r2   rË   r   r   rÑ  rÑ  Ñ  ó   † õr   rÑ  c                   óD   a € ] tR tRt o Rt]tRR.tR.t. R	Ot	R t
RtV tR# )
Ú
Int32TestsiÙ  z'
Test case for int32-prefixed protocol
rÎ   s
      aaaaaac                óø   € V P                  4       pVP                  R4       V P                  VP                  P	                  4       R4       VP                  R4       V P                  VP                  R.4       R# )z/
Test specific behavior of the 32-bits length.
r—   s      foos      ubaró   ubarN©r  r0  rm   rP   r1  rl   r>   r–  s   & r   Ú	test_dataÚInt32Tests.test_dataã  s_   € ð ×ÑÓˆØ	�‰�VÔØ×Ñ˜Ÿ™×*Ñ*Ó,Ð.DÔEØ	�‰Ð.Ô/Ø×Ñ˜Ÿ™ g YÖ/r   rË   Nr•  )s      ó   hello therer   )r,   r-   r.   r/   r0   rÑ  r   r/  r  r‘  rÙ  r2   r3   r4   s   @r   rÕ  rÕ  Ù  s2   ø‡ € ñð €HØ�YÐ€GØ/Ð0€NÚ;€N÷0ð 0r   rÕ  c                   ó   € ] tR tRtRtRtR# )Ú	TestInt16iî  zw
A L{basic.Int16StringReceiver} storing received strings in an array.

@ivar received: array holding received strings.
rË   NrÒ  rË   r   r   rÝ  rÝ  î  rÓ  r   rÝ  c                   óJ   a € ] tR tRt o Rt]tRR	.tR.t. R
Ot	R t
R tRtV tR# )Ú
Int16Testsiö  z'
Test case for int16-prefixed protocol
rÎ   s    aaaaaac                óø   € V P                  4       pVP                  R4       V P                  VP                  P	                  4       R4       VP                  R4       V P                  VP                  R.4       R# )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                ó¸   € V P                  4       pR^VP                  ^,          ,          ^,           ,          pV P                  \        VP                  V4       R# ©z1
Send too much data: that should cause an error.
rf  N©r  ÚprefixLengthrÃ   ÚAssertionErrorr0  ©r   r   ÚtooSends   &  r   Útest_tooLongSendÚInt16Tests.test_tooLongSend
  óE   € ð ×ÑÓˆØ˜! §¡°Õ 2Õ3°aÕ7Õ8ˆØ×Ñœ.¨!¯,©,¸Ö@r   rË   Nr•  )ó    rÛ  r   )r,   r-   r.   r/   r0   rÝ  r   r/  r  r‘  rÙ  ré  r2   r3   r4   s   @r   rß  rß  ö  s9   ø‡ € ñð €HØ�YÐ€GØ'Ð(€NÚ3€Nò0÷Að Ar   rß  c                   ó   € ] tR tRtRtRtR# )ÚTestInt8i  zv
A L{basic.Int8StringReceiver} storing received strings in an array.

@ivar received: array holding received strings.
rË   NrÒ  rË   r   r   rî  rî    rÓ  r   rî  c                   óJ   a € ] tR tRt o Rt]tRR	.tR.t. R
Ot	R t
R tRtV tR# )Ú	Int8Testsi  z&
Test case for int8-prefixed protocol
rÎ   s     aaaaaac                óø   € V P                  4       pVP                  R4       V P                  VP                  P	                  4       R4       VP                  R4       V P                  VP                  R.4       R# )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                ó¸   € V P                  4       pR^VP                  ^,          ,          ^,           ,          pV P                  \        VP                  V4       R# rã  rä  rç  s   &  r   ré  ÚInt8Tests.test_tooLongSend/  rë  r   rË   Nr•  )ó   s   dzadzr   )r,   r-   r.   r/   r0   rî  r   r/  r  r‘  rÙ  ré  r2   r3   r4   s   @r   rð  rð    s9   ø‡ € ñð €HØ�YÐ€GØ'Ð(€NÚ-€Nò0÷Að Ar   rð  c                   óD   a € ] tR tRt o RtRtRtR tR tR t	R t
RtV tR	# )
ÚOnlyProducerTransporti8  za
Transport which isn't really a transport, just looks like one to
someone not looking very hard.
Fc                ó   € . V n         R # r   rº   r   s   &r   r   ÚOnlyProducerTransport.__init__A  s	   € ØˆŽ	r   c                ó   € R V n         R# )TN©Úpausedr   s   &r   rI   Ú$OnlyProducerTransport.pauseProducingD  s	   € ØˆŽr   c                ó   € R V n         R# )FNrû  r   s   &r   rK   Ú%OnlyProducerTransport.resumeProducingG  s	   € ØˆŽr   c                ó<   € V P                   P                  V4       R # r   )r)   r   )r   r&  s   &&r   r  ÚOnlyProducerTransport.writeJ  s   € Ø�	‰	×Ñ˜Ör   )r)   rü  N)r,   r-   r.   r/   r0   rü  rª   r   rI   rK   r  r2   r3   r4   s   @r   r÷  r÷  8  s/   ø‡ € ñð
 €FØ€Mòòò÷ ð  r   r÷  c                   ó*   a € ] tR tRt o RtR tRtV tR# )ÚConsumingProtocoliN  z;
Protocol that really, really doesn't want any more bytes.
c                ó\   € V P                   P                  V4       V P                  4        R # r   )rP   r  rI   r!   s   &&r   r#   ÚConsumingProtocol.lineReceivedS  s    € Ø�‰×Ñ˜TÔ"Ø×ÑÖr   rË   N)r,   r-   r.   r/   r0   r#   r2   r3   r4   s   @r   r  r  N  s   ø‡ € ñ÷ð r   r  c                   ó*   a € ] tR tRt o RtR tRtV tR# )ÚProducerTestsiX  zE
Tests for L{basic._PausableMixin} and L{basic.LineReceiver.paused}.
c                ó�  € \        4       p\        4       pVP                  V4       VP                  R4       V P	                  VP
                  . 4       V P                  VP                  4       V P                  VP                  4       VP                  R4       V P	                  VP
                  R.4       V P                  VP                  4       V P                  VP                  4       VP                  4        V P	                  VP
                  R.4       V P                  VP                  4       V P                  VP                  4       VP                  R4       V P	                  VP
                  RR.4       V P                  VP                  4       V P                  VP                  4       VP                  4        V P	                  VP
                  . RO4       V P                  VP                  4       V P                  VP                  4       VP                  R4       V P	                  VP
                  . RO4       V P                  VP                  4       V P                  VP                  4       VP                  4        V P	                  VP
                  . R	O4       V P                  VP                  4       V P                  VP                  4       VP                  4        V P	                  VP
                  . R	O4       V P                  VP                  4       V P                  VP                  4       R# )
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†  s	   goodbye
N)r	  r†  r‡  )r	  r†  r‡  r�   )
r  r÷  ri   rl   rm   r)   r°   rü  r©   rK   )r   Úprq   s   &  r   Útest_pauseResumeÚProducerTests.test_pauseResume]  sN  € ô ÓˆÜ!Ó#ˆØ	×Ñ˜Ôð 	
�‰�zÔ"Ø×Ñ˜Ÿ™ Ô$Ø×Ñ˜Ÿ™Ô"Ø×Ñ˜Ÿ™Ô"ð 	
�‰�|Ô$Ø×Ñ˜Ÿ™ /Ð!2Ô3Ø�‰˜Ÿ™Ô!Ø�‰˜Ÿ™Ô!ð 	
×ÑÔØ×Ñ˜Ÿ™ /Ð!2Ô3Ø×Ñ˜Ÿ™Ô"Ø×Ñ˜Ÿ™Ô"ð 	
�‰Ð,Ô-Ø×Ñ˜Ÿ™ /°8Ð!<Ô=Ø�‰˜Ÿ™Ô!Ø�‰˜Ÿ™Ô!ð 	
×ÑÔØ×Ñ˜Ÿ™Ò!FÔGØ�‰˜Ÿ™Ô!Ø�‰˜Ÿ™Ô!ð 	
�‰�~Ô&Ø×Ñ˜Ÿ™Ò!FÔGØ�‰˜Ÿ™Ô!Ø�‰˜Ÿ™Ô!ð 	
×ÑÔØ×Ñ˜Ÿ™Ò!RÔSØ�‰˜Ÿ™Ô!Ø�‰˜Ÿ™Ô!ð 	
×ÑÔØ×Ñ˜Ÿ™Ò!RÔSØ×Ñ˜Ÿ™Ô"Ø×Ñ˜Ÿ™Ö"r   rË   N)r,   r-   r.   r/   r0   r  r2   r3   r4   s   @r   r  r  X  s   ø‡ € ñ÷A#ð A#r   r  c                   óH   a € ] tR tRt o RtR tR tR tR tR t	R t
R	tV tR
# )ÚFileSenderTestsi¡  z 
Tests for L{basic.FileSender}.
c                ón   € \         P                  ! 4       pV P                  \        \        V4      4       R# )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                ó   € \        R4      p\        P                  ! 4       p\        P                  ! 4       pVP                  W4       V P                  VP                  V4       V P                  VP                  4       R# )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  ÚbeginFileTransferrm   Úproducerr°   Ú	streaming)r   ÚsourceÚconsumerr  s   &   r   Útest_producerRegisteredÚ'FileSenderTests.test_producerRegistered­  sb   € ô
 ˜Ó)ˆÜ ×0Ò0Ó2ˆÜ×!Ò!Ó#ˆØ× Ñ  Ô2Ø×Ñ˜×*Ñ*¨FÔ3Ø×Ñ˜×+Ñ+Ö,r   c                óŠ  € \        R4      p\        P                  ! 4       p\        P                  ! 4       pVP                  W4      pVP                  4        VP                  4        V P                  VP                  4       V P                  RV P                  V4      4       V P                  RVP                  4       4       R# )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  rK   ÚassertIsNoner  rm   ÚsuccessResultOfr1  ©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                ób  € \        R4      p\        P                  ! 4       p\        P                  ! 4       p^Vn        VP                  W4      pVP                  4        V P                  RVP                  4       4       VP                  4        V P                  RVP                  4       4       VP                  4        V P                  RVP                  4       4       VP                  4        V P                  RV P                  V4      4       V P                  RVP                  4       4       R# )zR
L{basic.FileSender} reads at most C{CHUNK_SIZE} every time it resumes
producing.
r  s   Tests   Test conr  N)r   r   r¨   r   r  Ú
CHUNK_SIZEr  rK   rm   r1  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                ó\  € R p\        R4      p\        P                  ! 4       p\        P                  ! 4       pVP                  W#V4      pVP                  4        VP                  4        V P                  RV P                  V4      4       V P                  RVP                  4       4       R# )zu
L{basic.FileSender.beginFileTransfer} takes a C{transform} argument
which allows to manipulate the data on the fly.
c                 ó"   € V P                  4       # r   )Úswapcase)Úchunks   &r   Ú	transformÚ=FileSenderTests.test_transferWithTransform.<locals>.transformè  s   € Ø—>‘>Ó#Ð#r   r  ó   Ts   tEST CONTENTN)
r   r   r¨   r   r  r  rK   rm   r   r1  )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                óH  € \        R4      p\        P                  ! 4       p\        P                  ! 4       pVP                  W4      pVP                  4        V P                  V4      pVP                  \        4       V P                  R\        VP                  4      4       R# )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  rL   ÚfailureResultOfÚtrapÚ	Exceptionrm   Ústrr1  )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   rË   N)r,   r-   r.   r/   r0   r  r  r#  r'  r0  r8  r2   r3   r4   s   @r   r  r  ¡  s/   ø‡ € ñò9ò
-ò<ò$<ò.<÷(Tð Tr   r  );r0   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   r7   rþ   r^   ÚSynchronousTestCasere   rÒ   rÜ   rõ   r  rƒ  r  r  r*  r‰  r¦  ÚInt32StringReceiverrÑ  rÕ  ÚInt16StringReceiverrÝ  rß  ÚInt8StringReceiverrî  rð  r÷  r  r  ÚTestCaser  rË   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   