o
    ‹¨ÊhÍ‚ ã                   @   s>  d Z dZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
zddlZW n ey;   ddlZY nw ze W n eyM   dd„ ZY nw ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! dZ"ej#rµe$Z%dd„ Z&dd„ Z'dd„ Z(dd„ Z)ej*Z*e! +defd ef¡G d!d"„ d"e*ƒƒZ,G d#d$„ d$e*ƒZ-G d%d&„ d&e*ƒZ.G d'd(„ d(e*ƒZ/G d)d*„ d*e*ƒZ0e 1e 2¡ d+k�pe	j3d,k d-¡G d.d/„ d/e*ƒƒZ4e5d0k�re 6¡  dS dS )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)é    Nc                 C   s   | |k| |k  S ©N© )ÚxÚyr   r   úW/var/www/html/env/lib/python3.10/site-packages/google/protobuf/internal/message_test.pyÚ<lambda>A   s    r   )Úmap_proto2_unittest_pb2)Úmap_unittest_pb2)Úunittest_pb2)Úunittest_proto3_arena_pb2)Údescriptor_pb2)Údescriptor_pool)Úmessage_factory)Útext_format)Úapi_implementation)Úencoder)Úmore_extensions_pb2)Úpacked_field_test_pb2)Ú	test_util)Útesting_refleaks)Úmessage)Ú_parameterizediÿÿ  c                 C   s   | | kS r   r   ©Úvalr   r   r   Úisnan[   s   r   c                 C   s   t | ƒ o
t | d ƒS ©Nr   )r   r   r   r   r   Úisinf^   s   r   c                 C   s   t | ƒo| dkS r   ©r   r   r   r   r   ÚIsPosInfa   ó   r   c                 C   s   t | ƒo| dk S r   r   r   r   r   r   ÚIsNegInfc   r   r    Ú_proto2Ú_proto3c                
   @   sŒ  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"e# $e%j&dA¡dBdC„ ƒZ'e# $e%j(dD¡dEdF„ ƒZ)dGdH„ Z*dIdJ„ Z+dKdL„ Z,dMdN„ Z-dOdP„ Z.dQdR„ Z/dSdT„ Z0dUdV„ Z1dWdX„ Z2dYdZ„ Z3d[d\„ Z4d]d^„ Z5d_d`„ Z6dadb„ Z7dcdd„ Z8dedf„ Z9dgdh„ Z:didj„ Z;dkdl„ Z<dmdndodpdqdre=ƒ g i e>ƒ g
Z?dsdt„ Z@dudv„ ZAdwdx„ ZBdydz„ ZCd{d|„ ZDd}d~„ ZEdd€„ ZFG d�d‚„ d‚eGƒZHdƒd„„ ZId…d†„ ZJd‡dˆ„ ZKd‰dŠ„ ZLd‹dŒ„ ZMd�dŽ„ ZNd�d�„ ZOd‘d’„ ZPd“d”„ ZQd•d–„ ZRd—d˜„ ZSdmS )™ÚMessageTestc                 C   sl   t  ¡ dkr|  d¡ t d¡}|  t¡�}|j |¡ W d   ƒ n1 s&w   Y  |  	dt
|jƒ¡ d S )NÚpythonzŠSkipping testBadUtf8String, currently only the python api implementation raises UnicodeDecodeError when a string field contains bad utf-8.Úbad_utf8_stringzTestAllTypes.optional_string)r   ÚTypeÚskipTestr   ÚGoldenFileDataÚassertRaisesÚUnicodeDecodeErrorÚTestAllTypesÚ
FromStringÚassertInÚstrÚ	exception)ÚselfÚmessage_moduleÚbad_utf8_dataÚcontextr   r   r   ÚtestBadUtf8Stringo   s   

ÿzMessageTest.testBadUtf8Stringc                 C   sr   |t u r
t d¡}nt d¡}| ¡ }| |¡ |t u r"t | |¡ |  || ¡ ¡ t 	|¡}|  || ¡ ¡ d S )NÚ golden_message_oneof_implementedÚgolden_message_proto3)
r
   r   r(   r+   ÚParseFromStringÚExpectAllFieldsSetÚassertEqualÚSerializeToStringÚcopyÚdeepcopy)r0   r1   Úgolden_dataÚgolden_messageÚgolden_copyr   r   r   ÚtestGoldenMessagey   s   ÿ


zMessageTest.testGoldenMessagec                 C   sx   t  d¡}| ¡ }| |¡}| ¡ }t  |¡ |  |t|ƒ¡ |  ||¡ |  || ¡ ¡ t 	|¡}|  || ¡ ¡ d S ©NÚgolden_packed_fields_message)
r   r(   ÚTestPackedTypesr7   ÚSetAllPackedFieldsr9   Úlenr:   r;   r<   )r0   r1   r=   r>   Úparsed_bytesÚall_setr?   r   r   r   ÚtestGoldenPackedMessage‹   s   



z#MessageTest.testGoldenPackedMessagec                 C   s�   |  ¡ }|  t|jd¡ |  t|jd¡ t dd¡}t ¡ dkrF|  t	j
¡�}| |¡ W d   ƒ n1 s6w   Y  |  dt|jƒ¡ d S d S )Nr   Ú0é   é   r$   zUnexpected end-group tag.)r+   r)   Ú	TypeErrorr,   Ú	Exceptionr   ÚTagBytesr   r&   r   ÚDecodeErrorr9   r.   r/   )r0   r1   ÚmsgÚend_tagr3   r   r   r   ÚtestParseErrors—   s   ÿýzMessageTest.testParseErrorsc                    sº   d}|  ¡ }|j g d¢¡ |  ||jd d�¡ |  ||jdd�¡ |  ||jdd�¡ G dd„ dtƒ‰ G ‡ fdd	„d	tƒ}|  ˆ ¡� |j|ƒ d� W d   ƒ d S 1 sVw   Y  d S )
Ns5   â
One stringâ
Two stringâ
Red stringâBlue string)z
One stringz
Two stringz
Red stringzBlue string©ÚdeterministicFTc                   @   s   e Zd ZdS )z:MessageTest.testDeterminismParameters.<locals>.BadArgErrorN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   ÚBadArgError¹   s    rX   c                       s$   e Zd Z‡ fdd„Z‡ fdd„ZdS )z5MessageTest.testDeterminismParameters.<locals>.BadArgc                    ó   ˆ ƒ ‚r   r   ©r0   ©rX   r   r   Ú__nonzero__¾   ó   zAMessageTest.testDeterminismParameters.<locals>.BadArg.__nonzero__c                    rY   r   r   rZ   r[   r   r   Ú__bool__Á   r]   z>MessageTest.testDeterminismParameters.<locals>.BadArg.__bool__N)rU   rV   rW   r\   r^   r   r[   r   r   ÚBadArg¼   s    r_   )r+   Úrepeated_stringÚextendr9   r:   rM   Úobjectr)   )r0   r1   r=   r>   r_   r   r[   r   ÚtestDeterminismParameters£   s"   
ÿ
ÿ
ÿ"ÿz%MessageTest.testDeterminismParametersc                 C   s@   t  d¡}| ¡ }| |¡ t |¡}t |¡}|  ||¡ d S ©Nr>   )r   r(   r+   r7   ÚpickleÚdumpsÚloadsr9   )r0   r1   r=   r>   Úpickled_messageÚunpickled_messager   r   r   ÚtestPickleSupportÇ   s   



zMessageTest.testPickleSupportc                 C   ó€   |t u rd}nd}| ¡ }| |¡ |  t|jƒ¡ |  t|jƒ¡ |  t|jd ƒ¡ |  t|jd ƒ¡ |  	|| 
¡ ¡ d S )Ns   ]  €a      ðÍ  €Ñ      ðs    ]  €a      ðÊ  €Ò      ðr   )r
   r+   r7   Ú
assertTruer   Úoptional_floatÚoptional_doubleÚrepeated_floatÚrepeated_doubler9   r:   ©r0   r1   r=   r>   r   r   r   ÚtestPositiveInfinityÐ   ó   
z MessageTest.testPositiveInfinityc                 C   rk   )Ns   ]  €ÿa      ðÿÍ  €ÿÑ      ðÿs    ]  €ÿa      ðÿÊ  €ÿÒ      ðÿr   )r
   r+   r7   rl   r    rm   rn   ro   rp   r9   r:   rq   r   r   r   ÚtestNegativeInfinityä   rs   z MessageTest.testNegativeInfinityc                 C   sÄ   d}|  ¡ }| |¡ |  t|jƒ¡ |  t|jƒ¡ |  t|jd ƒ¡ |  t|jd ƒ¡ | ¡ }|  ¡ }| |¡ |  t|jƒ¡ |  t|jƒ¡ |  t|jd ƒ¡ |  t|jd ƒ¡ d S )Ns   ]  Àa      øÍ  ÀÑ      ør   )	r+   r7   rl   r   rm   rn   ro   rp   r:   ©r0   r1   r=   r>   Ú
serializedr   r   r   r   ÚtestNotANumberø   s   

zMessageTest.testNotANumberc                 C   óR   d}|  ¡ }| |¡ |  t|jd ƒ¡ |  t|jd ƒ¡ |  || ¡ ¡ d S )Ns   ¢  €ª      ðr   )rC   r7   rl   r   Úpacked_floatÚpacked_doubler9   r:   rq   r   r   r   ÚtestPositiveInfinityPacked  ó   
z&MessageTest.testPositiveInfinityPackedc                 C   rx   )Ns   ¢  €ÿª      ðÿr   )rC   r7   rl   r    ry   rz   r9   r:   rq   r   r   r   ÚtestNegativeInfinityPacked  r|   z&MessageTest.testNegativeInfinityPackedc                 C   s„   d}|  ¡ }| |¡ |  t|jd ƒ¡ |  t|jd ƒ¡ | ¡ }|  ¡ }| |¡ |  t|jd ƒ¡ |  t|jd ƒ¡ d S )Ns   ¢  Àª      ør   )rC   r7   rl   r   ry   rz   r:   ru   r   r   r   ÚtestNotANumberPacked"  s   

z MessageTest.testNotANumberPackedc                 C   ót  |  ¡ }t dd¡}||_| | ¡ ¡ |  |j|k¡ dt dd¡ }||_| | ¡ ¡ |  |j|k¡ | |_| | ¡ ¡ |  |j| k¡ | |_| | ¡ ¡ |  |j| k¡ t dd¡}||_| | ¡ ¡ |  |j|k¡ dt dd¡ }||_| | ¡ ¡ |  |j|k¡ | |_| | ¡ ¡ |  |j| k¡ | |_| | ¡ ¡ |  |j| k¡ d S )Né   é   ç      ø?i�ÿÿÿ)r+   ÚmathÚpowrm   r7   r:   rl   ©r0   r1   r   ÚkMostPosExponentNoSigBitsÚkMostPosExponentOneSigBitÚkMostNegExponentNoSigBitsÚkMostNegExponentOneSigBitr   r   r   ÚtestExtremeFloatValues0  ó:   z"MessageTest.testExtremeFloatValuesc                 C   r   )Nr€   iÿ  r‚   iüÿÿ)r+   rƒ   r„   rn   r7   r:   rl   r…   r   r   r   ÚtestExtremeDoubleValues]  r‹   z#MessageTest.testExtremeDoubleValuesc                 C   s"   |  ¡ }d|_|  t|ƒd¡ d S )Nç       @zoptional_float: 2.0
)r+   rm   r9   r.   ©r0   r1   r   r   r   r   ÚtestFloatPrintingŠ  s   zMessageTest.testFloatPrintingc                 C   s@   |  ¡ }d|_tjdkr|  t|ƒd¡ d S |  t|ƒd¡ d S )Ng^!Á7Ýš¿?©é   z%optional_double: 0.12345678912345678
z optional_double: 0.123456789123
)r+   rn   ÚsysÚversion_infor9   r.   rŽ   r   r   r   ÚtestHighPrecisionFloatPrinting�  s
   
z*MessageTest.testHighPrecisionFloatPrintingc                 C   s<   |  ¡ }t |¡ | ¡ }| | ¡ ¡ |  t|ƒd¡ d S )NÚ )r+   r   ÚSetAllNonLazyFieldsÚTestEmptyMessager7   r:   r9   r.   )r0   r1   Ú	populatedÚemptyr   r   r   ÚtestUnknownFieldPrinting—  s
   
z$MessageTest.testUnknownFieldPrintingc                 C   sÆ   |  ¡ }|j d¡ |j d¡ |jjdd� |jjdd� |  ¡ }|jjdd� |jjdd� |j d¡ |j d¡ |j |j¡ |  dt|jƒ¡ |j |j¡ |  g d¢d	d
„ |jD ƒ¡ d S )NrJ   r‘   ©Úbbr€   rK   é   é   ©rJ   r€   r‘   rK   c                 S   ó   g | ]}|j ‘qS r   r›   ©Ú.0Úmr   r   r   Ú
<listcomp>¯  ó    z:MessageTest.testMergeFromRepeatedField.<locals>.<listcomp>)r+   Úrepeated_int32ÚappendÚrepeated_nested_messageÚaddÚ	MergeFromr9   rE   )r0   r1   rP   Ú	other_msgr   r   r   ÚtestMergeFromRepeatedFieldž  s    
ÿz&MessageTest.testMergeFromRepeatedFieldc                 C   sh   |  ¡ }z|j d¡ W n	 ty   Y nw z	|jjdd� W n	 ty(   Y nw |  t|jƒd¡ d S )NÚwrong)Úvalue_fieldr   )r+   r¨   r©   rL   Ú
ValueErrorr9   rE   ©r0   r1   rP   r   r   r   ÚtestAddWrongRepeatedNestedField±  s   ÿÿz+MessageTest.testAddWrongRepeatedNestedFieldc                 C   s¦   |  ¡ }|jjdd� |jjdd� |jjdd� |jjdd� |  g d¢dd„ |jD ƒ¡ |  g d	¢d
d„ t|jƒD ƒ¡ |  g d	¢dd„ |jd d d… D ƒ¡ d S )NrJ   r›   r€   r‘   rK   rŸ   c                 S   r    r   r›   r¡   r   r   r   r¤   Å  r¥   z@MessageTest.testRepeatedNestedFieldIteration.<locals>.<listcomp>)rK   r‘   r€   rJ   c                 S   r    r   r›   r¡   r   r   r   r¤   Ç  r¥   c                 S   r    r   r›   r¡   r   r   r   r¤   É  r¥   éÿÿÿÿ)r+   r¨   r©   r9   Úreversedr°   r   r   r   Ú testRepeatedNestedFieldIteration½  s   
ÿ
ÿ
ÿz,MessageTest.testRepeatedNestedFieldIterationc                 C   sê  |  ¡ }|j d¡ |j d¡ |j d¡ |j ¡  |  |jd d¡ |  |jd d¡ |  |jd d¡ |  t|jƒtg d¢ƒ¡ |j d¡ |j d¡ |j d¡ |j ¡  |  |jd d¡ |  |jd d¡ |  |jd d¡ |j d	¡ |j d
¡ |j d¡ |j ¡  |  |jd d	¡ |  |jd d¡ |  |jd d
¡ |  t|jƒtg d¢ƒ¡ |j	 d¡ |j	 d¡ |j	 d¡ |j	 ¡  |  |j	d d¡ |  |j	d d¡ |  |j	d d¡ |  t|j	ƒtg d¢ƒ¡ dS )z7Check some different types with the default comparator.rJ   r‘   r€   r   )rJ   r€   r‘   çš™™™™™ñ?gÍÌÌÌÌÌô?ç333333ó?ÚaÚcÚb©r·   r¹   r¸   ó   aó   có   b)r»   r½   r¼   N)
r+   r¦   r§   Úsortr9   r.   ro   ÚassertAlmostEqualr`   Úrepeated_bytesrŽ   r   r   r   Ú0testSortingRepeatedScalarFieldsDefaultComparatorË  s@   



z<MessageTest.testSortingRepeatedScalarFieldsDefaultComparatorc                 C   sÜ   |  ¡ }|j d¡ |j d¡ |j d¡ |jjtd� |  |jd d¡ |  |jd d¡ |  |jd d¡ |j d¡ |j d	¡ |j d
¡ |jjtd� |  |jd d
¡ |  |jd d	¡ |  |jd d¡ dS )z2Check some different types with custom comparator.éýÿÿÿéþÿÿÿr²   ©Úkeyr   rJ   r€   Úaaarœ   r¸   N)r+   r¦   r§   r¾   Úabsr9   r`   rE   rŽ   r   r   r   Ú/testSortingRepeatedScalarFieldsCustomComparatoró  s   z;MessageTest.testSortingRepeatedScalarFieldsCustomComparatorc                 C   sò   |  ¡ }d|j ¡ _d|j ¡ _d|j ¡ _d|j ¡ _d|j ¡ _d|j ¡ _|jjt d¡d� |  |jd	 jd¡ |  |jd jd¡ |  |jd jd¡ |  |jd jd¡ |  |jd jd¡ |  |jd jd¡ |  t|jƒd
¡ dS )úECheck passing a custom comparator to sort a repeated composite field.rJ   r‘   r€   é   r�   rK   rœ   rÄ   r   z0[bb: 1
, bb: 2
, bb: 3
, bb: 4
, bb: 5
, bb: 6
]N)	r+   r¨   r©   rœ   r¾   ÚoperatorÚ
attrgetterr9   r.   rŽ   r   r   r   Ú2testSortingRepeatedCompositeFieldsCustomComparator  s"   ÿz>MessageTest.testSortingRepeatedCompositeFieldsCustomComparatorc                 C   sÄ   |  ¡ }d|j ¡ _d|j ¡ _d|j ¡ _d|j ¡ _d|j ¡ _d|j ¡ _d|j ¡ _|jjdd	„ d
� |  g d¢dd„ |jD ƒ¡ | ¡ }| ¡  | |¡ |  g d¢dd„ |jD ƒ¡ dS )rÉ   é   é   é   é!   é   é   é
   c                 S   s
   | j d S )NrÔ   r›   )Úzr   r   r   r   &  s   
 zFMessageTest.testSortingRepeatedCompositeFieldsStable.<locals>.<lambda>rÄ   )rÐ   rÒ   rÔ   rÎ   rÏ   rÓ   rÑ   c                 S   r    r   r›   ©r¢   Únr   r   r   r¤   )  r¥   zHMessageTest.testSortingRepeatedCompositeFieldsStable.<locals>.<listcomp>c                 S   r    r   r›   rÖ   r   r   r   r¤   2  r¥   N)	r+   r¨   r©   rœ   r¾   r9   r:   ÚClearÚMergeFromString)r0   r1   r   Úpbr   r   r   Ú(testSortingRepeatedCompositeFieldsStable  s(   þ
þz4MessageTest.testSortingRepeatedCompositeFieldsStablec                 C   s   |  ¡ }t d¡}dd„ }d|j ¡ _d|j ¡ _d|j ¡ _d|j ¡ _d|j ¡ _d	|j ¡ _|jj|d
� |  dd„ |jD ƒg d¢¡ |jj|dd� |  dd„ |jD ƒg d¢¡ tj	dkrcdS |jj|d� |  dd„ |jD ƒg d¢¡ |jj|dd� |  dd„ |jD ƒg d¢¡ dS )zECheck sorting a repeated composite field using list.sort() arguments.rœ   c                 S   s   t | j|jƒS r   )Úcmprœ   ©r·   r¹   r   r   r   r   9  s    zEMessageTest.testRepeatedCompositeFieldSortArguments.<locals>.<lambda>rJ   r‘   r€   rÊ   r�   rK   rÄ   c                 S   r    r   r›   ©r¢   Úkr   r   r   r¤   A  r¥   zGMessageTest.testRepeatedCompositeFieldSortArguments.<locals>.<listcomp>)rJ   r€   r‘   rK   r�   rÊ   T©rÅ   Úreversec                 S   r    r   r›   rÞ   r   r   r   r¤   D  r¥   )rÊ   r�   rK   r‘   r€   rJ   r�   N©Úsort_functionc                 S   r    r   r›   rÞ   r   r   r   r¤   H  r¥   ©rÜ   rá   c                 S   r    r   r›   rÞ   r   r   r   r¤   K  r¥   )
r+   rË   rÌ   r¨   r©   rœ   r¾   r9   r’   r“   )r0   r1   r   Úget_bbÚcmp_bbr   r   r   Ú'testRepeatedCompositeFieldSortArguments4  s4   
ÿÿÿÿz3MessageTest.testRepeatedCompositeFieldSortArgumentsc                 C   s¤  |  ¡ }|j d¡ |j d¡ |j d¡ |jjtd� |  t|jƒg d¢¡ |jjtdd� |  t|jƒg d¢¡ tjd	k rid
d„ }|jj|d� |  t|jƒg d¢¡ |jj|dd� |  t|jƒg d¢¡ |j	 d¡ |j	 d¡ |j	 d¡ |j	jt
d� |  t|j	ƒg d¢¡ |j	jt
dd� |  t|j	ƒg d¢¡ tjd	k rÐdd„ }|j	j|d� |  t|j	ƒg d¢¡ |j	j|dd� |  t|j	ƒg d¢¡ dS dS )z9Check sorting a scalar field using list.sort() arguments.rÂ   rÃ   r²   rÄ   )r²   rÃ   rÂ   Trà   )rÂ   rÃ   r²   r�   c                 S   ó   t t| ƒt|ƒƒS r   )rÜ   rÇ   rÝ   r   r   r   r   Z  r¥   zBMessageTest.testRepeatedScalarFieldSortArguments.<locals>.<lambda>râ   rä   rÆ   rœ   r¸   )r¸   rœ   rÆ   )rÆ   rœ   r¸   c                 S   rè   r   )rÜ   rE   rÝ   r   r   r   r   h  r¥   N)r+   r¦   r§   r¾   rÇ   r9   Úlistr’   r“   r`   rE   )r0   r1   r   Úabs_cmpÚlen_cmpr   r   r   Ú$testRepeatedScalarFieldSortArgumentsN  s8   

ûz0MessageTest.testRepeatedScalarFieldSortArgumentsc                 C   s^  |  ¡ }|  ¡ }|j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ d|j ¡ _d|j ¡ _d|j ¡ _d|j ¡ _d|j ¡ _d|j ¡ _tjdkrWd S ||k }|j|jk }|  t	||ƒd¡ |  t	|j|jƒd¡ |  t	|jg d¢ƒd¡ |  t	|j|jƒd¡ |  
t¡� t	|j|jd d … ƒ W d   ƒ d S 1 s¨w   Y  d S )Nr   rJ   r€   r‘   r�   ©r   rJ   r€   )r+   r¦   r§   r¨   r©   rœ   r’   r“   r9   rÜ   r)   rL   )r0   r1   Úm1Úm2Ú_r   r   r   ÚtestRepeatedFieldsComparablen  s8   
ÿÿ"þz(MessageTest.testRepeatedFieldsComparablec                 C   s,   |  ¡ }|  |jtj¡ |  |jtj¡ d S r   )r+   ÚassertIsInstancer¦   ÚcollectionsÚMutableSequencer¨   ©r0   r1   r£   r   r   r   ÚtestRepeatedFieldsAreSequences‘  s
   ÿz*MessageTest.testRepeatedFieldsAreSequencesc                 C   sv   |  ¡ }|  t¡� t|jƒ W d   ƒ n1 sw   Y  |  t¡� t|jƒ W d   ƒ d S 1 s4w   Y  d S r   )r+   r)   rL   Úhashr¦   r¨   rõ   r   r   r   ÚtestRepeatedFieldsNotHashable—  s   ÿ"ÿz)MessageTest.testRepeatedFieldsNotHashablec                 C   s*   |  ¡ }|jj g ¡ |  | d¡¡ d S )NÚpayload)ÚNestedTestAllTypesrù   r¦   ra   rl   ÚHasFieldrõ   r   r   r   Ú$testRepeatedFieldInsideNestedMessagež  s   z0MessageTest.testRepeatedFieldInsideNestedMessagec                 C   sê   |  ¡ }|  ¡ }|  d|jj¡ d|j_| |¡ |  d|jj¡ | ¡ }| ¡ }|  d|jjjj¡ d|jjj_| |¡ |  d|jjjj¡ |  |jj|jj¡ d|jj 	¡ _| |¡ |  dt
|jjƒ¡ |  d|jjd j¡ d S ©Nr   rJ   )r+   r9   Úoptional_nested_messagerœ   rª   rú   Úchildrù   r¨   r©   rE   )r0   r1   rî   rï   Úmsg1Úmsg2r   r   r   ÚtestMergeFrom£  s&   


ÿ
zMessageTest.testMergeFromc                 C   sJ   |  ¡ }|  ¡ }|  d|jj¡ d|j_| | ¡ ¡ |  d|jj¡ d S rý   )r+   r9   rþ   rœ   rÙ   r:   )r0   r1   rî   rï   r   r   r   ÚtestMergeFromString¾  s   zMessageTest.testMergeFromStringz+memoryview objects are not supported on py2c                 C   sÌ   |  ¡ }d|_|j d¡ d|_|j d¡ | ¡ }t|ƒ}|j  |¡}|  	|jd¡ |  	|jdg¡ |  	|jd¡ |  	|jdg¡ |  
|jt¡ |  
|jd t¡ |  
|jtj¡ |  
|jd tj¡ d S )Nzscalar stringzrepeated strings   scalar bytess   repeated bytesr   )r+   Úoptional_stringr`   r§   Úoptional_bytesrÀ   r:   Ú
memoryviewr,   r9   rò   ÚbytesÚsixÚ	text_type)r0   r1   rï   rv   Úmemviewrî   r   r   r   Ú,testMergeFromStringUsingMemoryViewWorksInPy3É  s    z8MessageTest.testMergeFromStringUsingMemoryViewWorksInPy3zmemoryview is supported by py3c                 C   sD   t dƒ}|  t¡� |j |¡ W d   ƒ d S 1 sw   Y  d S )Nó    )r  r)   rL   r+   r,   )r0   r1   r
  r   r   r   Ú,testMergeFromStringUsingMemoryViewIsPy2Errorà  s   "ÿz8MessageTest.testMergeFromStringUsingMemoryViewIsPy2Errorc                 C   sF   |  ¡ }|  d|jj¡ |  | d¡¡ | d¡ |  | d¡¡ d S )Nr   rþ   r  )r+   r9   rþ   rœ   ÚassertFalserû   rÙ   )r0   r1   rî   r   r   r   ÚtestMergeFromEmptyæ  s
   
zMessageTest.testMergeFromEmptyc                 C   s   t ||ƒ |  | |¡¡ dS )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)Úgetattrr  rû   )r0   rP   Ú	attributer   r   r   ÚensureNestedMessageExistsï  s   
z%MessageTest.ensureNestedMessageExistsc                 C   s,   |  ¡ }|  t|jd¡ |  t|jd¡ d S )NÚno_such_oneof_fieldr   )r+   r)   r¯   Ú
WhichOneofrM   rõ   r   r   r   Ú testOneofGetCaseNonexistingFieldø  s   z,MessageTest.testOneofGetCaseNonexistingFieldc                 C   sž   |  ¡ }|  d | d¡¡ |  | d¡¡ d|_|  d| d¡¡ |  | d¡¡ |  | d¡¡ d|_|  d| d¡¡ |  | d¡¡ |  | d¡¡ d S )NÚoneof_fieldÚoneof_uint32r   Úoneof_stringr•   )	r+   ÚassertIsr  r  rû   r  r9   rl   r  rõ   r   r   r   ÚtestOneofDefaultValuesý  s   z"MessageTest.testOneofDefaultValuesc                 C   sb  |  ¡ }|  d | d¡¡ d|_|  d| d¡¡ |  | d¡¡ d|_|  d| d¡¡ |  | d¡¡ |  | d¡¡ |j	 |  d| d¡¡ |  | d¡¡ |  | d¡¡ |j	j
 |  d| d¡¡ |  | d¡¡ |  | d¡¡ d|j	_
|  d| d¡¡ |  | d¡¡ |  | d¡¡ d|_|  d| d¡¡ |  | d¡¡ |  | d¡¡ d S )	Nr  rÒ   r  Úfoor  Úoneof_nested_messageó   bbÚoneof_bytes)r+   r  r  r  r9   rl   rû   r  r  r  rœ   r  rõ   r   r   r   ÚtestOneofSemantics  s2   zMessageTest.testOneofSemanticsc                 C   s>   |  ¡ }d|_|  |d¡ |  d| d¡¡ |  d|j¡ d S )NrÒ   r  r  r  )r+   r  r  r9   r  rõ   r   r   r   Ú!testOneofCompositeFieldReadAccess0  s
   z-MessageTest.testOneofCompositeFieldReadAccessc                 C   s¶   |  ¡ }|  d | d¡¡ |tu r|  | d¡¡ d|_|  d| d¡¡ |tu r1|  | d¡¡ d|_	|  d| d¡¡ | 
d¡ |  d | d¡¡ |tu rY|  | d¡¡ d S d S )Nr  rÒ   r  r  r  )r+   r  r  r
   r  rû   r  r9   rl   r  Ú
ClearFieldrõ   r   r   r   ÚtestOneofWhichOneof8  s   
ÿzMessageTest.testOneofWhichOneofc                 C   sV   |  ¡ }d|_| d¡ |tu r|  | d¡¡ |  | d¡¡ |  d | d¡¡ d S )NrÒ   r  r  ©r+   r  r!  r
   r  rû   r  r  rõ   r   r   r   ÚtestOneofClearFieldK  ó   
zMessageTest.testOneofClearFieldc                 C   sV   |  ¡ }d|_| d¡ |tu r|  | d¡¡ |  | d¡¡ |  d | d¡¡ d S ©NrÒ   r  r  r#  rõ   r   r   r   ÚtestOneofClearSetFieldT  r%  z"MessageTest.testOneofClearSetFieldc                 C   sp   |  ¡ }d|_|  |d¡ | d¡ |  d|j¡ |tu r%|  | d¡¡ |  | d¡¡ |  d| d¡¡ d S )NrÒ   r  r  r  )	r+   r  r  r!  r9   r
   rl   rû   r  rõ   r   r   r   ÚtestOneofClearUnsetField]  s   
z$MessageTest.testOneofClearUnsetFieldc                 C   s:   |  ¡ }d|_|  ¡ }| | ¡ ¡ |  d| d¡¡ d S r&  )r+   r  r7   r:   r9   r  ©r0   r1   r£   rï   r   r   r   ÚtestOneofDeserializeh  s
   z MessageTest.testOneofDeserializec                 C   s6   |  ¡ }d|_|  ¡ }| |¡ |  d| d¡¡ d S r&  )r+   r  ÚCopyFromr9   r  r)  r   r   r   ÚtestOneofCopyFromo  s
   
zMessageTest.testOneofCopyFromc                 C   sb   |  ¡ }d|j_|  ¡ }d|j_d|jj_| |¡ |  d|j d¡¡ |  d|jj d¡¡ d S )NrÒ   r  r  r  r  )rú   rù   r  r  rÿ   rª   r9   r  r)  r   r   r   ÚtestOneofNestedMergeFromv  s   

z$MessageTest.testOneofNestedMergeFromc                 C   sf   |  ¡ }d|jj_d|jjj_|  ¡ }d|j_| |¡ |  d|j d¡¡ |  d|jj d¡¡ d S )NrÒ   é   rÐ   r  r  )	rú   rù   r  rœ   rÿ   r  rª   r9   r  r)  r   r   r   ÚtestOneofMessageMergeFrom€  s   


ÿÿz%MessageTest.testOneofMessageMergeFromc                 C   s(   |j |j  ¡ d�}|  d| d¡¡ d S )N)r  r  r  )r+   ÚNestedMessager9   r  rõ   r   r   r   ÚtestOneofNestedMessageInitŒ  s   ÿz&MessageTest.testOneofNestedMessageInitc                 C   sB   |  ¡ }d|_| ¡  |  | d¡¡ d|_|  d| d¡¡ d S )NrÒ   r  r  r  )r+   r  rØ   ÚassertIsNoner  r  r9   rõ   r   r   r   ÚtestOneofClear‘  s   zMessageTest.testOneofClearc                 C   s&   |  ¡ }tdƒ|_|  |jtj¡ dS )zmAssigning a byte string to a string field should result
    in the value being converted to a Unicode string.r•   N)r+   r.   r  rò   r  r	  rõ   r   r   r   Ú"testAssignByteStringToUnicodeField™  s   
z.MessageTest.testAssignByteStringToUnicodeFieldc                 C   sˆ   |  ¡ }|j d¡ |jtdƒtt|jƒƒ… }|  t|jƒt|ƒ¡ d|j ¡ _|jtdƒtt|jƒƒ… }|  t|jƒt|ƒ¡ dS )z|It should be possible to use long-valued indicies in slices

    This didn't used to work in the v2 C++ implementation.
    rJ   r   r‘   N)	r+   r¦   r§   ÚlongrE   r9   r¨   r©   rœ   )r0   r1   r£   Úslr   r   r   ÚtestLongValuedSlice   s   zMessageTest.testLongValuedSlicec                 C   s–   |  ¡ }|  t¡�}|j dd„ tdƒD ƒ¡ W d  ƒ n1 s!w   Y  |  t¡�}|j dd„ tdƒD ƒ¡ W d  ƒ dS 1 sDw   Y  dS )z5This didn't use to work in the v2 C++ implementation.c                 s   ó   � | ]}t V  qd S r   ©r·   ©r¢   Úir   r   r   Ú	<genexpr>µ  s   € zCMessageTest.testExtendShouldNotSwallowExceptions.<locals>.<genexpr>rÔ   Nc                 s   r8  r   r9  r:  r   r   r   r<  ·  s   € 
ÿ)r+   r)   Ú	NameErrorr¦   ra   ÚrangeÚrepeated_nested_enum©r0   r1   r£   rð   r   r   r   Ú$testExtendShouldNotSwallowExceptions±  s   ÿ
ÿ"ÿz0MessageTest.testExtendShouldNotSwallowExceptionsNFr   ç        r  r•   c                 C   óZ   |  ¡ }|  g |j¡ tjD ]}|j |¡ |  g |j¡ q|j g ¡ |  g |j¡ dS )z,Test no-ops extending repeated int32 fields.N)r+   ÚassertSequenceEqualr¦   r#   ÚFALSY_VALUESra   ©r0   r1   r£   Úfalsy_valuer   r   r   ÚtestExtendInt32WithNothing¼  ó   
z&MessageTest.testExtendInt32WithNothingc                 C   rC  )z,Test no-ops extending repeated float fields.N)r+   rD  ro   r#   rE  ra   rF  r   r   r   ÚtestExtendFloatWithNothingÉ  rI  z&MessageTest.testExtendFloatWithNothingc                 C   rC  )z-Test no-ops extending repeated string fields.N)r+   rD  r`   r#   rE  ra   rF  r   r   r   ÚtestExtendStringWithNothingÖ  rI  z'MessageTest.testExtendStringWithNothingc                 C   ó|   |  ¡ }|  g |j¡ |j dg¡ |  dg|j¡ |j ddg¡ |  g d¢|j¡ |j ddg¡ |  g d¢|j¡ dS )	z7Test extending repeated int32 fields with python lists.r   rJ   r€   rí   r‘   rK   ©r   rJ   r€   r‘   rK   N)r+   rD  r¦   ra   rõ   r   r   r   ÚtestExtendInt32WithPythonListã  ó   z)MessageTest.testExtendInt32WithPythonListc                 C   rL  )	z7Test extending repeated float fields with python lists.rB  ç      ð?r�   ©rB  rP  r�   ç      @ç      @©rB  rP  r�   rR  rS  N)r+   rD  ro   ra   rõ   r   r   r   ÚtestExtendFloatWithPythonListî  rO  z)MessageTest.testExtendFloatWithPythonListc                 C   rL  )	z8Test extending repeated string fields with python lists.r•   Ú11Ú22)r•   rV  rW  Ú33Ú44)r•   rV  rW  rX  rY  N©r+   rD  r`   ra   rõ   r   r   r   ÚtestExtendStringWithPythonListù  rO  z*MessageTest.testExtendStringWithPythonListc                 C   s8   |  ¡ }|  g |j¡ |j d¡ |  g d¢|j¡ dS )zDTest extending repeated string fields with characters from a string.Úabcrº   NrZ  rõ   r   r   r   ÚtestExtendStringWithString  s   z&MessageTest.testExtendStringWithStringc                   @   s2   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ ZdS )zMessageTest.TestIterablez�This iterable object mimics the behavior of numpy.array.

    __nonzero__ fails for length > 1, and returns bool(item[0]) for length == 1.

    Nc                 C   s   |pg | _ d S r   )Ú_list)r0   Úvaluesr   r   r   Ú__init__  s   z!MessageTest.TestIterable.__init__c                 C   s4   t | jƒ}|dkrdS |dkrt| jd ƒS tdƒ‚)Nr   FrJ   zTruth value is ambiguous.)rE   r^  Úboolr¯   )r0   Úsizer   r   r   r\     s   
z$MessageTest.TestIterable.__nonzero__c                 C   s
   t | jƒS r   )rE   r^  rZ   r   r   r   Ú__len__  ó   
z MessageTest.TestIterable.__len__c                 C   s
   | j  ¡ S r   )r^  Ú__iter__rZ   r   r   r   re     rd  z!MessageTest.TestIterable.__iter__r   )rU   rV   rW   Ú__doc__r`  r\   rc  re  r   r   r   r   ÚTestIterable  s    
rg  c                 C   ó®   |  ¡ }|  g |j¡ |j t g ¡¡ |  g |j¡ |j t dg¡¡ |  dg|j¡ |j t ddg¡¡ |  g d¢|j¡ |j t ddg¡¡ |  g d¢|j¡ dS )	z3Test extending repeated int32 fields with iterable.r   rJ   r€   rí   r‘   rK   rM  N)r+   rD  r¦   ra   r#   rg  rõ   r   r   r   ÚtestExtendInt32WithIterable#  ó   z'MessageTest.testExtendInt32WithIterablec                 C   rh  )	z3Test extending repeated float fields with iterable.rB  rP  r�   rQ  rR  rS  rT  N)r+   rD  ro   ra   r#   rg  rõ   r   r   r   ÚtestExtendFloatWithIterable0  rj  z'MessageTest.testExtendFloatWithIterablec                 C   rh  )	z4Test extending repeated string fields with iterable.r•   Ú1Ú2)r•   rl  rm  Ú3Ú4)r•   rl  rm  rn  ro  N)r+   rD  r`   ra   r#   rg  rõ   r   r   r   ÚtestExtendStringWithIterable=  rj  z(MessageTest.testExtendStringWithIterablec                 C   sf   t  ¡ dkst  ¡ dkrd S | ¡ }|  tj¡�}t |jtj	¡ W d   ƒ d S 1 s,w   Y  d S )NÚcppr€   )
r   r&   ÚVersionr+   r)   re   ÚPickleErrorrf   r¦   ÚHIGHEST_PROTOCOLr@  r   r   r   Ú!testPickleRepeatedScalarContainerJ  s   "ÿz-MessageTest.testPickleRepeatedScalarContainerc                 C   s   |  ¡ }|j ¡  dS )z?Exercise a scenario that has led to segfaults in the past.
    N)r+   r¨   r¾   rõ   r   r   r   Ú'testSortEmptyRepeatedCompositeContainerX  s   z3MessageTest.testSortEmptyRepeatedCompositeContainerc                 C   sB   |  ¡ }|  t¡�}| d¡ W d  ƒ dS 1 sw   Y  dS )zBUsing HasField on a repeated field should raise an exception.
    r¦   N)r+   r)   r¯   rû   r@  r   r   r   ÚtestHasFieldOnRepeatedField^  s   "ÿz'MessageTest.testHasFieldOnRepeatedFieldc                 C   sœ   |  ¡ }|  t¡�}|j ¡  W d   ƒ n1 sw   Y  |j tdƒ¡ |  d|j ¡ ¡ |  d|j d¡¡ |  d|j d¡¡ |  ddg|j¡ d S )Nr�   rK   r   r€   rJ   r‘   )r+   r)   Ú
IndexErrorr¦   Úpopra   r>  r9   r@  r   r   r   ÚtestRepeatedScalarFieldPope  s   ÿz&MessageTest.testRepeatedScalarFieldPopc                 C   sð   |  ¡ }|  t¡�}|j ¡  W d   ƒ n1 sw   Y  |  t¡�}|j d¡ W d   ƒ n1 s4w   Y  tdƒD ]
}|j ¡ }||_q=|  	d|j ¡ j¡ |  	d|j d¡j¡ |  	d|j d¡j¡ |  	ddgdd	„ |jD ƒ¡ d S )
NrI   r�   rK   r   r€   rJ   r‘   c                 S   r    r   r›   rÖ   r   r   r   r¤   {  r¥   z=MessageTest.testRepeatedCompositeFieldPop.<locals>.<listcomp>)
r+   r)   rx  r¨   ry  rL   r>  r©   rœ   r9   )r0   r1   r£   rð   r;  r×   r   r   r   ÚtestRepeatedCompositeFieldPopo  s   ÿÿ
 z)MessageTest.testRepeatedCompositeFieldPopc                 C   sX   |  ¡ }tdƒD ]}|j ||¡ |j ¡ }||_q|  |j|j¡ |  |j|j¡ d S )Nr�   )	r+   r>  r¦   Úinsertr¨   r©   rœ   rD  r9   )r0   r1   r£   r;  r×   r   r   r   ÚtestRepeatedCompareWithSelf}  s   
z'MessageTest.testRepeatedCompareWithSelfc                 C   s6   |  ¡ }|j ¡ }|j}|j ¡ }|  |jjd¡ dS )zwA case that lead to a segfault when a message detached from its parent
    container has itself a child container.
    r   N)rú   Úrepeated_childr©   rÿ   r9   rù   Úoptional_int32rõ   r   r   r   ÚtestReleasedNestedMessages†  s
   

z&MessageTest.testReleasedNestedMessagesc                 C   sz   |  ¡ }|  t¡� g |_W d   ƒ n1 sw   Y  |j d¡ |  t¡� g |_W d   ƒ d S 1 s6w   Y  d S )NrJ   )r+   r)   ÚAttributeErrorr¦   r§   rõ   r   r   r   ÚtestSetRepeatedComposite�  s   ÿ"ÿz$MessageTest.testSetRepeatedComposite)TrU   rV   rW   r4   r@   rH   rR   rc   rj   rr   rt   rw   r{   r}   r~   rŠ   rŒ   r�   r”   rš   r¬   r±   r´   rÁ   rÈ   rÍ   rÛ   rç   rì   rñ   rö   rø   rü   r  r  ÚunittestÚskipIfr  ÚPY2r  ÚPY3r  r  r  r  r  r  r   r"  r$  r'  r(  r*  r,  r-  r/  r1  r3  r4  r7  rA  Ú	bytearrayÚsetrE  rH  rJ  rK  rN  rU  r[  r]  rb   rg  ri  rk  rp  ru  rv  rw  rz  r{  r}  r€  r‚  r   r   r   r   r#   j   s˜    
$			--( #

		#		
	
	
r#   c                   @   sl   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )Ú
Proto2Testc                 C   s  t  ¡ }|  | d¡¡ |  | d¡¡ |  | d¡¡ |  t¡� | d¡ W d   ƒ n1 s1w   Y  |  t¡� | d¡ W d   ƒ n1 sKw   Y  |  t¡� | d¡ W d   ƒ n1 sew   Y  |  d|j¡ |  d|j¡ |  d|j	j
¡ d|_d|_d|j	_
|  | d¡¡ |  | d¡¡ |  | d¡¡ d	|_d
|_d|j	_
|  | d¡¡ |  | d¡¡ |  | d¡¡ | d¡ | d¡ | d¡ |  | d¡¡ |  | d¡¡ |  | d¡¡ |  d|j¡ |  d|j¡ |  d|j	j
¡ d S )Nr  Úoptional_boolrþ   Úfield_doesnt_existr¦   r¨   r   Fr�   Té   )r
   r+   r  rû   r)   r¯   r9   r  rŠ  rþ   rœ   rl   r!  ©r0   r   r   r   r   ÚtestFieldPresenceœ  sJ   ÿÿÿ


zProto2Test.testFieldPresencec                 C   s2  t  ¡ }|  t¡�}d|_W d  ƒ n1 sw   Y  |  t|jjd¡ |j d¡ d|jd< |  t¡� d|jd< W d  ƒ n1 sEw   Y  t ¡ }d|_|j d¡ | ¡ }t  ¡ }| 	|¡ |  
| d¡¡ |  d|j¡ |  dt|jƒ¡ | ¡  | 	| ¡ ¡ |  d|j¡ |  d|jd ¡ dS )	z:Assigning an invalid enum number is not allowed in proto2.é‡Ö Nr€   r   i@â é±Ët Úoptional_nested_enumrJ   )r
   r+   r)   r¯   r‘  r?  r§   r   r:   r7   r  rû   r9   rE   rØ   )r0   r£   rð   rï   rv   Úm3r   r   r   ÚtestAssignInvalidEnumÌ  s.   ÿ
ÿ
z Proto2Test.testAssignInvalidEnumc                 C   sL   t  ¡ }d|jd< |  t¡� d|jd< W d   ƒ d S 1 sw   Y  d S )Nr   é{   rJ   )r   ÚTestEnumMapÚknown_map_fieldr)   r¯   Úunknown_map_field)r0   r£   r   r   r   ÚtestUnknownEnumMapë  s
   
"ÿzProto2Test.testUnknownEnumMapc                 C   s   t  ¡ }|  tt|d¡ d S )NÚ
Extensions)r
   r+   r)   r�  r  ©r0   rP   r   r   r   ÚtestExtensionsErrorsñ  s   zProto2Test.testExtensionsErrorsc                 C   sh   t  ¡ }t  ¡ }|  d|jjt j ¡ |  | d¡¡ d|jjt j< | |¡ |  d|jjt j ¡ d S )Nr   Ú
submessager”  )	r   ÚTopLevelMessager9   rœ  r™  Úoptional_int_extensionr  rû   rª   )r0   r   r  r   r   r   ÚtestMergeFromExtensionsõ  s   ÿÿÿ

ÿz"Proto2Test.testMergeFromExtensionsc                 C   sh   t  d¡}t ¡ }| |¡ t ¡ }t  |¡ |  ||¡ |  || ¡ ¡ t 	|¡}|  || ¡ ¡ d S rd   )
r   r(   r
   ÚTestAllExtensionsr7   ÚSetAllExtensionsr9   r:   r;   r<   ©r0   r=   r>   rG   r?   r   r   r   ÚtestGoldenExtensions  ó   



zProto2Test.testGoldenExtensionsc                 C   sh   t  d¡}t ¡ }| |¡ t ¡ }t  |¡ |  ||¡ |  || ¡ ¡ t 	|¡}|  || ¡ ¡ d S rA   )
r   r(   r
   ÚTestPackedExtensionsr7   ÚSetAllPackedExtensionsr9   r:   r;   r<   r¢  r   r   r   ÚtestGoldenPackedExtensions  r¤  z%Proto2Test.testGoldenPackedExtensionsc                 C   sN   t jdd�}t |¡}t |¡}|  ||¡ |  |jd¡ |  tj	|j
¡ d S )NrJ   r9  )r
   ÚTestRequiredre   rf   rg   r9   r·   r)   r   ÚEncodeErrorr:   )r0   r>   rh   ri   r   r   r   ÚtestPickleIncompleteProto  s   

z$Proto2Test.testPickleIncompleteProtoc                 C   sÀ  t  ¡ t  ¡ t  ¡ g}d|d _d|d _d|d _d|d _t  ¡ }d|_d|_d|_t j ¡ }|j |¡ |j	 |¡ |j
 |¡ |j |¡ |j |¡ |j ¡ j |d ¡ |j ¡ j |d ¡ |j ¡ j |d ¡ |j ¡ j |d ¡ |j ¡ j |d ¡ |j ¡ j |d ¡ | ¡ }t  ¡ }| |¡ |  |j|¡ |  |j|¡ |  |jj|¡ |  |jt jj |¡ |  t|jƒd¡ |  t|jƒd¡ |  t|jt jj ƒd¡ dS )zcCheck the merge behavior when a required or optional field appears
    multiple times in the input.rJ   r   r€   r‘   ÚhelloN)r
   r+   r  Úoptional_int64r  ÚTestParsingMergeÚRepeatedFieldsGeneratorÚfield1ra   Úfield2Úfield3Úext1Úext2Úgroup1r©   rª   Úgroup2r:   r7   r9   Úrequired_all_typesÚoptional_all_typesÚoptionalgroupÚoptional_group_all_typesr™  Úoptional_extrE   Úrepeated_all_typesÚrepeatedgroupÚrepeated_ext)r0   ÚmessagesÚmerged_messageÚ	generatorÚdataÚparsing_merger   r   r   ÚtestParsingMerge(  sX   ý






ÿÿþ
ÿÿzProto2Test.testParsingMergec                 C   s¸  t jddddddiddii d	dd
iddigdt jjgddd�}|  |t j¡ |  d|j¡ |  d|j¡ |  d|j¡ |  d|j¡ |  d|j	j
¡ |  |jt jj¡ |  d|jj¡ |  | d¡¡ |  |jt  ¡ ¡ |  t jj|j¡ |  dt|jƒ¡ |  d
|jd j
¡ |  d|jd j
¡ |  dt|jƒ¡ |  t jj|jd ¡ |  t jj|jd ¡ |  d|j¡ |  d|j¡ |  | d¡¡ |  dt|jƒ¡ |  d|j¡ t jd	d�}|  t jj|j¡ |  t¡� t jddid� W d   ƒ n1 sþw   Y  |  t¡� t jddid� W d   ƒ n	1 �sw   Y  |  t¡� t jdd� W d   ƒ n	1 �s8w   Y  |  t¡� t jdd� W d   ƒ d S 1 �sUw   Y  d S )Néd   éÈ   g     Èr@ó   xr·   i�  rœ   iô  ÚBAZiX  i¼  ÚFOOi   r   )r  Úoptional_fixed32rm   r  r¸  rþ   Úoptional_foreign_messager‘  r¼  r?  Údefault_int32r  rÊ  r€   r   rJ   r¬  é*   )r‘  ÚINVALID_NESTED_FIELDé   )rþ   ÚINVALID_VALUE_TYPEÚINVALID_LABEL)r?  ) r
   r+   ÚBARrò   r9   r  rÉ  rm   r  r¸  r·   rþ   r0  rœ   rl   rû   rÊ  ÚForeignMessagerÇ  r‘  rE   r¼  r?  rÈ  rË  r  r  ro   Údefault_int64r)   r¯   rL   r�  r   r   r   ÚtestPythonicInitY  sˆ   ÿ
óÿÿ
ÿ
ÿ
ÿ
ÿÿÿÿÿÿ$ÿzProto2Test.testPythonicInitc                 C   s:   dddœ}t jdi |¤Ž}|  d|j¡ |  d|j¡ d S )NrÄ  rÅ  )r  rÉ  r   )r
   r+   r9   r  rÉ  )r0   ÚkwargsrP   r   r   r   ÚtestPythonicInitWithDict–  s   þz#Proto2Test.testPythonicInitWithDictc                 C   sT   t j tjd¡}|  d|¡ |  d|¡ |  d|¡ tjjd }|  tt	|d¡ d S )Nr   zclass TestAllTypesÚSerializePartialToStringro   r   Ú_extensions_by_name)
ÚpydocÚhtmlÚdocumentr
   r+   r-   Ú	__bases__r)   r�  r  )r0   ÚdocÚbaser   r   r   Útest_documentation¡  s   zProto2Test.test_documentationN)rU   rV   rW   rŽ  r“  r˜  r›  rŸ  r£  r§  rª  rÃ  rÔ  rÖ  rß  r   r   r   r   r‰  š  s    01=r‰  c                   @   sl  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$e% &e'j(e)kdE¡dFdG„ ƒZ*e% &e+j,dH¡dIdJ„ ƒZ-e% &e+j.p­e'j(e)kdK¡dLdM„ ƒZ/dNS )OÚ
Proto3Testc                 C   s<   t |ƒ}|D ]\}}|  ||| ¡ ||= q|  i |¡ d S r   )Údictr9   )r0   Úmap_iterÚ
dict_valuerß   Úvr   r   r   ÚassertMapIterEquals¯  s
   zProto3Test.assertMapIterEqualsc                 C   s‚  t  ¡ }|  t¡� | d¡ W d   ƒ n1 sw   Y  |  t¡� | d¡ W d   ƒ n1 s3w   Y  |  t¡� | d¡ W d   ƒ n1 sMw   Y  |  t¡� | d¡ W d   ƒ n1 sgw   Y  |  | d¡¡ |  t¡� | d¡ W d   ƒ n1 s‰w   Y  |  t¡� | d¡ W d   ƒ n1 s£w   Y  |  t¡� | d¡ W d   ƒ n1 s½w   Y  |  d	|j¡ |  d	|j¡ |  d
|j	¡ |  d|j
¡ |  d	|jj¡ d	|j_|  | d¡¡ d|_d|_d|_	d|_
d|j_| d¡ | d¡ | d¡ | d¡ | d¡ |  d	|j¡ |  d	|j¡ |  d
|j	¡ |  d|j
¡ |  d	|jj¡ d S )Nr  rm   r  rŠ  rþ   r‹  r¦   r¨   r   r•   Fr�   rµ   r\  TrŒ  )r   r+   r)   r¯   rû   r  r9   r  rm   r  rŠ  rþ   rœ   rl   r!  r�  r   r   r   rŽ  ¹  sZ   ÿÿÿÿÿÿÿ




zProto3Test.testFieldPresencec                 C   s”   t  ¡ }d|_|  d|j¡ |j d¡ |  d|jd ¡ d|jd< |  d|jd ¡ | ¡ }t  ¡ }| |¡ |  d|j¡ |  d|jd ¡ dS )zCAssigning an unknown enum value is allowed and preserves the value.r�  i÷ËTr   r�  N)r   r+   r‘  r9   r?  r§   r:   r7   )r0   r£   rv   rï   r   r   r   ÚtestAssignUnknownEnumò  s   

z Proto3Test.testAssignUnknownEnumc                 C   s|  t  ¡ }|  d|jv ¡ |  d|jv ¡ |  d|jv ¡ |  d|jv ¡ |  d|jv ¡ |  d|jv ¡ |  d|j	v ¡ |  d|j
v ¡ |  d|jv ¡ |  d	|jd ¡ |  d	|jd ¡ |  d	|jd ¡ |  d	|jd ¡ |  d
|jd ¡ |  t|jd tƒ¡ |  d|jd ¡ |  t|jd tƒ¡ |  d|j	d ¡ |  d|j
d ¡ |  d	|jd ¡ |  d|jv ¡ |  d|jv ¡ |  d|jv ¡ |  d|jv ¡ |  d|jv ¡ |  d|jv ¡ |  d|j	v ¡ |  d|j
v ¡ |  d|jv ¡ |  |j	d tj¡ |  t¡� |j	d  W d   ƒ n	1 �sw   Y  |  t¡� d|j	v  W d   ƒ d S 1 �s7w   Y  d S )Né…ÿÿÿìýÿÿÿ     r”  ì        Fr\  éo   éx  r   rB  r•   r  )r	   ÚTestMapr  Úmap_int32_int32Úmap_int64_int64Úmap_uint32_uint32Úmap_uint64_uint64Úmap_int32_doubleÚmap_bool_boolÚmap_string_stringÚmap_int32_bytesÚmap_int32_enumr9   rl   Ú
isinstanceÚfloatra  rò   r  r	  r)   rL   rš  r   r   r   ÚtestScalarMapDefaults
  sJ   ÿ$ÿz Proto3Test.testScalarMapDefaultsc                 C   s,  t  ¡ }|  |j d¡¡ |  d|j dd¡¡ |  |j d¡¡ d|jd< |  d|j d¡¡ |  d|j d¡¡ |  t¡� |j d¡ W d   ƒ n1 sPw   Y  |  |j d¡¡ |  d|j dd¡¡ |jd }|  	||j d¡¡ |  t¡� |j d¡ W d   ƒ d S 1 s�w   Y  d S )Nr�   rÔ   rŒ  r•   )
r	   rì  r2  rí  Úgetr9   r)   rL   Úmap_int32_foreign_messager  )r0   rP   Úsubmsgr   r   r   Ú
testMapGet:  s"   
ÿ
"ÿzProto3Test.testMapGetc                 C   sv  t  ¡ }|  dt|jƒ¡ |  d|jv ¡ d|jd< d|jd< d|jd< d	|jd
< d|j	d< d|j
d< d|jd< d|jd< d|jd< d|jd< |  g | ¡ ¡ |  dt|jƒ¡ |  t¡� d|jd< W d   ƒ n1 smw   Y  |  dt|jƒ¡ |  t¡� d|jd< W d   ƒ n1 s�w   Y  | ¡ }t  ¡ }| |¡ |  t¡� d|jd< W d   ƒ n1 s·w   Y  |  t¡� d|jd< W d   ƒ n1 sÑw   Y  |  d|jd ¡ |  d|jd ¡ |  d|jd ¡ |  d	|jd
 ¡ |  d|j	d ¡ |  d|j
d ¡ |  d|jd ¡ |  d|jd ¡ |  d|jd ¡ |  d|jd ¡ |  dt|jƒ¡ d S )Nr   r�   é8þÿÿrç  ìýÿÿÿ     rè  éÈ  r”  ì        ré  r¶   r€   gffffff
@rJ   Ú123r\  Trë  z{-123: -456})r	   rì  r9   rE   rí  r  rî  rï  rð  Úmap_int32_floatrñ  ró  rò  rõ  ÚFindInitializationErrorsr)   rL   r:   r7   r¿   r.   ©r0   rP   rv   r  r   r   r   ÚtestScalarMapQ  sX   









ÿÿ
ÿÿÿzProto3Test.testScalarMapc                 C   s@   t  ¡ }d|jd< d|jd< |  | ¡ d¡ |  d| ¡ ¡ d S )Nr   r•   r.  s   
  r
  )r	   rì  rí  ró  r9   ÚByteSizer:   rš  r   r   r   ÚtestMapEntryAlwaysSerializedŒ  s   

ÿz'Proto3Test.testMapEntryAlwaysSerializedc                 C   sn   t  ¡ }d}| d¡}||j|< t|j ¡ ƒd \}}|  ||¡ |  ||¡ |  |tj	¡ |  |tj	¡ d S )Nu   áˆ´Úutf8r   )
r	   rì  Úencoderó  ré   Úitemsr9   rò   r  r	  )r0   rP   Úunicode_objÚ	bytes_objrÅ   Úvaluer   r   r   Ú testStringUnicodeConversionInMap”  s   

z+Proto3Test.testStringUnicodeConversionInMapc                 C   s|  t  ¡ }|  dt|jƒ¡ |  d|jv ¡ |jd  |j d¡ |  dt|jƒ¡ |  d|j¡ |  d|j¡ |  dt|jƒ¡ |  t	¡� |jd  W d   ƒ n1 sUw   Y  |  t
¡� |jd |jd< W d   ƒ n1 srw   Y  |  dt|jƒ¡ | ¡ }t  ¡ }| |¡ |  dt|jƒ¡ |  d|j¡ |  d|j¡ |  dt|jƒ¡ d|jd _|  t|jƒd	¡ d S )
Nr   r�   r”  rý  r€   r  éç  rJ   )z{-456: , 123: c: 1
}z{123: c: 1
, -456: })r	   rì  r9   rE   rú  r  Úget_or_creater-   r)   rL   r¯   r:   r7   r¸   r.   r  r   r   r   ÚtestMessageMap¤  s6   
ÿÿ
ÿzProto3Test.testMessageMapc                 C   s–   t  ¡ }d|jd j_|jd= d|jd j_|  dt|jƒ¡ d|jd j_|  dt|jƒ¡ | ¡ }t  ¡ }| |¡ ddg}|D ]}|j|= qBd S )NrJ   r€   )	r	   rì  Úmap_int32_all_typesrþ   rœ   r9   rE   r:   r7   )r0   rP   rv   r  ÚkeysrÅ   r   r   r   ÚtestNestedMessageMapItemDeleteÌ  s   

ÿz)Proto3Test.testNestedMessageMapItemDeletec                 C   sp   t  ¡ }d|jd< | ¡ }d|jd< |  | ¡ |d ¡ d|jd _| ¡ }d|jd _|  | ¡ |d ¡ d S )NrJ   é€   é   )r	   rì  rí  r  r9   rú  r¸   )r0   rP   rb  r   r   r   ÚtestMapByteSizeÝ  s   

zProto3Test.testMapByteSizec                 C   sö  t  ¡ }d|jd< d|jd< d|jd< d|jd _d	|jd
 _t  ¡ }d|jd< d|jd< d|jd
 _d|jd
 _|jd
 }| |¡ t  ¡ }| |¡ d|jd< |  	||¡ |  	d|jd ¡ |  	d|jd ¡ |  	d|jd ¡ |  	d|jd ¡ |  	d|jd j¡ |  	d	|jd
 j¡ |  
|jd
  d¡¡ t ¡ dkr§|  	d|j¡ i }|jD ]}|  
||v ¡ |j| j||< q¬|  	dd	dœ|¡ |jd= |  
d|jv ¡ |jd
= |  
d
|jv ¡ |  t¡� |jd= W d   ƒ d S 1 sôw   Y  d S )Né"   r.  éN   é8   rÑ   é   r�   rê  rÔ   éÞ   é7   éc   éX   rŒ  rÏ   Údrq  )rê  r  r•   )r	   rì  rí  rî  rú  r¸   r   rª   r+  r9   r  rû   r   r&   r)   rL   )r0   rP   r  Úold_map_valueÚexpected_msgÚas_dictrÅ   r   r   r   r  é  sL   










"ÿzProto3Test.testMergeFromc                 C   sZ  t  ¡ }d|jd< d|jd< d|jd< d|jd _d	|jd
 _t  ¡ }d|jd< d|jd< d|jd
 _d|jd
 _|j |j¡ |  d|jd ¡ |  d|jd ¡ |j |j¡ |  d|jd ¡ |  d|jd ¡ |j |j¡ t  ¡ }| 	|¡ d|jd< |  ||¡ t  ¡ }t  ¡ }|  |j|j¡ d	|jd _| |¡ |  d	|jd j¡ d S )Nr  r.  r  r  rÑ   r  r�   rê  rÔ   r  r  r  r  rŒ  rÏ   r”  )
r	   rì  rí  rî  rú  r¸   r   rª   r9   r+  )r0   rP   r  r"  rî   rï   r   r   r   ÚtestMapMergeFrom(  s<   






ÿ
zProto3Test.testMapMergeFromc                 C   óD   t  ¡ }|  td¡� | d¡ W d   ƒ d S 1 sw   Y  d S )NzWParameter to MergeFrom\(\) must be instance of same class: expected .*TestMap got int\.rJ   )r	   rì  ÚassertRaisesRegexprL   rª   rš  r   r   r   ÚtestMergeFromBadTypeP  ó   þ"üzProto3Test.testMergeFromBadTypec                 C   r%  )Nz[Parameter to [A-Za-z]*From\(\) must be instance of same class: expected .*TestMap got int\.rJ   )r	   rì  r&  rL   r+  rš  r   r   r   ÚtestCopyFromBadTypeX  r(  zProto3Test.testCopyFromBadTypec                 C   s¶   t  ¡ }tdƒ|jtdƒ< tdƒ|jtdƒ< tdƒ|jtdƒ< tdƒ|jtdƒ< | ¡ }t  ¡ }| |¡ |  	d|jd ¡ |  	d|jd ¡ |  	d|jd ¡ |  	d|jd ¡ d S )	Nrý  rç  rþ  rè  rÿ  r”  r   ré  )
r	   rì  r5  rí  rî  rï  rð  r:   r7   r9   r  r   r   r   ÚtestIntegerMapWithLongs`  s   
z"Proto3Test.testIntegerMapWithLongsc                 C   s’   t  ¡ }d|jjd< | ¡ }t  ¡ }| |¡ |  ||¡ d|jjd< | ¡ }| |¡ |  ||¡ |jj ¡  | ¡ }| |¡ |  ||¡ d S )Nrÿ  r”  r  rë  )r	   ÚTestMapSubmessageÚtest_maprí  r:   r7   r9   Úclearr  r   r   r   ÚtestMapAssignmentCausesPresencep  s   


z*Proto3Test.testMapAssignmentCausesPresencec                 C   sÎ   t  ¡ }d|jjd _| ¡ }t  ¡ }| |¡ |  ||¡ d|jjd _| ¡ }| |¡ |  ||¡ |jjd  |jjd ¡ | ¡ }| |¡ |  ||¡ |jj 	¡  | ¡ }| |¡ |  ||¡ d S )Nr�   r”  rž   rë  )
r	   r+  r,  rú  r¸   r:   r7   r9   rª   r-  r  r   r   r   Ú-testMapAssignmentCausesPresenceForSubmessages†  s(   


ÿ

z8Proto3Test.testMapAssignmentCausesPresenceForSubmessagesc                 C   s    t  ¡ }t|jƒ}t|jƒ}d|jd< d|jd _|  t¡� |D ]}q!W d   ƒ n1 s.w   Y  |  t¡� |D ]}q;W d   ƒ d S 1 sIw   Y  d S )Nr  r\  r�   )r	   rì  Úiterró  rú  r¸   r)   ÚRuntimeError)r0   rP   Ústring_string_iterÚint32_foreign_iterrÅ   r   r   r   ÚtestModifyMapWhileIterating¢  s   


ÿÿÿ"ÿz&Proto3Test.testModifyMapWhileIteratingc                 C   s¤   t  ¡ }|jd }|  ||jd ¡ |  |tj¡ d|_| ¡ }t  ¡ }| 	|¡ |  
d|jd j¡ |  t¡� t ¡ |jd< W d   ƒ d S 1 sKw   Y  d S )Nrê  r�   r  )r	   rì  rú  r  rò   r
   rÒ  r¸   r:   r7   r9   r)   r¯   )r0   rP   rû  rv   r  r   r   r   ÚtestSubmessageMap³  s   

"ÿzProto3Test.testSubmessageMapc                 C   sx   t  ¡ }|j ¡ D ]	\}}|  d¡ q	d|jd< d|jd< d|jd< |  dt|jƒ¡ ddddœ}|  |j ¡ |¡ d S )NFrK   r€   rÊ   r‘   é   ©r€   r‘   rK   )r	   rì  rí  r
  rl   r9   rE   rå  )r0   rP   rß   rä  Úmatching_dictr   r   r   ÚtestMapIterationÆ  s   


zProto3Test.testMapIterationc                    sh  t jdk �r2t ¡ }d|jd< d|jd< d|jd< d|jd< |j}ˆ  dt|ƒ¡ t ¡ }| | ¡ ¡ ‡ fd	d
„}|| 	¡ | 
¡ ƒ || ¡ | ¡ ƒ || ¡ | ¡ ƒ ˆ  d| d¡¡ ˆ  d | d¡¡ ˆ  d| d¡¡ ˆ  d| d¡¡ ˆ  dt|ƒ¡ | ¡ \}}ˆ  d| |¡ ˆ  dt|ƒ¡ | ¡  ˆ  dt|ƒ¡ ˆ  t¡� | ¡  W d   ƒ n1 s·w   Y  ˆ  d| d¡¡ ˆ  dt|ƒ¡ | |j¡ ˆ  dt|ƒ¡ ˆ  t¡� | |j|j¡ W d   ƒ n1 sów   Y  ˆ  t¡� | d¡ W d   ƒ n	1 �sw   Y  ˆ  t¡� |jdd� W d   ƒ d S 1 �s+w   Y  d S d S )Nr�   rK   r€   rÊ   r‘   r6  rÔ   r�   c                    s0   ˆ   t|ƒ| d ¡ ˆ   t|ƒ| dd … ¡ d S rý   )r9   Únextré   )ÚseqÚiteratorrZ   r   r   Ú
CheckItemsá  s   z-Proto3Test.testPython2Map.<locals>.CheckItemsr  r   rJ   r.  )r  )r’   r“   r	   rì  rí  r9   rE   r7   r:   r
  Ú	iteritemsr  Úiterkeysr_  Ú
itervaluesrù  ry  Úpopitemr-  r)   ÚKeyErrorÚ
setdefaultÚupdaterL   )r0   rP   Ú	map_int32r  r=  rÅ   r  r   rZ   r   ÚtestPython2MapÕ  sV   




ÿÿÿÿ$ÿÔzProto3Test.testPython2Mapc                 C   s^   t  ¡ }d|jd< d|jd< d|jd< d|jd< d|jd< |j ¡ }|j ¡ }|  ||¡ d S )Nr•   Úlocal_init_opÚtrainable_variablesÚ	variablesÚinit_opÚ	summaries)r	   rì  ró  r
  r9   )r0   rP   Úitems1Úitems2r   r   r   ÚtestMapItems  s   






zProto3Test.testMapItemsc                 C   s~   d}t  ¡ }d|jd< d|jd< d|jd< d|jd	< d
|jd< d
|jd< d|jd< d|jd< d|jd< |  ||jdd�¡ d S )Ns�   r
init_opdr

item1er

item2fr

item3gr
item4QQr
local_init_opar
	summarieser
trainable_variablesbr
	variablescr·   rG  r¹   rH  r¸   rI  r   rJ  ÚerK  Úitem1ÚfÚitem2ÚgÚitem3ÚQQÚitem4TrS   )r	   rì  ró  r9   r:   )r0   r=   rP   r   r   r   Ú!testMapDeterministicSerialization  s   	








z,Proto3Test.testMapDeterministicSerializationc                 C   sN   t  ¡ }d|jd< d|jd< d|jd< |j ¡ }~ddddœ}|  ||¡ d S )NrK   r€   rÊ   r‘   r6  r7  )r	   rì  rí  r
  rå  )r0   rP   Úitr8  r   r   r   ÚtestMapIterationClearMessage1  s   



z'Proto3Test.testMapIterationClearMessagec                 C   sf   t jdddœd�}|  d|jd ¡ |  d|jd ¡ t jdtjdd�id	�}|  d|jd j¡ d S )
Nr€   rK   )rJ   r‘   )rí  rJ   r‘   r�   )r¸   )rú  )r	   rì  r9   rí  r
   rÒ  rú  r¸   rš  r   r   r   ÚtestMapConstruction?  s   ÿzProto3Test.testMapConstructionc                 C   s`   t  ¡ }|j}d|d< d|d< d|d< | d¡ |  d| ¡ ¡ ddddœ}|  | ¡ |¡ d S )	NrK   r€   rÊ   r‘   r6  rí  r  r7  )r	   rì  rí  r!  r9   r:   rå  r
  )r0   rP   Ú	int32_mapr8  r   r   r   ÚtestMapValidAfterFieldClearedH  s   
z(Proto3Test.testMapValidAfterFieldClearedc                 C   sH   t  ¡ }|j}d|d _| d¡ |  d| ¡ ¡ |  d| ¡ v ¡ d S )Nr�   r€   rú  r  )	r	   rì  rú  r¸   r!  r9   r:   rl   r  )r0   rP   Úint32_foreign_messager   r   r   Ú$testMessageMapValidAfterFieldClearedX  s   

z/Proto3Test.testMessageMapValidAfterFieldClearedc                 C   sV   t  ¡ }d|jd _t ¡ dkr|j}|jd }| ¡  d|jd _|  |jd¡ d S )NÚbarr€   rq  r  r‘   )r	   rì  r  r  r   r&   rØ   r9   )r0   rP   Ú
unused_mapÚ	msg_valuer   r   r   Ú-testMessageMapItemValidAfterTopMessageClearede  s   
z8Proto3Test.testMessageMapItemValidAfterTopMessageClearedc                 C   sž   t  ¡ }t|jƒ}| d¡ |  t¡� |D ]}qW d   ƒ n1 s#w   Y  t|jƒ}| d¡ |  t¡� |D ]}q:W d   ƒ d S 1 sHw   Y  d S )Nrí  rú  )r	   rì  r0  rí  r!  r)   r1  rú  )r0   rP   rX  rð   r   r   r   Ú"testMapIterInvalidatedByClearFieldw  s   

ÿÿ

ÿ"ÿz-Proto3Test.testMapIterInvalidatedByClearFieldc                 C   sº   t  ¡ }|  dt|jƒ¡ d|jd< |  dt|jƒ¡ |  t¡� |jd= W d   ƒ n1 s/w   Y  |jd= |  dt|jƒ¡ |  t¡� |jd= W d   ƒ d S 1 sVw   Y  d S )Nr   rÊ   rK   rJ   r  é    )r	   rì  r9   rE   rí  r)   rB  r  rš  r   r   r   ÚtestMapDelete‹  s   

ÿ
"ÿzProto3Test.testMapDeletec                 C   sL   t  ¡ }|  |jtj¡ |  |jtj¡ |  |jtj¡ |  |jtj¡ d S r   )r	   rì  rò   rí  ró   ÚMappingÚMutableMappingrú  rš  r   r   r   ÚtestMapsAreMappingœ  s   ÿzProto3Test.testMapsAreMappingc                 C   sD   t  ¡ }d|jd< |  |j|j¡ |  |j|j¡ |  |jd¡ d S )Nrý  rç  r   )r	   rì  rí  r9   rú  ÚassertNotEqualrš  r   r   r   ÚtestMapsCompare¤  s   
ÿzProto3Test.testMapsComparec                 C   s@   t  ¡ }d|jd< d|jd< d|jd _|  dt| ¡ ƒ¡ d S )Nr  r\  é@   é#   r�   r  r   )	r	   rì  ró  rí  Úmap_string_foreign_messager¸   r9   rE   r  rš  r   r   r   Ú(testMapFindInitializationErrorsSmokeTest¬  s
   

z3Proto3Test.testMapFindInitializationErrorsSmokeTestzSkip for ucs2c                 C   sÀ   d}t  ¡ }|  t¡�}| |¡ W d   ƒ n1 sw   Y  t ¡ dkr0|  dt|j	ƒ¡ n	|  dt|j	ƒ¡ t jdd� 
¡ }t  ¡ }| |¡ |  |jd¡ t jdd�}|  |jd¡ d S )Ns   rí �r$   r  úError parsing messageu   ðŸ˜�©r  u   í€�)r   r+   r)   rM   rÙ   r   r&   r-   r.   r/   r:   r9   r  )r0   rv   rP   r3   r  r   r   r   ÚtestStrictUtf8Check³  s(   ÿÿÿ
ÿzProto3Test.testStrictUtf8Checkz$Surrogates are acceptable in python2c                 C   sÞ   |   t¡� tjdd� W d   ƒ n1 sw   Y  |   t¡� tjdd� W d   ƒ n1 s1w   Y  |   t¡� tjdd� W d   ƒ n1 sLw   Y  |   t¡� tjdd� W d   ƒ d S 1 shw   Y  d S )Nõ   í �í°�rp  ó   í �õ   í �õ   í �í �)r)   r¯   r   r+   rZ   r   r   r   ÚtestSurrogatesInPython3Ê  s(   ÿÿÿÿÿÿÿ"ÿz"Proto3Test.testSurrogatesInPython3z-Surrogates are rejected at setters in Python3c                 C   s†   t jdd�}t ¡ dkr|  |jd¡ n|  |jd¡ | ¡ }t  ¡ }| |¡ |  |jd¡ t jdd�}t jdd� t jdd� d S )Nrr  rp  r$   u   ð���rs  rt  ru  )r   r+   r   r&   r9   r  r:   rÙ   r  r   r   r   ÚtestSurrogatesInPython2å  s&   ÿ
ÿÿ
ÿz"Proto3Test.testSurrogatesInPython2N)0rU   rV   rW   rå  rŽ  ræ  rø  rü  r  r  r  r  r  r  r  r$  r'  r)  r*  r.  r/  r4  r5  r9  rF  rN  rW  rY  rZ  r\  r^  rb  rc  re  rh  rj  rn  rƒ  r„  r’   Ú
maxunicodeÚUCS2_MAXUNICODErq  r  r…  rv  r†  rw  r   r   r   r   rà  ¬  sV    
90;(?(0	

ÿrà  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚValidTypeNamesTestc                    s‚   t t|ƒƒ d¡d ‰ d| d| f}|  t‡ fdd„|D ƒƒdˆ |f ¡ ˆ  d¡}|d	 }d |d d	… ¡}t||gd
� d S )Nú'rJ   zRepeated%sContainerzRepeated%sFieldContainerc                 3   s   � | ]}ˆ   |¡V  qd S r   )Úendswith)r¢   rä  ©Útp_namer   r   r<  	  s   € z:ValidTypeNamesTest.assertImportFromName.<locals>.<genexpr>z%r does end with any of %rÚ.r²   )Úfromlist)r.   ÚtypeÚsplitrl   ÚanyÚjoinÚ
__import__)r0   rP   Ú	base_nameÚvalid_namesÚpartsÚ
class_nameÚmodule_namer   r}  r   ÚassertImportFromName	  s   ÿ
ÿ
z'ValidTypeNamesTest.assertImportFromNamec                 C   s(   t  ¡ }|  |jd¡ |  |jd¡ d S )NÚScalarÚ	Composite)r
   r+   r‹  r¦   r¨   )r0   rÚ   r   r   r   ÚtestTypeNamesCanBeImported	  s   z-ValidTypeNamesTest.testTypeNamesCanBeImportedN)rU   rV   rW   r‹  rŽ  r   r   r   r   rz  	  s    rz  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚPackedFieldTestc                 C   s¬   |j  d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j	 d¡ |j
 d¡ |j d¡ |j d¡ |j d¡ |j d¡ d S )NrJ   rP  T)r¦   r§   Úrepeated_int64Úrepeated_uint32Úrepeated_uint64Úrepeated_sint32Úrepeated_sint64Úrepeated_fixed32Úrepeated_fixed64Úrepeated_sfixed32Úrepeated_sfixed64ro   rp   Úrepeated_boolr?  r�  r   r   r   Ú
setMessage	  s   zPackedFieldTest.setMessagec                 C   ó*   t  ¡ }|  |¡ d}|  || ¡ ¡ d S )NsH   
"*2:   B       J   R       Z  €?b      ð?jr)r   rC   rš  r9   r:   ©r0   r   r=   r   r   r   ÚtestPackedFields(	  ó   
z PackedFieldTest.testPackedFieldsc                 C   r›  )Ns:    (0=   A       M   Q       ]  €?a      ð?hp)r   ÚTestUnpackedTypesrš  r9   r:   rœ  r   r   r   ÚtestUnpackedFields;	  rž  z"PackedFieldTest.testUnpackedFieldsN)rU   rV   rW   rš  r�  r   r   r   r   r   r�  	  s    r�  rq  )r€   rž   z;explicit tests of the C++ implementation for PY27 and abovec                   @   s0   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	S )
ÚOversizeProtosTestc                 C   sF   d}t  ¡ }t ¡ }t ||¡ | |¡ t |¡ 	| 
d¡¡| _d S )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"
        }
      }
    zf.msg2)r   ÚDescriptorPoolr   ÚFileDescriptorProtor   ÚParseÚAddr   ÚMessageFactoryÚGetPrototypeÚFindMessageTypeByNameÚ	proto_cls)ÚclsÚ	file_descÚpoolÚdescr   r   r   Ú
setUpClassT	  s   


ÿzOversizeProtosTest.setUpClassc                 C   s(   |   ¡ | _dd | jj_| j ¡ | _d S )Nr¸   i  )r©  ÚpÚfieldrù   r:   Úp_serializedrZ   r   r   r   ÚsetUpw	  s   
zOversizeProtosTest.setUpc              
   C   sh   ddl m} |dƒ |  ¡ }z	| | j¡ W d S  tjy3 } z|  t|ƒd¡ W Y d }~d S d }~ww )Nr   ©ÚSetAllowOversizeProtosFro  )	Úgoogle.protobuf.pyext._messager´  r©  r7   r±  r   rO   r9   r.   )r0   r´  ÚqrO  r   r   r   ÚtestAssertOversizeProto|	  s   €ÿz*OversizeProtosTest.testAssertOversizeProtoc                 C   sB   ddl m} |dƒ |  ¡ }| | j¡ |  | jjj|jj¡ d S )Nr   r³  T)	rµ  r´  r©  r7   r±  r9   r¯  r°  rù   )r0   r´  r¶  r   r   r   ÚtestSucceedOversizeProto…	  s
   z+OversizeProtosTest.testSucceedOversizeProtoN)rU   rV   rW   Úclassmethodr®  r²  r·  r¸  r   r   r   r   r¡  O	  s    
"	r¡  Ú__main__)7rf  Ú
__author__ró   r;   rƒ   rË   re   rÙ  r  r’   ÚwarningsÚ	unittest2rƒ  ÚImportErrorrÜ   r=  Úgoogle.protobufr   r	   r
   r   r   r   r   r   Úgoogle.protobuf.internalr   r   r   r   r   r   r   r   ry  r†  Úintr5  r   r   r   r    ÚBaseTestCaseÚnamed_parametersr#   r‰  rà  rz  r�  r„  r&   r“   r¡  rU   Úmainr   r   r   r   Ú<module>   sœ   !ÿÿþ        5        [9þ
:ÿ