o
    ÞË·eR— ã                   @   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
dd„ 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
 de¡ e defdef¡ej G dd„ de	j ƒƒƒZ!ej G dd„ de	j ƒƒZ"ej G dd„ de	j ƒƒZ#ej G dd„ de	j ƒƒZ$ej G d d!„ d!e	j ƒƒZ%e	 &e '¡ d"kd#¡ej G d$d%„ d%e	j ƒƒƒZ(e)d&krîe	 *¡  dS dS )'aœ  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   ú\/var/www/ideatree/venv/lib/python3.10/site-packages/google/protobuf/internal/message_test.pyÚ<lambda>7   s    r   )Úmap_proto2_unittest_pb2)Úmap_unittest_pb2)Úunittest_pb2)Úunittest_proto3_arena_pb2)Ú
descriptor)Úapi_implementation)Úencoder)Úmore_extensions_pb2)Úpacked_field_test_pb2)Ú	test_util)Útest_proto3_optional_pb2)Útesting_refleaks)Úmessage)Ú_parameterizediÿÿ  ÚerrorÚ_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"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„ Z<dudv„ Z=dwdxdydzd{d|e>ƒ g i e?ƒ g
Z@d}d~„ ZAdd€„ ZBdd‚„ ZCdƒd„„ ZDd…d†„ ZEd‡dˆ„ ZFd‰dŠ„ ZGG d‹dŒ„ dŒeHƒZIddŽ„ ZJdd„ ZKd‘d’„ ZLG d“d”„ d”eHƒZMd•d–„ ZNd—d˜„ ZOd™dš„ ZPd›dœ„ ZQddž„ ZRdŸd „ ZSd¡d¢„ ZTd£d¤„ ZUd¥d¦„ ZVd§d¨„ ZWd©dª„ ZXd«d¬„ ZYdwS )­Ú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   ÚtestBadUtf8StringR   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)r&   r'   Úgolden_dataÚgolden_messageÚgolden_copyr   r   r   ÚtestGoldenMessage\   s   


zMessageTest.testGoldenMessagec                 C   sx   t  d¡}| ¡ }| |¡}| ¡ }t  |¡ |  |t|ƒ¡ |  ||¡ |  || ¡ ¡ t 	|¡}|  || ¡ ¡ d S ©NÚgolden_packed_fields_message)
r   r   ÚTestPackedTypesr-   ÚSetAllPackedFieldsr/   Úlenr0   r1   r2   )r&   r'   r3   r4   Úparsed_bytesÚall_setr5   r   r   r   ÚtestGoldenPackedMessagem   s   



z#MessageTest.testGoldenPackedMessagec                 C   s¶   |  ¡ }|  t|jd¡ |  t|jd¡ t dd¡}t ¡ dks&t ¡ dkrP|  t	j
¡}| |¡ W d   ƒ n1 s<w   Y  t ¡ dkrP|  dt|jƒ¡ |  t	j
|jd¡ d S )	Nr   Ú0é   é   r   ÚupbzUnexpected end-group tag.s   )r!   r   Ú	TypeErrorr"   Ú	Exceptionr   ÚTagBytesr   r   r   ÚDecodeErrorr/   r$   r%   )r&   r'   ÚmsgÚend_tagr)   r   r   r   ÚtestParseErrorsy   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    rO   c                       s$   e Zd Z‡ fdd„Z‡ fdd„ZdS )z5MessageTest.testDeterminismParameters.<locals>.BadArgc                    ó   ˆ ƒ ‚r   r   ©r&   ©rO   r   r   Ú__nonzero__¦   ó   zAMessageTest.testDeterminismParameters.<locals>.BadArg.__nonzero__c                    rP   r   r   rQ   rR   r   r   Ú__bool__©   rT   z>MessageTest.testDeterminismParameters.<locals>.BadArg.__bool__N)rL   rM   rN   rS   rU   r   rR   r   r   ÚBadArg¤   s    rV   )r!   Úrepeated_stringÚextendr/   r0   rD   Úobjectr   )r&   r'   r3   r4   rV   r   rR   r   ÚtestDeterminismParameters‹   s"   
ÿ
ÿ
ÿ"ÿz%MessageTest.testDeterminismParametersc                 C   s@   t  d¡}| ¡ }| |¡ t |¡}t |¡}|  ||¡ d S ©Nr4   )r   r   r!   r-   ÚpickleÚdumpsÚloadsr/   )r&   r'   r3   r4   Úpickled_messageÚunpickled_messager   r   r   ÚtestPickleSupport¯   s   



zMessageTest.testPickleSupportc                 C   s2   |j jdd}t |¡}t |¡}|  ||¡ d S )Nr@   ©Úbb)ÚTestPickleNestedMessageÚNestedMessager\   r]   r^   r/   )r&   r'   r4   r_   r`   r   r   r   ÚtestPickleNestedMessage¸   s   

z#MessageTest.testPickleNestedMessagec                 C   s8   |j j}|jdd}t |¡}t |¡}|  ||¡ d S )Nr@   )Úcc)rd   re   ÚNestedNestedMessager\   r]   r^   r/   )r&   r'   Úclsr4   r_   r`   r   r   r   ÚtestPickleNestedNestedMessage¾   s
   

z)MessageTest.testPickleNestedNestedMessagec                 C   s€   |t u rd}nd}| ¡ }| |¡ |  |jtj¡ |  |jtj¡ |  |jd tj¡ |  |j	d tj¡ |  || 
¡ ¡ d S )Ns   ]  €a      ðÍ  €Ñ      ðs    ]  €a      ðÊ  €Ò      ðr   ©r
   r!   r-   r/   Úoptional_floatÚmathÚinfÚoptional_doubleÚrepeated_floatÚrepeated_doubler0   ©r&   r'   r3   r4   r   r   r   ÚtestPositiveInfinityÅ   s   
z MessageTest.testPositiveInfinityc                 C   sˆ   |t u rd}nd}| ¡ }| |¡ |  |jtj ¡ |  |jtj ¡ |  |jd tj ¡ |  |j	d tj ¡ |  || 
¡ ¡ d S )Ns   ]  €ÿa      ðÿÍ  €ÿÑ      ðÿs    ]  €ÿa      ðÿÊ  €ÿÒ      ðÿr   rk   rr   r   r   r   ÚtestNegativeInfinityÙ   s   
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!   r-   Ú
assertTruerm   Úisnanrl   ro   rp   rq   r0   ©r&   r'   r3   r4   Ú
serializedr   r   r   r   ÚtestNotANumberí   s   

zMessageTest.testNotANumberc                 C   sR   d}|  ¡ }| |¡ |  |jd tj¡ |  |jd tj¡ |  || ¡ ¡ d S )Ns   ¢  €ª      ðr   ©r9   r-   r/   Úpacked_floatrm   rn   Úpacked_doubler0   rr   r   r   r   ÚtestPositiveInfinityPacked  s   
z&MessageTest.testPositiveInfinityPackedc                 C   sV   d}|  ¡ }| |¡ |  |jd tj ¡ |  |jd tj ¡ |  || ¡ ¡ d S )Ns   ¢  €ÿª      ðÿr   rz   rr   r   r   r   ÚtestNegativeInfinityPacked  s   
z&MessageTest.testNegativeInfinityPackedc                 C   sŒ   d}|  ¡ }| |¡ |  t |jd ¡¡ |  t |jd ¡¡ | ¡ }|  ¡ }| |¡ |  t |jd ¡¡ |  t |jd ¡¡ d S )Ns   ¢  Àª      ør   )r9   r-   ru   rm   rv   r{   r|   r0   rw   r   r   r   ÚtestNotANumberPacked  s   

z MessageTest.testNotANumberPackedc           	      C   s  |  ¡ }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¡ t d¡}||_|  	|j|¡ | ¡ }| |¡ |  	|j|¡ d|_|  
|jtdƒ¡ | ¡ }| |¡ |  
|jtdƒ¡ d|_|  
|jtd	ƒ¡ d
|_|  	|jd
¡ d S )Né   é   ç      ø?iÿÿÿz0x1.fffffep+127gûPïÿÿ#Hrn   gûPïÿÿ#Èz-infg¸ˆš Þ7)r!   rm   Úpowrl   r-   r0   ru   ÚfloatÚfromhexÚassertAlmostEqualr/   )	r&   r'   r   ÚkMostPosExponentNoSigBitsÚkMostPosExponentOneSigBitÚkMostNegExponentNoSigBitsÚkMostNegExponentOneSigBitÚ	max_floatÚserialized_datar   r   r   ÚtestExtremeFloatValues%  sX   


z"MessageTest.testExtremeFloatValuesc                 C   st  |  ¡ }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 )Nr€   iÿ  r‚   iüÿÿ)r!   rm   rƒ   ro   r-   r0   ru   )r&   r'   r   r‡   rˆ   r‰   rŠ   r   r   r   ÚtestExtremeDoubleValuesg  s:   z#MessageTest.testExtremeDoubleValuesc                 C   ó"   |  ¡ }d|_|  t|ƒd¡ d S )Nç       @zoptional_float: 2.0
)r!   rl   r/   r$   ©r&   r'   r   r   r   r   ÚtestFloatPrinting”  ó   zMessageTest.testFloatPrintingc                 C   s4   |  ¡ }d|_|j}| | ¡ ¡ |  ||j¡ d S )Nç^!Á7Ýš¿?)r!   rl   r-   r0   r/   )r&   r'   rG   Ú	old_floatr   r   r   ÚtestHighPrecisionFloatPrinting™  s
   z*MessageTest.testHighPrecisionFloatPrintingc                 C   r   )Nr”   z%optional_double: 0.12345678912345678
)r!   ro   r/   r$   ©r&   r'   rG   r   r   r   ÚtestHighPrecisionDoublePrinting   r“   z+MessageTest.testHighPrecisionDoublePrintingc                 C   s<   |  ¡ }t |¡ | ¡ }| | ¡ ¡ |  t|ƒd¡ d S )NÚ )r!   r   ÚSetAllNonLazyFieldsÚTestEmptyMessager-   r0   r/   r$   )r&   r'   Ú	populatedÚemptyr   r   r   ÚtestUnknownFieldPrinting¥  s
   
z$MessageTest.testUnknownFieldPrintingc                 C   sŽ   |  ¡ }|j |j jdd¡ |j jdd}|j |¡ z|j d¡ W n	 ty-   Y nw |  dt|jƒ¡ |  ddgdd„ |jD ƒ¡ d S )Nr@   rb   r€   c                 S   ó   g | ]}|j ‘qS r   rb   ©Ú.0Úmr   r   r   Ú
<listcomp>·  ó    z@MessageTest.testAppendRepeatedCompositeField.<locals>.<listcomp>)r!   Úrepeated_nested_messageÚappendre   rC   r/   r;   )r&   r'   rG   Únestedr   r   r   Ú testAppendRepeatedCompositeField¬  s   ÿÿ z,MessageTest.testAppendRepeatedCompositeFieldc                 C   s   |  ¡ }|j d|j jdd¡ |jd }|j d|j jdd¡ |j d|j jdd¡ |j d|j jdd¡ |j d	|j jd	d¡ z	|j dd
¡ W n	 tyW   Y nw |  dt|jƒ¡ |  g d¢dd„ |jD ƒ¡ |  t|ƒd¡ |  |jd¡ d S )Néÿÿÿÿr@   rb   r   r€   éc   é   éþÿÿÿéüÿÿéç  é   )r­   r€   r©   r@   r«   c                 S   rŸ   r   rb   r    r   r   r   r£   Ì  r¤   z@MessageTest.testInsertRepeatedCompositeField.<locals>.<listcomp>z¹repeated_nested_message {
  bb: -1000
}
repeated_nested_message {
  bb: 2
}
repeated_nested_message {
  bb: -1
}
repeated_nested_message {
  bb: 1
}
repeated_nested_message {
  bb: 3
}
)	r!   r¥   Úinsertre   rC   r/   r;   r$   rc   )r&   r'   rG   Úsub_msgr   r   r   Ú testInsertRepeatedCompositeField¹  s<   ÿ
ÿÿÿÿÿ
ÿÿz,MessageTest.testInsertRepeatedCompositeFieldc                 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 )Nr@   r«   rb   r€   rA   r¯   é   ©r@   r€   r«   rA   c                 S   rŸ   r   rb   r    r   r   r   r£   ï  r¤   z:MessageTest.testMergeFromRepeatedField.<locals>.<listcomp>)r!   Úrepeated_int32r¦   r¥   ÚaddÚ	MergeFromr/   r;   )r&   r'   rG   Ú	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¶   rC   Ú
ValueErrorr/   r;   r—   r   r   r   ÚtestAddWrongRepeatedNestedFieldñ  s   ÿÿz+MessageTest.testAddWrongRepeatedNestedFieldc                 C   s°   |  ¡ }|j g d¢¡ |  d|j¡ |  d|j¡ |jjdd |jd }|j jdd}|j jdd}|j |¡ |j 	d|¡ |  ||j¡ |  ||j¡ |  ||j¡ d S )N©r@   r€   r«   r€   r   r@   rb   r«   )
r!   rµ   rX   r#   ÚassertNotInr¥   r¶   re   r¦   r°   )r&   r'   rG   Úsub_msg1Úsub_msg2Úsub_msg3r   r   r   ÚtestRepeatedContainsý  s   
z MessageTest.testRepeatedContainsc                 C   s@   |  ¡ }|j g d¢¡ d}|jD ]}||7 }q|  |d¡ d S )Nr¾   r   é   ©r!   rµ   rX   r/   )r&   r'   rG   r¶   Úitemr   r   r   ÚtestRepeatedScalarIterable  s   

z&MessageTest.testRepeatedScalarIterablec                 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 )Nr@   rb   r€   r«   rA   r´   c                 S   rŸ   r   rb   r    r   r   r   r£     r¤   z@MessageTest.testRepeatedNestedFieldIteration.<locals>.<listcomp>)rA   r«   r€   r@   c                 S   rŸ   r   rb   r    r   r   r   r£     r¤   c                 S   rŸ   r   rb   r    r   r   r   r£      r¤   r©   )r!   r¥   r¶   r/   Ú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.r@   r«   r€   r   r¾   çš™™™™™ñ?gÍÌÌÌÌÌô?ç333333ó?ÚaÚcÚb©rÌ   rÎ   rÍ   ó   aó   có   b)rÐ   rÒ   rÑ   N)
r!   rµ   r¦   Úsortr/   r$   rp   r†   rW   Ú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¬   r©   ©Úkeyr   r@   r€   Úaaarc   rÍ   N)r!   rµ   r¦   rÓ   Úabsr/   rW   r;   r‘   r   r   r   Ú/testSortingRepeatedScalarFieldsCustomComparatorJ  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.r@   r«   r€   rÄ   r¯   rA   rc   r×   r   z0[bb: 1
, bb: 2
, bb: 3
, bb: 4
, bb: 5
, bb: 6
]N)	r!   r¥   r¶   rc   rÓ   ÚoperatorÚ
attrgetterr/   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æ   rb   )Úzr   r   r   r   ~  s   
 zFMessageTest.testSortingRepeatedCompositeFieldsStable.<locals>.<lambda>r×   )râ   rä   ræ   rà   rá   rå   rã   c                 S   rŸ   r   rb   ©r¡   Únr   r   r   r£   €  r¤   zHMessageTest.testSortingRepeatedCompositeFieldsStable.<locals>.<listcomp>c                 S   rŸ   r   rb   rè   r   r   r   r£   ˆ  r¤   N)	r!   r¥   r¶   rc   rÓ   r/   r0   ÚClearÚMergeFromString)r&   r'   r   Úpbr   r   r   Ú(testSortingRepeatedCompositeFieldsStables  s$   
ÿ

ÿz4MessageTest.testSortingRepeatedCompositeFieldsStablec                 C   s´   |  ¡ }t 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¢¡ dS )zECheck sorting a repeated composite field using list.sort() arguments.rc   r@   r«   r€   rÄ   r¯   rA   r×   c                 S   rŸ   r   rb   ©r¡   Úkr   r   r   r£   –  r¤   zGMessageTest.testRepeatedCompositeFieldSortArguments.<locals>.<listcomp>)r@   r€   r«   rA   r¯   rÄ   T©rØ   Úreversec                 S   rŸ   r   rb   rî   r   r   r   r£   ™  r¤   )rÄ   r¯   rA   r«   r€   r@   N)r!   rÝ   rÞ   r¥   r¶   rc   rÓ   r/   )r&   r'   r   Úget_bbr   r   r   Ú'testRepeatedCompositeFieldSortArgumentsŠ  s    
ÿÿ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¢¡ |j d	¡ |j d
¡ |j d¡ |jjtd |  t|jƒg d¢¡ |jjtdd |  t|jƒg d¢¡ dS )z9Check sorting a scalar field using list.sort() arguments.rÖ   r¬   r©   r×   )r©   r¬   rÖ   Trð   )rÖ   r¬   r©   rÙ   rc   rÍ   )rÍ   rc   rÙ   )rÙ   rc   rÍ   N)	r!   rµ   r¦   rÓ   rÚ   r/   ÚlistrW   r;   r‘   r   r   r   Ú$testRepeatedScalarFieldSortArgumentsœ  s   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 ¡ _d S )Nr   r@   r€   r«   )r!   rµ   r¦   r¥   r¶   rc   ©r&   r'   Úm1Úm2r   r   r   ÚtestRepeatedFieldsComparable°  s   z(MessageTest.testRepeatedFieldsComparablec                 C   s0   |  ¡ }|  |jtjj¡ |  |jtjj¡ d S r   )r!   ÚassertIsInstancerµ   ÚcollectionsÚabcÚMutableSequencer¥   ©r&   r'   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   rC   Úhashrµ   r¥   rþ   r   r   r   ÚtestRepeatedFieldsNotHashableÆ  s   ÿ"ÿz)MessageTest.testRepeatedFieldsNotHashablec                 C   s*   |  ¡ }|jj g ¡ |  | d¡¡ d S )NÚpayload)ÚNestedTestAllTypesr  rµ   rX   ru   ÚHasFieldrþ   r   r   r   Ú$testRepeatedFieldInsideNestedMessageÍ  s   z0MessageTest.testRepeatedFieldInsideNestedMessagec                 C   sæ   |  ¡ }|  ¡ }|j}|  d|j¡ d|j_| |¡ |  d|j¡ | ¡ }| ¡ }|jjj}|  d|j¡ d|jjj_| |¡ |  d|j¡ |  |jj|jj¡ |jj 	¡ }d|_| |¡ |  dt
|jjƒ¡ |  d|j¡ d S ©Nr   r@   )r!   Úoptional_nested_messager/   rc   r·   r  Úchildr  r¥   r¶   r;   )r&   r'   r÷   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!   r/   r  rc   rë   r0   rö   r   r   r   ÚtestMergeFromStringð  s   zMessageTest.testMergeFromStringc                 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d t¡ d S )Nzscalar stringzrepeated strings   scalar bytess   repeated bytesr   )r!   Úoptional_stringrW   r¦   Úoptional_bytesrÔ   r0   Ú
memoryviewr"   r/   rú   Úbytesr$   )r&   r'   rø   rx   Úmemviewr÷   r   r   r   Ú"testMergeFromStringUsingMemoryViewû  s    z.MessageTest.testMergeFromStringUsingMemoryViewc                 C   sF   |  ¡ }|  d|jj¡ |  | d¡¡ | d¡ |  | d¡¡ d S )Nr   r  ó    )r!   r/   r  rc   ÚassertFalser  rë   )r&   r'   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  )r&   rG   Ú	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¼   Ú
WhichOneofrD   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¡¡ |  | d¡¡ d S )NÚoneof_fieldÚoneof_uint32r   Úoneof_stringr™   )	r!   ÚassertIsr  r  r  r  r/   ru   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  r/   ru   r  r  r  r"  rc   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  r/   r  rþ   r   r   r   Ú!testOneofCompositeFieldReadAccess]  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  r/   ru   r$  Ú
ClearFieldrþ   r   r   r   ÚtestOneofWhichOneofe  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   ÚtestOneofClearFieldx  ó   
zMessageTest.testOneofClearFieldc                 C   sV   |  ¡ }d|_| d¡ |tu r|  | d¡¡ |  | d¡¡ |  d | d¡¡ d S ©Nrä   r  r  r)  rþ   r   r   r   ÚtestOneofClearSetField  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'  r/   r
   ru   r  r  rþ   r   r   r   ÚtestOneofClearUnsetFieldŠ  s   
z$MessageTest.testOneofClearUnsetFieldc                 C   s:   |  ¡ }d|_|  ¡ }| | ¡ ¡ |  d| d¡¡ d S r,  )r!   r  r-   r0   r/   r  ©r&   r'   r¢   rø   r   r   r   ÚtestOneofDeserialize•  s
   z MessageTest.testOneofDeserializec                 C   s6   |  ¡ }d|_|  ¡ }| |¡ |  d| d¡¡ d S r,  )r!   r  ÚCopyFromr/   r  r/  r   r   r   ÚtestOneofCopyFromœ  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·   r/   r  r/  r   r   r   ÚtestOneofNestedMergeFrom£  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"  rc   r  r  r·   r/   r  r/  r   r   r   ÚtestOneofMessageMergeFrom­  s   


ÿÿz%MessageTest.testOneofMessageMergeFromc                 C   s(   |j |j  ¡ d}|  d| d¡¡ d S )N)r"  r"  r  )r!   re   r/   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$  r/   rþ   r   r   r   ÚtestOneofClear¾  s   zMessageTest.testOneofClearc                 C   s$   |  ¡ }tdƒ|_|  |jt¡ dS )zsAssigning 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   Ú"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 int-valued indices in slices.

    This didn't used to work in the v2 C++ implementation.
    r@   r   r«   N)	r!   rµ   r¦   Úintr;   r/   r¥   r¶   rc   )r&   r'   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>ä  ó   € zCMessageTest.testExtendShouldNotSwallowExceptions.<locals>.<genexpr>ræ   Nc                 s   r=  r   r>  r?  r   r   r   rA  æ  rB  )r!   r   Ú	NameErrorrµ   rX   ÚrangeÚrepeated_nested_enum©r&   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_VALUESrX   ©r&   r'   r¢   Úfalsy_valuer   r   r   ÚtestExtendInt32WithNothingê  ó   
z&MessageTest.testExtendInt32WithNothingc                 C   rJ  )z,Test no-ops extending repeated float fields.N)r!   rK  rp   r   rL  rX   rM  r   r   r   ÚtestExtendFloatWithNothing÷  rP  z&MessageTest.testExtendFloatWithNothingc                 C   rJ  )z-Test no-ops extending repeated string fields.N)r!   rK  rW   r   rL  rX   rM  r   r   r   ÚtestExtendStringWithNothing  rP  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   r@   r€   ©r   r@   r€   r«   rA   ©r   r@   r€   r«   rA   N)r!   rK  rµ   rX   rþ   r   r   r   ÚtestExtendInt32WithPythonList  ó   z)MessageTest.testExtendInt32WithPythonListc                 C   rS  )	z7Test extending repeated float fields with python lists.rI  ç      ð?r   ©rI  rX  r   ç      @ç      @©rI  rX  r   rZ  r[  N)r!   rK  rp   rX   rþ   r   r   r   ÚtestExtendFloatWithPythonList  rW  z)MessageTest.testExtendFloatWithPythonListc                 C   rS  )	z8Test extending repeated string fields with python lists.r™   Ú11Ú22)r™   r^  r_  Ú33Ú44)r™   r^  r_  r`  ra  N©r!   rK  rW   rX   rþ   r   r   r   ÚtestExtendStringWithPythonList'  rW  z*MessageTest.testExtendStringWithPythonListc                 C   s8   |  ¡ }|  g |j¡ |j d¡ |  g d¢|j¡ dS )zDTest extending repeated string fields with characters from a string.rü   rÏ   Nrb  rþ   r   r   r   ÚtestExtendStringWithString2  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.TestIterablezThis 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)r&   Ú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   Fr@   zTruth value is ambiguous.)r;   re  Úboolr¼   )r&   Úsizer   r   r   rS   C  s   
z$MessageTest.TestIterable.__nonzero__c                 C   s
   t | jƒS r   )r;   re  rQ   r   r   r   Ú__len__K  ó   
z MessageTest.TestIterable.__len__c                 C   s
   | j  ¡ S r   )re  Ú__iter__rQ   r   r   r   rl  N  rk  z!MessageTest.TestIterable.__iter__r   )rL   rM   rN   Ú__doc__rg  rS   rj  rl  r   r   r   r   ÚTestIterable9  s    
rn  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   r@   r€   rT  r«   rA   rU  N)r!   rK  rµ   rX   r   rn  rþ   r   r   r   ÚtestExtendInt32WithIterableQ  ó   z'MessageTest.testExtendInt32WithIterablec                 C   ro  )	z3Test extending repeated float fields with iterable.rI  rX  r   rY  rZ  r[  r\  N)r!   rK  rp   rX   r   rn  rþ   r   r   r   ÚtestExtendFloatWithIterable^  rq  z'MessageTest.testExtendFloatWithIterablec                 C   ro  )	z4Test extending repeated string fields with iterable.r™   Ú1Ú2)r™   rs  rt  Ú3Ú4)r™   rs  rt  ru  rv  N)r!   rK  rW   rX   r   rn  rþ   r   r   r   ÚtestExtendStringWithIterablek  rq  z(MessageTest.testExtendStringWithIterablec                   @   s"   e Zd ZdZddd„Zdd„ ZdS )zMessageTest.TestIndexzEThis index object mimics the behavior of numpy.int64 and other types.Nc                 C   s
   || _ d S r   ©Úvalue)r&   ry  r   r   r   rg  {  rk  zMessageTest.TestIndex.__init__c                 C   s   | j S r   rx  rQ   r   r   r   Ú	__index__~  rT   zMessageTest.TestIndex.__index__r   )rL   rM   rN   rm  rg  rz  r   r   r   r   Ú	TestIndexx  s    
r{  c                 C   ó4   |  ¡ }|j g d¢¡ |  d|jt d¡ ¡ d S )Nr¾   r@   r   ©r!   rµ   rX   r/   r   r{  r—   r   r   r   Ú testRepeatedIndexingWithIntIndex  ó   z,MessageTest.testRepeatedIndexingWithIntIndexc                 C   r|  ©Nr¾   r«   r©   r}  r—   r   r   r   Ú)testRepeatedIndexingWithNegative1IntIndex†  r  z5MessageTest.testRepeatedIndexingWithNegative1IntIndexc                 C   s.   |  ¡ }|j g d¢¡ |  d|jd ¡ d S r€  rÅ   r—   r   r   r   Ú$testRepeatedIndexingWithNegative1Int‹  s   z0MessageTest.testRepeatedIndexingWithNegative1Intc                 C   sJ   |  ¡ }|  tj¡}t |jtj¡ W d   ƒ d S 1 sw   Y  d S r   )r!   r   r\   ÚPickleErrorr]   rµ   ÚHIGHEST_PROTOCOLrF  r   r   r   Ú!testPickleRepeatedScalarContainer  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   Ú'testSortEmptyRepeatedCompositeContainer–  s   z3MessageTest.testSortEmptyRepeatedCompositeContainerc                 C   sB   |  ¡ }|  t¡}| d¡ W d  ƒ dS 1 sw   Y  dS )z=Using HasField on a repeated field should raise an exception.rµ   N)r!   r   r¼   r  rF  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¯   rA   r   r€   r@   r«   )r!   r   Ú
IndexErrorrµ   ÚpoprX   rD  r/   rF  r   r   r   ÚtestRepeatedScalarFieldPop¡  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 )
Nr?   r¯   rA   r   r€   r@   r«   c                 S   rŸ   r   rb   rè   r   r   r   r£   ·  r¤   z=MessageTest.testRepeatedCompositeFieldPop.<locals>.<listcomp>)
r!   r   rˆ  r¥   r‰  rC   rD  r¶   rc   r/   )r&   r'   r¢   rG  r@  ré   r   r   r   ÚtestRepeatedCompositeFieldPop«  s   ÿÿ
 z)MessageTest.testRepeatedCompositeFieldPopc                 C   sX   |  ¡ }tdƒD ]}|j ||¡ |j ¡ }||_q|  |j|j¡ |  |j|j¡ d S )Nr¯   )	r!   rD  rµ   r°   r¥   r¶   rc   rK  r/   )r&   r'   r¢   r@  ré   r   r   r   ÚtestRepeatedCompareWithSelf¹  s   
z'MessageTest.testRepeatedCompareWithSelfc                 C   s6   |  ¡ }|j ¡ }|j}|j ¡ }|  |jjd¡ dS )zxA 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  r/   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 )Nr@   )r!   r   ÚAttributeErrorrµ   r¦   rþ   r   r   r   ÚtestSetRepeatedCompositeÍ  s   ÿ"ÿz$MessageTest.testSetRepeatedCompositec                 C   s"  |  ¡ }|  tt|jƒ¡ |  tt|jƒ¡ |  tt|jƒ¡ d|_d|_d|_|j 	d¡ |j
 	d¡ |j 	d¡ | | ¡ ¡ |  tt|jƒ¡ |  tt|jƒ¡ |  dt|jƒ¡ |  tt|jƒ¡ |  tt|jd ƒ¡ |  tt|j
d ƒ¡ |  tt|jd ƒ¡ |  d|jd ¡ d S )Nr@   z1.0r   T)r!   r/   r„   Útyperl   ro   rh  Úoptional_boolrp   r¦   rq   Úrepeated_boolr-   r0   r$   rþ   r   r   r   ÚtestReturningTypeÕ  s&   zMessageTest.testReturningType)ZrL   rM   rN   r*   r6   r>   rI   rZ   ra   rf   rj   rs   rt   ry   r}   r~   r   r   rŽ   r’   r–   r˜   rž   r¨   r²   r¹   r½   rÃ   rÇ   rÉ   rÕ   rÛ   rß   rí   ró   rõ   rù   rÿ   r  r  r  r  r  r  r  r  r   r%  r&  r(  r*  r-  r.  r0  r2  r3  r5  r6  r8  r9  r<  rH  Ú	bytearrayÚsetrL  rO  rQ  rR  rV  r]  rc  rd  rY   rn  rp  rr  rw  r{  r~  r  r‚  r…  r†  r‡  rŠ  r‹  rŒ  r  r‘  r•  r   r   r   r   r   M   sª    
$			B-&(		#		
		
	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Ž  r“  r  Úfield_doesnt_existrµ   r¥   r   Fr¯   Té   )r
   r!   r  r  r   r¼   r/   rŽ  r“  r  rc   ru   r'  ©r&   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_enumr@   )r
   r!   r   r¼   rŸ  rE  r¦   r   r0   r-   r  r  r/   r;   rê   )r&   r¢   rG  rø   rx   Ú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   é{   r@   )r   ÚTestEnumMapÚknown_map_fieldr   r¼   Úunknown_map_field)r&   r¢   r   r   r   ÚtestUnknownEnumMap>  s
   
"ÿzProto2Test.testUnknownEnumMapc                 C   s   t  ¡ }|  tt|d¡ d S )NÚ
Extensions)r
   r!   r   r  r  ©r&   rG   r   r   r   ÚtestExtensionsErrorsD  ó   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   ÚTopLevelMessager/   r«  r§  Úoptional_int_extensionr  r  r·   ©r&   r	  r
  r   r   r   ÚtestMergeFromExtensionsH  s   þ
þz"Proto2Test.testMergeFromExtensionsc                 C   sh   t  d¡}t ¡ }| |¡ t ¡ }t  |¡ |  ||¡ |  || ¡ ¡ t 	|¡}|  || ¡ ¡ d S r[   )
r   r   r
   ÚTestAllExtensionsr-   ÚSetAllExtensionsr/   r0   r1   r2   ©r&   r3   r4   r=   r5   r   r   r   ÚtestGoldenExtensionsX  ó   



zProto2Test.testGoldenExtensionsc                 C   sh   t  d¡}t ¡ }| |¡ t ¡ }t  |¡ |  ||¡ |  || ¡ ¡ t 	|¡}|  || ¡ ¡ d S r7   )
r   r   r
   ÚTestPackedExtensionsr-   ÚSetAllPackedExtensionsr/   r0   r1   r2   r²  r   r   r   ÚtestGoldenPackedExtensionsc  r´  z%Proto2Test.testGoldenPackedExtensionsc                 C   sN   t jdd}t |¡}t |¡}|  ||¡ |  |jd¡ |  tj	|j
¡ d S )Nr@   r>  )r
   ÚTestRequiredr\   r]   r^   r/   rÌ   r   r   ÚEncodeErrorr0   )r&   r4   r_   r`   r   r   r   ÚtestPickleIncompleteProton  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 )ziCheck the merge behavior when a required or optional field appears

    multiple times in the input.
    r@   r   r€   r«   ÚhelloN)r
   r!   rŽ  Úoptional_int64r  ÚTestParsingMergeÚRepeatedFieldsGeneratorÚfield1rX   Úfield2Úfield3Úext1Úext2Úgroup1r¶   r·   Úgroup2r0   r-   r/   Úrequired_all_typesÚoptional_all_typesÚoptionalgroupÚoptional_group_all_typesr§  Úoptional_extr;   Úrepeated_all_typesÚrepeatedgroupÚrepeated_ext)r&   Ú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  rc   iô  ÚBAZiX  i¼  ÚFOOi   r   )rŽ  Úoptional_fixed32rl   r  rÈ  r  Úoptional_foreign_messagerŸ  rÌ  rE  Údefault_int32r  rÚ  r€   r   r@   r¼  é*   )rŸ  ÚINVALID_NESTED_FIELDé   )r  ÚINVALID_VALUE_TYPEÚINVALID_LABEL)rE  ) r
   r!   ÚBARrú   r/   rŽ  rÙ  rl   r  rÈ  rÌ   r  re   rc   ru   r  rÚ  ÚForeignMessager×  rŸ  r;   rÌ  rE  rØ  rÛ  r  r  rp   Údefault_int64r   r¼   rC   r›  r   r   r   ÚtestPythonicInit°  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!   r/   rŽ  rÙ  )r&   ÚkwargsrG   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ÚSerializePartialToStringrp   r   Ú_extensions_by_name)
ÚpydocÚhtmlÚdocumentr
   r!   r#   Ú	__bases__r   r  r  )r&   ÚdocÚbaser   r   r   Útest_documentationû  s   zProto2Test.test_documentationN)rL   rM   rN   rœ  r¡  r¦  r©  r¯  r³  r·  rº  rÓ  rä  ræ  rï  r   r   r   r   r˜  ì  s    05@r˜  c                   @   sf  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$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)e* +e,j-e.kdO¡dPdQ„ ƒZ/dRdS„ Z0dTS )UÚ
Proto3Testc                 C   s<   t |ƒ}|D ]\}}|  ||| ¡ ||= q|  i |¡ d S r   )Údictr/   )r&   Ú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Ž  rl   r  r“  r  r™  rµ   r¥   r   r™   Fr¯   rÊ   rü   Trš  )r   r!   r   r¼   r  r  r/   rŽ  rl   r  r“  r  rc   ru   r'  r›  r   r   r   rœ    sZ   ÿÿÿÿÿÿÿ




zProto3Test.testFieldPresencec                 C   s\   t  ¡ }d|_d|_d|_|  t| ¡ ƒd¡ t ¡ }| 	| 
¡ ¡ |  t| ¡ ƒd¡ d S )Nr   r™   r  r«   )r
   r!   rŽ  r  r  r/   r;   Ú
ListFieldsr   r-   r0   )r&   Úmessage_proto2Úmessage_proto3r   r   r   Ú!testProto3ParserDropDefaultScalarM  s   z,Proto3Test.testProto3ParserDropDefaultScalarc           
      C   s  t  ¡ }|  | d¡¡ |  | d¡¡ |  | d¡¡ |  | d¡¡ |  |j d¡¡ d|_d|_d|_d|j_|  	| d¡¡ |  	| d¡¡ |  	| d¡¡ |  	| d¡¡ |  	|j d¡¡ d	|_d
|_d|_d	|j_|  	| d¡¡ |  	| d¡¡ |  	| d¡¡ |  	| d¡¡ |  	|j d¡¡ t  ¡ }| 
| ¡ ¡ |  	| d¡¡ |  	| d¡¡ |  	| d¡¡ |  	| d¡¡ |  	|j d¡¡ |  | d¡d¡ | d¡ | d¡ | d¡ | d¡ |  | d¡¡ |  | d¡¡ |  | d¡¡ |  | d¡¡ |  |j d¡¡ |  | d¡d ¡ t jjjD ]	}|  	|j¡ q!tjjjD ]}|jtjjkrB|  |j¡ q0|  	|j¡ q0tjj}|jd }|  |j¡ |jd }|  |j¡ |jd }|  	|j¡ |jd }|  	|j¡ |jd }	|  	|	j¡ d S )NrŽ  rl   r  r  rc   r@   rX  Ú123r   rI  r™   Ú_optional_int32rµ   Úproto3_optional_int32r  )r   ÚTestProto3Optionalr  r  r  rŽ  rl   r  rc   ru   r-   r0   r/   r  r'  Ú
DESCRIPTORÚfieldsÚhas_presencer
   r!   Úlabelr   ÚFieldDescriptorÚLABEL_REPEATEDr   Úfields_by_name)
r&   rG   r
  ÚfieldÚproto3_descriptorÚrepeated_fieldÚsingular_fieldÚoptional_fieldÚmessage_fieldr  r   r   r   ÚtestProto3OptionalX  sv   








zProto3Test.testProto3Optionalc                 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Ÿ  r/   rE  r¦   r0   r-   )r&   r¢   rx   rø   r   r   r   ÚtestAssignUnknownEnum¡  s   

z Proto3Test.testAssignUnknownEnumc                 C   sz  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¡ |  t¡ |j	d  W d   ƒ n	1 sw   Y  |  t¡ d|j	v  W d   ƒ d S 1 s6w   Y  d S )Né…ÿÿÿìýÿÿÿ     r¢  ì        Frü   éo   éx  r   rI  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_enumr/   ru   Ú
isinstancer„   rh  rú   r$   r   rC   r¨  r   r   r   ÚtestScalarMapDefaults¹  sJ   ÿ$ÿz Proto3Test.testScalarMapDefaultsc                 C   s\  t  ¡ }|  |j d¡¡ |  d|j dd¡¡ |  d|jjddd¡ |  |j d¡¡ d|jd< |  d|j d¡¡ |  d|j d¡¡ |  t¡ |j d¡ W d   ƒ n1 s\w   Y  |  |j d¡¡ |  d|j dd¡¡ |  d|jjddd¡ |jd }|  	||j d¡¡ |  t¡ |j d¡ W d   ƒ d S 1 s§w   Y  d S )Nr¯   ræ   )rØ   Údefaultrš  r™   )
r	   r  r7  r  Úgetr/   r   rC   Úmap_int32_foreign_messager  )r&   rG   Ú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 sw   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
@r@   rú  rü   Tr  z{-123: -456})r	   r  r/   r;   r  r  r  r  r  Úmap_int32_floatr  r  r  r  ÚFindInitializationErrorsr   rC   r0   r-   r†   r$   ©r&   rG   rx   r
  r   r   r   ÚtestScalarMap  sT   









ÿÿ
ÿÿzProto3Test.testScalarMapc                 C   s@   t  ¡ }d|jd< d|jd< |  | ¡ d¡ |  d| ¡ ¡ d S )Nr   r™   r4  s   
  r
  )r	   r  r  r  r/   ÚByteSizer0   r¨  r   r   r   ÚtestMapEntryAlwaysSerialized<  s   

ÿz'Proto3Test.testMapEntryAlwaysSerializedc                 C   sj   t  ¡ }d}| d¡}||j|< t|j ¡ ƒd \}}|  ||¡ |  ||¡ |  |t¡ |  |t¡ d S )Nu   áˆ´Úutf8r   )	r	   r  Úencoder  rô   Úitemsr/   rú   r$   )r&   rG   Úunicode_objÚ	bytes_objrØ   ry  r   r   r   Ú testStringUnicodeConversionInMapD  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ú  r®   r@   )z{-456: , 123: c: 1
}z{123: c: 1
, -456: })r	   r  r/   r;   r   r  Úget_or_creater#   r   rC   r¼   r0   r-   rÍ   r$   r)  r   r   r   ÚtestMessageMapT  s8   
ÿÿ
þ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 )Nr@   r€   )	r	   r  Úmap_int32_all_typesr  rc   r/   r;   r0   r-   )r&   rG   rx   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 )Nr@   é€   é   )r	   r  r  r+  r/   r   rÍ   )r&   rG   ri  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é"   r4  éN   é8   rã   é   r¯   r  ræ   éÞ   é7   rª   éX   rš  rá   ÚdÚcpp)r  r?  r™   )r	   r  r  r  r   rÍ   rB  r·   r1  r/   r  r  r   r   r   rC   )r&   rG   r
  Úold_map_valueÚexpected_msgÚas_dictrØ   r   r   r   r  š  sL   










"ÿzProto3Test.testMergeFromc                 C   s8  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¡ t  ¡ }t  
¡ }d	|jd _|j |j¡ |  d	|jd j¡ t  ¡ }d|jd
 _t  ¡ }d|jd
 _| | ¡ ¡ |  |jd
 jd¡ |  |jd
 jd¡ |  t¡ |j dt ¡ i¡ W d   ƒ d S 1 sw   Y  d S )Nr;  r4  r<  r=  rã   r>  r¯   r  ræ   r?  r@  rª   rA  rš  rá   r¢  r@   )r	   r  r  r  r   rÍ   rB  r·   r/   r1  ÚTestMessageMapÚmap_int32_messagerŽ  r5  rë   r0   ÚassertNotEqualr   r  r   r!   )r&   rG   r
  rE  r÷   rø   r   r   r   ÚtestMapMergeFromÙ  sZ   








ÿ$ÿ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\.r@   )r	   r  ÚassertRaisesRegexrC   r·   r¨  r   r   r   ÚtestMergeFromBadType  ó   þ"üzProto3Test.testMergeFromBadTypec                 C   rK  )Nz[Parameter to [A-Za-z]*From\(\) must be instance of same class: expected .+TestMap got int\.r@   )r	   r  rL  rC   r1  r¨  r   r   r   ÚtestCopyFromBadType  rN  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  r:  r  r  r  r  r0   r-   r/   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  r0   r-   r/   Úclearr)  r   r   r   ÚtestMapAssignmentCausesPresence5  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	   rQ  rR  r   rÍ   r0   r-   r/   r·   rS  r)  r   r   r   Ú-testMapAssignmentCausesPresenceForSubmessagesK  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)r&   rG   Ústring_string_iterÚint32_foreign_iterrØ   r   r   r   ÚtestModifyMapWhileIteratingg  s   


ÿÿÿ"ÿz&Proto3Test.testModifyMapWhileIteratingc                 C   sø   t  ¡ }d|jd< d|jd< d|jd< d|jd _d|jd _d	|jd	 _t|j ¡ ƒ}t|j ¡ ƒ}g }|jD ]}| |¡ d
|j|< q8|  ||¡ |  |t|j ¡ ƒ¡ g }|jD ]}| |¡ d|j| _q[|  ||¡ |  |t|j ¡ ƒ¡ d S )Nrú  rü   Ú456ÚdefÚ789Úghir¯   rÄ   r³   Ú000r   )	r	   r  r  r   rÍ   rô   r6  r¦   r/   )r&   rG   Ústring_string_keysÚint32_foreign_keysr6  rØ   r   r   r   Ú testModifyMapEntryWhileIteratingx  s*   






z+Proto3Test.testModifyMapEntryWhileIteratingc                 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¯   rA  )r	   r  r   r  rú   r
   râ  rÍ   r0   r-   r/   r   r¼   )r&   rG   r!  rx   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 )NFrA   r€   rÄ   r«   é   ©r€   r«   rA   )r	   r  r  r/  ru   r/   r;   rõ  )r&   rG   rï   rô  Úmatching_dictr   r   r   ÚtestMapIteration§  s   


zProto3Test.testMapIterationc                 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/  r/   )r&   rG   Ú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Ì   rh  rÎ   ri  rÍ   rj  rB  rk  Úerl  Úitem1ÚfÚitem2ÚgÚitem3ÚQQÚitem4TrJ   )r	   r  r  r/   r0   )r&   r3   rG   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 )NrA   r€   rÄ   r«   rd  re  )r	   r  r  r/  rõ  )r&   rG   Úitrf  r   r   r   ÚtestMapIterationClearMessageâ  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€   rA   )r@   r«   ©r  r@   r«   r¯   )rÍ   )r   )r	   r  r/   r  r
   râ  r   rÍ   r¨  r   r   r   ÚtestMapConstructionð  s   ÿzProto3Test.testMapConstructionc                 C   s6   t  ¡ }d|jd< t j|jd}|  d|jd ¡ d S )NrÜ  r@   r{  )r	   r  r  r/   r®  r   r   r   ÚtestMapScalarFieldConstructionù  s   
z)Proto3Test.testMapScalarFieldConstructionc                 C   s:   t  ¡ }d|jd _t j|jd}|  d|jd j¡ d S )NrÜ  Útest©Úmap_string_foreign_message)r	   r  r€  rÍ   r/   r®  r   r   r   ÚtestMapMessageFieldConstructionÿ  s   ÿz*Proto3Test.testMapMessageFieldConstructionc                 C   s<   |   t¡ tjdd W d   ƒ d S 1 sw   Y  d S )Nr@   r  )r   rC   r	   r  rQ   r   r   r   ÚtestMapFieldRaisesCorrectError	  s   "ÿz)Proto3Test.testMapFieldRaisesCorrectErrorc                 C   s`   t  ¡ }|j}d|d< d|d< d|d< | d¡ |  d| ¡ ¡ ddddœ}|  | ¡ |¡ d S )	NrA   r€   rÄ   r«   rd  r  r  re  )r	   r  r  r'  r/   r0   rõ  r/  )r&   rG   Ú	int32_maprf  r   r   r   ÚtestMapValidAfterFieldCleared	  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'  r/   r0   ru   r6  )r&   rG   Úint32_foreign_messager   r   r   Ú$testMessageMapValidAfterFieldCleared	  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€   rC  r!  r«   )r	   r  r5  r  r   r   rê   r/   )r&   rG   Ú
unused_mapÚ	msg_valuer   r   r   Ú-testMessageMapItemValidAfterTopMessageCleared(	  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  rV  r  r'  r   rW  r   )r&   rG   ry  rG  r   r   r   Ú"testMapIterInvalidatedByClearField:	  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Ä   rA   r@   rA  é    )r	   r  r/   r;   r  r   ÚKeyErrorr5  r¨  r   r   r   ÚtestMapDeleteN	  s   

ÿ
"ÿzProto3Test.testMapDeletec                 C   sT   t  ¡ }|  |jtjj¡ |  |jtjj¡ |  |jtjj¡ |  |jtjj¡ d S r   )	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  r/   r   rI  r¨  r   r   r   ÚtestMapsCompareh	  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  r€  rÍ   r/   r;   r(  r¨  r   r   r   Ú(testMapFindInitializationErrorsSmokeTestp	  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   rD   rë   r   r   r#   r$   r%   r0   r/   r  )r&   rx   rG   r)   r
  r   r   r   ÚtestStrictUtf8Checkw	  s$   ÿÿÿ
zProto3Test.testStrictUtf8Checkc                 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 )Nu   í í°r—  s   í u   í u   í í )r   r¼   r   r!   rQ   r   r   r   ÚtestSurrogatesInPython3	  s   ÿÿÿ"ÿz"Proto3Test.testSurrogatesInPython3N)1rL   rM   rN   rõ  rœ  rù  r  r  r  r"  r*  r,  r2  r4  r7  r:  r  rJ  rM  rO  rP  rT  rU  rZ  rb  rc  rg  ro  rx  rz  r|  r}  r  r‚  r„  r†  rŠ  r‹  rŽ  r‘  r’  r•  ÚunittestÚskipIfÚsysÚ
maxunicodeÚUCS2_MAXUNICODEr˜  r™  r   r   r   r   rð    sV    
9I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ú'r@   zRepeated%sContainerzRepeated%sFieldContainerc                 3   s    | ]}ˆ   |¡V  qd S r   )Úendswith)r¡   rô  ©Útp_namer   r   rA  ¤	  s   € z:ValidTypeNamesTest.assertImportFromName.<locals>.<genexpr>z%r does end with any of %rÚ.r©   )Úfromlist)r$   r’  Úsplitru   ÚanyÚjoinÚ
__import__)r&   rG   Ú	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¥   )r&   rì   r   r   r   ÚtestTypeNamesCanBeImported¬	  s   z-ValidTypeNamesTest.testTypeNamesCanBeImportedN)rL   rM   rN   r¯  r²  r   r   r   r   rŸ  ›	  s    rŸ  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 )Nr@   rX  T)rµ   r¦   Úrepeated_int64Úrepeated_uint32Úrepeated_uint64Úrepeated_sint32Úrepeated_sint64Úrepeated_fixed32Úrepeated_fixed64Úrepeated_sfixed32Úrepeated_sfixed64rp   rq   r”  rE  r›  r   r   r   Ú
setMessage¶	  s   zPackedFieldTest.setMessagec                 C   ó*   t  ¡ }|  |¡ d}|  || ¡ ¡ d S )NsH   
"*2:   B       J   R       Z  €?b      ð?jr)r   r9   r½  r/   r0   ©r&   r   r3   r   r   r   ÚtestPackedFieldsÆ	  ó   
z PackedFieldTest.testPackedFieldsc                 C   r¾  )Ns:    (0=   A       M   Q       ]  €?a      ð?hp)r   ÚTestUnpackedTypesr½  r/   r0   r¿  r   r   r   ÚtestUnpackedFieldsÙ	  rÁ  z"PackedFieldTest.testUnpackedFieldsN)rL   rM   rN   r½  rÀ  rÃ  r   r   r   r   r³  ³	  s    r³  r   z(explicit tests of the C++ implementationc                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚOversizeProtosTestc                 C   s.   t  ¡ }|}t|ƒD ]}|j}q
d|_| ¡ S )Nr   )r
   ÚTestRecursiveMessagerD  rÌ   r@  r0   )r&   ré   rG   ÚsubrG  r   r   r   ÚGenerateNestedProtoò	  s   z&OversizeProtosTest.GenerateNestedProtoc                 C   s   t  ¡ }| |  d¡¡ d S )NrÔ  )r
   rÅ  r-   rÇ  r¨  r   r   r   ÚtestSucceedOkSizedProtoú	  rª  z*OversizeProtosTest.testSucceedOkSizedProtoc                 C   sf   t j d¡ t ¡ }|  tj¡}| |  	d¡¡ W d   ƒ n1 s#w   Y  |  
dt|jƒ¡ d S )NFée   r–  )r   Ú	_c_moduleÚSetAllowOversizeProtosr
   rÅ  r   r   rF   r-   rÇ  r#   r$   r%   )r&   rG   r)   r   r   r   ÚtestAssertOversizeProtoþ	  s   ÿz*OversizeProtosTest.testAssertOversizeProtoc                 C   s(   t j d¡ t ¡ }| |  d¡¡ d S )NTrÉ  )r   rÊ  rË  r
   rÅ  r-   rÇ  r¨  r   r   r   ÚtestSucceedOversizeProto
  s   z+OversizeProtosTest.testSucceedOversizeProtoN)rL   rM   rN   rÇ  rÈ  rÌ  rÍ  r   r   r   r   rÄ  í	  s
    rÄ  Ú__main__)+rm  Ú
__author__rû   r1   rm   rÝ   r\   ré  rœ  rš  ÚwarningsÚcmpÚgoogle.protobufr   r	   r
   r   r   Úgoogle.protobuf.internalr   r   r   r   r   r   r   r   r   rž  ÚsimplefilterÚDeprecationWarningÚnamed_parametersÚTestCaser   r˜  rð  rŸ  r³  r›  r   rÄ  rL   Úmainr   r   r   r   Ú<module>   s†   
ÿ         %         9ÿÿ