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 ƒƒnftjdd��T}tjd ƒ|j|ƒt|ƒdks¨t‚t|d jtƒs¼t‚|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!rÚ TypeErrorr"Ú ExceptionrZTagBytesrrrÚ DecodeErrorr+r$r%ÚwarningsÚcatch_warningsÚ simplefilterÚlenÚAssertionErrorÚ issubclassÚcategoryÚRuntimeWarning)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¼srOcs$eZdZ‡fdd„Z‡fdd„ZdS)z5MessageTest.testDeterminismParameters..BadArgcs ˆƒ‚dS)Nr)r&)rOrrÚ __nonzero__ÁszAMessageTest.testDeterminismParameters..BadArg.__nonzero__cs ˆƒ‚dS)Nr)r&)rOrrÚ__bool__Äsz>MessageTest.testDeterminismParameters..BadArg.__bool__N)rLrMrNrPrQr)rOrrÚBadArg¿s rR)r!Úrepeated_stringÚextendr+r,r>Úobjectr)r&r'r/r0rRr)rOrÚ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*r]rr^r_r`rar+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*r]rr^r_r`rar,)r&r'r/r0Ú serializedrrrrÚtestNotANumberûs  zMessageTest.testNotANumbercCsRd}|jƒ}|j|ƒ|jt|jdƒƒ|jt|jdƒƒ|j||jƒƒdS)Ns¢€ªðr)r4r*r]rÚ 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*r]rrfrgr+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*r]rrfrgr,)r&r'r/r0rdrrrrÚ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Úpowr^r*r,r])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)Nrkiÿgø?iüÿÿiüÿÿ)r!rmrnr_r*r,r])r&r'rrorprqrrrrrÚtestExtremeDoubleValues`s:  z#MessageTest.testExtremeDoubleValuescCs"|jƒ}d|_|jt|ƒdƒdS)Ng@zoptional_float: 2.0 )r!r^r+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 )rv)r!r_Ú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)Úbbrkrvr9cSsg|] }|j‘qSr)r})Ú.0Úmrrrú ©sz@MessageTest.testRepeatedNestedFieldIteration..cSsg|] }|j‘qSr)r})r~rrrrr€«scSsg|] }|j‘qSr)r})r~rrrrr€­sr<)r!Úrepeated_nested_messageÚaddr+Úreversed)r&r'rHrrrÚ 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.r8rvrkrgš™™™™™ñ?gÍÌÌÌÌÌô?g333333ó?ÚaÚcÚbóaócóbN) r!Úrepeated_int32ÚappendÚsortr+r$r`ÚassertAlmostEqualrSZrepeated_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¡)r})Úzrrrr szFMessageTest.testSortingRepeatedCompositeFieldsStable..)r�cSsg|] }|j‘qSr)r})r~Únrrrr€ szHMessageTest.testSortingRepeatedCompositeFieldsStable..cSsg|] }|j‘qSr)r})r~r£rrrr€sN) r!r�r‚r}r�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.r}cSst|j|jƒS)N)Úcmpr})r…r‡rrrrszEMessageTest.testRepeatedCompositeFieldSortArguments..r8rvrkr–r—r9)r�cSsg|] }|j‘qSr)r})r~Úkrrrr€%szGMessageTest.testRepeatedCompositeFieldSortArguments..T)r�ÚreversecSsg|] }|j‘qSr)r})r~r¨rrrr€(sN)Ú sort_functioncSsg|] }|j‘qSr)r})r~r¨rrrr€,s)r§r©cSsg|] }|j‘qSr)r})r~r¨rrrr€/s)rv) r!r˜r™r�r‚r}r�r+rwrx)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.rvrkr8)r�T)r�r©cSstt|ƒt|ƒƒS)N)r§r”)r…r‡rrrr>szBMessageTest.testRepeatedScalarFieldSortArguments..)rª)r§r©r‘r}r†cSstt|ƒt|ƒƒS)N)r§rC)r…r‡rrrrLsNr’r“r<r<r“r’r’r“r<)rvr<r“r’r’r“r<)rv) r!r‹rŒr�r”r+ÚlistrwrxrSrC)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)Nrr8rkrv)rv) r!r‹rŒr�r‚r}rwrxr+r§rr=)r&r'Úm1Úm2Ú_rrrÚtestRepeatedFieldsComparableRs2                 z(MessageTest.testRepeatedFieldsComparablecCs,|jƒ}|j|jtjƒ|j|jtjƒdS)N)r!ÚassertIsInstancer‹Ú collectionsÚMutableSequencer�)r&r'rrrrÚtestRepeatedFieldsAreSequencesusz*MessageTest.testRepeatedFieldsAreSequencescCsL|jƒ}|jtƒ�t|jƒWdQRX|jtƒ�t|jƒWdQRXdS)N)r!rr=Úhashr‹r�)r&r'rrrrÚtestRepeatedFieldsNotHashable{s   z)MessageTest.testRepeatedFieldsNotHashablecCs*|jƒ}|jjjgƒ|j|jdƒƒdS)NÚpayload)ÚNestedTestAllTypesr¸r‹rTr]ÚHasField)r&r'rrrrÚ$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&rHZ attributerrrÚensureNestedMessageExists‡s z%MessageTest.ensureNestedMessageExistscCs,|jƒ}|jt|jdƒ|jt|jdƒdS)NZno_such_oneof_fieldr)r!rÚ ValueErrorÚ WhichOneofr>)r&r'rrrrÚ 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_stringrz) r!ÚassertIsrÀr½rºrÃr+r]rÄ)r&r'rrrrÚ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+r]rºrÄr½rÈr}rÉ)r&r'rrrrÚtestOneofSemantics¥s2zMessageTest.testOneofSemanticscCs>|jƒ}d|_|j|dƒ|jd|jdƒƒ|jd|jƒdS)NrŸrÈrÃrÂ)r!rÃr¾r+rÀ)r&r'rrrrÚ!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+r]rÉÚ ClearField)r&r'rrrrÚ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'rrrrÚ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'rrrrÚ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 r]rºrÀ)r&r'rrrrÚtestOneofClearUnsetFieldõs  z$MessageTest.testOneofClearUnsetFieldcCs:|jƒ}d|_|jƒ}|j|jƒƒ|jd|jdƒƒdS)NrŸrÃrÂ)r!rÃr*r,r+rÀ)r&r'rr¯rrrÚtestOneofDeserializes z MessageTest.testOneofDeserializecCs6|jƒ}d|_|jƒ}|j|ƒ|jd|jdƒƒdS)NrŸrÃrÂ)r!rÃÚCopyFromr+rÀ)r&r'rr¯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'rr¯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Èr}rÔrÃrÕr+rÀ)r&r'rr¯rrrÚtestOneofMessageMergeFroms   z%MessageTest.testOneofMessageMergeFromcCs(|j|jjƒd�}|jd|jdƒƒdS)N)rÈrÈrÂ)r!Ú NestedMessager+rÀ)r&r'rrrrÚtestOneofNestedMessageInit$sz&MessageTest.testOneofNestedMessageInitcCsB|jƒ}d|_|jƒ|j|jdƒƒd|_|jd|jdƒƒdS)NrŸrÂsbbrÉ)r!rÃr¤Ú assertIsNonerÀrÉr+)r&r'rrrrÚ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.rzN)r!r$Úoptional_stringr²ÚsixÚ text_type)r&r'rrrrÚ"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. r8rrvN) r!r‹rŒÚlongrCr+r�r‚r})r&r'rZslrrrÚ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…)r~Úirrrú MszCMessageTest.testExtendShouldNotSwallowExceptions..r¡Ncss|] }tVqdS)N)r…)r~rãrrrräPs)r!rÚ NameErrorr‹rTÚrangeÚrepeated_nested_enum)r&r'rr°rrrÚ$testExtendShouldNotSwallowExceptionsIs  $ z0MessageTest.testExtendShouldNotSwallowExceptionsNFrgórzcCs^|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_VALUESrT)r&r'rÚ 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ërT)r&r'rrì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êrSrrërT)r&r'rrì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.rr8rkrvr9N)r!rêr‹rT)r&r'rrrrÚ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`rT)r&r'rrrrÚ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.rzZ11Z22Z33Z44N)r!rêrSrT)r&r'rrrrÚ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êrSrT)r&r'rrrrÚ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.)rCrõÚboolr¿)r&ÚsizerrrrP­s  z$MessageTest.TestIterable.__nonzero__cCs t|jƒS)N)rCrõ)r&rrrÚ__len__µsz MessageTest.TestIterable.__len__cCs |jjƒS)N)rõÚ__iter__)r&rrrrû¸sz!MessageTest.TestIterable.__iter__)N)rLrMrNÚ__doc__r÷rPrú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.rr8rkrvr9N)r!rêr‹rTrrý)r&r'rrrrÚ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`rTrrý)r&r'rrrrÚ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.rzÚ1Ú2Ú3Ú4N)r!rêrSrTrrý)r&r'rrrrÚtestExtendStringWithIterableÕsz(MessageTest.testExtendStringWithIterablec CsPtjƒdkstjƒdkrdS|jƒ}|jtjƒ�}tj|jtj ƒWdQRXdS)NÚcpprk) rrZVersionr!rrWZ PickleErrorrXr‹ZHIGHEST_PROTOCOL)r&r'rr°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'rrrrÚ'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'rr°rrrÚtestHasFieldOnRepeatedFieldös z'MessageTest.testHasFieldOnRepeatedFieldc Csˆ|jƒ}|jtƒ�}|jjƒWdQRX|jjtdƒƒ|jd|jjƒƒ|jd|jjdƒƒ|jd|jjdƒƒ|jddg|jƒdS)Nr—r9rrkr8rv)r!rÚ IndexErrorr‹ÚpoprTrær+)r&r'rr°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—r9rrkr8rvcSsg|] }|j‘qSr)r})r~r£rrrr€sz=MessageTest.testRepeatedCompositeFieldPop..) r!rr r�r r=rær‚r}r+)r&r'rr°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‚r}rêr+)r&r'rrã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'rrrrÚ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'rrrrÚtestSetRepeatedComposite(s     z$MessageTest.testSetRepeatedComposite)HrLrMrNr)r2r6rJrVr\rbrcrerhrirjrsrtruryr|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àrârèÚ bytearrayÚsetrërírîrïrðrñròrôrUrýrþrÿrrrrr r rrrrrrrres„  $   --( # #                  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+rrrr}r]rÌ)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‡ÖNrkri@âi±ËtÚoptional_nested_enumr8)r r!rr¿rrçrŒr r,r*r½rºr+rCr¤)r&rr°r¯rdZm3rrrÚtestAssignInvalidEnumjs*      z Proto2Test.testAssignInvalidEnumc Cs6tjƒ}d|jd<|jtƒ�d|jd<WdQRXdS)Nré{r8)rZ TestEnumMapZknown_map_fieldrr¿Zunknown_map_field)r&rrrrÚtestUnknownEnumMap‰s  zProto2Test.testUnknownEnumMapcCstjƒ}|jtt|dƒdS)NÚ Extensions)r r!rrr¼)r&rHrrrÚ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 TestRequiredrWrXrYr+r…rrZ EncodeErrorr,)r&r0rZr[rrrÚ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.r8rrkrvZhelloN)r r!rÚoptional_int64rÝZTestParsingMergeZRepeatedFieldsGeneratorZfield1rTZfield2Zfield3Zext1Zext2Zgroup1r‚rÕZgroup2r,r*r+Zrequired_all_typesZoptional_all_typesÚ optionalgroupZoptional_group_all_typesrZ optional_extrCZrepeated_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�r}iôÚBAZiXi¼ÚFOOi r) rÚoptional_fixed32r^Úoptional_bytesr%rÚoptional_foreign_messagerr&rçÚ default_int32rÄr1rkrr8r$é*)rZINVALID_NESTED_FIELDé)rZINVALID_VALUE_TYPEZ INVALID_LABEL)rç) r r!ZBARr²r+rr/r^r0r%r…rrÙr}r]rºr1ÚForeignMessager-rrCr&rçr.r2rÄr½r`Z default_int64rr¿r=)r&rrrrÚtestPythonicInitèsl              zProto2Test.testPythonicInitN) rLrMrNrrrr r!r"r#r)r6rrrrr8s0  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)Nrr^rÝrrrr‹r�rrzFr—gš™™™™™ñ?róTr)r r!rr¿rºr½r+rr^rÝrrr}r]rÌ)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&rrdr¯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)NrrkržFróéoixrgrzré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+r]Ú isinstanceÚfloatrør²rÞrßrr=)r&rHrrrÚ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¡rrzr) rr=rÛr>Úgetr+rr=Úmap_int32_foreign_messagerÅrr)r&rHÚ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Èrrké"ržg333333ó?gffffff @r8Ú123róTixrz {-123: -456}i8þÿÿi…ÿÿÿllýÿÿÿllýÿÿÿlli8þÿÿi…ÿÿÿllýÿÿÿllýÿÿÿll)rr=r+rCr>r½r?r@rAZmap_int32_floatrBrDrCrEÚFindInitializationErrorsrr=r,r*rŽrrr$)r&rHrdÚmsg2rrrÚ testScalarMapÑsP               zProto3Test.testScalarMapcCs@tjƒ}d|jd<d|jd<|j|jƒdƒ|jd|jƒƒdS)Nrrzr×s r )rr=r>rDr+ÚByteSizer,)r&rHrrrÚtestMapEntryAlwaysSerializeds   z'Proto3Test.testMapEntryAlwaysSerializedcCsntjƒ}d}|jdƒ}||j|<t|jjƒƒd\}}|j||ƒ|j||ƒ|j|tj ƒ|j|tj ƒdS)NuሴÚutf8r) rr=ÚencoderDr¬Úitemsr+r²rÞrß)r&rHZ 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ÈrkrNiçrri8þÿÿi8þÿÿi8þÿÿ)rr=r+rCrJr½Z get_or_creater#rr=r¿r,r*rrr$)r&rHrdrPrrrÚ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)Nr8rk) rr=Úmap_int32_all_typesrr}r+rCr,r*)r&rHrdrPÚkeysr�rrrÚtestNestedMessageMapItemDeleteOs  z)Proto3Test.testNestedMessageMapItemDeletecCsptjƒ}d|jd<|jƒ}d|jd<|j|jƒ|dƒd|jd_|jƒ}d|jd_|j|jƒ|dƒdS)Nr8é€é)rr=r>rRr+rJr†)r&rHrù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)NrMr×éNé8ržér—r<r¡éÞé7écéXrrœÚdr)r<rcrz)rr=r>r?rJr†rgrÕr+r½rºrrrr=ÚKeyError)r&rHrPZ 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)rr=ÚassertRaisesRegexpr=rÕ)r&rHrrrÚ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)rr=rjr=rÒ)r&rHrrrÚ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ÈrrkrMrži8þÿÿi…ÿÿÿllýÿÿÿllýÿÿÿlli8þÿÿi…ÿÿÿllýÿÿÿllýÿÿÿll) rr=rár>r?r@rAr,r*r+)r&rHrdrPrrrÚ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&rHrdrPrrrÚ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) rrnrorJr†r,r*r+rÕrp)r&rHrdrPrrrÚ-testMapAssignmentCausesPresenceForSubmessagesÞs&         z8Proto3Test.testMapAssignmentCausesPresenceForSubmessagescCs~tjƒ}t|jƒ}t|jƒ}d|jd<d|jd_|jtƒ�x |D]}qDWWdQRX|jtƒ�x |D]}qhWWdQRXdS)NrNrór—)rr=ÚiterrDrJr†rÚ RuntimeError)r&rHZstring_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)Nr<r—rf) rr=rJrÅr²r r5r†r,r*r+rr¿)r&rHrKrdrPrrrÚtestSubmessageMap s   zProto3Test.testSubmessageMapcCs|tjƒ}x |jjƒD]\}}|jdƒqWd|jd<d|jd<d|jd<|jdt|jƒƒddddœ}|j|jjƒ|ƒdS)NFr9rkr–rvé)rkrvr9)rr=r>rVr]r+rCr:)r&rHr¨r9Ú 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)Nrvr9rkr–rxr¡r—cs0ˆjt|ƒ|dƒˆjt|ƒ|dd…ƒdS)Nrr8)r+Únextr¬)ÚseqÚiterator)r&rrÚ CheckItems9sz-Proto3Test.testPython2Map..CheckItemsiçrr8r×)rW)rv)rwrxrr=r>r+rCr*r,rVZ iteritemsr[ZiterkeysröZ itervaluesrIr ÚpopitemrprrhÚ setdefaultÚupdater=)r&rHZ map_int32rPr~r�rWr)r&rÚtestPython2Map-sJ            zProto3Test.testPython2MapcCs^tjƒ}d|jd<d|jd<d|jd<d|jd<d|jd<|jjƒ}|jjƒ}|j||ƒdS)NrzÚ local_init_opÚtrainable_variablesÚ variablesÚinit_opÚ summaries)rr=rDrVr+)r&rHZitems1Zitems2rrrÚ 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…rƒr‡r„r†r…rgr†Úer‡Zitem1ÚfZitem2ÚgZitem3ZQQZitem4T)rK)rr=rDr+r,)r&r/rHrrrÚ!testMapDeterministicSerializationls          z,Proto3Test.testMapDeterministicSerializationcCsNtjƒ}d|jd<d|jd<d|jd<|jjƒ}~ddddœ}|j||ƒdS)Nr9rkr–rvrx)rkrvr9)rr=r>rVr:)r&rHÚitryrrrÚtestMapIterationClearMessage‰s     z'Proto3Test.testMapIterationClearMessagecCsftjdddœd�}|jd|jdƒ|jd|jdƒtjdtjdd�id �}|jd|jdjƒdS) Nrkr9)r8rv)r>r8rvr—)r†)rJ)rr=r+r>r r5rJr†)r&rHrrrÚtestMapConstruction—s zProto3Test.testMapConstructioncCs`tjƒ}|j}d|d<d|d<d|d<|jdƒ|jd|jƒƒddddœ}|j|jƒ|ƒdS) Nr9rkr–rvrxr>ré)rkrvr9)rr=r>rÌr+r,r:rV)r&rHZ int32_mapryrrrÚtestMapValidAfterFieldCleared s  z(Proto3Test.testMapValidAfterFieldClearedcCsHtjƒ}|j}d|d_|jdƒ|jd|jƒƒ|jd|jƒkƒdS)Nr—rkrJré) rr=rJr†rÌr+r,r]r[)r&rHZint32_foreign_messagerrrÚ$testMessageMapValidAfterFieldCleared°s   z/Proto3Test.testMessageMapValidAfterFieldClearedcCs|tjƒ}t|jƒ}|jdƒ|jtƒ�x |D]}q.WWdQRXt|jƒ}|jdƒ|jtƒ�x |D]}qfWWdQRXdS)Nr>rJ)rr=rtr>rÌrrurJ)r&rHr�r°rrrÚ"testMapIterInvalidatedByClearField½s        z-Proto3Test.testMapIterInvalidatedByClearFieldcCs�tjƒ}|jdt|jƒƒd|jd<|jdt|jƒƒ|jtƒ�|jd=WdQRX|jd=|jdt|jƒƒ|jtƒ�|jd=WdQRXdS)Nrr–r9r8rfé )rr=r+rCr>rrhrZ)r&rHrrrÚ testMapDeleteÑs   zProto3Test.testMapDeletecCsLtjƒ}|j|jtjƒ|j|jtjƒ|j|jtjƒ|j|jtjƒdS)N)rr=r²r>r³ÚMappingÚMutableMappingrJ)r&rHrrrÚtestMapsAreMappingâs zProto3Test.testMapsAreMappingcCsDtjƒ}d|jd<|j|j|jƒ|j|j|jƒ|j|jdƒdS)NiÈrri8þÿÿi…ÿÿÿ)rr=r>r+rJZassertNotEqual)r&rHrrrÚtestMapsCompareês  zProto3Test.testMapsComparecCs@tjƒ}d|jd<d|jd<d|jd_|jdt|jƒƒƒdS)NrNróé@é#r—rÇr) rr=rDr>Zmap_string_foreign_messager†r+rCrO)r&rHrrrÚ(testMapFindInitializationErrorsSmokeTestòs    z3Proto3Test.testMapFindInitializationErrorsSmokeTestN)#rLrMrNr:rr;rHrLrQrSrXrYr\r_rirkrlrmrqrsrvrwrzr‚rˆrŒrŽr�r�r‘r’r”r—r˜r›rrrrr7(s@ 90=) <0  r7c@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)r~r9)Útp_namerrräsz:ValidTypeNamesTest.assertImportFromName..z%r does end with any of %rÚ.)Úfromlistr<r<)r$ÚtypeÚsplitr]ÚanyÚjoinÚ __import__)r&rHZ 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)rLrMrNr©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`raZ 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)rLrMrNr¬r­r®rrrrr«sr«rrkrrz;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)rLrMrNÚ classmethodr²r¶rºr»rrrrr¯Is # r¯Ú__main__)rkrr)4rüÚ __author__r³r-rmr˜rWrÞrwr@Z unittest2ZunittestÚ ImportErrorr§råZgoogle.protobufrrr r r r r rZgoogle.protobuf.internalrrrrrrrZPY3ÚintrárrrrZ BaseTestCaseZNamedParametersrrr7rœr«ZskipIfrrxr¯rLÚmainrrrrÚ)s„                WqX9: