3 SÉLjAVã@s(dZdZddlZddlZddlZddlZddlZddlZddlZddl Z y ddl Z Wne k rpddl Z YnXye Wnek r–dd„Z YnXddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZej �rXe!Z"dd„Z#dd„Z$dd„Z%dd„Z&ej'Z'ej(defdefƒGdd „d e'ƒƒZ)Gd!d"„d"e'ƒZ*Gd#d$„d$e'ƒZ+Gd%d&„d&e'ƒZ,Gd'd(„d(e'ƒZ-e j.ej/ƒd)k�püej0d0kd,ƒGd-d.„d.e'ƒƒZ1e2d/k�r$e j3ƒdS)1aœTests python protocol buffers against the golden message. Note that the golden messages exercise every known field type, thus this test ends up exercising and verifying nearly all of the parsing and serialization code in the whole library. TODO(kenton): Merge with wire_format_test? It doesn't make a whole lot of sense to call this a test of the "message" module, which only declares an abstract interface. z!gps@google.com (Gregory P. Smith)éNcCs||k||kS)N©)ÚxÚyrrú"/usr/lib/python3.6/message_test.pyÚ>sr)Úmap_proto2_unittest_pb2)Úmap_unittest_pb2)Ú unittest_pb2)Úunittest_proto3_arena_pb2)Údescriptor_pb2)Údescriptor_pool)Úmessage_factory)Ú text_format)Úapi_implementation)Úencoder)Úpacked_field_test_pb2)Ú test_util)Útesting_refleaks)Úmessage)Ú_parameterizedcCs||kS)Nr)ÚvalrrrÚisnanVsrcCst|ƒ ot|dƒS)Nr)r)rrrrÚisinfYsrcCst|ƒo|dkS)Nr)r)rrrrÚIsPosInf\srcCst|ƒo|dkS)Nr)r)rrrrÚIsNegInf^srZ_proto2Z_proto3c @s8eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Z d=d>„Z!d?d@„Z"dAdB„Z#dCdD„Z$dEdF„Z%dGdH„Z&dIdJ„Z'dKdL„Z(dMdN„Z)dOdP„Z*dQdR„Z+dSdT„Z,dUdV„Z-dWdX„Z.dYdZ„Z/d[d\„Z0d]d^d_d`dadbe1ƒgie2ƒg Z3dcdd„Z4dedf„Z5dgdh„Z6didj„Z7dkdl„Z8dmdn„Z9dodp„Z:Gdqdr„dre;ƒZdwdx„Z?dydz„Z@d{d|„ZAd}d~„ZBdd€„ZCd�d‚„ZDdƒd„„ZEd…d†„ZFd‡dˆ„ZGd]S)‰Ú MessageTestc CsXtjƒdkr|jdƒtjdƒ}|jtƒ�}|jj|ƒWdQRX|j dt |j ƒƒdS)NÚpythonzŠSkipping testBadUtf8String, currently only the python api implementation raises UnicodeDecodeError when a string field contains bad utf-8.Zbad_utf8_stringzTestAllTypes.optional_string) rÚTypeZskipTestrÚGoldenFileDataÚ assertRaisesÚUnicodeDecodeErrorÚ TestAllTypesÚ FromStringÚassertInÚstrÚ exception)ÚselfÚmessage_moduleZ bad_utf8_dataÚcontextrrrÚtestBadUtf8Stringjs     zMessageTest.testBadUtf8StringcCsr|tkrtjdƒ}n tjdƒ}|jƒ}|j|ƒ|tkrDtj||ƒ|j||jƒƒtj |ƒ}|j||jƒƒdS)NZ golden_message_oneof_implementedZgolden_message_proto3) r rrr!ÚParseFromStringZExpectAllFieldsSetÚ assertEqualÚSerializeToStringÚcopyÚdeepcopy)r&r'Ú golden_dataÚgolden_messageÚ golden_copyrrrÚtestGoldenMessagets    zMessageTest.testGoldenMessagecCshtjdƒ}|jƒ}|j|ƒ|jƒ}tj|ƒ|j||ƒ|j||jƒƒtj|ƒ}|j||jƒƒdS)NÚgolden_packed_fields_message) rrÚTestPackedTypesr*ZSetAllPackedFieldsr+r,r-r.)r&r'r/r0Úall_setr1rrrÚtestGoldenPackedMessage†s     z#MessageTest.testGoldenPackedMessagec Cs¼|jƒ}|jt|jdƒ|jt|jdƒtjddƒ}tjƒdkrv|jt j ƒ�}|j|ƒWdQRX|j dt |j ƒƒnBtjdd��0}tjd ƒ|j|ƒ|j d t |d j ƒƒWdQRXdS) NrÚ0éérzUnexpected end-group tag.T)ÚrecordÚalwaysz4Unexpected end-group tag: Not all data was convertedéÿÿÿÿ)r!rÚ TypeErrorr"Ú ExceptionrZTagBytesrrrÚ DecodeErrorr+r$r%ÚwarningsÚcatch_warningsÚ simplefilter)r&r'ÚmsgZend_tagr(ÚwrrrÚtestParseErrors‘s    zMessageTest.testParseErrorsc s¨d}|jƒ}|jjddddgƒ|j||jdd�ƒ|j||jdd�ƒ|j||jdd�ƒGd d „d tƒ‰G‡fd d „d tƒ}|jˆƒ�|j|ƒd�WdQRXdS) Ns5â One stringâ Two stringâ Red stringâ Blue stringz One stringz Two stringz Red stringz Blue string)Ú deterministicFTc@s eZdZdS)z:MessageTest.testDeterminismParameters..BadArgErrorN)Ú__name__Ú __module__Ú __qualname__rrrrÚ BadArgError¼srJcs$eZdZ‡fdd„Z‡fdd„ZdS)z5MessageTest.testDeterminismParameters..BadArgcs ˆƒ‚dS)Nr)r&)rJrrÚ __nonzero__ÁszAMessageTest.testDeterminismParameters..BadArg.__nonzero__cs ˆƒ‚dS)Nr)r&)rJrrÚ__bool__Äsz>MessageTest.testDeterminismParameters..BadArg.__bool__N)rGrHrIrKrLr)rJrrÚBadArg¿s rM)r!Úrepeated_stringÚextendr+r,r>Úobjectr)r&r'r/r0rMr)rJrÚtestDeterminismParameters¦s" z%MessageTest.testDeterminismParameterscCs@tjdƒ}|jƒ}|j|ƒtj|ƒ}tj|ƒ}|j||ƒdS)Nr0)rrr!r*ÚpickleÚdumpsÚloadsr+)r&r'r/r0Úpickled_messageÚunpickled_messagerrrÚtestPickleSupportÊs     zMessageTest.testPickleSupportcCs€|tkrd}nd}|jƒ}|j|ƒ|jt|jƒƒ|jt|jƒƒ|jt|jdƒƒ|jt|jdƒƒ|j ||j ƒƒdS)Ns]€aðÍ€Ñðs ]€aðÊ€Òðr) r r!r*Ú assertTruerÚoptional_floatÚoptional_doubleÚrepeated_floatÚrepeated_doubler+r,)r&r'r/r0rrrÚtestPositiveInfinityÓs z MessageTest.testPositiveInfinitycCs€|tkrd}nd}|jƒ}|j|ƒ|jt|jƒƒ|jt|jƒƒ|jt|jdƒƒ|jt|jdƒƒ|j ||j ƒƒdS)Ns]€ÿaðÿÍ€ÿÑðÿs ]€ÿaðÿÊ€ÿÒðÿr) r r!r*rXrrYrZr[r\r+r,)r&r'r/r0rrrÚtestNegativeInfinityçs z MessageTest.testNegativeInfinitycCsÄd}|jƒ}|j|ƒ|jt|jƒƒ|jt|jƒƒ|jt|jdƒƒ|jt|jdƒƒ|jƒ}|jƒ}|j|ƒ|jt|jƒƒ|jt|jƒƒ|jt|jdƒƒ|jt|jdƒƒdS)Ns]ÀaøÍÀÑør) r!r*rXrrYrZr[r\r,)r&r'r/r0Ú serializedrrrrÚtestNotANumberûs  zMessageTest.testNotANumbercCsRd}|jƒ}|j|ƒ|jt|jdƒƒ|jt|jdƒƒ|j||jƒƒdS)Ns¢€ªðr)r4r*rXrÚ packed_floatÚ packed_doubler+r,)r&r'r/r0rrrÚtestPositiveInfinityPackeds  z&MessageTest.testPositiveInfinityPackedcCsRd}|jƒ}|j|ƒ|jt|jdƒƒ|jt|jdƒƒ|j||jƒƒdS)Ns¢€ÿªðÿr)r4r*rXrrarbr+r,)r&r'r/r0rrrÚtestNegativeInfinityPackeds  z&MessageTest.testNegativeInfinityPackedcCs„d}|jƒ}|j|ƒ|jt|jdƒƒ|jt|jdƒƒ|jƒ}|jƒ}|j|ƒ|jt|jdƒƒ|jt|jdƒƒdS)Ns¢Àªør)r4r*rXrrarbr,)r&r'r/r0r_rrrrÚtestNotANumberPacked%s  z MessageTest.testNotANumberPackedcCst|jƒ}tjddƒ}||_|j|jƒƒ|j|j|kƒdtjddƒ}||_|j|jƒƒ|j|j|kƒ| |_|j|jƒƒ|j|j| kƒ| |_|j|jƒƒ|j|j| kƒtjddƒ}||_|j|jƒƒ|j|j|kƒdtjddƒ}||_|j|jƒƒ|j|j|kƒ| |_|j|jƒƒ|j|j| kƒ| |_|j|jƒƒ|j|j| kƒdS)Néégø?i�ÿÿÿi�ÿÿÿ)r!ÚmathÚpowrYr*r,rX)r&r'rÚkMostPosExponentNoSigBitsÚkMostPosExponentOneSigBitÚkMostNegExponentNoSigBitsÚkMostNegExponentOneSigBitrrrÚtestExtremeFloatValues3s:  z"MessageTest.testExtremeFloatValuescCst|jƒ}tjddƒ}||_|j|jƒƒ|j|j|kƒdtjddƒ}||_|j|jƒƒ|j|j|kƒ| |_|j|jƒƒ|j|j| kƒ| |_|j|jƒƒ|j|j| kƒtjddƒ}||_|j|jƒƒ|j|j|kƒdtjddƒ}||_|j|jƒƒ|j|j|kƒ| |_|j|jƒƒ|j|j| kƒ| |_|j|jƒƒ|j|j| kƒdS)Nrfiÿgø?iüÿÿiüÿÿ)r!rhrirZr*r,rX)r&r'rrjrkrlrmrrrÚtestExtremeDoubleValues`s:  z#MessageTest.testExtremeDoubleValuescCs"|jƒ}d|_|jt|ƒdƒdS)Ng@zoptional_float: 2.0 )r!rYr+r$)r&r'rrrrÚtestFloatPrinting�szMessageTest.testFloatPrintingcCs>|jƒ}d|_tjdkr*|jt|ƒdƒn|jt|ƒdƒdS)Ng^!Á7Ýš¿?éz%optional_double: 0.12345678912345678 z optional_double: 0.123456789123 )rq)r!rZÚsysÚ version_infor+r$)r&r'rrrrÚtestHighPrecisionFloatPrinting’s  z*MessageTest.testHighPrecisionFloatPrintingcCs<|jƒ}tj|ƒ|jƒ}|j|jƒƒ|jt|ƒdƒdS)NÚ)r!rZSetAllNonLazyFieldsZTestEmptyMessager*r,r+r$)r&r'Z populatedÚemptyrrrÚtestUnknownFieldPrintingšs  z$MessageTest.testUnknownFieldPrintingcCs²|jƒ}|jjdd�|jjdd�|jjdd�|jjdd�|jddddgdd„|jDƒƒ|jddddgdd„t|jƒDƒƒ|jddddgd d„|jddd …DƒƒdS) Nr8)Úbbrfrqr9cSsg|] }|j‘qSr)rx)Ú.0Úmrrrú ©sz@MessageTest.testRepeatedNestedFieldIteration..cSsg|] }|j‘qSr)rx)ryrzrrrr{«scSsg|] }|j‘qSr)rx)ryrzrrrr{­sr<)r!Úrepeated_nested_messageÚaddr+Úreversed)r&r'rCrrrÚ testRepeatedNestedFieldIteration¡sz,MessageTest.testRepeatedNestedFieldIterationcCsð|jƒ}|jjdƒ|jjdƒ|jjdƒ|jjƒ|j|jddƒ|j|jddƒ|j|jddƒ|jt|jƒtdddgƒƒ|jjdƒ|jjdƒ|jjdƒ|jjƒ|j|jddƒ|j|jddƒ|j|jddƒ|jjdƒ|jjd ƒ|jjd ƒ|jjƒ|j|jddƒ|j|jdd ƒ|j|jdd ƒ|jt|jƒtdd d gƒƒ|j jd ƒ|j jd ƒ|j jd ƒ|j jƒ|j|j dd ƒ|j|j dd ƒ|j|j dd ƒ|jt|j ƒtd d d gƒƒdS)z7Check some different types with the default comparator.r8rqrfrgš™™™™™ñ?gÍÌÌÌÌÌô?g333333ó?ÚaÚcÚbóaócóbN) r!Úrepeated_int32ÚappendÚsortr+r$r[ÚassertAlmostEqualrNZrepeated_bytes)r&r'rrrrÚ0testSortingRepeatedScalarFieldsDefaultComparator¯s@                zMessageTest.testSortingRepeatedCompositeFieldsCustomComparatorcCsØ|jƒ}d|jjƒ_d|jjƒ_d|jjƒ_d|jjƒ_d|jjƒ_d|jjƒ_d|jjƒ_|jjdd „d �|jdddddddgd d „|jDƒƒ|jƒ}|jƒ|j|ƒ|jdddddddgd d „|jDƒƒdS)zECheck passing a custom comparator to sort a repeated composite field.ééé é!é éé cSs |jdS)Nr�)rx)Úzrrrr szFMessageTest.testSortingRepeatedCompositeFieldsStable..)r‹cSsg|] }|j‘qSr)rx)ryÚnrrrr{ szHMessageTest.testSortingRepeatedCompositeFieldsStable..cSsg|] }|j‘qSr)rx)ryrŸrrrr{sN) r!r|r}rxrˆr+r,ÚClearZMergeFromString)r&r'rÚpbrrrÚ(testSortingRepeatedCompositeFieldsStableÿs$        z4MessageTest.testSortingRepeatedCompositeFieldsStablecCs@|jƒ}tjdƒ}dd„}d|jjƒ_d|jjƒ_d|jjƒ_d|jjƒ_d|jjƒ_d |jjƒ_|jj|d �|jd d „|jDƒdddd ddgƒ|jj|d d�|jdd „|jDƒddd dddgƒtj dkrÖdS|jj|d�|jdd „|jDƒdddd ddgƒ|jj|d d�|jdd „|jDƒddd dddgƒdS)zECheck sorting a repeated composite field using list.sort() arguments.rxcSst|j|jƒS)N)Úcmprx)r€r‚rrrrszEMessageTest.testRepeatedCompositeFieldSortArguments..r8rqrfr’r“r9)r‹cSsg|] }|j‘qSr)rx)ryÚkrrrr{%szGMessageTest.testRepeatedCompositeFieldSortArguments..T)r‹ÚreversecSsg|] }|j‘qSr)rx)ryr¤rrrr{(sN)Ú sort_functioncSsg|] }|j‘qSr)rx)ryr¤rrrr{,s)r£r¥cSsg|] }|j‘qSr)rx)ryr¤rrrr{/s)rq) r!r”r•r|r}rxrˆr+rrrs)r&r'rZget_bbZcmp_bbrrrÚ'testRepeatedCompositeFieldSortArgumentss.        z3MessageTest.testRepeatedCompositeFieldSortArgumentscCs²|jƒ}|jjdƒ|jjdƒ|jjdƒ|jjtd�|jt|jƒdddgƒ|jjtdd�|jt|jƒdddgƒtjdkrÚdd„}|jj|d �|jt|jƒdddgƒ|jj|dd �|jt|jƒdddgƒ|j jd ƒ|j jd ƒ|j jd ƒ|j jt d�|jt|j ƒd d d gƒ|j jt dd�|jt|j ƒd d d gƒtjd k�r®dd„}|j j|d �|jt|j ƒd d d gƒ|j j|dd �|jt|j ƒd d d gƒdS)!z9Check sorting a scalar field using list.sort() arguments.rqrfr8)r‹T)r‹r¥cSstt|ƒt|ƒƒS)N)r£r�)r€r‚rrrr>szBMessageTest.testRepeatedScalarFieldSortArguments..)r¦)r£r¥rŒrxr�cSstt|ƒt|ƒƒS)N)r£r�)r€r‚rrrrLsNr�rŽr<r<rŽr�r�rŽr<)rqr<rŽr�r�rŽr<)rq) r!r†r‡rˆr�r+ÚlistrrrsrNr�)r&r'rZabs_cmpZlen_cmprrrÚ$testRepeatedScalarFieldSortArguments2s6        z0MessageTest.testRepeatedScalarFieldSortArgumentsc CsJ|jƒ}|jƒ}|jjdƒ|jjdƒ|jjdƒ|jjdƒ|jjdƒ|jjdƒd|jjƒ_d|jjƒ_d|jjƒ_d|jjƒ_d|jjƒ_d|jjƒ_tjdkr®dS||k}|j|jk}|jt ||ƒdƒ|jt |j|jƒdƒ|jt |jdddgƒdƒ|jt |j|jƒdƒ|j t ƒ�t |j|jdd…ƒWdQRXdS)Nrr8rfrq)rq) r!r†r‡r|r}rxrrrsr+r£rr=)r&r'Úm1Úm2Ú_rrrÚtestRepeatedFieldsComparableRs2                 z(MessageTest.testRepeatedFieldsComparablecCs,|jƒ}|j|jtjƒ|j|jtjƒdS)N)r!ÚassertIsInstancer†Ú collectionsÚMutableSequencer|)r&r'rzrrrÚtestRepeatedFieldsAreSequencesusz*MessageTest.testRepeatedFieldsAreSequencescCsL|jƒ}|jtƒ�t|jƒWdQRX|jtƒ�t|jƒWdQRXdS)N)r!rr=Úhashr†r|)r&r'rzrrrÚtestRepeatedFieldsNotHashable{s   z)MessageTest.testRepeatedFieldsNotHashablecCs*|jƒ}|jjjgƒ|j|jdƒƒdS)NÚpayload)ÚNestedTestAllTypesr´r†rOrXÚHasField)r&r'rzrrrÚ$testRepeatedFieldInsideNestedMessage‚sz0MessageTest.testRepeatedFieldInsideNestedMessagecCst||ƒ|j|j|ƒƒdS)zÃMake sure that a nested message object exists. As soon as a nested message attribute is accessed, it will be present in the _fields dict, without being marked as actually being set. N)ÚgetattrÚ assertFalser¶)r&rCZ attributerrrÚensureNestedMessageExists‡s z%MessageTest.ensureNestedMessageExistscCs,|jƒ}|jt|jdƒ|jt|jdƒdS)NZno_such_oneof_fieldr)r!rÚ ValueErrorÚ WhichOneofr>)r&r'rzrrrÚ testOneofGetCaseNonexistingField�sz,MessageTest.testOneofGetCaseNonexistingFieldcCsž|jƒ}|jd|jdƒƒ|j|jdƒƒd|_|jd|jdƒƒ|j|jdƒƒ|j|jdƒƒd|_|jd|jdƒƒ|j|jdƒƒ|j|jdƒƒdS)NÚ oneof_fieldÚ oneof_uint32rÚ oneof_stringru) r!ÚassertIsr¼r¹r¶r¿r+rXrÀ)r&r'rzrrrÚtestOneofDefaultValues•sz"MessageTest.testOneofDefaultValuescCsb|jƒ}|jd|jdƒƒd|_|jd|jdƒƒ|j|jdƒƒd|_|jd|jdƒƒ|j|jdƒƒ|j|jdƒƒ|j |jd|jdƒƒ|j|jdƒƒ|j|jdƒƒ|j j |jd|jdƒƒ|j|jdƒƒ|j|jdƒƒd|j _ |jd|jdƒƒ|j|jdƒƒ|j|jdƒƒd|_ |jd|jdƒƒ|j|jdƒƒ|j|jdƒƒdS) Nr¾r›r¿ÚfoorÀÚoneof_nested_messagesbbÚ oneof_bytes) r!rÁr¼r¿r+rXr¶rÀr¹rÄrxrÅ)r&r'rzrrrÚtestOneofSemantics¥s2zMessageTest.testOneofSemanticscCs>|jƒ}d|_|j|dƒ|jd|jdƒƒ|jd|jƒdS)Nr›rÄr¿r¾)r!r¿rºr+r¼)r&r'rzrrrÚ!testOneofCompositeFieldReadAccessÈs  z-MessageTest.testOneofCompositeFieldReadAccesscCs²|jƒ}|jd|jdƒƒ|tkr2|j|jdƒƒd|_|jd|jdƒƒ|tkrb|j|jdƒƒd|_ |jd|jdƒƒ|j dƒ|jd|jdƒƒ|tkr®|j|jdƒƒdS)Nr¾r›r¿sbbrÅ) r!rÁr¼r r¹r¶r¿r+rXrÅÚ ClearField)r&r'rzrrrÚtestOneofWhichOneofÐs zMessageTest.testOneofWhichOneofcCsV|jƒ}d|_|jdƒ|tkr0|j|jdƒƒ|j|jdƒƒ|jd|jdƒƒdS)Nr›r¾r¿)r!r¿rÈr r¹r¶rÁr¼)r&r'rzrrrÚtestOneofClearFieldãs zMessageTest.testOneofClearFieldcCsV|jƒ}d|_|jdƒ|tkr0|j|jdƒƒ|j|jdƒƒ|jd|jdƒƒdS)Nr›r¿r¾)r!r¿rÈr r¹r¶rÁr¼)r&r'rzrrrÚtestOneofClearSetFieldìs z"MessageTest.testOneofClearSetFieldcCsp|jƒ}d|_|j|dƒ|jdƒ|jd|jƒ|tkrJ|j|jdƒƒ|j|jdƒƒ|jd|jdƒƒdS)Nr›rÄr¾r¿) r!r¿rºrÈr+r rXr¶r¼)r&r'rzrrrÚtestOneofClearUnsetFieldõs  z$MessageTest.testOneofClearUnsetFieldcCs:|jƒ}d|_|jƒ}|j|jƒƒ|jd|jdƒƒdS)Nr›r¿r¾)r!r¿r*r,r+r¼)r&r'rzr«rrrÚtestOneofDeserializes z MessageTest.testOneofDeserializecCs6|jƒ}d|_|jƒ}|j|ƒ|jd|jdƒƒdS)Nr›r¿r¾)r!r¿ÚCopyFromr+r¼)r&r'rzr«rrrÚtestOneofCopyFroms  zMessageTest.testOneofCopyFromcCsb|jƒ}d|j_|jƒ}d|j_d|jj_|j|ƒ|jd|jjdƒƒ|jd|jjjdƒƒdS)Nr›sbbr¿r¾rÅ)rµr´r¿rÅÚchildÚ MergeFromr+r¼)r&r'rzr«rrrÚtestOneofNestedMergeFroms  z$MessageTest.testOneofNestedMergeFromcCsf|jƒ}d|jj_d|jjj_|jƒ}d|j_|j|ƒ|jd|jjdƒƒ|jd|jjjdƒƒdS)Nr›é r™rÄr¾) rµr´rÄrxrÐr¿rÑr+r¼)r&r'rzr«rrrÚtestOneofMessageMergeFroms   z%MessageTest.testOneofMessageMergeFromcCs(|j|jjƒd�}|jd|jdƒƒdS)N)rÄrÄr¾)r!Ú NestedMessager+r¼)r&r'rzrrrÚtestOneofNestedMessageInit$sz&MessageTest.testOneofNestedMessageInitcCsB|jƒ}d|_|jƒ|j|jdƒƒd|_|jd|jdƒƒdS)Nr›r¾sbbrÅ)r!r¿r Ú assertIsNoner¼rÅr+)r&r'rzrrrÚtestOneofClear)s zMessageTest.testOneofClearcCs&|jƒ}tdƒ|_|j|jtjƒdS)zmAssigning a byte string to a string field should result in the value being converted to a Unicode string.ruN)r!r$Úoptional_stringr®ÚsixÚ text_type)r&r'rzrrrÚ"testAssignByteStringToUnicodeField1s z.MessageTest.testAssignByteStringToUnicodeFieldcCsˆ|jƒ}|jjdƒ|jtdƒtt|jƒƒ…}|jt|jƒt|ƒƒd|jjƒ_|jtdƒtt|jƒƒ…}|jt|jƒt|ƒƒdS)z|It should be possible to use long-valued indicies in slices This didn't used to work in the v2 C++ implementation. r8rrqN) r!r†r‡Úlongr�r+r|r}rx)r&r'rzZslrrrÚtestLongValuedSlice8s  zMessageTest.testLongValuedSlicecCsl|jƒ}|jtƒ� }|jjdd„tdƒDƒƒWdQRX|jtƒ� }|jjdd„tdƒDƒƒWdQRXdS)z5This didn't use to work in the v2 C++ implementation.css|] }tVqdS)N)r€)ryÚirrrú MszCMessageTest.testExtendShouldNotSwallowExceptions..r�Ncss|] }tVqdS)N)r€)ryrßrrrràPs)r!rÚ NameErrorr†rOÚrangeÚrepeated_nested_enum)r&r'rzr¬rrrÚ$testExtendShouldNotSwallowExceptionsIs  $ z0MessageTest.testExtendShouldNotSwallowExceptionsNFrgórucCs^|jƒ}|jg|jƒx(tjD]}|jj|ƒ|jg|jƒqW|jjgƒ|jg|jƒdS)z,Test no-ops extending repeated int32 fields.N)r!ÚassertSequenceEqualr†rÚ FALSY_VALUESrO)r&r'rzÚ falsy_valuerrrÚtestExtendInt32WithNothingTs   z&MessageTest.testExtendInt32WithNothingcCs^|jƒ}|jg|jƒx(tjD]}|jj|ƒ|jg|jƒqW|jjgƒ|jg|jƒdS)z,Test no-ops extending repeated float fields.N)r!rær[rrçrO)r&r'rzrèrrrÚtestExtendFloatWithNothingas   z&MessageTest.testExtendFloatWithNothingcCs^|jƒ}|jg|jƒx(tjD]}|jj|ƒ|jg|jƒqW|jjgƒ|jg|jƒdS)z-Test no-ops extending repeated string fields.N)r!rærNrrçrO)r&r'rzrèrrrÚtestExtendStringWithNothingns   z'MessageTest.testExtendStringWithNothingcCs„|jƒ}|jg|jƒ|jjdgƒ|jdg|jƒ|jjddgƒ|jdddg|jƒ|jjddgƒ|jdddddg|jƒdS)z7Test extending repeated int32 fields with python lists.rr8rfrqr9N)r!rær†rO)r&r'rzrrrÚtestExtendInt32WithPythonList{sz)MessageTest.testExtendInt32WithPythonListcCs„|jƒ}|jg|jƒ|jjdgƒ|jdg|jƒ|jjddgƒ|jdddg|jƒ|jjddgƒ|jdddddg|jƒdS)z7Test extending repeated float fields with python lists.ggð?g@g@g@N)r!rær[rO)r&r'rzrrrÚtestExtendFloatWithPythonList†sz)MessageTest.testExtendFloatWithPythonListcCs„|jƒ}|jg|jƒ|jjdgƒ|jdg|jƒ|jjddgƒ|jdddg|jƒ|jjddgƒ|jdddddg|jƒdS)z8Test extending repeated string fields with python lists.ruZ11Z22Z33Z44N)r!rærNrO)r&r'rzrrrÚtestExtendStringWithPythonList‘sz*MessageTest.testExtendStringWithPythonListcCs:|jƒ}|jg|jƒ|jjdƒ|jdddg|jƒdS)zDTest extending repeated string fields with characters from a string.Úabcr€r‚r�N)r!rærNrO)r&r'rzrrrÚtestExtendStringWithStringœs z&MessageTest.testExtendStringWithStringc@s2eZdZdZd dd„Zdd„Zdd„Zd d „ZdS) zMessageTest.TestIterablez�This iterable object mimics the behavior of numpy.array. __nonzero__ fails for length > 1, and returns bool(item[0]) for length == 1. NcCs|pg|_dS)N)Ú_list)r&ÚvaluesrrrÚ__init__ªsz!MessageTest.TestIterable.__init__cCs8t|jƒ}|dkrdS|dkr,t|jdƒStdƒ‚dS)NrFr8zTruth value is ambiguous.)r�rñÚboolr»)r&ÚsizerrrrK­s  z$MessageTest.TestIterable.__nonzero__cCs t|jƒS)N)r�rñ)r&rrrÚ__len__µsz MessageTest.TestIterable.__len__cCs |jjƒS)N)rñÚ__iter__)r&rrrr÷¸sz!MessageTest.TestIterable.__iter__)N)rGrHrIÚ__doc__rórKrör÷rrrrÚ TestIterable£s  rùcCs¶|jƒ}|jg|jƒ|jjtjgƒƒ|jg|jƒ|jjtjdgƒƒ|jdg|jƒ|jjtjddgƒƒ|jdddg|jƒ|jjtjddgƒƒ|jdddddg|jƒdS)z3Test extending repeated int32 fields with iterable.rr8rfrqr9N)r!rær†rOrrù)r&r'rzrrrÚtestExtendInt32WithIterable»sz'MessageTest.testExtendInt32WithIterablecCs¶|jƒ}|jg|jƒ|jjtjgƒƒ|jg|jƒ|jjtjdgƒƒ|jdg|jƒ|jjtjddgƒƒ|jdddg|jƒ|jjtjddgƒƒ|jdddddg|jƒdS)z3Test extending repeated float fields with iterable.ggð?g@g@g@N)r!rær[rOrrù)r&r'rzrrrÚtestExtendFloatWithIterableÈsz'MessageTest.testExtendFloatWithIterablecCs¶|jƒ}|jg|jƒ|jjtjgƒƒ|jg|jƒ|jjtjdgƒƒ|jdg|jƒ|jjtjddgƒƒ|jdddg|jƒ|jjtjddgƒƒ|jdddddg|jƒdS)z4Test extending repeated string fields with iterable.ruÚ1Ú2Ú3Ú4N)r!rærNrOrrù)r&r'rzrrrÚtestExtendStringWithIterableÕsz(MessageTest.testExtendStringWithIterablec CsPtjƒdkstjƒdkrdS|jƒ}|jtjƒ�}tj|jtj ƒWdQRXdS)NÚcpprf) rrZVersionr!rrRZ PickleErrorrSr†ZHIGHEST_PROTOCOL)r&r'rzr¬rrrÚ!testPickleRepeatedScalarContainerâs   z-MessageTest.testPickleRepeatedScalarContainercCs|jƒ}|jjƒdS)z?Exercise a scenario that has led to segfaults in the past. N)r!r|rˆ)r&r'rzrrrÚ'testSortEmptyRepeatedCompositeContainerðsz3MessageTest.testSortEmptyRepeatedCompositeContainerc Cs,|jƒ}|jtƒ�}|jdƒWdQRXdS)zBUsing HasField on a repeated field should raise an exception. r†N)r!rr»r¶)r&r'rzr¬rrrÚtestHasFieldOnRepeatedFieldös z'MessageTest.testHasFieldOnRepeatedFieldc Csˆ|jƒ}|jtƒ�}|jjƒWdQRX|jjtdƒƒ|jd|jjƒƒ|jd|jjdƒƒ|jd|jjdƒƒ|jddg|jƒdS)Nr“r9rrfr8rq)r!rÚ IndexErrorr†ÚpoprOrâr+)r&r'rzr¬rrrÚtestRepeatedScalarFieldPopýs z&MessageTest.testRepeatedScalarFieldPopcCsÌ|jƒ}|jtƒ�}|jjƒWdQRX|jtƒ�}|jjdƒWdQRXx tdƒD]}|jjƒ}||_qTW|j d|jjƒjƒ|j d|jjdƒjƒ|j d|jjdƒjƒ|j ddgdd „|jDƒƒdS) Nr7r“r9rrfr8rqcSsg|] }|j‘qSr)rx)ryrŸrrrr{sz=MessageTest.testRepeatedCompositeFieldPop..) r!rrr|rr=râr}rxr+)r&r'rzr¬rßrŸrrrÚtestRepeatedCompositeFieldPops    z)MessageTest.testRepeatedCompositeFieldPopcCs\|jƒ}x.tdƒD]"}|jj||ƒ|jjƒ}||_qW|j|j|jƒ|j|j|jƒdS)Nr“) r!râr†Úinsertr|r}rxrær+)r&r'rzrßrŸrrrÚtestRepeatedCompareWithSelfs  z'MessageTest.testRepeatedCompareWithSelfcCs6|jƒ}|jjƒ}|j}|jjƒ}|j|jjdƒdS)zwA case that lead to a segfault when a message detached from its parent container has itself a child container. rN)rµZrepeated_childr}rÐr+r´Úoptional_int32)r&r'rzrrrÚtestReleasedNestedMessagess   z&MessageTest.testReleasedNestedMessagescCsz|jƒ}|jtƒ� g|_WdQRX|jjdƒtjƒdkrZ|jtƒ� g|_WdQRXn|jtƒ� g|_WdQRXdS)Nr8r)r!rÚAttributeErrorr†r‡rrr=)r&r'rzrrrÚtestSetRepeatedComposite(s     z$MessageTest.testSetRepeatedComposite)HrGrHrIr)r2r6rErQrWr]r^r`rcrdrernrorprtrwrrŠr‘r–r¢r§r©r­r±r³r·rºr½rÂrÆrÇrÉrÊrËrÌrÍrÏrÒrÔrÖrØrÜrÞräÚ bytearrayÚsetrçrérêrërìrírîrðrPrùrúrûrrrrrrr r rrrrrres„  $   --( # #                  rc@sTeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dS)Ú Proto2TestcCsÊtjƒ}|j|jdƒƒ|j|jdƒƒ|j|jdƒƒ|jtƒ�|jdƒWdQRX|jtƒ�|jdƒWdQRX|jtƒ�|jdƒWdQRX|jd|jƒ|jd|jƒ|jd|j j ƒd|_d|_d|j _ |j |jdƒƒ|j |jdƒƒ|j |jdƒƒd |_d |_d |j _ |j |jdƒƒ|j |jdƒƒ|j |jdƒƒ|j dƒ|j dƒ|j dƒ|j|jdƒƒ|j|jdƒƒ|j|jdƒƒ|jd|jƒ|jd|jƒ|jd|j j ƒdS) Nr Ú optional_boolÚoptional_nested_messageÚfield_doesnt_existr†r|rFr“Té) r r!r¹r¶rr»r+r rrrxrXrÈ)r&rrrrÚtestFieldPresence:sD      zProto2Test.testFieldPresencecCs tjƒ}|jtƒ� }d|_WdQRX|jt|jjdƒ|jjdƒd|jd<|jtƒ�d|jd<WdQRXtjƒ}d|_|jjdƒ|jƒ}tjƒ}|j |ƒ|j |j dƒƒ|j d|jƒ|j dt |jƒƒ|jƒ|j |jƒƒ|j d|jƒ|j d|jdƒdS) z:Assigning an invalid enum number is not allowed in proto2.i‡ÖNrfri@âi±ËtÚoptional_nested_enumr8)r r!rr»rrãr‡r r,r*r¹r¶r+r�r )r&rzr¬r«r_Zm3rrrÚtestAssignInvalidEnumjs*      z Proto2Test.testAssignInvalidEnumc Cs6tjƒ}d|jd<|jtƒ�d|jd<WdQRXdS)Nré{r8)rZ TestEnumMapZknown_map_fieldrr»Zunknown_map_field)r&rzrrrÚtestUnknownEnumMap‰s  zProto2Test.testUnknownEnumMapcCstjƒ}|jtt|dƒdS)NÚ Extensions)r r!rr r¸)r&rCrrrÚtestExtensionsErrors�szProto2Test.testExtensionsErrorscCshtjdƒ}tjƒ}|j|ƒtjƒ}tj|ƒ|j||ƒ|j||jƒƒtj |ƒ}|j||jƒƒdS)Nr0) rrr ZTestAllExtensionsr*ZSetAllExtensionsr+r,r-r.)r&r/r0r5r1rrrÚtestGoldenExtensions“s     zProto2Test.testGoldenExtensionscCshtjdƒ}tjƒ}|j|ƒtjƒ}tj|ƒ|j||ƒ|j||jƒƒtj |ƒ}|j||jƒƒdS)Nr3) rrr ZTestPackedExtensionsr*ZSetAllPackedExtensionsr+r,r-r.)r&r/r0r5r1rrrÚtestGoldenPackedExtensionsžs     z%Proto2Test.testGoldenPackedExtensionscCsNtjdd�}tj|ƒ}tj|ƒ}|j||ƒ|j|jdƒ|jtj |j ƒdS)Nr8)r€) r Z TestRequiredrRrSrTr+r€rrZ EncodeErrorr,)r&r0rUrVrrrÚtestPickleIncompleteProto©s     z$Proto2Test.testPickleIncompleteProtocCsÀtjƒtjƒtjƒg}d|d_d|d_d|d_d|d_tjƒ}d|_d|_d|_tjjƒ}|jj|ƒ|j j|ƒ|j j|ƒ|j j|ƒ|j j|ƒ|j jƒjj|dƒ|j jƒjj|dƒ|j jƒjj|dƒ|jjƒjj|dƒ|jjƒjj|dƒ|jjƒjj|dƒ|jƒ}tjƒ}|j|ƒ|j|j|ƒ|j|j|ƒ|j|jj|ƒ|j|jtjj|ƒ|jt|jƒdƒ|jt|jƒdƒ|jt|jtjjƒdƒdS)zcCheck the merge behavior when a required or optional field appears multiple times in the input.r8rrfrqZhelloN)r r!r Úoptional_int64rÙZTestParsingMergeZRepeatedFieldsGeneratorZfield1rOZfield2Zfield3Zext1Zext2Zgroup1r}rÑZgroup2r,r*r+Zrequired_all_typesZoptional_all_typesÚ optionalgroupZoptional_group_all_typesrZ optional_extr�Zrepeated_all_typesÚ repeatedgroupZ repeated_ext)r&ZmessagesZmerged_messageÚ generatorÚdataZ parsing_mergerrrÚtestParsingMerge·sJ              zProto2Test.testParsingMergecCs`tjddddddiddiid dd idd igd tjjgd dd� }|j|tjƒ|jd|jƒ|jd|jƒ|jd|jƒ|jd|jƒ|jd|j j ƒ|j|j tjj ƒ|jd|j j ƒ|j|jdƒƒ|j|jtjƒƒ|jtjj|jƒ|jdt|jƒƒ|jd |jdj ƒ|jd |jdj ƒ|jdt|jƒƒ|jtjj|jdƒ|jtjj|jdƒ|jd |jƒ|jd|jƒ|j|jdƒƒ|jdt|jƒƒ|jd|jƒtjd d�}|jtjj|jƒ|jtƒ�tjddid�WdQRX|jtƒ�tjddid�WdQRX|jtƒ�tjdd�WdQRX|jtƒ�tjd d�WdQRXdS)NédéÈgÈr@óxr€i�rxiôÚBAZiXi¼ÚFOOi r) r Úoptional_fixed32rYÚoptional_bytesr!rÚoptional_foreign_messagerr"rãÚ default_int32rÀr-rfrr8r é*)rZINVALID_NESTED_FIELDé)rZINVALID_VALUE_TYPEZ INVALID_LABEL)rã) r r!ZBARr®r+r r+rYr,r!r€rrÕrxrXr¶r-ÚForeignMessager)rr�r"rãr*r.rÀr¹r[Z default_int64rr»r=)r&rrrrÚtestPythonicInitèsl              zProto2Test.testPythonicInitN) rGrHrIrrrrrrrr%r2rrrrr8s0  1rc@s eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Z d=d>„Z!d?d@„Z"dAS)BÚ Proto3TestcCs@t|ƒ}x&|D]\}}|j|||ƒ||=qW|ji|ƒdS)N)Údictr+)r&Zmap_iterZ dict_valuer¤ÚvrrrÚassertMapIterEquals+s  zProto3Test.assertMapIterEqualsc4Csötjƒ}|jtƒ�|jdƒWdQRX|jtƒ�|jdƒWdQRX|jtƒ�|jdƒWdQRX|jtƒ�|jdƒWdQRX|j|jdƒƒ|jtƒ�|jdƒWdQRX|jtƒ�|jdƒWdQRX|jtƒ�|jdƒWdQRX|jd |jƒ|jd |jƒ|jd |j ƒ|jd |j ƒ|jd |j j ƒd |j _ |j |jdƒƒd |_d |_d|_ d|_ d|j _ |jdƒ|jdƒ|jdƒ|jdƒ|jdƒ|jd |jƒ|jd |jƒ|jd |j ƒ|jd |j ƒ|jd |j j ƒdS)Nr rYrÙrrrr†r|rruFr“gš™™™™™ñ?rïTr)r r!rr»r¶r¹r+r rYrÙrrrxrXrÈ)r&rrrrr5sL            zProto3Test.testFieldPresencecCs”tjƒ}d|_|jd|jƒ|jjdƒ|jd|jdƒd|jd<|jd|jdƒ|jƒ}tjƒ}|j|ƒ|jd|jƒ|jd|jdƒdS)zCAssigning an unknown enum value is allowed and preserves the value.i‡Öi÷ËTri±ËtN)r r!rr+rãr‡r,r*)r&rzr_r«rrrÚtestAssignUnknownEnumns   z Proto3Test.testAssignUnknownEnumcCsNtjƒ}|jd |jkƒ|jd|jkƒ|jd|jkƒ|jd|jkƒ|jd|jkƒ|jd|jkƒ|jd|j kƒ|jd|j kƒ|jd|j kƒ|j d|jdƒ|j d|jdƒ|j d|jdƒ|j d|jdƒ|j d |jdƒ|j t|jdtƒƒ|j d|jdƒ|j t|jdtƒƒ|j d |j dƒ|j d |j dƒ|j d|j dƒ|j d|jkƒ|j d|jkƒ|j d|jkƒ|j d|jkƒ|j d|jkƒ|j d|jkƒ|j d|j kƒ|j d|j kƒ|j d|j kƒ|j|j dtjƒ|jtƒ�|j dWdQRX|jtƒ�d|j kWdQRXdS)NrrfršFrïéoixrgruråi…ÿÿÿllýÿÿÿli…ÿÿÿllýÿÿÿli…ÿÿÿllýÿÿÿl)rÚTestMapr¹Úmap_int32_int32Úmap_int64_int64Úmap_uint32_uint32Úmap_uint64_uint64Úmap_int32_doubleÚ map_bool_boolÚmap_string_stringZmap_int32_bytesÚmap_int32_enumr+rXÚ isinstanceÚfloatrôr®rÚrÛrr=)r&rCrrrÚtestScalarMapDefaults†sF  z Proto3Test.testScalarMapDefaultscCs&tjƒ}|j|jjdƒƒ|jd|jjddƒƒ|j|jjdƒƒd|jd<|jd|jjdƒƒ|jd|jjdƒƒ|jtƒ�|jjdƒWdQRX|j|jjdƒƒ|jd|jjddƒƒ|jd}|j ||jjdƒƒt j ƒdk�r|jtƒ�|jjdƒWdQRXn|jd|jjdƒƒdS)Nr“r�rrur) rr9r×r:Úgetr+rr=Úmap_int32_foreign_messagerÁrr)r&rCÚsubmsgrrrÚ testMapGet¶s"    zProto3Test.testMapGetc!Cs4tjƒ}|jdt|jƒƒ|jd|jkƒd|jd<d|jd<d|jd<d|jd<d|j d<d |j d <d |j d <d |j d <d|j d<d|j d<|jg|jƒƒ|jd t|j ƒƒ|jtƒ�d |j d<WdQRX|jd t|j ƒƒ|jtƒ�d|j d <WdQRX|jƒ}tjƒ}|j|ƒ|jtƒ�d |j d<WdQRX|jtƒ�d|j d <WdQRX|jd|jdƒ|jd|jdƒ|jd|jdƒ|jd|jd ƒ|jd|j dƒ|jd |j d ƒ|jd |j d ƒ|jd |j d ƒ|jd|j dƒ|jd|j dƒtjƒdk�r0|jdt|jƒƒdS)!Nrr“iÈrrfé"ršg333333ó?gffffff @r8Ú123rïTixrz {-123: -456}i8þÿÿi…ÿÿÿllýÿÿÿllýÿÿÿlli8þÿÿi…ÿÿÿllýÿÿÿllýÿÿÿll)rr9r+r�r:r¹r;r<r=Zmap_int32_floatr>r@r?rAÚFindInitializationErrorsrr=r,r*r‰rrr$)r&rCr_Úmsg2rrrÚ testScalarMapÑsP               zProto3Test.testScalarMapcCs@tjƒ}d|jd<d|jd<|j|jƒdƒ|jd|jƒƒdS)NrrurÓs r )rr9r:r@r+ÚByteSizer,)r&rCrrrÚtestMapEntryAlwaysSerializeds   z'Proto3Test.testMapEntryAlwaysSerializedcCsntjƒ}d}|jdƒ}||j|<t|jjƒƒd\}}|j||ƒ|j||ƒ|j|tj ƒ|j|tj ƒdS)NuሴÚutf8r) rr9Úencoder@r¨Úitemsr+r®rÚrÛ)r&rCZ unicode_objZ bytes_objr‹ÚvaluerrrÚ testStringUnicodeConversionInMaps    z+Proto3Test.testStringUnicodeConversionInMapcCsZtjƒ}|jdt|jƒƒ|jd|jkƒ|jd|jjd ƒ|jdt|jƒƒ|jd|jƒ|jd |jƒ|jdt|jƒƒ|jt ƒ�|jdWdQRX|jt ƒ�|jd|jd<WdQRX|jdt|jƒƒ|j ƒ}tjƒ}|j |ƒ|jdt|jƒƒ|jd|jƒ|jd |jƒ|jdt|jƒƒt jƒdk�rV|jd tt|jƒƒƒdS) Nrr“riÈrfrJiçrri8þÿÿi8þÿÿi8þÿÿ)rr9r+r�rFr¹Z get_or_creater#rr=r»r,r*rrr$)r&rCr_rLrrrÚtestMessageMap&s0     zProto3Test.testMessageMapcCsštjƒ}d|jdj_|jd=d|jdj_|jdt|jƒƒd|jdj_|jdt|jƒƒ|jƒ}tjƒ}|j|ƒddg}x|D] }|j|=q†WdS)Nr8rf) rr9Úmap_int32_all_typesrrxr+r�r,r*)r&rCr_rLÚkeysr‹rrrÚtestNestedMessageMapItemDeleteOs  z)Proto3Test.testNestedMessageMapItemDeletecCsptjƒ}d|jd<|jƒ}d|jd<|j|jƒ|dƒd|jd_|jƒ}d|jd_|j|jƒ|dƒdS)Nr8é€é)rr9r:rNr+rFr�)r&rCrõrrrÚtestMapByteSize`s    zProto3Test.testMapByteSizec Csîtjƒ}d|jd<d|jd<d|jd<d|jd_d |jd _tjƒ}d |jd<d |jd <d|jd _d|jd _|jd }|j|ƒ|jd|jdƒ|jd|jdƒ|jd|jdƒ|jd |jd ƒ|jd|jdjƒ|jd |jd jƒ|j |jd j dƒƒt j ƒdk�r(|jd|jƒi}x.|jD]$}|j ||kƒ|j|j||<�q4W|jdd dœ|ƒ|jd=|j d|jkƒ|jd =|j d |jkƒt j ƒdk�rÌ|j tƒ�|jd=WdQRXn|j tƒ�|jd=WdQRXdS)NrIrÓéNé8ršér“r8r�éÞé7écéXrr˜Údr)r8r_ru)rr9r:r;rFr�rcrÑr+r¹r¶rrrr=ÚKeyError)r&rCrLZ old_map_valueZas_dictr‹rrrÚ testMergeFromlsH              zProto3Test.testMergeFromc Cs.tjƒ}|jtdƒ�|jdƒWdQRXdS)NzWParameter to MergeFrom\(\) must be instance of same class: expected .*TestMap got int\.r8)rr9ÚassertRaisesRegexpr=rÑ)r&rCrrrÚtestMergeFromBadType¨s zProto3Test.testMergeFromBadTypec Cs.tjƒ}|jtdƒ�|jdƒWdQRXdS)Nz[Parameter to [A-Za-z]*From\(\) must be instance of same class: expected .*TestMap got int\.r8)rr9rfr=rÎ)r&rCrrrÚtestCopyFromBadType°s zProto3Test.testCopyFromBadTypecCs¶tjƒ}tdƒ|jtdƒ<td ƒ|jtd ƒ<tdƒ|jtdƒ<td ƒ|jtd ƒ<|jƒ}tjƒ}|j|ƒ|j d|jdƒ|j d|jdƒ|j d|jdƒ|j d|jdƒdS)NiÈrrfrIrši8þÿÿi…ÿÿÿllýÿÿÿllýÿÿÿlli8þÿÿi…ÿÿÿllýÿÿÿllýÿÿÿll) rr9rÝr:r;r<r=r,r*r+)r&rCr_rLrrrÚtestIntegerMapWithLongs¸s z"Proto3Test.testIntegerMapWithLongscCs’tjƒ}d|jjd<|jƒ}tjƒ}|j|ƒ|j||ƒd|jjd<|jƒ}|j|ƒ|j||ƒ|jjjƒ|jƒ}|j|ƒ|j||ƒdS)NiÈriçix)rÚTestMapSubmessageÚtest_mapr:r,r*r+Úclear)r&rCr_rLrrrÚtestMapAssignmentCausesPresenceÈs        z*Proto3Test.testMapAssignmentCausesPresencecCsÎtjƒ}d|jjd_|jƒ}tjƒ}|j|ƒ|j||ƒd|jjd_|jƒ}|j|ƒ|j||ƒ|jjdj|jjdƒ|jƒ}|j|ƒ|j||ƒ|jjj ƒ|jƒ}|j|ƒ|j||ƒdS)Nr“réix) rrjrkrFr�r,r*r+rÑrl)r&rCr_rLrrrÚ-testMapAssignmentCausesPresenceForSubmessagesÞs&         z8Proto3Test.testMapAssignmentCausesPresenceForSubmessagescCs~tjƒ}t|jƒ}t|jƒ}d|jd<d|jd_|jtƒ�x |D]}qDWWdQRX|jtƒ�x |D]}qhWWdQRXdS)NrJrïr“)rr9Úiterr@rFr�rÚ RuntimeError)r&rCZstring_string_iterZint32_foreign_iterr‹rrrÚtestModifyMapWhileIteratingús        z&Proto3Test.testModifyMapWhileIteratingc CsŽtjƒ}|jd}|j||jdƒ|j|tjƒd|_|jƒ}tjƒ}|j |ƒ|j d|jdjƒ|j t ƒ�tjƒ|jd<WdQRXdS)Nr8r“rb) rr9rFrÁr®r r1r�r,r*r+rr»)r&rCrGr_rLrrrÚtestSubmessageMap s   zProto3Test.testSubmessageMapcCs|tjƒ}x |jjƒD]\}}|jdƒqWd|jd<d|jd<d|jd<|jdt|jƒƒddddœ}|j|jjƒ|ƒdS)NFr9rfr’rqé)rfrqr9)rr9r:rRrXr+r�r6)r&rCr¤r5Ú matching_dictrrrÚtestMapIterations    zProto3Test.testMapIterationcstjdk�r tjƒ}d|jd<d|jd<d|jd<d|jd<|j}ˆjdt|ƒƒtjƒ}|j|jƒƒ‡fdd „}||j ƒ|j ƒƒ||j ƒ|j ƒƒ||j ƒ|jƒƒˆjd|jdƒƒˆjd|jd ƒƒˆjd|jdƒƒˆjd |jdƒƒˆjdt|ƒƒ|jƒ\}}ˆjd||ƒˆjdt|ƒƒ|jƒˆjd t|ƒƒˆjtƒ�|jƒWdQRXˆjd |jdƒƒˆjd t|ƒƒ|j|jƒˆjdt|ƒƒˆjtƒ�|j|j|jƒWdQRXˆjtƒ�|jd ƒWdQRXˆjtƒ�|jd d�WdQRXdS)Nrqr9rfr’rtr�r“cs0ˆjt|ƒ|dƒˆjt|ƒ|dd…ƒdS)Nrr8)r+Únextr¨)ÚseqÚiterator)r&rrÚ CheckItems9sz-Proto3Test.testPython2Map..CheckItemsiçrr8rÓ)rS)rq)rrrsrr9r:r+r�r*r,rRZ iteritemsrWZiterkeysròZ itervaluesrErÚpopitemrlrrdÚ setdefaultÚupdater=)r&rCZ map_int32rLrzr‹rSr)r&rÚtestPython2Map-sJ            zProto3Test.testPython2MapcCs^tjƒ}d|jd<d|jd<d|jd<d|jd<d|jd<|jjƒ}|jjƒ}|j||ƒdS)NruÚ local_init_opÚtrainable_variablesÚ variablesÚinit_opÚ summaries)rr9r@rRr+)r&rCZitems1Zitems2rrrÚ testMapItems]s       zProto3Test.testMapItemscCs~d}tjƒ}d|jd<d|jd<d|jd<d|jd <d |jd <d |jd <d |jd<d|jd<d|jd<|j||jdd�ƒdS)Ns�r init_opdr item1er item2fr item3gr item4QQr local_init_opar summarieser trainable_variablesbr variablescr€rr‚r€r�r�rcr‚ÚerƒZitem1ÚfZitem2ÚgZitem3ZQQZitem4T)rF)rr9r@r+r,)r&r/rCrrrÚ!testMapDeterministicSerializationls          z,Proto3Test.testMapDeterministicSerializationcCsNtjƒ}d|jd<d|jd<d|jd<|jjƒ}~ddddœ}|j||ƒdS)Nr9rfr’rqrt)rfrqr9)rr9r:rRr6)r&rCÚitrurrrÚtestMapIterationClearMessage‰s     z'Proto3Test.testMapIterationClearMessagecCsftjdddœd�}|jd|jdƒ|jd|jdƒtjdtjdd�id �}|jd|jdjƒdS) Nrfr9)r8rq)r:r8rqr“)r�)rF)rr9r+r:r r1rFr�)r&rCrrrÚtestMapConstruction—s zProto3Test.testMapConstructioncCs`tjƒ}|j}d|d<d|d<d|d<|jdƒ|jd|jƒƒddddœ}|j|jƒ|ƒdS) Nr9rfr’rqrtr:rå)rfrqr9)rr9r:rÈr+r,r6rR)r&rCZ int32_maprurrrÚtestMapValidAfterFieldCleared s  z(Proto3Test.testMapValidAfterFieldClearedcCsHtjƒ}|j}d|d_|jdƒ|jd|jƒƒ|jd|jƒkƒdS)Nr“rfrFrå) rr9rFr�rÈr+r,rXrW)r&rCZint32_foreign_messagerrrÚ$testMessageMapValidAfterFieldCleared°s   z/Proto3Test.testMessageMapValidAfterFieldClearedcCs|tjƒ}t|jƒ}|jdƒ|jtƒ�x |D]}q.WWdQRXt|jƒ}|jdƒ|jtƒ�x |D]}qfWWdQRXdS)Nr:rF)rr9rpr:rÈrrqrF)r&rCr‰r¬rrrÚ"testMapIterInvalidatedByClearField½s        z-Proto3Test.testMapIterInvalidatedByClearFieldcCs�tjƒ}|jdt|jƒƒd|jd<|jdt|jƒƒ|jtƒ�|jd=WdQRX|jd=|jdt|jƒƒ|jtƒ�|jd=WdQRXdS)Nrr’r9r8rbé )rr9r+r�r:rrdrV)r&rCrrrÚ testMapDeleteÑs   zProto3Test.testMapDeletecCsLtjƒ}|j|jtjƒ|j|jtjƒ|j|jtjƒ|j|jtjƒdS)N)rr9r®r:r¯ÚMappingÚMutableMappingrF)r&rCrrrÚtestMapsAreMappingâs zProto3Test.testMapsAreMappingcCsDtjƒ}d|jd<|j|j|jƒ|j|j|jƒ|j|jdƒdS)NiÈrri8þÿÿi…ÿÿÿ)rr9r:r+rFZassertNotEqual)r&rCrrrÚtestMapsCompareês  zProto3Test.testMapsComparecCs@tjƒ}d|jd<d|jd<d|jd_|jdt|jƒƒƒdS)NrJrïé@é#r“rÃr) rr9r@r:Zmap_string_foreign_messager�r+r�rK)r&rCrrrÚ(testMapFindInitializationErrorsSmokeTestòs    z3Proto3Test.testMapFindInitializationErrorsSmokeTestN)#rGrHrIr6rr7rDrHrMrOrTrUrXr[rergrhrirmrorrrsrvr~r„rˆrŠr‹rŒr�rŽr�r“r”r—rrrrr3(s@ 90=) <0  r3c@seZdZdd„Zdd„ZdS)ÚValidTypeNamesTestcs‚tt|ƒƒjdƒd‰d|d|f}|jt‡fdd„|Dƒƒdˆ|fƒˆjdƒ}|d }dj|dd …ƒ}t||gd �dS) Nú'r8zRepeated%sContainerzRepeated%sFieldContainerc3s|]}ˆj|ƒVqdS)N)Úendswith)ryr5)Útp_namerrràsz:ValidTypeNamesTest.assertImportFromName..z%r does end with any of %rÚ.)Úfromlistr<r<)r$ÚtypeÚsplitrXÚanyÚjoinÚ __import__)r&rCZ base_nameZ valid_namesÚpartsÚ class_nameZ module_namer)r›rÚassertImportFromNameýs  z'ValidTypeNamesTest.assertImportFromNamecCs(tjƒ}|j|jdƒ|j|jdƒdS)NZScalarZ Composite)r r!r¥r†r|)r&r¡rrrÚtestTypeNamesCanBeImported sz-ValidTypeNamesTest.testTypeNamesCanBeImportedN)rGrHrIr¥r¦rrrrr˜ûs r˜c@s$eZdZdd„Zdd„Zdd„ZdS)ÚPackedFieldTestcCs¬|jjdƒ|jjdƒ|jjdƒ|jjdƒ|jjdƒ|jjdƒ|jjdƒ|jjdƒ|j jdƒ|j jdƒ|j jdƒ|j jdƒ|j jdƒ|jjdƒdS)Nr8gð?T)r†r‡Zrepeated_int64Zrepeated_uint32Zrepeated_uint64Zrepeated_sint32Zrepeated_sint64Zrepeated_fixed32Zrepeated_fixed64Zrepeated_sfixed32Zrepeated_sfixed64r[r\Z repeated_boolrã)r&rrrrÚ setMessages             zPackedFieldTest.setMessagecCs*tjƒ}|j|ƒd}|j||jƒƒdS)NsH "*2:BJRZ€?bð?jr)rr4r¨r+r,)r&rr/rrrÚtestPackedFields"s z PackedFieldTest.testPackedFieldscCs*tjƒ}|j|ƒd}|j||jƒƒdS)Ns: (0=AMQ]€?að?hp)rZTestUnpackedTypesr¨r+r,)r&rr/rrrÚtestUnpackedFields5s z"PackedFieldTest.testUnpackedFieldsN)rGrHrIr¨r©rªrrrrr§sr§rrfrnz;explicit tests of the C++ implementation for PY27 and abovec@s0eZdZedd„ƒZdd„Zdd„Zdd„Zd S) ÚOversizeProtosTestcCsFd}tjƒ}tjƒ}tj||ƒ|j|ƒtj|ƒj |j dƒƒ|_ dS)Na¶ name: "f/f.msg2" package: "f" message_type { name: "msg1" field { name: "payload" number: 1 label: LABEL_OPTIONAL type: TYPE_STRING } } message_type { name: "msg2" field { name: "field" number: 1 label: LABEL_OPTIONAL type: TYPE_MESSAGE type_name: "msg1" } } zf.msg2) r ZDescriptorPoolr ZFileDescriptorProtorZParseZAddr ZMessageFactoryZ GetPrototypeZFindMessageTypeByNameÚ proto_cls)ÚclsZ file_descZpoolZdescrrrÚ setUpClassNs   zOversizeProtosTest.setUpClasscCs(|jƒ|_dd|jj_|jjƒ|_dS)Nr�ir•r8iii)r¬ÚpÚfieldr´r,Ú p_serialized)r&rrrÚsetUpqs zOversizeProtosTest.setUpcCsfddlm}|dƒ|jƒ}y|j|jƒWn4tjk r`}z|jt|ƒdƒWYdd}~XnXdS)Nr)ÚSetAllowOversizeProtosFzError parsing message) Úgoogle.protobuf.pyext._messager³r¬r*r±rr?r+r$)r&r³Úqr…rrrÚtestAssertOversizeProtovs z*OversizeProtosTest.testAssertOversizeProtocCsBddlm}|dƒ|jƒ}|j|jƒ|j|jjj|jjƒdS)Nr)r³T) r´r³r¬r*r±r+r¯r°r´)r&r³rµrrrÚtestSucceedOversizeProtos   z+OversizeProtosTest.testSucceedOversizeProtoN)rGrHrIÚ classmethodr®r²r¶r·rrrrr«Is # r«Ú__main__)rfrn)4røÚ __author__r¯r-rhr”rRrÚrrr@Z unittest2ZunittestÚ ImportErrorr£ráZgoogle.protobufrrr r r r r rZgoogle.protobuf.internalrrrrrrrZPY3ÚintrÝrrrrZ BaseTestCaseZNamedParametersrrr3r˜r§ZskipIfrrsr«rGÚmainrrrrÚ)s„                WqX9: