+
    üÐjé7  ã                   óð   € ^ RI t ^ RI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
t ! R R]4      tR tR t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      tR# )é    N)Úpartial)ÚBytesIO)ÚmainÚprotocol)ÚStringTransport)Úfailure)Ú	iterbytes)Úbanana)ÚTestCasel   ÿÿÿÿ c                   ó&   a € ] tR t^t o R tRtV tR# )Ú	MathTestsc                ó|  € \        \        ^ ^d4      4      \        \        RR4      4      ,           \        \        RR4      4      ,           R.,           pV Fd  p\        4       p\        P                  ! W#P
                  4       VP                  4       p\        P                  ! V4      pV P                  WR4       Kf  	  R# )r   iè  iL  i@B i¤B Nl                )	ÚlistÚranger   r
   Úint2b128ÚwriteÚgetvalueÚb1282intÚassertEqual)ÚselfÚ	funkylistÚiÚxÚvÚys   &     ÚA/usr/lib/python3/dist-packages/twisted/spread/test/test_banana.pyÚtest_int2b128ÚMathTests.test_int2b128   s“   € ä”�q˜#“ÓÜ”5˜˜tÓ$Ó%õ&ä”5˜ 'Ó*Ó+õ,ð ˆjõð 	ó ˆAÜ“	ˆAÜ�OŠO˜AŸw™wÔ'Ø—
‘
“ˆAÜ—’ Ó"ˆAØ×Ñ˜QÖ"ó ó    © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r      s   ø‡ € ÷#ð #r   r   c                ó*   € V P                   ! V4       R# )zÈ
Dictate a Banana dialect to use.

@param protocol: A L{banana.Banana} instance which has not yet had a
    dialect negotiated.

@param dialect: A L{bytes} instance naming a Banana dialect to select.
N)Ú_selectDialect)r   Údialects   &&r   ÚselectDialectr,   #   s   € ð ×Ò˜GÖ$r   c                ó¬   € \        4       pV ! 4       pVP                  ! V4       VP                  4        VP                  ! V4       VP	                  4       # )a‹  
Banana encode an object using L{banana.Banana.sendEncoded}.

@param bananaFactory: A no-argument callable which will return a new,
    unconnected protocol instance to use to do the encoding (this should
    most likely be a L{banana.Banana} instance).

@param obj: The object to encode.
@type obj: Any type supported by Banana.

@return: A L{bytes} instance giving the encoded form of C{obj}.
)r   ÚmakeConnectionÚclearÚsendEncodedÚvalue)ÚbananaFactoryÚobjÚ	transportr
   s   &&  r   Úencoder5   2   sF   € ô  Ó!€IÙ‹_€FØ
×Ò˜)Ô$Ø‡O�OÔà
×Ò�sÔØ�?‰?ÓÐr   c                   óN   a € ] tR t^Ht o Rt]P                  tR tR t	R t
RtV tR# )ÚBananaTestBasezb
The base for test classes. It defines commonly used things and sets up a
connection for testing.
c                ó`  € \        4       V n        V P                  4       V n        V P                  P	                  \
        P                  ! V P                  4      4       \        V P                  R 4       V P                  V P                  n	        \        \        V P                  4      V n        R# )s   noneN)r   ÚioÚencClassÚencr.   r   ÚFileWrapperr,   Ú	putResultÚexpressionReceivedr   r5   ©r   s   &r   ÚsetUpÚBananaTestBase.setUpP   si   € Ü“)ˆŒØ—=‘=“?ˆŒØ�‰×Ñ¤× 4Ò 4°T·W±WÓ =Ô>Ü�d—h‘h Ô(Ø&*§n¡nˆ�‰Ô#Üœf d§m¡mÓ4ˆŽr   c                ó   € Wn         R# )zˆ
Store an expression received by C{self.enc}.

@param result: The object that was received.
@type result: Any type supported by Banana.
N)Úresult)r   rC   s   &&r   r=   ÚBananaTestBase.putResultX   s	   € ð Žr   c                ó„   € V P                   P                  \        P                  ! \        P
                  4      4       V = R # ©N)r;   ÚconnectionLostr   ÚFailurer   ÚCONNECTION_DONEr?   s   &r   ÚtearDownÚBananaTestBase.tearDowna   s(   € Ø�‰×Ñ¤§¢´×0DÑ0DÓ EÔFØŠHr   )r;   r5   r9   rC   N)r!   r"   r#   r$   Ú__doc__r
   ÚBananar:   r@   r=   rJ   r%   r&   r'   s   @r   r7   r7   H   s)   ø‡ € ñð
 �}‰}€Hò5ò÷ð r   r7   c                   ó®   a € ] tR t^ft o RtR tR tR tR tR t	R t
R tR	 tR
 tR tR t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# )ÚBananaTestsz
General banana tests.
c                óÈ   € V P                   P                  R 4       V P                   P                  V P                  P	                  4       4       V P
                  R 8X  g   Q hR# )s   helloN)r;   r0   ÚdataReceivedr9   r   rC   r?   s   &r   Útest_stringÚBananaTests.test_stringk   sE   € Ø�‰×Ñ˜XÔ&Ø�‰×Ñ˜dŸg™g×.Ñ.Ó0Ô1Ø�{‰{˜hÔ&Ð&Ò&r   c                ó*   € V P                  RR4       R# )z|
Banana does not support unicode.  ``Banana.sendEncoded`` raises
``BananaError`` if called with an instance of ``unicode``.
Úhellozbuiltins.strN)Ú_unsupportedTypeTestr?   s   &r   Útest_unsupportedUnicodeÚ#BananaTests.test_unsupportedUnicodep   s   € ð
 	×!Ñ! '¨>Ö:r   c                ó2   € V P                  \        R4       R# )z 
Banana does not support arbitrary builtin types like L{type}.
L{banana.Banana.sendEncoded} raises L{banana.BananaError} if called
with an instance of L{type}.
zbuiltins.typeN)rV   Útyper?   s   &r   Útest_unsupportedBuiltinTypeÚ'BananaTests.test_unsupportedBuiltinTypew   s   € ð 	×!Ñ!¤$¨Ö8r   c                óP   € V P                  \        4       \        R,           4       R# )zÆ
Banana does not support arbitrary user-defined types (such as those
defined with the ``class`` statement).  ``Banana.sendEncoded`` raises
``BananaError`` if called with an instance of such a type.
z
.MathTestsN)rV   r   r!   r?   s   &r   Útest_unsupportedUserTypeÚ$BananaTests.test_unsupportedUserType€   s   € ð 	×!Ñ!¤)£+¬x¸,Õ/FÖGr   c                ó®   € V P                  \        P                  V P                  P                  V4      pV P                  RV R2\        V4      4       R# )a³  
Assert that L{banana.Banana.sendEncoded} raises L{banana.BananaError}
if called with the given object.

@param obj: Some object that Banana does not support.
@param name: The name of the type of the object.

@raise: The failure exception is raised if L{Banana.sendEncoded} does
    not raise L{banana.BananaError} or if the message associated with the
    exception is not formatted to include the type of the unsupported
    object.
zBanana cannot send z objectsN)ÚassertRaisesr
   ÚBananaErrorr;   r0   ÚassertInÚstr)r   r3   ÚnameÚexcs   &&& r   rV   Ú BananaTests._unsupportedTypeTestˆ   sD   € ð ×Ñ¤× 2Ñ 2°D·H±H×4HÑ4HÈ#ÓNˆØ�‰Ð+¨D¨6°Ð:¼CÀ»HÖEr   c                ó  € V P                   P                  R4       V P                   P                  V P                  P	                  4       4       V P                  V P                  R4       V P                  V P                  \        4       R# )z·
A positive integer less than 2 ** 32 should round-trip through
banana without changing value and should come out represented
as an C{int} (regardless of the type which was encoded).
i§'  N)	r;   r0   rQ   r9   r   r   rC   ÚassertIsInstanceÚintr?   s   &r   Útest_intÚBananaTests.test_int˜   s]   € ð 	�‰×Ñ˜UÔ#Ø�‰×Ñ˜dŸg™g×.Ñ.Ó0Ô1Ø×Ñ˜Ÿ™ eÔ,Ø×Ñ˜dŸk™k¬3Ö/r   c                óv   € V P                   P                  pV^,          p^V,          ^,
          pV^,           pV# )é   )r;   ÚprefixLimit)r   ÚbytesÚbitsÚlargestÚsmallests   &    r   Ú_getSmallestÚBananaTests._getSmallest£   s7   € à—‘×$Ñ$ˆð �q�yˆà�T•'˜A•+ˆà˜Q•;ˆØˆr   c                ó�   € V P                  4       pV P                  \        P                  V P                  P
                  V4       R# )zb
Test that a long above the implementation-specific limit is rejected
as too large to be encoded.
N)rt   ra   r
   rb   r;   r0   )r   rs   s   & r   Útest_encodeTooLargeLongÚ#BananaTests.test_encodeTooLargeLong¯   s4   € ð
 ×$Ñ$Ó&ˆØ×Ñœ&×,Ñ,¨d¯h©h×.BÑ.BÀHÖMr   c                ó  € V P                  4       pV P                  P                  V P                  P                  ^,          4       V P                  P	                  V4       V P
                  P                  4       pV P
                  P                  ^ 4       V P                  P                  V P                  P                  ^,          4       V P                  \        P                  V P                  P                  V4       R# )zb
Test that a long above the implementation specific limit is rejected
as too large to be decoded.
N)rt   r;   ÚsetPrefixLimitro   r0   r9   r   Útruncatera   r
   rb   rQ   )r   rs   Úencodeds   &  r   Útest_decodeTooLargeLongÚ#BananaTests.test_decodeTooLargeLong·   s¬   € ð
 ×$Ñ$Ó&ˆØ�‰×Ñ §¡× 4Ñ 4°qÕ 8Ô9Ø�‰×Ñ˜XÔ&Ø—'‘'×"Ñ"Ó$ˆØ�‰×Ñ˜ÔØ�‰×Ñ §¡× 4Ñ 4¸Õ 9Ô:à×Ñœ&×,Ñ,¨d¯h©h×.CÑ.CÀWÖMr   c                ó$   € V P                  4       ) # rF   )rt   r?   s   &r   Ú_getLargestÚBananaTests._getLargestÅ   s   € Ø×!Ñ!Ó#Ð#Ð#r   c                ó�   € V P                  4       pV P                  \        P                  V P                  P
                  V4       R# )zk
Test that a negative long below the implementation-specific limit is
rejected as too small to be encoded.
N)r€   ra   r
   rb   r;   r0   )r   rr   s   & r   Útest_encodeTooSmallLongÚ#BananaTests.test_encodeTooSmallLongÈ   s4   € ð
 ×"Ñ"Ó$ˆØ×Ñœ&×,Ñ,¨d¯h©h×.BÑ.BÀGÖLr   c                ó  € V P                  4       pV P                  P                  V P                  P                  ^,          4       V P                  P	                  V4       V P
                  P                  4       pV P
                  P                  ^ 4       V P                  P                  V P                  P                  ^,          4       V P                  \        P                  V P                  P                  V4       R# )zk
Test that a negative long below the implementation specific limit is
rejected as too small to be decoded.
N)r€   r;   rz   ro   r0   r9   r   r{   ra   r
   rb   rQ   )r   rr   r|   s   &  r   Útest_decodeTooSmallLongÚ#BananaTests.test_decodeTooSmallLongÐ   s¬   € ð
 ×"Ñ"Ó$ˆØ�‰×Ñ §¡× 4Ñ 4°qÕ 8Ô9Ø�‰×Ñ˜WÔ%Ø—'‘'×"Ñ"Ó$ˆØ�‰×Ñ˜ÔØ�‰×Ñ §¡× 4Ñ 4¸Õ 9Ô:à×Ñœ&×,Ñ,¨d¯h©h×.CÑ.CÀWÖMr   c                óÚ   € V P                   P                  R 4       V P                   P                  V P                  P	                  4       4       V P                  V P                  R 4       R# )é÷  N©r;   r0   rQ   r9   r   r   rC   r?   s   &r   Útest_integerÚBananaTests.test_integerÞ   sG   € Ø�‰×Ñ˜TÔ"Ø�‰×Ñ˜dŸg™g×.Ñ.Ó0Ô1Ø×Ñ˜Ÿ™ dÖ+r   c                óÚ   € V P                   P                  R4       V P                   P                  V P                  P	                  4       4       V P                  V P                  R4       R# )r‰   Ni	üÿÿrŠ   r?   s   &r   Útest_negativeÚBananaTests.test_negativeã   sG   € Ø�‰×Ñ˜UÔ#Ø�‰×Ñ˜dŸg™g×.Ñ.Ó0Ô1Ø×Ñ˜Ÿ™ eÖ,r   c                óÚ   € V P                   P                  R 4       V P                   P                  V P                  P	                  4       4       V P                  V P                  R 4       R# )g     ¸�@NrŠ   r?   s   &r   Ú
test_floatÚBananaTests.test_floatè   sG   € Ø�‰×Ñ˜VÔ$Ø�‰×Ñ˜dŸg™g×.Ñ.Ó0Ô1Ø×Ñ˜Ÿ™ fÖ-r   c           	     ó  € ^^^^.RR.^RRR^	..^
.. .pV P                   P                  V4       V P                   P                  V P                  P	                  4       4       V P                  V P                  V4       R# )é   ç     €>@çš™™™™D@ó   sixó   sevenó   eightNrŠ   ©r   Úfoos   & r   Ú	test_listÚBananaTests.test_listí   s}   € àØØ�ˆFØ�4ˆLØØ�X ¨!˜}Ð-ØˆDØð	
ˆð 	�‰×Ñ˜SÔ!Ø�‰×Ñ˜dŸg™g×.Ñ.Ó0Ô1Ø×Ñ˜Ÿ™ cÖ*r   c                óp  € ^^^^.RR.^RRR^	..^
.\         P                  ^,          \         P                  ^,          \         P                  R,          .
pV P                  P                  V4       V P	                  V P
                  P                  4       4       V P                  V P                  V4       R# )zR
Test feeding the data byte per byte to the receiver. Normally
data is not split.
r•   r–   r—   r˜   r™   Néþÿÿÿ)	ÚsysÚmaxsizer;   r0   Úfeedr9   r   r   rC   rš   s   & r   Útest_partialÚBananaTests.test_partialü   s˜   € ð ØØ�ˆFØ�4ˆLØØ�X ¨!˜}Ð-ØˆDä�K‰K˜!�OÜ�K‰K˜!�OÜ�K‰K˜"Õð
ˆð 	�‰×Ñ˜SÔ!Ø�	‰	�$—'‘'×"Ñ"Ó$Ô%Ø×Ñ˜Ÿ™ cÖ*r   c                ó`   € \        V4       F  pV P                  P                  V4       K   	  R# )zg
Feed the data byte per byte to the receiver.

@param data: The bytes to deliver.
@type data: L{bytes}
N)r	   r;   rQ   )r   ÚdataÚbytes   && r   r¢   ÚBananaTests.feed  s$   € ô ˜d–OˆDØ�H‰H×!Ñ! $Ö'ó $r   c                ó`   € R pV P                  \        P                  V P                  V4       R# )s   €N©ra   r
   rb   r¢   ©r   r¦   s   & r   Útest_oversizedListÚBananaTests.test_oversizedList  ó#   € Ø*ˆà×Ñœ&×,Ñ,¨d¯i©i¸Ö>r   c                ó`   € R pV P                  \        P                  V P                  V4       R# )s   ‚Nrª   r«   s   & r   Útest_oversizedStringÚ BananaTests.test_oversizedString!  r®   r   c                óz   € R p V P                   P                  V4       R#   \        P                   d     R# i ; i)s       €N)r;   rQ   r
   rb   )r   ÚcrashStrings   & r   Útest_crashStringÚBananaTests.test_crashString&  s6   € Ø1ˆð	à�H‰H×!Ñ! +Ö.øÜ×!Ñ!ô 	Úð	ús   „! ¡:¹:c                óÚ   € V P                   P                  R4       V P                   P                  V P                  P	                  4       4       V P                  V P                  R4       R# )l        Né   €rŠ   r?   s   &r   Útest_crashNegativeLongÚ"BananaTests.test_crashNegativeLong9  sI   € ð 	�‰×Ñ˜[Ô)Ø�‰×Ñ˜dŸg™g×.Ñ.Ó0Ô1Ø×Ñ˜Ÿ™ kÖ2r   c                óx  € RpRpRpV P                  V P                  V^,
          4      RV,           4       V P                  V P                  V^,
          4      RV,           4       V P                  V P                  V^ ,
          4      RV,           4       RpV P                  V P                  V^,           4      RV,           4       V P                  V P                  V^,           4      RV,           4       V P                  V P                  V^,           4      R	V,           4       R
pV P                  V P                  V^,           4      RV,           4       V P                  V P                  V^,           4      RV,           4       V P                  V P                  V^ ,           4      R4       RpV P                  V P                  V^,
          4      RV,           4       V P                  V P                  V^,
          4      R	V,           4       V P                  V P                  V^,
          4      RV,           4       R# )z§
Test that integers below the maximum C{INT} token size cutoff are
serialized as C{INT} or C{NEG} and that larger integers are
serialized as C{LONGINT} or C{LONGNEG}.
iÿÿÿs   �ó   }ó   ~ó   s      …ó    ó   ó   s   ƒs       ƒs      †ó   Nr·   )r   r5   )r   Ú	baseIntInÚ	baseNegInÚ
baseIntOutÚbaseLongIntOutÚ
baseNegOutÚbaseLongNegOuts   &      r   Útest_sizedIntegerTypesÚ"BananaTests.test_sizedIntegerTypesE  s¶  € ð  ˆ	Øˆ	à,ˆ
Ø×Ñ˜Ÿ™ Y°¥]Ó3°W¸zÕ5IÔJØ×Ñ˜Ÿ™ Y°¥]Ó3°W¸zÕ5IÔJØ×Ñ˜Ÿ™ Y°¥]Ó3°W¸zÕ5IÔJà0ˆØ×Ñ˜Ÿ™ Y°¥]Ó3°W¸~Õ5MÔNØ×Ñ˜Ÿ™ Y°¥]Ó3°W¸~Õ5MÔNØ×Ñ˜Ÿ™ Y°¥]Ó3°W¸~Õ5MÔNà,ˆ
Ø×Ñ˜Ÿ™ Y°¥]Ó3°W¸zÕ5IÔJØ×Ñ˜Ÿ™ Y°¥]Ó3°W¸zÕ5IÔJØ×Ñ˜Ÿ™ Y°¥]Ó3Ð5PÔQà0ˆØ×Ñ˜Ÿ™ Y°¥]Ó3°W¸~Õ5MÔNØ×Ñ˜Ÿ™ Y°¥]Ó3°W¸~Õ5MÔNØ×Ñ˜Ÿ™ Y°¥]Ó3°W¸~Õ5MÖNr   r    N)r!   r"   r#   r$   rL   rR   rW   r[   r^   rV   rk   rt   rw   r}   r€   rƒ   r†   r‹   rŽ   r‘   rœ   r£   r¢   r¬   r°   r´   r¸   rÈ   r%   r&   r'   s   @r   rO   rO   f   sŠ   ø‡ € ñò'ò
;ò9òHòFò 	0ò
òNòNò$òMòNò,ò
-ò
.ò
+ò+ò,(ò?ò
?ò
ò&
3÷Oð Or   rO   c                   óÜ   a € ] tR tRt o RtRt]! ]P                  P                  ],          34      ]P                  ,           t]! R
4      ]P                  ,           tR tR tR tR tRtV tR	# )ÚDialectTestsic  z*
Tests for Banana's handling of dialects.
s   remotec                óp   € V P                  \        V P                  P                  V P                  4       R# )zd
If no dialect has been selected and a PB VOCAB item is received,
L{NotImplementedError} is raised.
N)ra   ÚNotImplementedErrorr;   rQ   ÚlegalPbItemr?   s   &r   Útest_dialectNotSetÚDialectTests.test_dialectNotSetl  s'   € ð
 	×ÑÔ-¨t¯x©x×/DÑ/DÀd×FVÑFVÖWr   c                óÈ   € \        V P                  R4       V P                  P                  V P                  4       V P	                  V P
                  V P                  4       R# )zC
If the PB dialect has been selected, a PB VOCAB item is accepted.
ó   pbN)r,   r;   rQ   rÎ   r   rC   Úvocabr?   s   &r   Útest_receivePbÚDialectTests.test_receivePbs  sB   € ô 	�d—h‘h Ô&Ø�‰×Ñ˜d×.Ñ.Ô/Ø×Ñ˜Ÿ™ d§j¡jÖ1r   c                óœ   € \        V P                  R4       V P                  \        V P                  P                  V P
                  4       R# )z†
If the PB dialect has been selected and an unrecognized PB VOCAB item
is received, L{banana.Banana.dataReceived} raises L{KeyError}.
rÒ   N)r,   r;   ra   ÚKeyErrorrQ   ÚillegalPbItemr?   s   &r   Útest_receiveIllegalPbÚ"DialectTests.test_receiveIllegalPb{  s4   € ô
 	�d—h‘h Ô&Ø×Ñœ( D§H¡H×$9Ñ$9¸4×;MÑ;MÖNr   c                óä   € \        V P                  R4       V P                  P                  V P                  4       V P	                  V P
                  V P                  P                  4       4       R# )zT
if pb dialect is selected, the sender must be able to send things in
that dialect.
rÒ   N)r,   r;   r0   rÓ   r   rÎ   r9   r   r?   s   &r   Útest_sendPbÚDialectTests.test_sendPbƒ  sK   € ô
 	�d—h‘h Ô&Ø�‰×Ñ˜TŸZ™ZÔ(Ø×Ñ˜×)Ñ)¨4¯7©7×+;Ñ+;Ó+=Ö>r   r    N)éz   )r!   r"   r#   r$   rL   rÓ   rp   r
   rM   ÚoutgoingVocabularyÚVOCABrÎ   rØ   rÏ   rÔ   rÙ   rÜ   r%   r&   r'   s   @r   rË   rË   c  sc   ø‡ € ñð €EÙ˜Ÿ™×9Ñ9¸%Õ@ÐBÓCÀfÇlÁlÕR€KÙ˜&“M F§L¡LÕ0€MòXò2òO÷?ð ?r   rË   c                   ó*   a € ] tR tRt o RtR tRtV tR# )ÚGlobalCoderTestsi�  zE
Tests for the free functions L{banana.encode} and L{banana.decode}.
c                ó¸   € RpV P                  \        P                  \        P                  V4       RpV P	                  \        P                  ! V4      ^4       R# )z:
Calls to L{banana.decode} are independent of each other.
s   �NsB   …)ra   r
   rb   Údecoder   )r   ÚundecodableÚ	decodables   &  r   Útest_statelessDecodeÚ%GlobalCoderTests.test_statelessDecode’  sE   € ð
 -ˆØ×Ñœ&×,Ñ,¬f¯m©m¸[ÔIð  ˆ	Ø×ÑœŸš yÓ1°1Ö5r   r    N)r!   r"   r#   r$   rL   rç   r%   r&   r'   s   @r   râ   râ   �  s   ø‡ € ñ÷6ð 6r   râ   )r    Ú	functoolsr   r9   r   Útwisted.internetr   r   Útwisted.internet.testingr   Útwisted.pythonr   Útwisted.python.compatr	   Útwisted.spreadr
   Útwisted.trial.unittestr   Ú_maxintr   r,   r5   r7   rO   rË   râ   r    r   r   Ú<module>rñ      ss   ðó
 Ý Ý ç +Ý 4Ý "Ý +Ý !Ý +à
€ô#�ô #ò %òô,�Xô ô<zO�.ô zOôz'?�>ô '?ôT6�xö 6r   