U
    4JeS— ã                   @   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 )'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   úI/tmp/pip-unpacked-wheel-0oacnh65/google/protobuf/internal/message_test.pyÚ<lambda>7   ó    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ÿÿ  ÚerrorZ_proto2Z_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   sX   t  ¡ dkr|  d¡ t d¡}|  t¡}|j |¡ W 5 Q R X |  	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.Zbad_utf8_stringzTestAllTypes.optional_string)r   ÚTypeZskipTestr   ÚGoldenFileDataÚassertRaisesÚUnicodeDecodeErrorÚTestAllTypesÚ
FromStringÚassertInÚstrÚ	exception)ÚselfÚmessage_moduleZbad_utf8_dataÚcontextr   r   r   ÚtestBadUtf8StringR   s    

zMessageTest.testBadUtf8Stringc                 C   sr   |t krt d¡}n
t d¡}| ¡ }| |¡ |t krDt | |¡ |  || ¡ ¡ t 	|¡}|  || ¡ ¡ d S )NZ golden_message_oneof_implementedZgolden_message_proto3)
r   r   r   r   ÚParseFromStringZ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 ©NZgolden_packed_fields_message)
r   r   ÚTestPackedTypesr'   ZSetAllPackedFieldsr(   Úlenr)   r*   r+   )r#   r$   r,   r-   Zparsed_bytesÚall_setr.   r   r   r   ÚtestGoldenPackedMessagem   s    



z#MessageTest.testGoldenPackedMessagec              	   C   s¢   |  ¡ }|  t|jd¡ |  t|jd¡ t dd¡}t ¡ dksLt ¡ dkrŒ|  t	j
¡}| |¡ W 5 Q R X t ¡ dkrŒ|  dt|jƒ¡ |  t	j
|jd¡ d S )	Nr   Ú0é   é   r   ZupbzUnexpected end-group tag.s   )r   r   Ú	TypeErrorr   Ú	Exceptionr   ZTagBytesr   r   r   ÚDecodeErrorr(   r!   r"   )r#   r$   ÚmsgZend_tagr%   r   r   r   ÚtestParseErrorsy   s    
ÿzMessageTest.testParseErrorsc              	      s¨   d}|  ¡ }|j ddddg¡ |  ||jd d¡ |  ||jdd¡ |  ||jdd¡ G d	d
„ d
tƒ‰ G ‡ fdd„dtƒ}|  ˆ ¡ |j|ƒ d W 5 Q R X d S )Ns5   â
One stringâ
Two stringâ
Red stringâBlue stringz
One stringz
Two stringz
Red stringzBlue string©ZdeterministicFTc                   @   s   e Zd ZdS )z:MessageTest.testDeterminismParameters.<locals>.BadArgErrorN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   ÚBadArgError¡   s   rA   c                       s$   e Zd Z‡ fdd„Z‡ fdd„ZdS )z5MessageTest.testDeterminismParameters.<locals>.BadArgc                    s
   ˆ ƒ ‚d S r   r   ©r#   ©rA   r   r   Ú__nonzero__¦   s    zAMessageTest.testDeterminismParameters.<locals>.BadArg.__nonzero__c                    s
   ˆ ƒ ‚d S r   r   rB   rC   r   r   Ú__bool__©   s    z>MessageTest.testDeterminismParameters.<locals>.BadArg.__bool__N)r>   r?   r@   rD   rE   r   rC   r   r   ÚBadArg¤   s   rF   )r   Úrepeated_stringÚextendr(   r)   r9   Úobjectr   )r#   r$   r,   r-   rF   r   rC   r   ÚtestDeterminismParameters‹   s*    ü
ÿ
ÿ
ÿz%MessageTest.testDeterminismParametersc                 C   s@   t  d¡}| ¡ }| |¡ t |¡}t |¡}|  ||¡ d S ©Nr-   )r   r   r   r'   ÚpickleÚdumpsÚloadsr(   )r#   r$   r,   r-   Úpickled_messageÚunpickled_messager   r   r   ÚtestPickleSupport¯   s    



zMessageTest.testPickleSupportc                 C   s2   |j jdd}t |¡}t |¡}|  ||¡ d S )Nr6   ©Úbb)ÚTestPickleNestedMessageÚNestedMessagerL   rM   rN   r(   )r#   r$   r-   rO   rP   r   r   r   ÚtestPickleNestedMessage¸   s    

z#MessageTest.testPickleNestedMessagec                 C   s8   |j j}|jdd}t |¡}t |¡}|  ||¡ d S )Nr6   )Úcc)rT   rU   ZNestedNestedMessagerL   rM   rN   r(   )r#   r$   Úclsr-   rO   rP   r   r   r   ÚtestPickleNestedNestedMessage¾   s
    

z)MessageTest.testPickleNestedNestedMessagec                 C   s€   |t k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_doubler)   ©r#   r$   r,   r-   r   r   r   ÚtestPositiveInfinityÅ   s    
z MessageTest.testPositiveInfinityc                 C   sˆ   |t k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   rZ   ra   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'   Ú
assertTruer\   Úisnanr[   r^   r_   r`   r)   ©r#   r$   r,   r-   Ú
serializedr   r   r   r   ÚtestNotANumberí   s    

zMessageTest.testNotANumberc                 C   sR   d}|  ¡ }| |¡ |  |jd tj¡ |  |jd tj¡ |  || ¡ ¡ d S )Ns   ¢  €ª      ðr   ©r1   r'   r(   Úpacked_floatr\   r]   Úpacked_doubler)   ra   r   r   r   ÚtestPositiveInfinityPacked  s    
z&MessageTest.testPositiveInfinityPackedc                 C   sV   d}|  ¡ }| |¡ |  |jd tj ¡ |  |jd tj ¡ |  || ¡ ¡ d S )Ns   ¢  €ÿª      ðÿr   ri   ra   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   )r1   r'   rd   r\   re   rj   rk   r)   rf   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ïÿÿ#Hr]   gûPïÿÿ#Èz-infg¸ˆš Þ7)r   r\   Úpowr[   r'   r)   rd   ÚfloatÚfromhexÚassertAlmostEqualr(   )	r#   r$   r   ÚkMostPosExponentNoSigBitsÚkMostPosExponentOneSigBitÚkMostNegExponentNoSigBitsÚkMostNegExponentOneSigBitZ	max_floatZ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 )Nro   iÿ  rq   iüÿÿ)r   r\   rr   r^   r'   r)   rd   )r#   r$   r   rv   rw   rx   ry   r   r   r   ÚtestExtremeDoubleValuesg  s:    z#MessageTest.testExtremeDoubleValuesc                 C   s"   |  ¡ }d|_|  t|ƒd¡ d S )Nç       @zoptional_float: 2.0
)r   r[   r(   r!   ©r#   r$   r   r   r   r   ÚtestFloatPrinting”  s    zMessageTest.testFloatPrintingc                 C   s4   |  ¡ }d|_|j}| | ¡ ¡ |  ||j¡ d S )Nç^!Á7Ýš¿?)r   r[   r'   r)   r(   )r#   r$   r;   Z	old_floatr   r   r   ÚtestHighPrecisionFloatPrinting™  s
    z*MessageTest.testHighPrecisionFloatPrintingc                 C   s"   |  ¡ }d|_|  t|ƒd¡ d S )Nr   z%optional_double: 0.12345678912345678
)r   r^   r(   r!   ©r#   r$   r;   r   r   r   ÚtestHighPrecisionDoublePrinting   s    z+MessageTest.testHighPrecisionDoublePrintingc                 C   s<   |  ¡ }t |¡ | ¡ }| | ¡ ¡ |  t|ƒd¡ d S )NÚ )r   r   ZSetAllNonLazyFieldsZTestEmptyMessager'   r)   r(   r!   )r#   r$   Z	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k
r\   Y nX |  dt|jƒ¡ |  ddgdd„ |jD ƒ¡ d S )Nr6   rR   ro   c                 S   s   g | ]
}|j ‘qS r   rR   ©Ú.0Úmr   r   r   Ú
<listcomp>·  s     z@MessageTest.testAppendRepeatedCompositeField.<locals>.<listcomp>)r   Úrepeated_nested_messageÚappendrU   r8   r(   r2   )r#   r$   r;   Ú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k
r°   Y nX |  dt|jƒ¡ |  d	ddddgdd„ |jD ƒ¡ |  t|ƒd¡ |  |jd¡ d S )Néÿÿÿÿr6   rR   r   ro   éc   é   éþÿÿÿiüÿÿéç  é   c                 S   s   g | ]
}|j ‘qS r   rR   r†   r   r   r   r‰   Ì  s     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Š   ÚinsertrU   r8   r(   r2   r!   rS   )r#   r$   r;   Zsub_msgr   r   r   Ú testInsertRepeatedCompositeField¹  sF     ÿ
 ÿ ÿ ÿ ÿÿ ÿ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¡ |  ddddgdd	„ |jD ƒ¡ d S )
Nr6   r   rR   ro   r7   r“   é   c                 S   s   g | ]
}|j ‘qS r   rR   r†   r   r   r   r‰   ï  s     z:MessageTest.testMergeFromRepeatedField.<locals>.<listcomp>)r   Úrepeated_int32r‹   rŠ   ÚaddÚ	MergeFromr(   r2   )r#   r$   r;   Z	other_msgr   r   r   ÚtestMergeFromRepeatedFieldß  s    z&MessageTest.testMergeFromRepeatedFieldc                 C   sl   |  ¡ }z|j d¡ W n tk
r,   Y nX z|jjdd W n tk
rT   Y nX |  t|jƒd¡ d S )NZwrong)Zvalue_fieldr   )r   rŠ   r˜   r8   Ú
ValueErrorr(   r2   r   r   r   r   ÚtestAddWrongRepeatedNestedFieldñ  s    z+MessageTest.testAddWrongRepeatedNestedFieldc                 C   s²   |  ¡ }|j dddg¡ |  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 )Nr6   ro   r   r   rR   )
r   r—   rH   r    ZassertNotInrŠ   r˜   rU   r‹   r”   )r#   r$   r;   Zsub_msg1Zsub_msg2Zsub_msg3r   r   r   ÚtestRepeatedContainsý  s    
z MessageTest.testRepeatedContainsc                 C   sB   |  ¡ }|j dddg¡ d}|jD ]}||7 }q$|  |d¡ d S )Nr6   ro   r   r   é   ©r   r—   rH   r(   )r#   r$   r;   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 |  ddddgdd„ |jD ƒ¡ |  ddddgdd„ t|jƒD ƒ¡ |  ddddgd	d„ |jd d d
… D ƒ¡ d S )Nr6   rR   ro   r   r7   c                 S   s   g | ]
}|j ‘qS r   rR   r†   r   r   r   r‰     s     z@MessageTest.testRepeatedNestedFieldIteration.<locals>.<listcomp>c                 S   s   g | ]
}|j ‘qS r   rR   r†   r   r   r   r‰     s     c                 S   s   g | ]
}|j ‘qS r   rR   r†   r   r   r   r‰      s     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dddgƒ¡ |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dd
d	gƒ¡ |j	 d¡ |j	 d¡ |j	 d¡ |j	 ¡  |  |j	d d¡ |  |j	d d¡ |  |j	d d¡ |  t|j	ƒtdddgƒ¡ dS )z7Check some different types with the default comparator.r6   r   ro   r   çš™™™™™ñ?gÍÌÌÌÌÌô?ç333333ó?ÚaÚcÚbó   aó   có   bN)
r   r—   r‹   Úsortr(   r!   r_   ru   rG   Ú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   r6   ro   ÚaaarS   r§   N)r   r—   r‹   r¬   Úabsr(   rG   r2   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.r6   r   ro   rž   r“   r7   rS   r°   r   z0[bb: 1
, bb: 2
, bb: 3
, bb: 4
, bb: 5
, bb: 6
]N)	r   rŠ   r˜   rS   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
 |  dddddddgdd„ |jD ƒ¡ | ¡ }| ¡  | |¡ |  dddddddgdd„ |jD ƒ¡ dS )rµ   é   é   é   é!   é   é   é
   c                 S   s
   | j d S )Nr¿   rR   )Úzr   r   r   r   ~  r   zFMessageTest.testSortingRepeatedCompositeFieldsStable.<locals>.<lambda>r°   c                 S   s   g | ]
}|j ‘qS r   rR   ©r‡   Únr   r   r   r‰   €  s     zHMessageTest.testSortingRepeatedCompositeFieldsStable.<locals>.<listcomp>c                 S   s   g | ]
}|j ‘qS r   rR   rÁ   r   r   r   r‰   ˆ  s     N)	r   rŠ   r˜   rS   r¬   r(   r)   Ú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 ƒddddddg¡ |jj|dd |  dd
„ |jD ƒddddddg¡ dS )zECheck sorting a repeated composite field using list.sort() arguments.rS   r6   r   ro   rž   r“   r7   r°   c                 S   s   g | ]
}|j ‘qS r   rR   ©r‡   Úkr   r   r   r‰   –  s     zGMessageTest.testRepeatedCompositeFieldSortArguments.<locals>.<listcomp>T©r±   Úreversec                 S   s   g | ]
}|j ‘qS r   rR   rÇ   r   r   r   r‰   ™  s     N)r   r¶   r·   rŠ   r˜   rS   r¬   r(   )r#   r$   r   Zget_bbr   r   r   Ú'testRepeatedCompositeFieldSortArgumentsŠ  s     
ÿÿz3MessageTest.testRepeatedCompositeFieldSortArgumentsc                 C   sð   |  ¡ }|j d¡ |j d¡ |j d¡ |jjtd |  t|jƒdddg¡ |jjtdd |  t|jƒdddg¡ |j d¡ |j d¡ |j d	¡ |jjtd |  t|jƒd	ddg¡ |jjtdd |  t|jƒddd	g¡ d
S )z9Check sorting a scalar field using list.sort() arguments.r¯   r‘   rŽ   r°   TrÉ   r²   rS   r§   N)	r   r—   r‹   r¬   r³   r(   ÚlistrG   r2   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   r6   ro   r   )r   r—   r‹   rŠ   r˜   rS   ©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   sL   |  ¡ }|  t¡ t|jƒ W 5 Q R X |  t¡ t|jƒ W 5 Q R X d S r   )r   r   r8   Úhashr—   rŠ   rÖ   r   r   r   ÚtestRepeatedFieldsNotHashableÆ  s
    z)MessageTest.testRepeatedFieldsNotHashablec                 C   s*   |  ¡ }|jj g ¡ |  | d¡¡ d S )NÚpayload)ÚNestedTestAllTypesrÚ   r—   rH   rd   Ú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   r6   )r   Úoptional_nested_messager(   rS   r™   rÛ   ÚchildrÚ   rŠ   r˜   r2   )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ß   rS   rÄ   r)   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_stringrG   r‹   Úoptional_bytesr­   r)   Ú
memoryviewr   r(   rÒ   Úbytesr!   )r#   r$   rÐ   rg   ZmemviewrÏ   r   r   r   Ú"testMergeFromStringUsingMemoryViewû  s     z.MessageTest.testMergeFromStringUsingMemoryViewc                 C   sF   |  ¡ }|  d|jj¡ |  | d¡¡ | d¡ |  | d¡¡ d S )Nr   rß   r   )r   r(   rß   rS   Ú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#   r;   Ú	attributer   r   r   ÚensureNestedMessageExists  s    
z%MessageTest.ensureNestedMessageExistsc                 C   s,   |  ¡ }|  t|jd¡ |  t|jd¡ d S )NZno_such_oneof_fieldr   )r   r   r›   Ú
WhichOneofr9   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(   rd   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(   rd   rÜ   ró   rê   r÷   rS   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kr2|  | d¡¡ d|_|  d| d¡¡ |tkrb|  | d¡¡ d|_	|  d| d¡¡ | 
d¡ |  d | d¡¡ |tkr®|  | d¡¡ d S )Nrñ   r½   rò   rø   rù   )r   rô   rï   r   rê   rÜ   rò   r(   rd   rù   Ú
ClearFieldrÖ   r   r   r   ÚtestOneofWhichOneofe  s    
zMessageTest.testOneofWhichOneofc                 C   sV   |  ¡ }d|_| d¡ |tkr0|  | d¡¡ |  | d¡¡ |  d | d¡¡ d S )Nr½   rñ   rò   ©r   rò   rü   r   rê   rÜ   rô   rï   rÖ   r   r   r   ÚtestOneofClearFieldx  s    
zMessageTest.testOneofClearFieldc                 C   sV   |  ¡ }d|_| d¡ |tkr0|  | d¡¡ |  | d¡¡ |  d | d¡¡ d S ©Nr½   rò   rñ   rþ   rÖ   r   r   r   ÚtestOneofClearSetField  s    
z"MessageTest.testOneofClearSetFieldc                 C   sp   |  ¡ }d|_|  |d¡ | d¡ |  d|j¡ |tkrJ|  | d¡¡ |  | d¡¡ |  d| d¡¡ d S )Nr½   r÷   rñ   rò   )	r   rò   rî   rü   r(   r   rd   rÜ   rï   rÖ   r   r   r   ÚtestOneofClearUnsetFieldŠ  s    
z$MessageTest.testOneofClearUnsetFieldc                 C   s:   |  ¡ }d|_|  ¡ }| | ¡ ¡ |  d| d¡¡ d S r   )r   rò   r'   r)   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÷   rS   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   rU   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.
    r6   r   r   N)	r   r—   r‹   Úintr2   r(   rŠ   r˜   rS   )r#   r$   rˆ   Úslr   r   r   ÚtestLongValuedSliceÏ  s    zMessageTest.testLongValuedSlicec              	   C   sl   |  ¡ }|  t¡ }|j dd„ tdƒD ƒ¡ W 5 Q R X |  t¡ }|j dd„ tdƒD ƒ¡ W 5 Q R X dS )z5This didn't use to work in the v2 C++ implementation.c                 s   s   | ]
}t V  qd S r   ©r¦   ©r‡   Úir   r   r   Ú	<genexpr>ä  s     zCMessageTest.testExtendShouldNotSwallowExceptions.<locals>.<genexpr>r¿   c                 s   s   | ]
}t V  qd S r   r  r  r   r   r   r  æ  s     N)r   r   Ú	NameErrorr—   rH   ÚrangeÚrepeated_nested_enum©r#   r$   rˆ   Ú_r   r   r   Ú$testExtendShouldNotSwallowExceptionsà  s
    $z0MessageTest.testExtendShouldNotSwallowExceptionsNFr   ç        r   rƒ   c                 C   sZ   |  ¡ }|  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_VALUESrH   ©r#   r$   rˆ   Zfalsy_valuer   r   r   ÚtestExtendInt32WithNothingê  s    
z&MessageTest.testExtendInt32WithNothingc                 C   sZ   |  ¡ }|  g |j¡ tjD ]}|j |¡ |  g |j¡ q|j g ¡ |  g |j¡ dS )z,Test no-ops extending repeated float fields.N)r   r  r_   r   r  rH   r  r   r   r   ÚtestExtendFloatWithNothing÷  s    
z&MessageTest.testExtendFloatWithNothingc                 C   sZ   |  ¡ }|  g |j¡ tjD ]}|j |¡ |  g |j¡ q|j g ¡ |  g |j¡ dS )z-Test no-ops extending repeated string fields.N)r   r  rG   r   r  rH   r  r   r   r   ÚtestExtendStringWithNothing  s    
z'MessageTest.testExtendStringWithNothingc                 C   s„   |  ¡ }|  g |j¡ |j dg¡ |  dg|j¡ |j ddg¡ |  dddg|j¡ |j ddg¡ |  dddddg|j¡ dS )z7Test extending repeated int32 fields with python lists.r   r6   ro   r   r7   N)r   r  r—   rH   rÖ   r   r   r   ÚtestExtendInt32WithPythonList  s    z)MessageTest.testExtendInt32WithPythonListc                 C   s„   |  ¡ }|  g |j¡ |j dg¡ |  dg|j¡ |j ddg¡ |  dddg|j¡ |j ddg¡ |  dddddg|j¡ dS )z7Test extending repeated float fields with python lists.r  ç      ð?r|   ç      @ç      @N)r   r  r_   rH   rÖ   r   r   r   ÚtestExtendFloatWithPythonList  s    z)MessageTest.testExtendFloatWithPythonListc                 C   s„   |  ¡ }|  g |j¡ |j dg¡ |  dg|j¡ |j ddg¡ |  dddg|j¡ |j ddg¡ |  dddddg|j¡ dS )z8Test extending repeated string fields with python lists.rƒ   Z11Z22Z33Z44N©r   r  rG   rH   rÖ   r   r   r   ÚtestExtendStringWithPythonList'  s    z*MessageTest.testExtendStringWithPythonListc                 C   s:   |  ¡ }|  g |j¡ |j d¡ |  dddg|j¡ dS )zDTest extending repeated string fields with characters from a string.rÔ   r¦   r¨   r§   Nr'  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   s8   t | jƒ}|dkrdS |dkr,t| jd ƒS tdƒ‚d S )Nr   Fr6   zTruth value is ambiguous.)r2   r*  Úboolr›   )r#   Úsizer   r   r   rD   C  s    
z$MessageTest.TestIterable.__nonzero__c                 C   s
   t | jƒS r   )r2   r*  rB   r   r   r   Ú__len__K  s    z MessageTest.TestIterable.__len__c                 C   s
   | j  ¡ S r   )r*  Ú__iter__rB   r   r   r   r0  N  s    z!MessageTest.TestIterable.__iter__)N)r>   r?   r@   Ú__doc__r,  rD   r/  r0  r   r   r   r   ÚTestIterable9  s
   
r2  c                 C   s¶   |  ¡ }|  g |j¡ |j t g ¡¡ |  g |j¡ |j t dg¡¡ |  dg|j¡ |j t ddg¡¡ |  dddg|j¡ |j t ddg¡¡ |  dddddg|j¡ dS )z3Test extending repeated int32 fields with iterable.r   r6   ro   r   r7   N)r   r  r—   rH   r   r2  rÖ   r   r   r   ÚtestExtendInt32WithIterableQ  s    z'MessageTest.testExtendInt32WithIterablec                 C   s¶   |  ¡ }|  g |j¡ |j t g ¡¡ |  g |j¡ |j t dg¡¡ |  dg|j¡ |j t ddg¡¡ |  dddg|j¡ |j t ddg¡¡ |  dddddg|j¡ dS )z3Test extending repeated float fields with iterable.r  r#  r|   r$  r%  N)r   r  r_   rH   r   r2  rÖ   r   r   r   ÚtestExtendFloatWithIterable^  s    z'MessageTest.testExtendFloatWithIterablec                 C   s¶   |  ¡ }|  g |j¡ |j t g ¡¡ |  g |j¡ |j t dg¡¡ |  dg|j¡ |j t ddg¡¡ |  dddg|j¡ |j t ddg¡¡ |  dddddg|j¡ dS )z4Test extending repeated string fields with iterable.rƒ   Ú1Ú2Ú3Ú4N)r   r  rG   rH   r   r2  rÖ   r   r   r   ÚtestExtendStringWithIterablek  s    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#   r;  r   r   r   r,  {  s    zMessageTest.TestIndex.__init__c                 C   s   | j S r   r:  rB   r   r   r   Ú	__index__~  s    zMessageTest.TestIndex.__index__)N)r>   r?   r@   r1  r,  r<  r   r   r   r   Ú	TestIndexx  s   
r=  c                 C   s6   |  ¡ }|j dddg¡ |  d|jt d¡ ¡ d S )Nr6   ro   r   r   ©r   r—   rH   r(   r   r=  r   r   r   r   Ú testRepeatedIndexingWithIntIndex  s    z,MessageTest.testRepeatedIndexingWithIntIndexc                 C   s6   |  ¡ }|j dddg¡ |  d|jt d¡ ¡ d S ©Nr6   ro   r   rŽ   r>  r   r   r   r   Ú)testRepeatedIndexingWithNegative1IntIndex†  s    z5MessageTest.testRepeatedIndexingWithNegative1IntIndexc                 C   s0   |  ¡ }|j dddg¡ |  d|jd ¡ d S r@  rŸ   r   r   r   r   Ú$testRepeatedIndexingWithNegative1Int‹  s    z0MessageTest.testRepeatedIndexingWithNegative1Intc              	   C   s4   |  ¡ }|  tj¡}t |jtj¡ W 5 Q R X d S r   )r   r   rL   ÚPickleErrorrM   r—   ÚHIGHEST_PROTOCOLr  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   s,   |  ¡ }|  t¡}| d¡ W 5 Q R X dS )z=Using 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 5 Q R X |j tdƒ¡ |  d|j ¡ ¡ |  d|j d¡¡ |  d|j d¡¡ |  ddg|j¡ d S )Nr“   r7   r   ro   r6   r   )r   r   Ú
IndexErrorr—   ÚpoprH   r  r(   r  r   r   r   ÚtestRepeatedScalarFieldPop¡  s    z&MessageTest.testRepeatedScalarFieldPopc              	   C   sÈ   |  ¡ }|  t¡}|j ¡  W 5 Q R X |  t¡}|j d¡ W 5 Q R X tdƒD ]}|j ¡ }||_qR|  	d|j ¡ j¡ |  	d|j d¡j¡ |  	d|j d¡j¡ |  	ddgdd	„ |jD ƒ¡ d S )
Nr5   r“   r7   r   ro   r6   r   c                 S   s   g | ]
}|j ‘qS r   rR   rÁ   r   r   r   r‰   ·  s     z=MessageTest.testRepeatedCompositeFieldPop.<locals>.<listcomp>)
r   r   rH  rŠ   rI  r8   r  r˜   rS   r(   )r#   r$   rˆ   r  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   r  r—   r”   rŠ   r˜   rS   r  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Û   Zrepeated_childr˜   rà   r(   rÚ   Úoptional_int32rÖ   r   r   r   ÚtestReleasedNestedMessagesÂ  s
    

z&MessageTest.testReleasedNestedMessagesc              	   C   sP   |  ¡ }|  t¡ g |_W 5 Q R X |j d¡ |  t¡ g |_W 5 Q R X d S )Nr6   )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 )Nr6   z1.0r   T)r   r(   rs   Útyper[   r^   r-  Úoptional_boolr_   r‹   r`   Úrepeated_boolr'   r)   r!   rÖ   r   r   r   ÚtestReturningTypeÕ  s&    zMessageTest.testReturningType)Zr>   r?   r@   r&   r/   r4   r<   rJ   rQ   rV   rY   rb   rc   rh   rl   rm   rn   rz   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	  r
  r  r  r  r  Ú	bytearrayÚsetr  r  r   r!  r"  r&  r(  r)  rI   r2  r3  r4  r9  r=  r?  rA  rB  rE  rF  rG  rJ  rK  rL  rN  rP  rT  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 5 Q R X |  t¡ | d¡ W 5 Q R X |  t¡ | d¡ W 5 Q R X |  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 )NrM  rR  rß   Úfield_doesnt_existr—   rŠ   r   Fr“   Té   )r   r   rê   rÜ   r   r›   r(   rM  rR  rß   rS   rd   rü   ©r#   r   r   r   r   ÚtestFieldPresenceï  sD    


zProto2Test.testFieldPresencec              	   C   s
  t  ¡ }|  t¡}d|_W 5 Q R X |  t|jjd¡ |j d¡ d|jd< |  t¡ d|jd< W 5 Q R X 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.é‡Ö ro   r   i@â é±Ët Úoptional_nested_enumr6   N)r   r   r   r›   r^  r  r‹   r   r)   r'   rê   rÜ   r(   r2   rÃ   )r#   rˆ   r  rÐ   rg   Zm3r   r   r   ÚtestAssignInvalidEnum  s*    

z Proto2Test.testAssignInvalidEnumc              	   C   s6   t  ¡ }d|jd< |  t¡ d|jd< W 5 Q R X d S )Nr   é{   r6   )r	   ZTestEnumMapZknown_map_fieldr   r›   Z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   rO  rì   ©r#   r;   r   r   r   ÚtestExtensionsErrorsD  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   ZTopLevelMessager(   re  rb  Z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 rK   )
r   r   r   ZTestAllExtensionsr'   ZSetAllExtensionsr(   r)   r*   r+   ©r#   r,   r-   r3   r.   r   r   r   ÚtestGoldenExtensionsX  s    



zProto2Test.testGoldenExtensionsc                 C   sh   t  d¡}t ¡ }| |¡ t ¡ }t  |¡ |  ||¡ |  || ¡ ¡ t 	|¡}|  || ¡ ¡ d S r0   )
r   r   r   ZTestPackedExtensionsr'   ZSetAllPackedExtensionsr(   r)   r*   r+   rh  r   r   r   ÚtestGoldenPackedExtensionsc  s    



z%Proto2Test.testGoldenPackedExtensionsc                 C   sN   t jdd}t |¡}t |¡}|  ||¡ |  |jd¡ |  tj	|j
¡ d S )Nr6   r  )r   ZTestRequiredrL   rM   rN   r(   r¦   r   r   ZEncodeErrorr)   )r#   r-   rO   rP   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.
    r6   r   ro   r   ZhelloN)r   r   rM  Úoptional_int64rå   ZTestParsingMergeZRepeatedFieldsGeneratorZfield1rH   Zfield2Zfield3Zext1Zext2Zgroup1r˜   r™   Zgroup2r)   r'   r(   Zrequired_all_typesZoptional_all_typesÚoptionalgroupZoptional_group_all_typesrb  Zoptional_extr2   Zrepeated_all_typesÚrepeatedgroupZrepeated_ext)r#   ÚmessagesZmerged_messageÚ	generatorÚdataZ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 5 Q R X |  t¡ t jddid W 5 Q R X |  t¡ t jdd W 5 Q R X |  t¡ t jdd W 5 Q R X d S )Néd   éÈ   g     Èr@ó   xr¦   i  rS   iô  ÚBAZiX  i¼  ÚFOOi   r   )rM  Úoptional_fixed32r[   ræ   rm  rß   Úoptional_foreign_messager^  rn  r  Údefault_int32ró   ry  ro   r   r6   rl  é*   )r^  ZINVALID_NESTED_FIELDé   )rß   ZINVALID_VALUE_TYPEZINVALID_LABEL)r  ) r   r   ZBARrÒ   r(   rM  rx  r[   ræ   rm  r¦   rß   rU   rS   rd   rÜ   ry  ÚForeignMessagerv  r^  r2   rn  r  rw  rz  ró   rê   r_   Zdefault_int64r   r›   r8   rZ  r   r   r   ÚtestPythonicInit°  sˆ     ÿ ÿþ
ðÿÿ
ÿ
ÿ
ÿ
ÿÿÿzProto2Test.testPythonicInitc                 C   s6   dddœ}t jf |Ž}|  d|j¡ |  d|j¡ d S )Nrs  rt  )rM  rx  )r   r   r(   rM  rx  )r#   Úkwargsr;   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 TestAllTypesZSerializePartialToStringr_   r   Z_extensions_by_name)
ÚpydocÚhtmlÚdocumentr   r   r    Ú	__bases__r   rO  rì   )r#   ÚdocÚbaser   r   r   Útest_documentationû  s    zProto2Test.test_documentationN)r>   r?   r@   r[  r_  ra  rd  rg  ri  rj  rk  rr  r~  r€  r‡  r   r   r   r   rW  ì  s   05@rW  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#   Zmap_iterZ
dict_valuerÈ   Úvr   r   r   ÚassertMapIterEquals
  s
    zProto3Test.assertMapIterEqualsc              	   C   sö  t  ¡ }|  t¡ | d¡ W 5 Q R X |  t¡ | d¡ W 5 Q R X |  t¡ | d¡ W 5 Q R X |  t¡ | d¡ W 5 Q R X |  | d¡¡ |  t¡ | d¡ W 5 Q R X |  t¡ | d¡ W 5 Q R X |  t¡ | d¡ W 5 Q R X |  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 )NrM  r[   rå   rR  rß   rX  r—   rŠ   r   rƒ   Fr“   r¤   rÔ   TrY  )r   r   r   r›   rÜ   rê   r(   rM  r[   rå   rR  rß   rS   rd   rü   rZ  r   r   r   r[    sL    




zProto3Test.testFieldPresencec                 C   s\   t  ¡ }d|_d|_d|_|  t| ¡ ƒd¡ t ¡ }| 	| 
¡ ¡ |  t| ¡ ƒd¡ d S )Nr   rƒ   r   r   )r   r   rM  rå   ræ   r(   r2   Z
ListFieldsr   r'   r)   )r#   Zmessage_proto2Z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¡ qBtjjjD ]0}|jtjjkr‚|  |j¡ n|  	|j¡ q`tjj}|jd }|  |j¡ |jd }|  |j¡ |jd }|  	|j¡ |jd }|  	|j¡ |jd }	|  	|	j¡ d S )NrM  r[   rå   rß   rS   r6   r#  Ú123r   r  rƒ   Z_optional_int32r—   Zproto3_optional_int32rò   )r   ZTestProto3Optionalrê   rÜ   rß   rM  r[   rå   rS   rd   r'   r)   r(   rï   rü   Z
DESCRIPTORÚfieldsZhas_presencer   r   Úlabelr   ZFieldDescriptorZLABEL_REPEATEDr   Zfields_by_name)
r#   r;   râ   ÚfieldZproto3_descriptorZrepeated_fieldZsingular_fieldZoptional_fieldZ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(   r  r‹   r)   r'   )r#   rˆ   rg   rÐ   r   r   r   ÚtestAssignUnknownEnum¡  s    

z Proto3Test.testAssignUnknownEnumc              	   C   sL  t  ¡ }|  d|jk¡ |  d|jk¡ |  d|jk¡ |  d|jk¡ |  d|jk¡ |  d|jk¡ |  d|j	k¡ |  d|j
k¡ |  d|jk¡ |  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k¡ |  d|jk¡ |  d|jk¡ |  d|jk¡ |  d|jk¡ |  d|jk¡ |  d|j	k¡ |  d|j
k¡ |  d|jk¡ |  |j	d t¡ |  t¡ |j	d  W 5 Q R X |  t¡ d|j	k W 5 Q R X d S )Né…ÿÿÿìýÿÿÿ     r`  ì        FrÔ   éo   éx  r   r  rƒ   r   )r
   ÚTestMaprê   Úmap_int32_int32Úmap_int64_int64Úmap_uint32_uint32Úmap_uint64_uint64Úmap_int32_doubleÚmap_bool_boolÚmap_string_stringZmap_int32_bytesÚmap_int32_enumr(   rd   Ú
isinstancers   r-  rÒ   r!   r   r8   rc  r   r   r   ÚtestScalarMapDefaults¹  sF    z Proto3Test.testScalarMapDefaultsc              	   C   s2  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 5 Q R X |  |j d¡¡ |  d|j dd¡¡ |  d|jjddd¡ |jd }|  	||j d¡¡ |  t¡ |j d¡ W 5 Q R X d S )Nr“   r¿   )r±   ÚdefaultrY  rƒ   )
r
   r˜  r  r™  Úgetr(   r   r8   Úmap_int32_foreign_messagerô   )r#   r;   Úsubmsgr   r   r   Ú
testMapGeté  s"    

zProto3Test.testMapGetc              	   C   s&  t  ¡ }|  dt|jƒ¡ |  d|jk¡ 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 5 Q R X |  dt|jƒ¡ |  t¡ d|jd< W 5 Q R X | ¡ }t  ¡ }| |¡ |  t¡ d|jd< W 5 Q R X |  t¡ d|jd< W 5 Q R X |  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¥   ro   gffffff
@r6   r  rÔ   Tr—  z{-123: -456})r
   r˜  r(   r2   r™  rê   rš  r›  rœ  Zmap_int32_floatr  rŸ  rž  r   ÚFindInitializationErrorsr   r8   r)   r'   ru   r!   ©r#   r;   rg   râ   r   r   r   ÚtestScalarMap  sL    










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Ÿ  r(   ÚByteSizer)   rc  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#   r;   Zunicode_objZ	bytes_objr±   r;  r   r   r   Ú testStringUnicodeConversionInMapD  s    

z+Proto3Test.testStringUnicodeConversionInMapc              	   C   sT  t  ¡ }|  dt|jƒ¡ |  d|jk¡ |jd  |j d¡ |  dt|jƒ¡ |  d|j¡ |  d|j¡ |  dt|jƒ¡ |  t	¡ |jd  W 5 Q R X |  t
¡ |jd |jd< W 5 Q R X |  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¨  ro   r  r’   r6   )z{-456: , 123: c: 1
}z{123: c: 1
, -456: })r
   r˜  r(   r2   r¥  rê   Zget_or_creater    r   r8   r›   r)   r'   r§   r!   r­  r   r   r   ÚtestMessageMapT  s4    

þ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|= q„d S )Nr6   ro   )	r
   r˜  Úmap_int32_all_typesrß   rS   r(   r2   r)   r'   )r#   r;   rg   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 )Nr6   é€   é   )r
   r˜  r™  r¯  r(   r¥  r§   )r#   r;   r.  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rP|  	d|j¡ i }|jD ]$}|  
||k¡ |j| j||< qZ|  	dd	dœ|¡ |jd= |  
d|jk¡ |jd
= |  
d
|jk¡ |  t¡ |jd= W 5 Q R X d S )Né"   r  éN   é8   r¼   é   r“   r–  r¿   éÞ   é7   r   éX   rY  rº   ÚdÚcpp)r–  rÀ  rƒ   )r
   r˜  r™  rš  r¥  r§   rÃ  r™   r  r(   rê   rÜ   r   r   r   r8   )r#   r;   râ   Zold_map_valueÚexpected_msgZas_dictr±   r   r   r   rã   š  sJ    









zProto3Test.testMergeFromc              	   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 |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 5 Q R X d S )Nr¼  r  r½  r¾  r¼   r¿  r“   r–  r¿   rÀ  rÁ  r   rÂ  rY  rº   r`  r6   )r
   r˜  r™  rš  r¥  r§   rÃ  r™   r(   r  ZTestMessageMapZmap_int32_messagerM  r¶  rÄ   r)   ÚassertNotEqualr   rO  r   r   )r#   r;   râ   rÅ  rÏ   rÐ   r   r   r   ÚtestMapMergeFromÙ  sX    








ÿzProto3Test.testMapMergeFromc              	   C   s.   t  ¡ }|  td¡ | d¡ W 5 Q R X d S )NzWParameter to MergeFrom\(\) must be instance of same class: expected .+TestMap got int\.r6   )r
   r˜  ÚassertRaisesRegexr8   r™   rc  r   r   r   ÚtestMergeFromBadType  s    þzProto3Test.testMergeFromBadTypec              	   C   s.   t  ¡ }|  td¡ | d¡ W 5 Q R X d S )Nz[Parameter to [A-Za-z]*From\(\) must be instance of same class: expected .+TestMap got int\.r6   )r
   r˜  rÈ  r8   r  rc  r   r   r   ÚtestCopyFromBadType  s    þ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œ  r)   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™  r)   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
   rÌ  rÍ  r¥  r§   r)   r'   r(   r™   rÎ  r­  r   r   r   Ú-testMapAssignmentCausesPresenceForSubmessagesK  s(    


ÿ

z8Proto3Test.testMapAssignmentCausesPresenceForSubmessagesc              	   C   sv   t  ¡ }t|jƒ}t|jƒ}d|jd< d|jd _|  t¡ |D ]}qBW 5 Q R X |  t¡ |D ]}qbW 5 Q R X d S )Nr  rÔ   r“   )r
   r˜  ÚiterrŸ  r¥  r§   r   ÚRuntimeError)r#   r;   Zstring_string_iterZ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|< qp|  ||¡ |  |t|j ¡ ƒ¡ g }|jD ]}| |¡ d|j| _q¶|  ||¡ |  |t|j ¡ ƒ¡ d S )Nr  rÔ   Z456ÚdefZ789Zghir“   rž   r–   Z000r   )	r
   r˜  rŸ  r¥  r§   rÌ   r·  r‹   r(   )r#   r;   Zstring_string_keysZint32_foreign_keysr·  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 5 Q R X d S )Nr–  r“   rÂ  )r
   r˜  r¥  rô   rÒ   r   r}  r§   r)   r'   r(   r   r›   )r#   r;   r¦  rg   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 )NFr7   ro   rž   r   é   ©ro   r   r7   )r
   r˜  r™  r³  rd   r(   r2   r‹  )r#   r;   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#   r;   Zitems1Z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¦   rÛ  r¨   rÜ  r§   rÝ  rÃ  rÞ  Úerß  Zitem1ÚfZitem2ÚgZitem3ZQQZitem4Tr=   )r
   r˜  rŸ  r(   r)   )r#   r,   r;   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 )Nr7   ro   rž   r   r×  rØ  )r
   r˜  r™  r³  r‹  )r#   r;   ÚitrÙ  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 )
Nro   r7   )r6   r   ©r™  r6   r   r“   )r§   )r¥  )r
   r˜  r(   r™  r   r}  r¥  r§   rc  r   r   r   ÚtestMapConstructionð  s    ÿzProto3Test.testMapConstructionc                 C   s6   t  ¡ }d|jd< t j|jd}|  d|jd ¡ d S )Nr{  r6   rç  )r
   r˜  r™  r(   rf  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(   rf  r   r   r   ÚtestMapMessageFieldConstructionÿ  s    ÿz*Proto3Test.testMapMessageFieldConstructionc              	   C   s&   |   t¡ tjdd W 5 Q R X d S )Nr6   rë  )r   r8   r
   r˜  rB   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 )	Nr7   ro   rž   r   r×  r™  r   rØ  )r
   r˜  r™  rü   r(   r)   r‹  r³  )r#   r;   Z	int32_maprÙ  r   r   r   ÚtestMapValidAfterFieldCleared	  s    
z(Proto3Test.testMapValidAfterFieldClearedc                 C   sH   t  ¡ }|j}d|d _| d¡ |  d| ¡ ¡ |  d| ¡ k¡ d S )Nr“   ro   r¥  r   )	r
   r˜  r¥  r§   rü   r(   r)   rd   r·  )r#   r;   Z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Úbarro   rÄ  rö   r   )r
   r˜  r¶  rå   r   r   rÃ   r(   )r#   r;   Z
unused_mapZ	msg_valuer   r   r   Ú-testMessageMapItemValidAfterTopMessageCleared(	  s    
z8Proto3Test.testMessageMapItemValidAfterTopMessageClearedc              	   C   st   t  ¡ }t|jƒ}| d¡ |  t¡ |D ]}q,W 5 Q R X t|jƒ}| d¡ |  t¡ |D ]}q`W 5 Q R X d S )Nr™  r¥  )r
   r˜  rÑ  r™  rü   r   rÒ  r¥  )r#   r;   rå  r  r   r   r   Ú"testMapIterInvalidatedByClearField:	  s    



z-Proto3Test.testMapIterInvalidatedByClearFieldc              	   C   s   t  ¡ }|  dt|jƒ¡ d|jd< |  dt|jƒ¡ |  t¡ |jd= W 5 Q R X |jd= |  dt|jƒ¡ |  t¡ |jd= W 5 Q R X d S )Nr   rž   r7   r6   rÂ  é    )r
   r˜  r(   r2   r™  r   ÚKeyErrorr¶  rc  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¥  rc  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¥  rÆ  rc  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(   r2   r¬  rc  r   r   r   Ú(testMapFindInitializationErrorsSmokeTestp	  s
    

z3Proto3Test.testMapFindInitializationErrorsSmokeTestzSkip for ucs2c              	   C   s¬   d}t  ¡ }|  t¡}| |¡ W 5 Q R X t ¡ dkrL|  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   r9   rÄ   r   r   r    r!   r"   r)   r(   rå   )r#   rg   r;   r%   râ   r   r   r   ÚtestStrictUtf8Checkw	  s    ÿ

zProto3Test.testStrictUtf8Checkc              	   C   sŒ   |   t¡ tjdd W 5 Q R X |   t¡ tjdd W 5 Q R X |   t¡ tjdd W 5 Q R X |   t¡ tjdd W 5 Q R X d S )Nu   í í°rÿ  s   í u   í u   í í )r   r›   r   r   rB   r   r   r   ÚtestSurrogatesInPython3	  s    z"Proto3Test.testSurrogatesInPython3N)1r>   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ù  rú  rý  ÚunittestÚskipIfÚsysÚ
maxunicodeÚUCS2_MAXUNICODEr   r  r   r   r   r   rˆ    sT   
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ú'r6   zRepeated%sContainerzRepeated%sFieldContainerc                 3   s   | ]}ˆ   |¡V  qd S r   )Úendswith)r‡   rŠ  ©Ztp_namer   r   r  ¤	  s     z:ValidTypeNamesTest.assertImportFromName.<locals>.<genexpr>z%r does end with any of %rÚ.rŽ   )Úfromlist)r!   rQ  Úsplitrd   ÚanyÚjoinÚ
__import__)r#   r;   Ú	base_nameZvalid_namesÚpartsÚ
class_nameÚmodule_namer   r
  r   ÚassertImportFromNamež	  s    ÿ
þ
z'ValidTypeNamesTest.assertImportFromNamec                 C   s(   t  ¡ }|  |jd¡ |  |jd¡ d S )NZScalarZ	Composite)r   r   r  r—   rŠ   )r#   rÅ   r   r   r   ÚtestTypeNamesCanBeImported¬	  s    z-ValidTypeNamesTest.testTypeNamesCanBeImportedN)r>   r?   r@   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 )Nr6   r#  T)r—   r‹   Zrepeated_int64Zrepeated_uint32Zrepeated_uint64Zrepeated_sint32Zrepeated_sint64Zrepeated_fixed32Zrepeated_fixed64Zrepeated_sfixed32Zrepeated_sfixed64r_   r`   rS  r  rZ  r   r   r   Ú
setMessage¶	  s    zPackedFieldTest.setMessagec                 C   s*   t  ¡ }|  |¡ d}|  || ¡ ¡ d S )NsH   
"*2:   B       J   R       Z  €?b      ð?jr)r   r1   r  r(   r)   ©r#   r   r,   r   r   r   ÚtestPackedFieldsÆ	  s    
z PackedFieldTest.testPackedFieldsc                 C   s*   t  ¡ }|  |¡ d}|  || ¡ ¡ d S )Ns:    (0=   A       M   Q       ]  €?a      ð?hp)r   ZTestUnpackedTypesr  r(   r)   r  r   r   r   ÚtestUnpackedFieldsÙ	  s    
z"PackedFieldTest.testUnpackedFieldsN)r>   r?   r@   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   ÚTestRecursiveMessager  r¦   r  r)   )r#   rÂ   r;   Úsubr  r   r   r   ÚGenerateNestedProtoò	  s    z&OversizeProtosTest.GenerateNestedProtoc                 C   s   t  ¡ }| |  d¡¡ d S )Nrs  )r   r  r'   r  rc  r   r   r   ÚtestSucceedOkSizedProtoú	  s    z*OversizeProtosTest.testSucceedOkSizedProtoc              	   C   sR   t j d¡ t ¡ }|  tj¡}| |  	d¡¡ W 5 Q R X |  
dt|jƒ¡ d S )NFée   rþ  )r   Ú	_c_moduleÚSetAllowOversizeProtosr   r  r   r   r:   r'   r  r    r!   r"   )r#   r;   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  rc  r   r   r   ÚtestSucceedOversizeProto
  s    z+OversizeProtosTest.testSucceedOversizeProtoN)r>   r?   r@   r  r   r$  r%  r   r   r   r   r  í	  s   r  Ú__main__)+r1  Ú
__author__rÓ   r*   r\   r¶   rL   r  r  r  ÚwarningsÚcmpZgoogle.protobufr	   r
   r   r   r   Zgoogle.protobuf.internalr   r   r   r   r   r   r   r   r   r  ÚsimplefilterÚDeprecationWarningZnamed_parametersZTestCaser   rW  rˆ  r  r  r  r   r  r>   Úmainr   r   r   r   Ú<module>    s‚   
ÿ         %         9ÿ
