3 SÉLjíôã @sÒdZddlZddlZddlZddlZddlZy ddlZWnek rTddlZYnXddl m Z ddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZdd l mZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZejZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZ Gdd„deƒZ!Gdd„deƒZ"Gdd „d eƒZ#Gd!d"„d"eƒZ$Gd#d$„d$eƒZ%Gd%d&„d&eƒZ&e'd'k�rÎej(ƒdS)(ziUnittest for reflection.py, which also indirectly tests the output of the pure-Python protocol compiler. éN)Úunittest_import_pb2)Úunittest_mset_pb2)Ú unittest_pb2)Údescriptor_pb2)Ú descriptor)Úmessage)Ú reflection)Ú text_format)Úapi_implementation)Úmore_extensions_pb2)Úmore_messages_pb2)Úmessage_set_extensions_pb2)Ú wire_format)Ú test_util)Útesting_refleaks)Údecoderc@s\eZdZdZdd„Zdd„ZeZeZeZeZ dd„Z e Z dd „Z d d „Z d d „Zdd„ZdS)Ú _MiniDecodera©Decodes a stream of values from a string. Once upon a time we actually had a class called decoder.Decoder. Then we got rid of it during a redesign that made decoding much, much faster overall. But a couple tests in this file used it to check that the serialized form of a message was correct. So, this class implements just the methods that were used by said tests, so that we don't have to rewrite the tests. cCs||_d|_dS)Nr)Ú_bytesÚ_pos)ÚselfÚbytes©rú%/usr/lib/python3.6/reflection_test.pyÚ__init__Osz_MiniDecoder.__init__cCstj|j|jƒ\}|_|S)N)rZ _DecodeVarintrr)rÚresultrrrÚ ReadVarintSsz_MiniDecoder.ReadVarintcCstj|jƒƒS)N)rZ ZigZagDecoder)rrrrÚ ReadSInt64\sz_MiniDecoder.ReadSInt64cCstj|jƒƒS)N)rZ UnpackTagr)rrrrÚReadFieldNumberAndWireTypeasz'_MiniDecoder.ReadFieldNumberAndWireTypecCs4tjd|j|j|jd…ƒd}|jd7_|S)Nz„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^„Z1d_d`„Z2dadb„Z3dcdd„Z4dedf„Z5dgdh„Z6didj„Z7dkdl„Z8dmdn„Z9dodp„Z:dqdr„Z;dsdt„Zdydz„Z?d{d|„Z@d}d~„ZAdd€„ZBd�d‚„ZCdƒd„„ZDd…d†„ZEd‡dˆ„ZFd‰dŠ„ZGd‹dŒ„ZHd�dŽ„ZId�d�„ZJd‘d’„ZKd“d”„ZLd•d–„ZMd—d˜„ZNd™dš„ZOd›dœ„ZPd�dž„ZQdµd d¡„ZRd¢d£„ZSeTjUeVjWƒd¤k�p®eVjXƒd¥kd¦ƒd§d¨„ƒZYd©dª„ZZd«d¬„Z[d­d®„Z\d¯d°„Z]d±d²„Z^d³d´„Z_dŸS)¶ÚReflectionTestcCsB|jt|ƒt|ƒƒx(tt|ƒƒD]}|j||||ƒq"WdS)N)Ú assertEqualr$Úrange)rÚvaluesZothersÚirrrÚassertListsEqualtszReflectionTest.assertListsEqualcCsPtjddddd�}|jd|jƒ|jd|jƒ|jd|jƒ|j|jdƒƒdS)Nég +‡)K@Úoptional_string)Úoptional_int32Úoptional_doubler6Úoptional_floatr9)rÚ TestAllTypesr0r7r8r6Ú assertFalseÚHasField)rÚprotorrrÚtestScalarConstructorysz$ReflectionTest.testScalarConstructorcCsštjddddgddgdddgd gdd �}|jddddgt|jƒƒ|jddgt|jƒƒ|jdddgt|jƒƒ|jd gt|jƒƒ|jgt|jƒƒdS) Nééérg®Gáz®ó?g +‡)K@TFr6)Úrepeated_int32Úrepeated_doubleÚ repeated_boolÚrepeated_stringÚrepeated_float) rr:r0ÚlistrBrCrDrErF)rr=rrrÚtestRepeatedScalarConstructor†s z,ReflectionTest.testRepeatedScalarConstructorcCstjtjjtjjd�tjjtjjd�gtjd d�tjdd�tjdd�gtjjƒtjjdd�tjjdd�gd �}|jtjjtjjd�tjjtjjd�gt|j ƒƒ|jtjd d�tjdd�tjdd�gt|j ƒƒ|jtjjƒtjjdd�tjjdd�gt|j ƒƒdS) N)Úbbé+)Úci ±é r?)Úar@)Úrepeated_nested_messageÚrepeated_foreign_messageÚ repeatedgroupiÕÿÿÿiÕÿÿÿ) rr:Ú NestedMessageÚFOOÚBARÚForeignMessageZ RepeatedGroupr0rGrNrOrP)rr=rrrÚ testRepeatedCompositeConstructor•s6              z/ReflectionTest.testRepeatedCompositeConstructorc Cs tjddddgdddgtjjtjjd�tjjtjjd�gtjdd �tjd d �tjd d �gdd �}|jd|jƒ|jd|jƒ|jddgt |j ƒƒ|jdddgt |j ƒƒ|jtjjtjjd�tjjtjjd�gt |j ƒƒ|jtjdd �tjd d �tjd d �gt |j ƒƒ|j|jd ƒƒdS)Nr5r6g®Gáz®ó?g +‡)K@TF)rIrJ)rKi ±rL)r7r6rCrDrNrOÚoptional_nested_messagerViÕÿÿÿiÕÿÿÿ)rr:rQrRrSrTr0r7r6rGrCrDrNrOr;r<)rr=rrrÚtestMixedConstructor·s:            z#ReflectionTest.testMixedConstructorcCs¬|jttjdd�|jttjdd�|jttjdd�|jttjdd�|jttjdgd�|jttjdd�|jttjdgd�|jttjdd�|jttjdgd�dS) NÚfoo)r7iÒ)r6)rV)rB)rE)rN)Ú assertRaisesÚ TypeErrorrr:)rrrrÚtestConstructorTypeErrorÚs$z'ReflectionTest.testConstructorTypeErrorcCs„tjdd�}|jd|jƒƒtjtjjƒd�}|jd|jƒƒtjdgd�}|jd|jƒƒtjtjjƒgd�}|jd|jƒƒdS)NrL)r7r@)rVrA)rB)rN)rr:r0ÚByteSizerQ)rrrrrÚ(testConstructorInvalidatesCachedByteSizeîs z7ReflectionTest.testConstructorInvalidatesCachedByteSizecCsptjƒ}|j|jdƒ ƒ|jd|jƒ|j|jdƒ ƒd|_|j|jdƒƒ|jdƒ|j|jdƒ ƒdS)Nr7rr?)rr:Ú assertTruer<r0r7Ú ClearField)rr=rrrÚtestSimpleHasBitsýs z ReflectionTest.testSimpleHasBitscs8‡fdd„}|ddƒ|ddƒ|ddƒ|d d ƒdS) Ncs0tjƒ}t||ƒ}t||ƒ}ˆjd|ƒˆj|j|ƒ ƒˆj|j|ƒ ƒd}t|||ƒˆj|t||ƒƒ|}ˆj|j|ƒƒˆj|j|ƒƒ|j|ƒt||ƒ}ˆj|j|ƒ ƒˆj|j|ƒ ƒˆjdt||ƒƒˆj||k ƒt|||ƒˆj|j|ƒ ƒˆj|j|ƒ ƒˆjdt||ƒƒdS)Nré)rr:Úgetattrr0r^r<Úsetattrr_)Zcomposite_field_nameZscalar_field_namer=Zcomposite_fieldZoriginal_scalar_valueZnew_valZold_composite_field)rrrÚTestCompositeHasBits.s,       zNReflectionTest.testHasBitsWithSinglyNestedScalar..TestCompositeHasBitsÚ optionalgrouprMrVrIÚoptional_foreign_messagerKZoptional_import_messageÚdr)rrdr)rrÚ!testHasBitsWithSinglyNestedScalar s " *   z0ReflectionTest.testHasBitsWithSinglyNestedScalarcCstjƒ}|j}~d|_dS)Né)rr:rVrI)rr=ÚnestedrrrÚtestReferencesToNestedMessage]sz,ReflectionTest.testReferencesToNestedMessagecCsTtjƒ}|j}|jdƒ|j||jk ƒd|_|j|jdƒ ƒ|jd|jjƒdS)NrVrir)rr:rVr_r^rIr<r0)rr=rjrrrÚ0testDisconnectingNestedMessageBeforeSettingFieldes z?ReflectionTest.testDisconnectingNestedMessageBeforeSettingFieldcCs6tjƒ}|j}|jdƒ~~tjƒtjƒ}|j}dS)NrV)rr:rVr_ÚgcÚcollect)rr=rjrrrÚ5testGetDefaultMessageAfterDisconnectingDefaultMessagens zDReflectionTest.testGetDefaultMessageAfterDisconnectingDefaultMessagecCsˆtjƒ}|j}d|_|j|jdƒƒ|jdƒ|jd|jƒ|jd|jjƒ|j||jk ƒd|_|j|jdƒ ƒ|jd|jjƒdS)NérVrri)rr:rVrIr^r<r_r0)rr=rjrrrÚ/testDisconnectingNestedMessageAfterSettingField{s z>ReflectionTest.testDisconnectingNestedMessageAfterSettingFieldcCs:tjƒ}|j|jdƒ ƒ|jdƒ|j|jdƒ ƒdS)NrV)rr:r^r<r_)rr=rrrÚ0testDisconnectingNestedMessageBeforeGettingFieldˆs z?ReflectionTest.testDisconnectingNestedMessageBeforeGettingFieldcCsRtjƒ}tjƒ}d|j_|j|ƒ|j|jdƒƒ|jdƒ|j|jdƒ ƒdS)NrprV)rr:rVrIÚ MergeFromr^r<r_)rÚproto1Úproto2rrrÚ(testDisconnectingNestedMessageAfterMergeŽs  z7ReflectionTest.testDisconnectingNestedMessageAfterMergecCs8tjƒdkrdStjƒ}d|j_|jdƒ~tjƒdS)NÚpythonrpÚoptional_lazy_message) r ÚTyperr:rxrIr_rmrn)rr=rrrÚ"testDisconnectingLazyNestedMessage›s  z1ReflectionTest.testDisconnectingLazyNestedMessagecCsttjƒ}|jjjdƒ|jdg|jjƒ|j|jdƒƒ|jdƒ|j|jdƒ ƒ|jj j ƒ|j|jdƒƒdS)NrprV) rZTestNestedMessageHasBitsrVZnestedmessage_repeated_int32Úappendr0r^r<r_Z%nestedmessage_repeated_foreignmessageÚadd)rr=rrrÚ&testHasBitsWhenModifyingRepeatedFields¨s  z5ReflectionTest.testHasBitsWhenModifyingRepeatedFieldscCs tjƒ}|j|jdƒ ƒ|jd|jjjjjjƒ|j|jdƒ ƒd|jjjjj_|jd|jjjjjjƒ|j|jdƒƒ|j|jjdƒƒ|j|jjjdƒƒ|j|jjjjdƒƒ|j|jjjjjdƒƒ|j|jjjjjjdƒ ƒ|j|jjjjjjdƒƒdS)NrIrrprMr7)rÚTestMutualRecursionAr^r<r0rIrMr7)rZrecursive_protorrrÚ!testHasBitsForManyLevelsOfNesting·sz0ReflectionTest.testHasBitsForManyLevelsOfNestingcCs®tjƒ}d|_d|_d|_|j}|j|jjddf|jjddf|jjddfg|j ƒƒd|j_ |j|jjddf|jjddf|jjddf|jjd|fg|j ƒƒdS) Nr?rprXr7Úoptional_fixed32r6é{rV) rr:r€r7r6rVr0Ú DESCRIPTORÚfields_by_nameÚ ListFieldsrI)rr=Znested_messagerrrÚtestSingularListFieldsÇs$  z%ReflectionTest.testSingularListFieldsc CsÖtjƒ}|jjdƒ|jjdƒ|jjdƒ|jjddgƒ|jjgƒ|jjdƒ|jjdd„td ƒDƒƒd |_|j |j |j j d d f|j j d ddgf|j j d dgf|j j ddddddgfg|j ƒƒdS)Nr?rpé rXÚbarÚbazcss|]}t|ƒVqdS)N)Ústr)Ú.0Úxrrrú åsz8ReflectionTest.testRepeatedListFields..r@ér7rBÚrepeated_fixed32rEÚ0Ú1)rr:rŽr{rBrEÚextendr1r7rDr0r‚rƒr„)rr=rrrÚtestRepeatedListFieldsÝs"      z%ReflectionTest.testRepeatedListFieldscCsXtjƒ}d|jtj<d|jtj<d|jtj<|jtjdftjdftjdfg|jƒƒdS)Nr?rprX)rÚTestAllExtensionsÚ ExtensionsZoptional_fixed32_extensionÚoptional_int32_extensionZoptional_string_extensionr0r„)rr=rrrÚtestSingularListExtensionsðs    z)ReflectionTest.testSingularListExtensionscCsÀtjƒ}|jtjjdƒ|jtjjdƒ|jtjjdƒ|jtjjdƒ|jtjjdƒ|jtjjdƒd|jtj<|jtjdftjddgftjdgftjdddgfg|j ƒƒdS)Nr?rpr†rXr‡rˆr�) rr“r”Zrepeated_fixed32_extensionr{Úrepeated_int32_extensionÚrepeated_string_extensionr•r0r„)rr=rrrÚtestRepeatedListExtensionsûs   z)ReflectionTest.testRepeatedListExtensionscCsftjƒ}tj|ƒtj|j|jjddftjdf|jjddftjdf|jjddfg|j ƒƒdS) NZmy_intr?riZ my_stringrXr‡Zmy_floatgð?) rÚTestFieldOrderingsrÚSetAllFieldsAndExtensionsZmy_extension_intr0r‚rƒZmy_extension_stringr„)rr=rrrÚtestListFieldsAndExtensions s z*ReflectionTest.testListFieldsAndExtensionscCsøtjƒ}|jd|jƒ|jd|jƒ|jd|jƒ|jd|jƒ|jd|jƒ|jd|jƒ|jd|j ƒ|jd|j ƒ|jd|j ƒ|jd|j ƒ|jd|j ƒ|jd|jƒ|jd|jƒ|jd|jƒ|jd|jƒ|jd|jƒ|jd|jƒ|jd|jƒ|jd |jƒ|jd|jƒ|jd |jƒ|jd |jƒ|jd |jƒ|jd|jƒ|jd|jƒ|jd|jƒ|jd|jƒ|jd|jƒ|jd|jƒ|jd|j ƒ|jtjj!|j"ƒ|jtj#|j$ƒ|jt%j&|j'ƒtj(ƒ}|jd|j)ƒdS)NrgFÚóé)é*rJé,é-é.é/é0é1é2gÀI@gdé@TZhellosworlduሴiÓÿÿÿiÎÿÿÿ)*rr:r0r7Úoptional_int64Úoptional_uint32Úoptional_uint64Úoptional_sint32Úoptional_sint64r€Úoptional_fixed64Úoptional_sfixed32Úoptional_sfixed64r9r8Ú optional_boolr6Úoptional_bytesZ default_int32Z default_int64Zdefault_uint32Zdefault_uint64Zdefault_sint32Zdefault_sint64Zdefault_fixed32Zdefault_fixed64Zdefault_sfixed32Zdefault_sfixed64Z default_floatZdefault_doubleZ default_boolZdefault_stringZ default_bytesrSZdefault_nested_enumÚ FOREIGN_BARZdefault_foreign_enumrZ IMPORT_BARZdefault_import_enumZTestExtremeDefaultValuesZ utf8_string)rr=rrrÚtestDefaultValuessJz ReflectionTest.testDefaultValuescCstjƒ}|jt|jdƒdS)NÚnonexistent_field)rr:rYÚ ValueErrorr<)rr=rrrÚ testHasFieldWithUnknownFieldName@sz/ReflectionTest.testHasFieldWithUnknownFieldNamecCstjƒ}|jt|jdƒdS)Nr´)rr:rYrµr_)rr=rrrÚ"testClearFieldWithUnknownFieldNameDsz1ReflectionTest.testClearFieldWithUnknownFieldNamecsNtjƒ‰xtdƒD]}ˆjjƒqWtjƒ}ˆj|ƒ|jt‡fdd„ƒdS)Né cs ˆjdS)Nrp)Úrepeated_messager)r=rrÚQsz9ReflectionTest.testClearRemovesChildren..)rÚTestRequiredForeignr1r¹r|ÚCopyFromrYÚ IndexError)rr3rur)r=rÚtestClearRemovesChildrenHs  z'ReflectionTest.testClearRemovesChildrencCs~tjƒ}|jtt|ddƒ|jtt|ddgƒ|jtt|ddƒ|jtt|jddƒ|jtt|jddƒ|jtt|ddƒdS) NrBr¸rVrirIé"Zsome_attributer´)rr:rYÚAttributeErrorrcrNrF)rr=rrrÚtestDisallowedAssignmentsSs   z(ReflectionTest.testDisallowedAssignmentscCs°tjƒ}|jtt|ddƒ|jtt|ddƒ|jtt|ddƒ|jtt|ddƒ|jtt|ddƒ|jtt|ddƒ|jtt|d dƒtjƒd kr¦|jtt|ddƒnd|_dS) Nr7gš™™™™™ñ?rXr6r¸r±r°r9r8rw)rr:rYrZrcr ryr°)rr=rrrÚtestSingleScalarTypeSafetyhs z)ReflectionTest.testSingleScalarTypeSafetyc s°‡‡fdd„}|ddtƒ|ddtƒ|ddtƒyt}Wntk rRt}YnXtjdƒdkrp|dd|ƒn |ddtƒ|d d|ƒ|d d|ƒ|d d|ƒ|d d|ƒd S)z}Verifies setting of scalar integers. Args: integer_fn: A function to wrap the integers that will be assigned. csZtjƒ}ˆ|ƒ}t|||ƒˆjt||ƒ|ƒtjƒ}|j|jƒƒˆjt||ƒ|ƒdS)N)rr:rcÚassertIsInstancerbÚParseFromStringÚSerializeToString)Ú field_nameÚvalueZ expected_typer=ru)Ú integer_fnrrrÚTestGetAndDeserialize}s z@ReflectionTest.assertIntegerTypes..TestGetAndDeserializer7r?ér©ÚLrér¨é<rªNi@i@lli@li@l)ÚintZlongÚ NameErrorrÚcalcsize)rrÈrÉZ integer_64r)rÈrrÚassertIntegerTypesws        z!ReflectionTest.assertIntegerTypescCs|jdd„ƒdS)NcSs|S)Nr)r‹rrrrºšsz1ReflectionTest.testIntegerTypes..)rÑ)rrrrÚtestIntegerTypes™szReflectionTest.testIntegerTypescCs|jtjƒdS)N)rÑrÚNonStandardInteger)rrrrÚtestNonStandardIntegerTypesœsz*ReflectionTest.testNonStandardIntegerTypescCsNtjƒ}|jtƒ� d|_WdQRX|jtdƒ�tjddƒ|_WdQRXdS)NÚ2Zmy_errorrp) rr:rYrZrªZassertRaisesRegexpÚ RuntimeErrorrrÓ)rÚpbrrrÚtestIllegalValuesForIntegersŸs  z+ReflectionTest.testIllegalValuesForIntegersc sއ‡fdd„}|dddƒ|dddƒ|d ddƒ|d dd ƒtjƒ}ˆjttfƒ�ˆdƒ|_Wd QRXtjƒ}ˆdƒ|_ˆjd|jƒd S)zŒVerifies bounds checking for scalar integer fields. Args: integer_fn: A function to wrap the integers that will be assigned. csŒtjƒ}ˆ|ƒ}ˆ|ƒ}t|||ƒˆj|t||ƒƒt|||ƒˆj|t||ƒƒˆjttft|||dƒˆjttft|||dƒdS)Nr?)rr:rcr0rbrYrµrZ)rÆZ expected_minZ expected_maxr×)rÈrrrÚTestMinAndMaxIntegers°s   zHReflectionTest.assetIntegerBoundsChecking..TestMinAndMaxIntegersr7r?rÌr©rlÿÿr¨é?rªlÿÿÿÿNli€liÿÿÿllûÿÿÿllÿÿÿÿllûÿÿÿ)rr:rYrµrZrªÚoptional_nested_enumr0)rrÈrÙr×r)rÈrrÚassetIntegerBoundsCheckingªs     z)ReflectionTest.assetIntegerBoundsCheckingcCs|jdd„ƒdS)NcSs|S)Nr)r‹rrrrºÌsz?ReflectionTest.testSingleScalarBoundsChecking..)rÜ)rrrrÚtestSingleScalarBoundsCheckingËsz-ReflectionTest.testSingleScalarBoundsCheckingcCs|jtjƒdS)N)rÜrrÓ)rrrrÚ)testNonStandardSingleScalarBoundsCheckingÎsz8ReflectionTest.testNonStandardSingleScalarBoundsCheckingcCsÖtjƒ}|jt|jjdƒ|jt|jjdƒ|jt|jdƒ|jt|jdƒ|jjdƒd|jd<|jt|jj ddƒ|jt|jj ddƒ|jt|jj dgƒ|jt|jj ddƒ|jjd ƒ|jt|jj ddƒdS) Ngš™™™™™ñ?rXr¸ririôÚabcÚindexrÕ) rr:rYrZrBr{rEZrepeated_bytesr½Ú __setitem__)rr=rrrÚtestRepeatedScalarTypeSafetyÑs    z+ReflectionTest.testRepeatedScalarTypeSafetycCsVtjƒ}|jd|jƒd|_|jd|jƒd|_|jd|jƒd|_|jd|jƒdS)Nrr?lÿÿÿlÿÿÿÿ)rr:r0r7rª)rr=rrrÚ!testSingleScalarGettersAndSettersæsz0ReflectionTest.testSingleScalarGettersAndSetterscCsVtjƒ}|jdƒd|_|j|jdƒƒ|jdƒ|jd|jƒ|j|jdƒ ƒdS)Nr7r?r)rr:r_r7r^r<r0)rr=rrrÚtestSingleScalarClearFieldòs  z)ReflectionTest.testSingleScalarClearFieldcCsftjƒ}|jd|jƒ|jdtjjƒ|jd|jƒ|jdtjjƒ|jd|jƒ|jdtjjƒdS)Nr?r@rA)rr:r0rRrSÚBAZ)rr=rrrÚ testEnumsýszReflectionTest.testEnumscCs|jdtjjtjƒƒ|jdtjjtjƒƒ|jdtjjtjƒƒ|jttjjdƒtj ƒ}|jd|j j|j ƒƒ|jdtj j j|j ƒƒ|jd|j j|j ƒƒ|jdtj j j|j ƒƒ|jd|j j|j ƒƒ|jdtj j j|j ƒƒ|jt|j jdƒ|jttj j jdƒdS)NÚ FOREIGN_FOOr²Ú FOREIGN_BAZi0,rRrSrå)r0rÚ ForeignEnumÚNamerçr²rèrYrµr:Ú NestedEnumrRrSrå)rr=rrrÚ testEnum_Names2  zReflectionTest.testEnum_NamecCs|jtjtjjdƒƒ|jtjtjjdƒƒ|jtjtjjdƒƒ|jttjjdƒtj ƒ}|j|j |j jdƒƒ|j|j tj j jdƒƒ|j|j |j jdƒƒ|j|j tj j jdƒƒ|j|j |j jdƒƒ|j|j tj j jdƒƒ|jt|j jdƒ|jttj j jdƒdS) Nrçr²rèZFOrRrSråZFoo)r0rrçréZValuer²rèrYrµr:rRrërSrå)rr=rrrÚtestEnum_Value"s2  zReflectionTest.testEnum_ValuecCsº|jdddgttjjƒƒƒ|jdddgttjjƒƒƒ|jdddgttjjƒƒƒtjƒ}|jddd d gt|jjƒƒƒ|jd d d dgt|jjƒƒƒ|jddddgt|jjƒƒƒdS)Nrçr²rèrrpérRrSråÚNEGr?r@rA)rçr)r²rp)rèrîéÿÿÿÿ)rRr?)rSr@)rårArð)rïrð) r0rGrréÚkeysr2Úitemsr:rë)rr=rrrÚtestEnum_KeysAndValues>s  z%ReflectionTest.testEnum_KeysAndValuescCs|tjƒ}|j|j ƒ|jdt|jƒƒ|jjdƒ|jjdƒ|jjdƒ|j|jƒ|jdt|jƒƒ|jdddg|jƒ|jd|jdƒ|jd|jdƒ|jt|jj dƒ|jt|jj dƒ|jt |jj dƒ|jt |jj dƒd |jd<|jdd dg|jƒ|jj dd ƒ|jdd d dg|jƒ|jjd ƒ|jd d dg|jdd …ƒ|jdd d dd g|jdd…ƒd d„t dƒDƒ|jdd …<|jddddd g|jƒdddg|jdd …<|jddddd g|jƒg}x|jD]}|j|ƒ�qàW|jddddd g|ƒ|jd=|jdddd g|jƒ|jdd…=|jddg|jƒ|jj ddgƒ|jddddg|jƒ|jdƒ|j|j ƒ|jdt|jƒƒ|jjdƒ|jd|jdƒd|jd<|jd|jdƒddddg|jdd…<|jd=|jdddg|jƒ|jd=|jddg|jƒ|jt|jjdƒ|jt|jjdƒ|jd d!…=|jdg|jƒ|jdd…=|jdg|jƒdS)"Nrrpr¸érAr?iÒrXraérÊrcss|] }|VqdS)Nr)rŠr3rrrrŒrsz5ReflectionTest.testRepeatedScalars..r@é#é(r¢é rBi,édi'rði.ûÿÿrðrðrðrðéþÿÿÿéýÿÿÿrúrð)rr:r^rBr0r$r{rYr½Ú __getitem__rZÚinsertr1r‘r_Ú __delitem__)rr=rr3rrrÚtestRepeatedScalarsMsl              z"ReflectionTest.testRepeatedScalarscCsFtjƒ}|j|j ƒ|jdt|jƒƒ|jjdƒ|jjdƒ|jjdƒ|jjdƒ|jdt|jƒƒ|jjdƒ|jdt|jƒƒ|jd|jdƒ|jd|jdƒ|jd|jdƒ|jjdƒ|jdt|jƒƒ|jd|jdƒ|jd|jdƒ|jjdƒ|jdt|jƒƒ|jd|jdƒ|jt |jjdƒdS) Nrrpr¸rrAr?r@r�) rr:r^rBr0r$r{ÚremoverYrµ)rr=rrrÚtestRepeatedScalarsRemove§s*       z(ReflectionTest.testRepeatedScalarsRemovec Cs(tjƒ}|j|j ƒ|jdt|jƒƒ|jjƒ}|jjƒ}|j|jƒ|jdt|jƒƒ|j||g|jƒ|j|tjj ƒ|j t |jj dƒ|j t |jj d ƒ|j t |jj dƒ|j t |jj dƒ|jjƒ}|jjƒ}|jjƒ}|j|||g|jdd…ƒ|j|||||g|jdd…ƒ|j||g|jdd…ƒ|j|||g|jdd…ƒ|j||jdƒ|j|g|jdd…ƒg}x|jD]}|j|ƒ�qŠW|j|||||g|ƒ|jd=|j||||g|jƒ|jdd…=|j||g|jƒtjj dd�} tjj dd�} |jj| | gƒ|jdt|jƒƒ|j| |jdƒ|j| |jdƒ|j t |jj| ƒ|j t |jjdgƒtjƒ} |j t |jj| gƒ|jd ƒ|j|j ƒ|jdt|jƒƒ|jjd d�|jdt|jƒƒ|jd |jdjƒ|j t |jjd ƒ|j tƒ�d |jd<WdQRXdS) Nrr@iÒrXr?r)rIrArNrii.ûÿÿ)rr:r^rNr0r$r|r4rÃrQrYr½rürZr{r‘r_rIÚ Exception) rr=Úm0Úm1Úm2Zm3Zm4rr3Zn1Zn2Zwrong_message_typerrrÚtestRepeatedCompositesÄs~               z%ReflectionTest.testRepeatedCompositescCs<tjƒ}|jdt|jƒƒ|jjƒ}t|jƒ|_|jjƒ}t|jƒ|_|j||kƒ|jjƒ}t|jƒ|_|j|||g|jƒ|jdt|jƒƒ|jj |ƒ|jdt|jƒƒ|j||jdƒ|j||jdƒ|j t |jj |ƒ|j t |jj dƒ|jdt|jƒƒ|jj |ƒ|jdt|jƒƒ|j||jdƒdS)NrrAr@r?) rr:r0r$rNr|rIr^r4rrYrµ)rr=rrrrrrÚtestRepeatedCompositeRemoves*        z*ReflectionTest.testRepeatedCompositeRemovecsÔtjƒdkrdStj}|dddd|j|j|jddddddtjƒd�}tj ddd dgg|ggtj ƒd � ‰G‡fd d „d t j t jtjƒƒ}|ƒ}|jd|jƒ|j|jdƒ ƒd |_|jd |jƒ|j|jdƒƒdS)NrwÚ foo_fieldzMyProto.foo_fieldrr?F)ÚnameÚ full_nameràÚnumberÚtypeZcpp_typeÚlabelZ default_valueÚcontaining_typeÚ message_typeZ enum_typeZ is_extensionZextension_scopeÚoptionsZMyProtoZignored) r r ÚfilenamerÚ nested_typesÚ enum_typesÚfieldsÚ extensionsrcseZdZ”ZdS)z>ReflectionTest.testHandWrittenReflection..MyProtoClassN)r&r'r(r‚r)Ú mydescriptorrrÚ MyProtoClassHsrri)r ryrÚFieldDescriptorÚ TYPE_INT64Z CPPTYPE_INT64ÚLABEL_OPTIONALrZ FieldOptionsÚ DescriptorZMessageOptionsÚsixÚwith_metaclassrÚGeneratedProtocolMessageTyperÚMessager0rr^r<)rrZfoo_field_descriptorrZmyproto_instancer)rrÚtestHandWrittenReflection4s.    z(ReflectionTest.testHandWrittenReflectioncsÐtjƒdkrdS‡fdd„‰dˆ_tjƒ}d|_tj}ˆ|d|jƒˆ|d|jƒˆ|d|j ƒˆ|d |j ƒˆjd 7_|j j ƒ}d |_|j|_ ˆj|_tjj|_tj|ƒ‰|jdˆjkƒ|jdˆjkƒ|jdˆjkƒ|jd ˆjkƒ|jd ˆjkƒG‡fd d „d tjtjtjƒƒ}|ƒ}d|_d|_d|_d|_|jjddgƒ|j ƒ}tj!ˆ|ƒ}|j||k ƒ|j"||ƒ|j"|j|jƒ|j"|j|jƒ|j"|j|jƒ|j"|j|jƒ|j"|j|jƒdS)Nrwcs:ˆjd7_|jjƒ}||_||_ˆj|_tjj|_ dS)Nr?) Ú field_indexÚfieldr|r r r rÚFieldDescriptorProtorr )r=rÆZ field_typeÚ new_field)ÚAddDescriptorFieldrrr%Ws  zEReflectionTest.testDescriptorProtoSupport..AddDescriptorFieldrZCarr ÚyearÚ automaticÚpricer?ÚownerscseZdZ”ZdS)z=ReflectionTest.testDescriptorProtoSupport..CarMessageN)r&r'r(r‚r)ÚdescrrÚ CarMessagewsr+ÚpriusiÚTg°‹Ø@ZbobZsusan)#r ryr!rZDescriptorProtor r#Z TYPE_STRINGrZ TYPE_BOOLZ TYPE_DOUBLEr"r|r r ÚLABEL_REPEATEDr rÚMakeDescriptorr^rƒrrrrrrr&r'r(r)r‘rÅZ ParseMessager0)rZ desc_protoZfdpr$r+r,Zserialized_priusZ new_priusr)r%r*rÚtestDescriptorProtoSupportQsN        z)ReflectionTest.testDescriptorProtoSupportcCs¢tjƒ}tj}|j|j|ƒ ƒ|jd|j|ƒ|j|j|ƒ ƒd|j|<|jd|j|ƒ|j|j|ƒƒ|j|ƒ|jd|j|ƒ|j|j|ƒ ƒdS)Nrri)rr“r•r^Ú HasExtensionr0r”ÚClearExtension)rÚextendee_protoÚ extensionrrrÚ'testTopLevelExtensionsForOptionalScalarŽs  z6ReflectionTest.testTopLevelExtensionsForOptionalScalarcCs tjƒ}tj}|jdt|j|ƒƒ|j|jdƒ|jdg|j|ƒ|j|}|j|ƒ|jdt|j|ƒƒ|j||j|k ƒ|j t t j |j|dƒdS)NrrXrM) rr“r˜r0r$r”r{r1r^rYrZÚoperatorÚsetitem)rr2r3Z string_listrrrÚ'testTopLevelExtensionsForRepeatedScalarŸs  z6ReflectionTest.testTopLevelExtensionsForRepeatedScalarcCsîtjƒ}tj}|j|j|ƒ ƒ|jd|j|jƒ|j|j|ƒ ƒd|j|_|jd|j|jƒ|j|j|ƒƒ|j|}|j|ƒ|j||j|k ƒd|_|jd|jƒ|j|j dƒƒ|j|j|ƒ ƒ|j t t j |j|dƒdS)Nrrir rKrM)rr“Z"optional_foreign_message_extensionr^r0r0r”rKr1r<rYrZr5r6)rr2r3Zforeign_messagerrrÚ(testTopLevelExtensionsForOptionalMessage­s"   z7ReflectionTest.testTopLevelExtensionsForOptionalMessagecCsÆtjƒ}tj}|jdt|j|ƒƒ|j|jƒ}d|_|jd|j|djƒd|_|jd|j|djƒ|j|}|j|ƒ|jdt|j|ƒƒ|j ||j|k ƒ|j t t j |j|dƒdS)Nrrir rM)rr“Úrepeatedgroup_extensionr0r$r”r|rMr1r^rYrZr5r6)rr2r3ÚgroupZ group_listrrrÚ(testTopLevelExtensionsForRepeatedMessageÆs  z7ReflectionTest.testTopLevelExtensionsForRepeatedMessagecCsªtjƒ}tjj}|j|j|ƒ ƒ|j|}|jd|jƒ|j|j|ƒ ƒd|_|jd|j|jƒ|j|j|ƒƒ|j |ƒ|j||j|k ƒ|j|j|ƒ ƒdS)Nrri) rr“Ú TestRequiredÚsingler^r0r”r0rMr1)rr2r3ZrequiredrrrÚtestNestedExtensions×s  z#ReflectionTest.testNestedExtensionscCsTtjj}|j|jtjjdƒƒ|j|jdƒjtjjƒ|j dt |j tj jƒƒƒdS)Nr?z*protobuf_unittest.optional_int32_extensionr) rr‚Úpoolr^ZFindExtensionByNumberr“ZassertIsZFindExtensionByNamerr0r$ZFindAllExtensionsr:)rr?rrrÚtestRegisteredExtensionsçs z'ReflectionTest.testRegisteredExtensionscCsötjƒ}|j|jdƒ ƒ|jd|jjtjƒ|j|jdƒ ƒd|jjtj<|jd|jjtjƒ|j|jdƒƒtjƒ}|j|jdƒ ƒ|jg|jjtjƒ|j|jdƒ ƒ|jjtjj dƒ|jdg|jjtjƒ|j|jdƒƒtjƒ}|j|jdƒ ƒ|jd|jjtj j ƒ|j|jdƒ ƒd|jjtj _ |jd|jjtj j ƒ|j|jdƒƒtjƒ}|j|jdƒ ƒ|jdt |jjtj ƒƒ|j|jdƒ ƒ|jjtj jƒ}|j||jjtj dƒ|j|jdƒƒdS)NÚ submessagerri)r ÚTopLevelMessager^r<r0rAr”Úoptional_int_extensionÚrepeated_int_extensionr{Úoptional_message_extensionÚforeign_message_intr$Úrepeated_message_extensionr|)rÚtoplevelÚforeignrrrÚ(testHasBitsForAncestorsOfExtendedMessageùsL              z7ReflectionTest.testHasBitsForAncestorsOfExtendedMessagecCsFtjƒ}|j}tj}|j|}|j|ƒd|_|j||j|k ƒdS)Nri)r rBrArEr”r1rFr^)rrHr2r3Zextension_protorrrÚ*testDisconnectionAfterClearingEmptyMessage*s  z9ReflectionTest.testDisconnectionAfterClearingEmptyMessagecCsÈtjƒ}|jt|jdƒ|jt|jdƒ|jt|jjdƒ|jt|jjddƒxbt j t j t j t j fD]J}|jt|j|ƒ|jt|j|ƒ|jt|jj|ƒ|jt|jj|dƒqdW|jt|jtjƒdS)NiÒrp)rr“rYÚKeyErrorr0r1r”rürár rCrErDrGr˜)rr2Zunknown_handlerrrÚtestExtensionFailureModes4s&       z(ReflectionTest.testExtensionFailureModescCs6tjƒ}tj|ƒ|jƒ}tjj|ƒ}|j||ƒdS)N)rr:rÚ SetAllFieldsrÅÚ FromStringr0)rrtÚstring1rurrrÚtestStaticParseFromSs   z"ReflectionTest.testStaticParseFromcCsFtjƒ}d|_tjƒ}d|_|j|ƒ|jd|jƒ|jd|jƒdS)Nr?rÇ)rr:r7r6rsr0)rrtrurrrÚtestMergeFromSingularField]s z)ReflectionTest.testMergeFromSingularFieldcCsxtjƒ}|jjdƒ|jjdƒtjƒ}|jjdƒ|j|ƒ|jd|jdƒ|jd|jdƒ|jd|jdƒdS)Nr?r@r)rr:rBr{rsr0)rrtrurrrÚtestMergeFromRepeatedFieldjs    z)ReflectionTest.testMergeFromRepeatedFieldcCs6tjƒ}d|j_tjƒ}|j|ƒ|jd|jjƒdS)NrL)rr:rerMrsr0)rrtrurrrÚtestMergeFromOptionalGroupxs  z)ReflectionTest.testMergeFromOptionalGroupcCsÜtjƒ}|jjƒ}d|_|jjƒ}d|_tjƒ}|jjƒ}d|_|j|ƒ|jd|jdjƒ|jd|jdjƒ|jd|jdjƒtjƒ}|jj|jƒ|jd|jdjƒ|jd|jdjƒ|jd|jdjƒdS)Nr�iAiçrr?r@)rr:rNr|rIrsr0)rrtÚmruZproto3rrrÚ"testMergeFromRepeatedNestedMessage€s"    z1ReflectionTest.testMergeFromRepeatedNestedMessagecCsPtjƒ}tj|ƒtjƒ}|j|ƒ|j||ƒ|jƒ}|jƒ}|j||ƒdS)N)rr:rrNrsr0rÅ)rrtrurPÚstring2rrrÚtestMergeFromAllFields–s   z%ReflectionTest.testMergeFromAllFieldscCs>tjƒ}d|jtj<tjƒ}|j|ƒ|jd|jtjƒdS)Nr?)rr“r”r•rsr0)rrtrurrrÚtestMergeFromExtensionsSingular¥s   z.ReflectionTest.testMergeFromExtensionsSingularcCs´tjƒ}|jtjjdƒ|jtjjdƒtjƒ}|jtjjdƒ|j|ƒ|jdt|jtjƒƒ|jd|jtjdƒ|jd|jtjdƒ|jd|jtjdƒdS)Nr?r@rrA)rr“r”r—r{rsr0r$)rrtrurrrÚtestMergeFromExtensionsRepeated®s z.ReflectionTest.testMergeFromExtensionsRepeatedcCs²tjƒ}|jtj}|jƒ}d|_|jƒ}d|_tjƒ}|jtj}|jƒ}d|_|j|ƒ|jtj}|jdt|ƒƒ|jd|djƒ|jd|djƒ|jd|djƒdS)NéÞiMéorArr?r@) rr“r”Ú!repeated_nested_message_extensionr|rIrsr0r$)rrtZext1rUruZext2rrrÚ$testMergeFromExtensionsNestedMessage¿s& z3ReflectionTest.testMergeFromExtensionsNestedMessagecCsDtjƒ}tjƒ}|j|j|jdƒƒ|j|ƒ|j|jdƒƒdS)NrV)rr:rVr;r<rs)rÚmessage1Úmessage2rrrÚtestMergeFromBugÖs  zReflectionTest.testMergeFromBugcCsLtjƒ}d|_d|_tjƒ}d|_|j|ƒ|jd|jƒ|jd|jƒdS)Nr?zimportant-textrÇ)rr:r7r6r¼r0)rrtrurrrÚtestCopyFromSingularFieldãs z(ReflectionTest.testCopyFromSingularFieldcCsftjƒ}|jjdƒ|jjdƒtjƒ}|jjdƒ|j|ƒ|jd|jdƒ|jd|jdƒdS)Nr?r@r)rr:rBr{r¼r0)rrtrurrrÚtestCopyFromRepeatedFieldðs    z(ReflectionTest.testCopyFromRepeatedFieldcCsPtjƒ}tj|ƒtjƒ}|j|ƒ|j||ƒ|jƒ}|jƒ}|j||ƒdS)N)rr:rrNr¼r0rÅ)rrtrurPrWrrrÚtestCopyFromAllFieldsýs   z$ReflectionTest.testCopyFromAllFieldscCs\tjƒ}|jjdƒd|_d|_|j|ƒ|jd|jdƒ|jd|jƒ|jd|jƒdS)Nr?r@zimportant-textr)rr:rBr{r7r6r¼r0)rrtrrrÚtestCopyFromSelf s  zReflectionTest.testCopyFromSelfcCs4tjƒdkrdStjƒ}tjƒ}|jt|j|ƒdS)Nrw)r ryrr:r“rYrZr¼)rrtrurrrÚtestCopyFromBadTypes  z"ReflectionTest.testCopyFromBadTypecCsœtjƒ}d|_tj|ƒ}|jd|jƒ|jjdƒ|jjdƒtj|jƒ}|jddg|ƒ|jj ƒ}d|_ tj|jƒ}|j|j|ƒd|_ |j |j|ƒdS)Nr?r@rA) rr:r7ÚcopyÚdeepcopyr0rBr{rNr|rIÚassertNotEqual)rrtruZ containerr_ZmessagesrrrÚ testDeepCopy s      zReflectionTest.testDeepCopycCs˜tjƒ}tjƒdkr tj|ƒn tj|ƒ|jƒ|j|j ƒdƒtjƒ}|j||ƒtj ƒ}tj |ƒ|jƒ|j|j ƒdƒtj ƒ}|j||ƒdS)Nrwr) rr:r ryrrNZSetAllNonLazyFieldsÚClearr0r\r“ÚSetAllExtensions)rr=Z empty_protorrrÚ testClear4s     zReflectionTest.testClearcCstjƒ}|j}|jƒ|j||jk ƒd|_|j|jdƒ ƒ|jd|jjƒtjƒ}|j}d|_|j}d|_ |jƒ|j||jk ƒ|j||jk ƒ|jd|jƒ|jd|j ƒd|_d|_ |j |jdƒƒ|jd|jjƒ|j |jdƒƒ|jd|jj ƒdS) NrirVrrprîrôérf) rr:rVrkr^rIr<r0rfrKr;)rr=rjrIrrrÚtestDisconnectingBeforeClearKs.z+ReflectionTest.testDisconnectingBeforeClearcCsftjƒ}d|j_|j}|j|jjdƒ|j|jjdƒd|j_|j|jjdƒ|j|jdƒd|_dS)Nrprrîé)rZ TestOneof2Z foo_messageZqux_intr0Zfoo_lazy_message)rrUZ sub_messagerrrÚtestDisconnectingInOneoffsz'ReflectionTest.testDisconnectingInOneofcCsrtjƒ}d|_d|j_|jd|jjƒ|j|jdƒƒ|j}d|_|jd|jƒ|jd|jƒ|j|jdƒƒdS)Nr¸r†Ú oneof_uint32rßÚoneof_nested_message) rr:rrrsrIr0r;r<Z oneof_string)rr=rjrrrÚ testOneOftszReflectionTest.testOneOfcCs"|j|jƒƒ|jƒ|jƒdS)N)r^Ú IsInitializedrÅÚSerializePartialToString)rr=rrrÚassertInitialized€sz ReflectionTest.assertInitializedNcCsNg}|j|jƒƒ|j|j|ƒƒ|j|t|ƒƒ|jtj|jƒ|jƒdS)N) r;rur0r$rYrÚ EncodeErrorrÅrv)rr=Z error_sizeÚerrorsrrrÚassertNotInitialized†s z#ReflectionTest.assertNotInitializedcCs´tjƒ}|j|ƒtjƒ}|j|ƒtjƒ}|j|dƒd|_|_|_|j|ƒtj ƒ}|j|ƒd|j _|j|dƒd|j _d|j _|j|ƒ|j j ƒ}|j|dƒd|_|_|_|j|ƒtjƒ}tjj }|j|j ƒ}|j|j ƒ}|j|dƒd|_d|_d|_|j|dƒd|_d|_d|_|j|ƒtjƒ}tjj}d|j|_|j|dƒd|j|_d|j|_|j|ƒg}tjƒ}|j|j|ƒƒ|j|dddgƒdS) NrAr@r?rrîrMÚbrK)rr:rwr“r<rzrMr{rKr»Úoptional_messager¹r|Úmultir”r=r;rur0)rr=r_r3r`ryrrrÚtestIsInitialized�sV                  z ReflectionTest.testIsInitializedÚcppr@zBErrors are only available from the most recent C++ implementation.cCsÎd}d}tjƒ}||_||_|jjƒ}d|_tj|||jƒd�d}||_|jjƒ}d|_|j t ƒ�`}tj|||jƒd�|j t |dƒdt |jd|jƒƒ|jdt|jƒƒ|jd t|jƒƒWdQRXdS) Nz!test_file_descriptor_errors.protoZmsg1)Z serialized_pbz)another_test_file_descriptor_errors.protoZmsg2Ú exceptionz %s not raisedr&z test_file_descriptor_errors.msg1)rÚFileDescriptorProtor Úpackagerr|rZFileDescriptorrÅrYrZr^ÚhasattrrbÚexpectedÚassertInr‰r€)rÚ file_nameZ package_nameZfile_descriptor_protorZanother_file_namerÚcmrrrÚtestFileDescriptorErrorsÉs0     z'ReflectionTest.testFileDescriptorErrorscCsœtjƒ}|jtt|ddƒ|jt|jƒtj ƒtj dƒ|_|j|jt dƒƒt dƒ|_|j|jtj dƒƒ|jt t|ddƒdj dƒ}||_d|_d|_dS) Nr±zunicode objectZTestingr6sa€auТеÑ�Ñ‚zutf-8rß) rr:rYrZrcr0r r6rÚ text_typer‰rµÚencode)rr=Z utf8_bytesrrrÚtestStringUTF8Encodingës     z%ReflectionTest.testStringUTF8Encodingc Csjtjƒ}tj}|j}d}|jdƒ}||j|_|jƒ}|j|j ƒt |ƒƒt j ƒ}|j |ƒ}|jt |ƒ|ƒtjƒ} |jdt |jƒƒ|j|jdjdƒ|j|jdjj|ƒƒ| j |jdjƒ}|jt |jdjƒ|ƒ|jt| jƒtjƒ|j| j|ƒ|jdjj|t |ƒdƒ} d} y| j | ƒWntk �rFd} YnX| j} |j| �pbt| ƒtkƒdS) NuТеÑ�Ñ‚zutf-8r?riÊ¿ÝóÿFT)r ÚTestMessageSetÚTestMessageSetExtension2Úmessage_set_extensionrŠr”r‰rÅr0r\r$rÚ RawMessageSetÚMergeFromStringÚitemÚtype_idr^rÚendswithr rr‰ÚreplaceÚUnicodeDecodeErrorr) rr=Zextension_messager3Z test_utf8Ztest_utf8_bytesÚ serializedÚrawÚ bytes_readr`ZbadbytesZunicode_decode_failedZ string_fieldrrrÚtestStringUTF8Serializations8     z*ReflectionTest.testStringUTF8SerializationcCs"tjdd�}|jdtj|ƒƒdS)Ns€ÿ)r±z#optional_bytes: "\000\177\200\377" )rr:r0rr‰)rr=rrrÚtestBytesInTextFormat=s z$ReflectionTest.testBytesInTextFormatcCsâtjƒ}|jjtjjƒƒ|j|jdƒƒtjƒ}|jjtjjƒƒ|j|jdƒƒtjƒ}|jjdƒ}|j d|ƒ|j|jdƒƒtjƒ}|jj dƒ|j|jdƒƒ|j ƒ}tjƒ}|j t |ƒ|j|ƒƒ|j|jdƒƒdS)NrVržr) rr:rVrsrQr^r<r¼r‘r0rÄrÅr$)rr=r™r—rurrrÚtestEmptyNestedMessageBs*      z%ReflectionTest.testEmptyNestedMessagecCs6tjƒ}|j|jdƒƒ|jjƒ|j|jdƒƒdS)Nre)rr:r;r<reZ SetInParentr^)rr=rrrÚtestSetInParent]s zReflectionTest.testSetInParentcCs*ddlm}|jjƒ}|jd|jjƒdS)a•Test that we can import nested messages from their __init__.py. Such setup is not trivial since at the time of processing of __init__.py one can't refer to its submodules by name in code, so expressions like google.protobuf.internal.import_test_package.inner_pb2 don't work. They do work in imports, so we have assign an alias at import and then use that alias in generated code. r)Úimport_test_packageé9N)Úgoogle.protobuf.internalržZmyprotoZOuterr0ÚinnerrÇ)rržÚmsgrrrÚtestPackageInitializationImportcs  z.ReflectionTest.testPackageInitializationImport)N)`r&r'r(r4r>rHrUrWr[r]r`rhrkrlrorqrrrvrzr}rr…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ÿrrrr r/r4r7r8r;r>r@rJrKrMrQrRrSrTrVrXrYrZr^rarbrcrdrerfrjrmrorqrtrwrzr~ÚunittestÚskipIfr ryÚVersionrˆr‹ršr›rœr�r£rrrrr/rs´ "#Q       ) " !   ZS=1           : 6r/c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚTestAllTypesEqualityTestcCstjƒ|_tjƒ|_dS)N)rr:Ú first_protoÚ second_proto)rrrrÚsetUp{s zTestAllTypesEqualityTest.setUpcCs|jtt|jƒdS)N)rYrZÚhashr¨)rrrrÚtestNotHashablesz(TestAllTypesEqualityTest.testNotHashablecCs|j|j|jƒdS)N)r0r¨)rrrrÚtestSelfEquality‚sz)TestAllTypesEqualityTest.testSelfEqualitycCs|j|j|jƒdS)N)r0r¨r©)rrrrÚtestEmptyProtosEqual…sz-TestAllTypesEqualityTest.testEmptyProtosEqualN)r&r'r(rªr¬r­r®rrrrr§ysr§c@sheZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dd„ZdS)ÚFullProtosEqualityTestz@Equality tests using completely-full protos as a starting point.cCs0tjƒ|_tjƒ|_tj|jƒtj|jƒdS)N)rr:r¨r©rrN)rrrrrª�s   zFullProtosEqualityTest.setUpcCs|jtt|jƒdS)N)rYrZr«r¨)rrrrr¬“sz&FullProtosEqualityTest.testNotHashablecCs |j|jdƒ|jd|jƒdS)N)rir¨r©)rrrrÚtestNoneNotEqual–sz'FullProtosEqualityTest.testNoneNotEqualcCs(tjƒ}|j|j|ƒ|j||jƒdS)N)rr<rir¨r©)rZ third_protorrrÚtestNotEqualToOtherMessagešsz1FullProtosEqualityTest.testNotEqualToOtherMessagecCs|j|j|jƒdS)N)r0r¨r©)rrrrÚtestAllFieldsFilledEqualityŸsz2FullProtosEqualityTest.testAllFieldsFilledEqualitycCs@|jjd7_|j|j|jƒ|jjdƒ|j|j|jƒdS)Nr?r7)r¨r7rir©r_)rrrrÚtestNonRepeatedScalar¢s z,FullProtosEqualityTest.testNonRepeatedScalarcCs¢|jjjd7_|j|j|jƒ|jjjd8_|j|j|jƒ|jjjdƒ|j|j|jƒ|jjj|jj_|j|j|jƒ|jjdƒ|j|j|jƒdS)Nr?rIrV)r¨rVrIrir©r0r_)rrrrÚtestNonRepeatedCompositeªs z/FullProtosEqualityTest.testNonRepeatedCompositecCs>|jjjdƒ|j|j|jƒ|jjdƒ|j|j|jƒdS)NrprB)r¨rBr{rir©r_)rrrrÚtestRepeatedScalarºs z)FullProtosEqualityTest.testRepeatedScalarcCsˆ|jjdjd7_|j|j|jƒ|jjdjd8_|j|j|jƒ|jjjƒ|j|j|jƒ|jjjƒ|j|j|jƒdS)Nrr?)r¨rNrIrir©r0r|)rrrrÚtestRepeatedCompositeÁs  z,FullProtosEqualityTest.testRepeatedCompositecCs(|jjdƒd|j_|j|j|jƒdS)Nr7r)r¨r_r©r7ri)rrrrÚtestNonRepeatedScalarHasBitsÍs z3FullProtosEqualityTest.testNonRepeatedScalarHasBitscCsV|jjdƒ|jjjdƒ|j|j|jƒd|jj_|jjjdƒ|j|j|jƒdS)NrVrIr)r¨r_r©rVrirIr0)rrrrÚtestNonRepeatedCompositeHasBitsÔs   z6FullProtosEqualityTest.testNonRepeatedCompositeHasBitsN)r&r'r(r)rªr¬r°r±r²r³r´rµr¶r·r¸rrrrr¯‰s r¯c@seZdZdd„ZdS)ÚExtensionEqualityTestcCsøtjƒ}tjƒ}|j||ƒtj|ƒ|j||ƒtj|ƒ|j||ƒ|jtjd7<|j||ƒ|jtjd8<|j||ƒ|jtjƒd|jtj<|j||ƒd|jtj<|j||ƒtjƒ}tjƒ}|jd|jtjƒ|j||ƒdS)Nr?r) rr“r0rrlrir”r•r1)rr¨r©rrrÚtestExtensionEqualityás*            z+ExtensionEqualityTest.testExtensionEqualityN)r&r'r(rºrrrrr¹ßsr¹c@seZdZdd„ZdS)ÚMutualRecursionEqualityTestcCsPtjƒ}tjƒ}|j||ƒd|jjj_|j||ƒd|jjj_|j||ƒdS)Nri)rr~r0rIrMr7ri)rr¨r©rrrÚtestEqualityWithMutualRecursions    z;MutualRecursionEqualityTest.testEqualityWithMutualRecursionN)r&r'r(r¼rrrrr»sr»c@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-S).Ú ByteSizeTestcCs,tjƒ|_tjƒ|_tjƒ|_tjƒ|_ dS)N) rr:r=r ZExtendedMessageÚextended_protoÚTestPackedTypesÚ packed_protoÚTestPackedExtensionsÚpacked_extended_proto)rrrrrªs   zByteSizeTest.setUpcCs |jjƒS)N)r=r\)rrrrÚSizeszByteSizeTest.SizecCs|jd|jjƒƒdS)Nr)r0r=r\)rrrrÚtestEmptyMessageszByteSizeTest.testEmptyMessagecCs8tjƒ}|jd|jƒƒtjdd�}|jd|jƒƒdS)Nrr?)r¨r@)rr:r0r\)rr=Z proto_kwargsrrrÚtestSizedOnKwargss zByteSizeTest.testSizedOnKwargscsz‡fdd„}|ddƒ|ddƒx6ttdddƒtddƒƒD]\}}|d|>d|ƒq:W|d dƒ|d dƒ|d dƒdS)Ncs*ˆjjƒ|ˆj_ˆj|dˆjƒƒdS)Nr?)r=rkr¨r0rÃ)r3Zexpected_varint_size)rrrÚTest#s z&ByteSizeTest.testVarints..Testrr?rprÚi'r¸r@rðrúllûÿÿÿ)Úzipr1)rrÆr3Z num_bytesr)rrÚ testVarints"s   "  zByteSizeTest.testVarintscCshd|j_|jd|jƒƒd|j_|jdt|jjƒ|jƒƒdd|j_|jdt|jjƒ|jƒƒdS)Nr�r@rßr‹é€rA)r=r6r0rÃr$)rrrrÚ testStrings1s  zByteSizeTest.testStringscCs®d|j_|jd|jƒƒtjƒ|_d|j_|jd|jƒƒtjƒ|_d|j_|jd|jƒƒtjƒ|_d|j_|jd|jƒƒtjƒ|_d|j_ |jd|jƒƒtjƒ|_dS)NiÒrpé gX9´Èv¾ó?é@rA) r=r€r0rÃrr:r­r9r8r«)rrrrÚtestOtherNumerics>s    zByteSizeTest.testOtherNumericscCsd|jj_|jd|jƒƒdS) Nr?érAr@i@rrprp)r=rVrIr0rÃ)rrrrÚtestCompositesXs zByteSizeTest.testCompositescCsd|jj_|jd|jƒƒdS) Nr?r�rr@i rîrr¸)r=rerMr0rÃ)rrrrÚ testGroups`s zByteSizeTest.testGroupscCs0|jjjdƒ|jjjdƒ|jd|jƒƒdS)Nr¸rÉr?r@rArrp)r=rBr{r0rÃ)rrrrrÿgsz ByteSizeTest.testRepeatedScalarscCs&|jjjddgƒ|jd|jƒƒdS)Nr¸rÉr?r@rArrp)r=rBr‘r0rÃ)rrrrÚtestRepeatedScalarsExtendmsz&ByteSizeTest.testRepeatedScalarsExtendcCsN|jjjdƒ|jjjdƒ|jd|jƒƒ|jjjdƒ|jd|jƒƒdS) Nr¸rÉr?r@rArrprA)r=rBr{r0rÃr)rrrrrrs z&ByteSizeTest.testRepeatedScalarsRemovecCs2|jjjƒ}|jjjƒ}d|_|jd|jƒƒdS) Nrpr@r?rArprîrpr")r=rNr|rIr0rÃ)rÚforeign_message_0Úforeign_message_1rrrrzs  z#ByteSizeTest.testRepeatedCompositescCs |jjjƒ}|jjjƒ}d|_|jd |jƒƒtj|jjƒ}|jjd=|jd|jƒƒ|jjjƒ}d|_|jd|jƒƒ|jjd=|jd|jƒƒ|jjd=|jd|jƒƒ|jdt|ƒƒ|dd…=t j ƒdk�rä|jdt|ƒƒ|d=t j ƒdk�r|jdt|ƒƒdS)NrËr@r?rrLrwrArprîrpr"rArrprArrprpr"rËr¸rArrprð) r=rNr|rIr0rÃrgrhr$r ry)rrÒrÓrNZforeign_message_2rrrÚtestRepeatedCompositesDelete‚s,        z)ByteSizeTest.testRepeatedCompositesDeletecCs2|jjjƒ}|jjjƒ}d|_|jd|jƒƒdS) Nrpr@r?rrîr"rËr†)r=rPr|rMr0rÃ)rZgroup_0Zgroup_1rrrÚtestRepeatedGroups©s  zByteSizeTest.testRepeatedGroupsc Csjtjƒ}|jd|jƒƒtj}d|j|<|jd|jƒƒtjjjd}|j t ƒ�d|j|<WdQRXdS)Nrrir@r7) rr“r0r\r•r”r:r‚rƒrYrL)rr=r3r"rrrÚtestExtensions²s  zByteSizeTest.testExtensionscCs¶d|j_|jd|jjƒƒd|j_|jd|jjƒƒ|jjdƒ|jd|jjƒƒtj}d|jj|<|jd|jjƒƒd|jj|<|jd|jjƒƒ|jj |ƒ|jd|jjƒƒdS)Nr?r@rÉrAr7r) r=r7r0r\r_r rCr¾r”r1)rr3rrrÚ)testCacheInvalidationForNonrepeatedScalar¾s    z6ByteSizeTest.testCacheInvalidationForNonrepeatedScalarcCs|jjjdƒ|jd|jjƒƒ|jjjdƒ|jd|jjƒƒd|jjd<|jd|jjƒƒ|jjdƒ|jd|jjƒƒtj}|jj |}|jdƒ|jd|jjƒƒ|jdƒ|jd |jjƒƒd|d<|jd |jjƒƒ|jj |ƒ|jd|jjƒƒdS) Nr?rArîrÉrprBrr@rrp) r=rBr{r0r\r_r rDr¾r”r1)rr3ZrepeatedrrrÚ&testCacheInvalidationForRepeatedScalarÐs$      z3ByteSizeTest.testCacheInvalidationForRepeatedScalarcCs$d|jj_|jd|jjƒƒd|jj_|jd|jjƒƒ|jjjdƒ|jd|jjƒƒ|jjdƒ|jd|jjƒƒtjƒd kr®|jj}|jjdƒd|_|jd|jjƒƒtj }|j j |}|jd|j jƒƒd|_ |jd |j jƒƒd|_ |jd|j jƒƒ|j j |ƒ|jd|j jƒƒdS) Nr?rprÉrîrKrArfrrwr)r=rfrKr0r\r_r ryr rEr¾r”rFr1)rÚchildr3rrrÚ*testCacheInvalidationForNonrepeatedMessageçs,       z7ByteSizeTest.testCacheInvalidationForNonrepeatedMessagecCs|jjjƒ}|jd|jjƒƒ|jjjƒ|jd|jjƒƒd|_|jd|jjƒƒ|jjdƒ|jd|jjƒƒtj}|j j |}|jƒ}|jd|j jƒƒ|jƒ|jd|j jƒƒd|_ |jd|j jƒƒ|jd ƒ|jd|j jƒƒ|j j |ƒ|jd|j jƒƒdS) NrArîr?r"rOrr@rrF) r=rOr|r0r\rKr_r rGr¾r”rFr1)rZchild0r3Z child_listrrrÚ'testCacheInvalidationForRepeatedMessage s(      z4ByteSizeTest.testCacheInvalidationForRepeatedMessagecCsœ|jd|jjƒƒ|jjjdƒ|jjjdƒd }|j||jjƒƒ|jjjdƒ|jjjdƒd}|j|||jjƒƒ|jjd ƒ|j||jjƒƒdS)Nrr¸rÉr?r@rAgÍÌÌÌÌÌ@g @r"Ú packed_int32rArîrné)r0rÀr\rÜr{Ú packed_doubler_)rZint_sizeZ double_sizerrrÚtestPackedRepeatedScalars s z&ByteSizeTest.testPackedRepeatedScalarscCsH|jd|jjƒƒ|jjtj}|jddddgƒ|jd|jjƒƒdS)Nrr?r@rArrÝ)r0rÂr\r”rZpacked_fixed32_extensionr‘)rr3rrrÚtestPackedExtensions0 s z!ByteSizeTest.testPackedExtensionsN)r&r'r(rªrÃrÄrÅrÈrÊrÍrÏrÐrÿrÑrrrÔrÕrÖr×rØrÚrÛrßràrrrrr½ s, '  r½c@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„Zd9S):ÚSerializationTestcCsRtjƒ}tjƒ}|jƒ}|j|jƒt|ƒƒ|jt|ƒ|j|ƒƒ|j||ƒdS)N)rr:rÅr0r\r$r‘)rr¨r©r—rrrÚtestSerializeEmtpyMessageF s z+SerializationTest.testSerializeEmtpyMessagecCs\tjƒ}tjƒ}tj|ƒ|jƒ}|j|jƒt|ƒƒ|jt|ƒ|j|ƒƒ|j||ƒdS)N) rr:rrNrÅr0r\r$r‘)rr¨r©r—rrrÚtestSerializeAllFieldsP s  z(SerializationTest.testSerializeAllFieldscCsHtjƒ}tjƒ}tj|ƒ|jƒ}|jt|ƒ|j|ƒƒ|j||ƒdS)N)rr“rrlrÅr0r$r‘)rr¨r©r—rrrÚtestSerializeAllExtensions[ s  z,SerializationTest.testSerializeAllExtensionscCsFtjƒ}tjƒ}d|j_|jƒ}|jt|ƒ|j|ƒƒ|j||ƒdS)Néò)rr:rerMrÅr0r$r‘)rr¨r©r—rrrÚtestSerializeWithOptionalGroupe s z0SerializationTest.testSerializeWithOptionalGroupcCsLtjƒ}d|_d |_d |_d |_d|_d|_tjj|j ƒƒ}|j ||ƒdS)Nr?r@r÷rArrprîrðllýÿÿÿrûllýÿÿÿéûÿÿÿllýÿÿÿ) rr:r7r¨r«r¬r®r¯rOrÅr0)rr¨r©rrrÚtestSerializeNegativeValueso s z-SerializationTest.testSerializeNegativeValuescCsätjƒdkrdStjƒ}tj|ƒ|jƒ}x´tt|ƒdƒD] }yntjƒ}tj ƒ}|j |d|ƒ}|j ||ƒy|j |d|ƒ}|j ||ƒWn t j k rª|jdƒYnXWq<t j k rÚ|jt j |j |d|ƒYq.InitalizeEmptyMessageWithExtraKeywordArgz9Protocol message TestEmptyMessage has no "unknown" field.)rùrµ)rrrrrÚtestInitArgsUnknownFieldNameJ s z.SerializationTest.testInitArgsUnknownFieldNamecCsŽtjdddd�}|j|jƒƒ|j|jdƒƒ|j|jdƒƒ|j|jdƒƒ|j|jdƒ ƒ|jd|jƒ|jd|jƒ|jd|jƒdS)Nr?)rMr{rKrMr{rKÚdummy2) rr<r^rur<r0rMr{rK)rr=rrrÚtestInitRequiredKwargsR sz(SerializationTest.testInitRequiredKwargscCsÞtjtjdddd�d�}|j|jƒƒ|j|jdƒƒ|j|jjƒƒ|j|jjdƒƒ|j|jjdƒƒ|j|jjdƒƒ|j|jjdƒ ƒ|jtjdddd�|jƒ|jd|jjƒ|jd|jj ƒ|jd|jj ƒdS) Nr?)rMr{rK)r|r|rMr{rKr) rr»r<r^rur<r|r0rMr{rK)rr=rrrÚtestInitRequiredForeignKwargs] sz/SerializationTest.testInitRequiredForeignKwargscCsZtjdddgd�}|j|jƒƒ|jd|jdƒ|jd|jdƒ|jd|jdƒdS)Nr?r@rA)rBr)rr:r^rur0rB)rr=rrrÚtestInitRepeatedKwargsm s z(SerializationTest.testInitRepeatedKwargsN)r&r'r(rârãrärærèrërírîrïrör÷rørùrûrürþrÿrrr r r rrrrrrrrrrráD s8    6) 3!     rác@seZdZdd„Zdd„ZdS)Ú OptionsTestcCs<tjƒ}|jd|jjƒjƒtjƒ}|jd|jjƒjƒdS)NTF)r r�r0r‚ròrórr:)rr=rrrÚtestMessageOptionsw s zOptionsTest.testMessageOptionscCsštjƒ}d|_d|_x&|jƒD]\}}|jd|jƒjƒqWtjƒ}|j j dƒ|j j dƒx8|jƒD],\}}|jd|jƒjƒ|jt j j|jƒqfWdS)Nr?g@FT)rr:r7r8r„r0ròrr¿rÜr{rÞrrr-r )rr=Zfield_descriptorÚ_rrrÚtestPackedOptions s   zOptionsTest.testPackedOptionsN)r&r'r(rrrrrrru src@sreZdZejejƒdko"ejƒdkdƒdd„ƒZdd„Z e j dƒd d „ƒZ e j dƒd d „ƒZ e j dƒd d„ƒZdS)Ú ClassAPITestrr@z6C++ implementation requires a call to MakeDescriptor()c Cs¨tjddddggggd�}tjddddg|gggd�}tjddddggggd�}tjd d ddg||gggd�}tj|ƒ}|jd|jƒ|jd|jƒ|jd|jjƒdS) NZleafzpackage.parent.child.leafr�)rrrrrrÙzpackage.parent.childZsiblingzpackage.parent.siblingÚparentzpackage.parent)rrrÚ MakeClassr…Ú__dict__rÙ)rZ leaf_descZ child_descZ sibling_descZ parent_descZ message_classrrrÚ!testMakeClassWithNestedDescriptor’ s(     z.ClassAPITest.testMakeClassWithNestedDescriptorcCs(d|d}tjƒ}tj||ƒ|jƒS)a Get a serialized representation of a test FileDescriptorProto. Args: name: All calls to this must use a unique message name, to avoid collisions in the cpp descriptor pool. Returns: A string containing the serialized form of a test FileDescriptorProto. zmessage_type { name: "ai" field { name: "flat" number: 1 label: LABEL_REPEATED type: TYPE_UINT32 } field { name: "bar" number: 2 label: LABEL_OPTIONAL type: TYPE_MESSAGE type_name: "Bar" } nested_type { name: "Bar" field { name: "baz" number: 3 label: LABEL_OPTIONAL type: TYPE_MESSAGE type_name: "Baz" } nested_type { name: "Baz" enum_type { name: "deep_enum" value { name: "VALUE_A" number: 0 } } field { name: "deep" number: 4 label: LABEL_OPTIONAL type: TYPE_UINT32 } } }})rr�r ÚMergerÅ)rr Zfile_descriptor_strÚfile_descriptorrrrÚ_GetSerializedFileDescriptor« s ) z)ClassAPITest._GetSerializedFileDescriptorz MakeDescriptor is not repeatablecs†tjƒdkrdStjƒ}|j|jdƒƒtj|jdƒ‰G‡fdd„dt j t j t jƒƒ}|ƒ}d}tj||ƒ|j|jddd gƒdS) z7Test that the generated class can parse a flat message.rwNÚArcseZdZ”ZdS)zSClassAPITest.testParsingFlatClassWithExplicitClassDeclaration..MessageClassN)r&r'r(r‚r)Úmsg_descriptorrrÚ MessageClassô sr&zflat: 0 flat: 1 flat: 2 r?r@)r ryrr�rÄr#rr.rrrrrrrr r!r0Úflat)rr"r&r¢Úmsg_strr)r%rÚ0testParsingFlatClassWithExplicitClassDeclarationã s    z=ClassAPITest.testParsingFlatClassWithExplicitClassDeclarationcCs`tjƒ}|j|jdƒƒtj|jdƒ}tj|ƒ}|ƒ}d}t j ||ƒ|j |j dddgƒdS)z7Test that the generated class can parse a flat message.ÚBrzflat: 0 flat: 1 flat: 2 r?r@N) rr�rÄr#rr.rrrr r!r0r')rr"r%Ú msg_classr¢r(rrrÚtestParsingFlatClassþ s   z!ClassAPITest.testParsingFlatClasscCs^tjƒ}|j|jdƒƒtj|jdƒ}tj|ƒ}|ƒ}d}t j ||ƒ|j |j j jdƒdS)z9Test that the generated class can parse a nested message.ÚCrzbar { baz { deep: 4 }}rN)rr�rÄr#rr.rrrr r!r0r‡rˆZdeep)rr"r%r+r¢r(rrrÚtestParsingNestedClass s   z#ClassAPITest.testParsingNestedClassN)r&r'r(r¤r¥r ryr¦r r#rZSkipReferenceLeakCheckerr)r,r.rrrrr� s8rÚ__main__))r)rgrmr5rrZ unittest2r¤Ú ImportErrorZgoogle.protobufrrrrrrrr r r r r r rrrrZ BaseTestCaseÚobjectrr/r§r¯r¹r»r½rárrr&ÚmainrrrrÚ#sv                 -V! :5