o
    ‹¨Êh§û ã                   @   sÜ  d Z ddlZddlZddlZddlZddlZzddlZW n ey)   ddlZY nw ddl	m
Z
 ddl	mZ ddl	mZ ddl	mZ ddl	mZ ddl	mZ dd	l	mZ dd
l	mZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ejr�eZejZG dd„ deƒZ G dd„ deƒZ!G dd„ deƒZ"G dd„ deƒZ#G dd„ deƒZ$G dd„ deƒZ%G dd „ d eƒZ&G d!d"„ d"eƒZ'G d#d$„ d$eƒZ(G d%d&„ d&eƒZ)e*d'krìe +¡  dS dS )(ziUnittest for reflection.py, which also indirectly tests the output of the
pure-Python protocol compiler.
é    N)Úunittest_import_pb2)Úunittest_mset_pb2)Úunittest_pb2)Údescriptor_pb2)Ú
descriptor)Úmessage)Ú
reflection)Útext_format)Úapi_implementation)Úmore_extensions_pb2)Úmore_messages_pb2)Úmessage_set_extensions_pb2)Úwire_format)Ú	test_util)Útesting_refleaks)Údecoderc                   @   s\   e Zd ZdZdd„ Zdd„ ZeZeZeZeZ	dd„ Z
e
Zdd	„ Zd
d„ Zdd„ Zdd„ ZdS )Ú_MiniDecodera©  Decodes a stream of values from a string.

  Once upon a time we actually had a class called decoder.Decoder.  Then we
  got rid of it during a redesign that made decoding much, much faster overall.
  But a couple tests in this file used it to check that the serialized form of
  a message was correct.  So, this class implements just the methods that were
  used by said tests, so that we don't have to rewrite the tests.
  c                 C   s   || _ d| _d S ©Nr   )Ú_bytesÚ_pos)ÚselfÚbytes© r   úZ/var/www/html/env/lib/python3.10/site-packages/google/protobuf/internal/reflection_test.pyÚ__init__T   s   
z_MiniDecoder.__init__c                 C   s   t  | j| j¡\}| _|S ©N)r   Ú_DecodeVarintr   r   ©r   Úresultr   r   r   Ú
ReadVarintX   s   z_MiniDecoder.ReadVarintc                 C   ó   t  |  ¡ ¡S r   )r   ÚZigZagDecoder   ©r   r   r   r   Ú
ReadSInt64a   ó   z_MiniDecoder.ReadSInt64c                 C   r    r   )r   Ú	UnpackTagr   r"   r   r   r   ÚReadFieldNumberAndWireTypef   r$   z'_MiniDecoder.ReadFieldNumberAndWireTypec                 C   ó4   t  d| j| j| jd … ¡d }|  jd7  _|S )Nz<fé   r   ©ÚstructÚunpackr   r   r   r   r   r   Ú	ReadFloati   ó   "z_MiniDecoder.ReadFloatc                 C   r'   )Nz<dé   r   r)   r   r   r   r   Ú
ReadDoublen   r-   z_MiniDecoder.ReadDoublec                 C   s   | j t| jƒkS r   )r   Úlenr   r"   r   r   r   ÚEndOfStreams   ó   z_MiniDecoder.EndOfStreamN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú	ReadInt32Ú	ReadInt64Ú
ReadUInt32Ú
ReadUInt64r#   Ú
ReadSInt32r&   r,   r/   r1   r   r   r   r   r   J   s    	r   c                   @   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`„ Z2e3 4da¡dbdc„ ƒZ5ddde„ Z6dfdg„ Z7dhdi„ Z8djdk„ Z9dldm„ Z:dndo„ Z;dpdq„ Z<drds„ Z=dtdu„ Z>dvdw„ Z?dxdy„ Z@dzd{„ ZAd|d}„ ZBd~d„ ZCd€d�„ ZDd‚dƒ„ ZEd„d…„ ZFd†d‡„ ZGdˆd‰„ ZHdŠd‹„ ZIdŒd�„ ZJdŽd�„ ZKd�d‘„ ZLd’d“„ ZMd”d•„ ZNd–d—„ ZOd˜d™„ ZPdšd›„ ZQdœd�„ ZRdždŸ„ ZSd¶d¡d¢„ZTd£d¤„ ZUeV WeX Y¡ d¥k�p\eX Z¡ d¦kd§¡d¨d©„ ƒZ[dªd«„ Z\d¬d­„ Z]d®d¯„ Z^d°d±„ Z_d²d³„ Z`d´dµ„ Zad S )·ÚReflectionTestc                 C   s>   |   t|ƒt|ƒ¡ tt|ƒƒD ]}|   || || ¡ qd S r   )ÚassertEqualr0   Úrange)r   ÚvaluesÚothersÚir   r   r   ÚassertListsEqualy   s   ÿzReflectionTest.assertListsEqualc                 C   sP   t jdddd d�}|  d|j¡ |  d|j¡ |  d|j¡ |  | d¡¡ d S )Né   ç+‡)K@Úoptional_string)Úoptional_int32Úoptional_doublerE   Úoptional_floatrH   )r   ÚTestAllTypesr=   rF   rG   rE   ÚassertFalseÚHasField©r   Úprotor   r   r   ÚtestScalarConstructor~   s   üz$ReflectionTest.testScalarConstructorc                 C   sŽ   t jg d¢ddgg d¢dgd d�}|  g d¢t|jƒ¡ |  ddgt|jƒ¡ |  g d¢t|jƒ¡ |  dgt|jƒ¡ |  g t|jƒ¡ d S )N©é   é   é   r(   ç®Gáz®ó?rD   ©TFFrE   )Úrepeated_int32Úrepeated_doubleÚrepeated_boolÚrepeated_stringÚrepeated_float)	r   rI   r=   ÚlistrU   rV   rW   rX   rY   rL   r   r   r   ÚtestRepeatedScalarConstructor‹   s   ûz,ReflectionTest.testRepeatedScalarConstructorc                 C   s  t jt jjt jjd�t jjt jjd�gt jdd�t jdd�t jdd�gt j ¡ t jjdd�t jjdd�gd	�}|  t jjt jjd�t jjt jjd�gt|j	ƒ¡ |  t jdd�t jdd�t jdd�gt|j
ƒ¡ |  t j ¡ t jjdd�t jjdd�gt|jƒ¡ d S )
N©ÚbbéÕÿÿÿ©Úcé±  é   rP   )ÚarQ   )Úrepeated_nested_messageÚrepeated_foreign_messageÚrepeatedgroup)r   rI   ÚNestedMessageÚFOOÚBARÚForeignMessageÚRepeatedGroupr=   rZ   rd   re   rf   rL   r   r   r   Ú testRepeatedCompositeConstructorš   sR   ÿÿý


ýýöÿÿþû


þüþüz/ReflectionTest.testRepeatedCompositeConstructorc                 C   s  t jddddgg d¢t jjt jjd�t jjt jjd�gt jdd�t jd	d�t jd
d�gd d�}|  d|j¡ |  d|j¡ |  ddgt	|j
ƒ¡ |  g d¢t	|jƒ¡ |  t jjt jjd�t jjt jjd�gt	|jƒ¡ |  t jdd�t jd	d�t jd
d�gt	|jƒ¡ |  | d¡¡ d S )NrC   rE   rS   rD   rT   r\   r^   r_   ra   rb   )rF   rE   rV   rW   rd   re   Úoptional_nested_messagerm   )r   rI   rg   rh   ri   rj   r=   rF   rE   rZ   rV   rW   rd   re   rJ   rK   rL   r   r   r   ÚtestMixedConstructor¼   sP   ÿÿý


ýòÿÿþû


þüz#ReflectionTest.testMixedConstructorc                 C   s¬   | j ttjdd� | j ttjdd� | j ttjdd� | j ttjdd� | j ttjdgd� | j ttjdd� | j ttjdgd� | j ttjdd� | j ttjdgd� d S )	NÚfoo©rF   éÒ  )rE   ©rm   ©rU   )rX   ©rd   )ÚassertRaisesÚ	TypeErrorr   rI   r"   r   r   r   ÚtestConstructorTypeErrorß   s6   ÿÿÿÿ
ÿÿ
ÿÿ

ÿz'ReflectionTest.testConstructorTypeErrorc                 C   s„   t jdd�}|  d| ¡ ¡ t jt j ¡ d�}|  d| ¡ ¡ t jdgd�}|  d| ¡ ¡ t jt j ¡ gd�}|  d| ¡ ¡ d S )Nrb   rp   rQ   rr   rR   rs   rt   )r   rI   r=   ÚByteSizerg   )r   r   r   r   r   Ú(testConstructorInvalidatesCachedByteSizeó   s   ÿ
ÿz7ReflectionTest.testConstructorInvalidatesCachedByteSizec                 C   sp   t  ¡ }|  | d¡ ¡ |  d|j¡ |  | d¡ ¡ d|_|  | d¡¡ | d¡ |  | d¡ ¡ d S )NrF   r   rP   )r   rI   Ú
assertTruerK   r=   rF   Ú
ClearFieldrL   r   r   r   ÚtestSimpleHasBits  s   
z ReflectionTest.testSimpleHasBitsc                    s8   ‡ fdd„}|ddƒ |ddƒ |ddƒ |d	d
ƒ d S )Nc                    s0  t  ¡ }t|| ƒ}t||ƒ}ˆ  d|¡ ˆ  | |¡ ¡ ˆ  | | ¡ ¡ d}t|||ƒ ˆ  |t||ƒ¡ |}ˆ  | |¡¡ ˆ  | | ¡¡ | | ¡ t|| ƒ}ˆ  | |¡ ¡ ˆ  | | ¡ ¡ ˆ  dt||ƒ¡ ˆ  ||u¡ t|||ƒ ˆ  | |¡ ¡ ˆ  | | ¡ ¡ ˆ  dt||ƒ¡ d S )Nr   é   )r   rI   Úgetattrr=   rz   rK   Úsetattrr{   )Úcomposite_field_nameÚscalar_field_namerM   Úcomposite_fieldÚoriginal_scalar_valueÚnew_valÚold_composite_fieldr"   r   r   ÚTestCompositeHasBits3  s,   



zNReflectionTest.testHasBitsWithSinglyNestedScalar.<locals>.TestCompositeHasBitsÚoptionalgrouprc   rm   r]   Úoptional_foreign_messager`   Úoptional_import_messageÚdr   )r   r†   r   r"   r   Ú!testHasBitsWithSinglyNestedScalar  s
   "
*

z0ReflectionTest.testHasBitsWithSinglyNestedScalarc                 C   s   t  ¡ }|j}~d|_d S ©Né   )r   rI   rm   r]   ©r   rM   Únestedr   r   r   ÚtestReferencesToNestedMessageb  s   
z,ReflectionTest.testReferencesToNestedMessagec                 C   sT   t  ¡ }|j}| d¡ |  ||ju¡ d|_|  | d¡ ¡ |  d|jj¡ d S )Nrm   r�   r   )r   rI   rm   r{   rz   r]   rK   r=   rŽ   r   r   r   Ú0testDisconnectingNestedMessageBeforeSettingFieldj  s   
z?ReflectionTest.testDisconnectingNestedMessageBeforeSettingFieldc                 C   s6   t  ¡ }|j}| d¡ ~~t ¡  t  ¡ }|j}d S ©Nrm   )r   rI   rm   r{   ÚgcÚcollectrŽ   r   r   r   Ú5testGetDefaultMessageAfterDisconnectingDefaultMessages  s   

zDReflectionTest.testGetDefaultMessageAfterDisconnectingDefaultMessagec                 C   sˆ   t  ¡ }|j}d|_|  | d¡¡ | d¡ |  d|j¡ |  d|jj¡ |  ||ju¡ d|_|  | d¡ ¡ |  d|jj¡ d S )Né   rm   r   r�   )r   rI   rm   r]   rz   rK   r{   r=   rŽ   r   r   r   Ú/testDisconnectingNestedMessageAfterSettingField€  s   
z>ReflectionTest.testDisconnectingNestedMessageAfterSettingFieldc                 C   s:   t  ¡ }|  | d¡ ¡ | d¡ |  | d¡ ¡ d S r’   )r   rI   rz   rK   r{   rL   r   r   r   Ú0testDisconnectingNestedMessageBeforeGettingField�  s   
z?ReflectionTest.testDisconnectingNestedMessageBeforeGettingFieldc                 C   sR   t  ¡ }t  ¡ }d|j_| |¡ |  | d¡¡ | d¡ |  | d¡ ¡ d S ©Nr–   rm   )r   rI   rm   r]   Ú	MergeFromrz   rK   r{   ©r   Úproto1Úproto2r   r   r   Ú(testDisconnectingNestedMessageAfterMerge“  s   

z7ReflectionTest.testDisconnectingNestedMessageAfterMergec                 C   s8   t  ¡ dkrd S t ¡ }d|j_| d¡ ~t ¡  d S )NÚpythonr–   Úoptional_lazy_message)	r
   ÚTyper   rI   r    r]   r{   r“   r”   rL   r   r   r   Ú"testDisconnectingLazyNestedMessage   s   
z1ReflectionTest.testDisconnectingLazyNestedMessagec                 C   st   t  ¡ }|jj d¡ |  dg|jj¡ |  | d¡¡ | d¡ |  | d¡ ¡ |jj	 
¡  |  | d¡¡ d S r™   )r   ÚTestNestedMessageHasBitsrm   Únestedmessage_repeated_int32Úappendr=   rz   rK   r{   Ú%nestedmessage_repeated_foreignmessageÚaddrL   r   r   r   Ú&testHasBitsWhenModifyingRepeatedFields­  s   
ÿ
z5ReflectionTest.testHasBitsWhenModifyingRepeatedFieldsc                 C   s
  t  ¡ }|  | d¡ ¡ |  d|jjjjjj¡ |  | d¡ ¡ d|jjjjj_|  d|jjjjjj¡ |  | d¡¡ |  |j d¡¡ |  |jj d¡¡ |  |jjj d¡¡ |  |jjjj d¡¡ |  |jjjjj d¡ ¡ |  |jjjjj d¡¡ d S )Nr]   r   r–   rc   rF   )r   ÚTestMutualRecursionArz   rK   r=   r]   rc   rF   )r   Úrecursive_protor   r   r   Ú!testHasBitsForManyLevelsOfNesting¼  s   z0ReflectionTest.testHasBitsForManyLevelsOfNestingc                 C   s®   t  ¡ }d|_d|_d|_|j}|  |jjd df|jjd df|jjd dfg| 	¡ ¡ d|j_
|  |jjd df|jjd df|jjd df|jjd |fg| 	¡ ¡ d S )	NrP   r–   ro   rF   Úoptional_fixed32rE   é{   rm   )r   rI   r¬   rF   rE   rm   r=   Ú
DESCRIPTORÚfields_by_nameÚ
ListFieldsr]   )r   rM   Únested_messager   r   r   ÚtestSingularListFieldsÌ  s.   þü
ÿýúz%ReflectionTest.testSingularListFieldsc                 C   sÐ   t  ¡ }|j d¡ |j d¡ |j d¡ |j ddg¡ |j g ¡ |j d¡ |j dd„ td	ƒD ƒ¡ d
|_|j	 |  
|jjd d
f|jjd ddgf|jjd dgf|jjd g d¢fg| ¡ ¡ d S )NrP   r–   é   ro   ÚbarÚbazc                 s   s   � | ]}t |ƒV  qd S r   )Ústr)Ú.0Úxr   r   r   Ú	<genexpr>ê  s   € z8ReflectionTest.testRepeatedListFields.<locals>.<genexpr>rQ   é   rF   rU   Úrepeated_fixed32rX   )ro   r´   rµ   Ú0Ú1)r   rI   r»   r¥   rU   rX   Úextendr>   rF   rW   r=   r®   r¯   r°   rL   r   r   r   ÚtestRepeatedListFieldsâ  s(   
ÿýúz%ReflectionTest.testRepeatedListFieldsc                 C   sX   t  ¡ }d|jt j< d|jt j< d|jt j< |  t jdft jdft jdfg| ¡ ¡ d S )NrP   r–   ro   )r   ÚTestAllExtensionsÚ
ExtensionsÚoptional_fixed32_extensionÚoptional_int32_extensionÚoptional_string_extensionr=   r°   rL   r   r   r   ÚtestSingularListExtensionsõ  s   þüz)ReflectionTest.testSingularListExtensionsc                 C   s¾   t  ¡ }|jt j  d¡ |jt j  d¡ |jt j  d¡ |jt j  d¡ |jt j  d¡ |jt j  d¡ d|jt j< |  t jdft jddgft jdgft jg d¢fg| 	¡ ¡ d S )	NrP   r–   r³   ro   r´   rµ   rº   )ro   r´   rµ   )
r   rÀ   rÁ   Úrepeated_fixed32_extensionr¥   Úrepeated_int32_extensionÚrepeated_string_extensionrÃ   r=   r°   rL   r   r   r   ÚtestRepeatedListExtensions   s    
ýûz)ReflectionTest.testRepeatedListExtensionsc                 C   sf   t  ¡ }t |¡ t j |  |jjd dft jdf|jjd dft jdf|jjd dfg| 	¡ ¡ d S )	NÚmy_intrP   r�   Ú	my_stringro   r´   Úmy_floatç      ð?)
r   ÚTestFieldOrderingsr   ÚSetAllFieldsAndExtensionsÚmy_extension_intr=   r®   r¯   Úmy_extension_stringr°   rL   r   r   r   ÚtestListFieldsAndExtensions  s   
üúz*ReflectionTest.testListFieldsAndExtensionsc                 C   sø  t  ¡ }|  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|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|j¡ |  d|j¡ |  d|j ¡ |  t jj!|j"¡ |  t j#|j$¡ |  t%j&|j'¡ t  (¡ }|  d|j)¡ d S )Nr   g        FÚ ó    é)   é*   é+   é,   iÓÿÿÿé.   é/   é0   é1   iÎÿÿÿg     ÀI@g     dé@TÚhellos   worldu   áˆ´)*r   rI   r=   rF   Úoptional_int64Úoptional_uint32Úoptional_uint64Úoptional_sint32Úoptional_sint64r¬   Úoptional_fixed64Úoptional_sfixed32Úoptional_sfixed64rH   rG   Úoptional_boolrE   Úoptional_bytesÚdefault_int32Údefault_int64Údefault_uint32Údefault_uint64Údefault_sint32Údefault_sint64Údefault_fixed32Údefault_fixed64Údefault_sfixed32Údefault_sfixed64Údefault_floatÚdefault_doubleÚdefault_boolÚdefault_stringÚdefault_bytesri   Údefault_nested_enumÚFOREIGN_BARÚdefault_foreign_enumr   Ú
IMPORT_BARÚdefault_import_enumÚTestExtremeDefaultValuesÚutf8_stringrL   r   r   r   ÚtestDefaultValues  sL   ÿz ReflectionTest.testDefaultValuesc                 C   ó   t  ¡ }|  t|jd¡ d S ©NÚnonexistent_field)r   rI   ru   Ú
ValueErrorrK   rL   r   r   r   Ú testHasFieldWithUnknownFieldNameE  ó   z/ReflectionTest.testHasFieldWithUnknownFieldNamec                 C   rÿ   r   )r   rI   ru   r  r{   rL   r   r   r   Ú"testClearFieldWithUnknownFieldNameI  r  z1ReflectionTest.testClearFieldWithUnknownFieldNamec                    sJ   t  ¡ ‰ tdƒD ]}ˆ j ¡  qt  ¡ }ˆ  |¡ |  t‡ fdd„¡ d S )Né
   c                      s
   ˆ j d S )Nr–   )Úrepeated_messager   ©rM   r   r   Ú<lambda>V  s   
 z9ReflectionTest.testClearRemovesChildren.<locals>.<lambda>)r   ÚTestRequiredForeignr>   r  r§   ÚCopyFromru   Ú
IndexError)r   rA   r�   r   r  r   ÚtestClearRemovesChildrenM  s   
z'ReflectionTest.testClearRemovesChildrenc                 C   s~   t  ¡ }|  tt|dd¡ |  tt|ddg¡ |  tt|dd¡ |  tt|jdd¡ |  tt|jdd¡ |  tt|dd¡ d S )	NrU   r  rm   r�   r]   é"   Úsome_attributer  )r   rI   ru   ÚAttributeErrorr   rd   rY   rL   r   r   r   ÚtestDisallowedAssignmentsX  s   
ÿÿÿz(ReflectionTest.testDisallowedAssignmentsc                 C   s²   t  ¡ }|  tt|dd¡ |  tt|dd¡ |  tt|dd¡ |  tt|dd¡ |  tt|dd¡ |  tt|dd¡ |  tt|d	d¡ t ¡ d
krT|  tt|dd¡ d S d|_d S )NrF   çš™™™™™ñ?ro   rE   r  rç   ræ   rH   rG   rŸ   )r   rI   ru   rv   r   r
   r¡   ræ   rL   r   r   r   ÚtestSingleScalarTypeSafetym  s   
z)ReflectionTest.testSingleScalarTypeSafetyc                    s’   ‡ ‡fdd„}|ddt ƒ |ddt ƒ |ddt ƒ t}t d¡dkr)|dd	|ƒ n|dd	t ƒ |d
d|ƒ |d
d|ƒ |dd|ƒ |dd|ƒ dS )z}Verifies setting of scalar integers.

    Args:
      integer_fn: A function to wrap the integers that will be assigned.
    c                    sZ   t  ¡ }ˆ |ƒ}t|| |ƒ ˆ t|| ƒ|¡ t  ¡ }| | ¡ ¡ ˆ t|| ƒ|¡ d S r   )r   rI   r   ÚassertIsInstancer~   ÚParseFromStringÚSerializeToString)Ú
field_nameÚvalueÚexpected_typerM   r�   ©Ú
integer_fnr   r   r   ÚTestGetAndDeserialize‚  s   z@ReflectionTest.assertIntegerTypes.<locals>.TestGetAndDeserializerF   rP   i   @rß   ÚLr(   l        rÞ   l            rà   N)ÚintÚlongr*   Úcalcsize)r   r  r  Ú
integer_64r   r  r   ÚassertIntegerTypes|  s   	z!ReflectionTest.assertIntegerTypesc                 C   ó   |   dd„ ¡ d S )Nc                 S   ó   | S r   r   ©r¸   r   r   r   r	  œ  ó    z1ReflectionTest.testIntegerTypes.<locals>.<lambda>)r"  r"   r   r   r   ÚtestIntegerTypes›  ó   zReflectionTest.testIntegerTypesc                 C   ó   |   tj¡ d S r   )r"  r   ÚNonStandardIntegerr"   r   r   r   ÚtestNonStandardIntegerTypesž  r2   z*ReflectionTest.testNonStandardIntegerTypesc                 C   sx   t  ¡ }|  t¡� d|_W d   ƒ n1 sw   Y  |  td¡� t dd¡|_W d   ƒ d S 1 s5w   Y  d S )NÚ2Úmy_errorr–   )	r   rI   ru   rv   rà   ÚassertRaisesRegexpÚRuntimeErrorr   r*  )r   Úpbr   r   r   ÚtestIllegalValuesForIntegers¡  s   ÿ"ÿz+ReflectionTest.testIllegalValuesForIntegersc                    s¢   ‡ ‡fdd„}|dddƒ |dddƒ |d	d
dƒ |dddƒ t  ¡ }ˆ ttf¡� ˆ d
ƒ|_W d  ƒ n1 s:w   Y  t  ¡ }ˆ dƒ|_ˆ d|j¡ dS )zŒVerifies bounds checking for scalar integer fields.

    Args:
      integer_fn: A function to wrap the integers that will be assigned.
    c                    sŒ   t  ¡ }ˆ |ƒ}ˆ |ƒ}t|| |ƒ ˆ |t|| ƒ¡ t|| |ƒ ˆ |t|| ƒ¡ ˆ ttft|| |d ¡ ˆ ttft|| |d ¡ d S ©NrP   )r   rI   r   r=   r~   ru   r  rv   )r  Úexpected_minÚexpected_maxr0  r  r   r   ÚTestMinAndMaxIntegers²  s   ÿÿzHReflectionTest.assetIntegerBoundsChecking.<locals>.TestMinAndMaxIntegersrF   i   €iÿÿÿrß   r   l   ÿÿ rÞ   ìûÿÿÿ         l   ÿÿÿÿ rà   ì   ÿÿÿÿ NrP   )r   rI   ru   r  rv   rà   Úoptional_nested_enumr=   )r   r  r5  r0  r   r  r   ÚassetIntegerBoundsChecking¬  s   ÿ
z)ReflectionTest.assetIntegerBoundsCheckingc                 C   r#  )Nc                 S   r$  r   r   r%  r   r   r   r	  Î  r&  z?ReflectionTest.testSingleScalarBoundsChecking.<locals>.<lambda>)r9  r"   r   r   r   ÚtestSingleScalarBoundsCheckingÍ  r(  z-ReflectionTest.testSingleScalarBoundsCheckingc                 C   r)  r   )r9  r   r*  r"   r   r   r   Ú)testNonStandardSingleScalarBoundsCheckingÐ  r2   z8ReflectionTest.testNonStandardSingleScalarBoundsCheckingc                 C   sÖ   t  ¡ }|  t|jjd¡ |  t|jjd¡ |  t|jd¡ |  t|jd¡ |j d¡ d|jd< |  t|jj	dd¡ |  t|jj	dd¡ |  t|jj	dg ¡ |  t|jj	dd¡ |j d	¡ |  t|jj	dd¡ d S )
Nr  ro   r  r�   r   iô  ÚabcÚindexr,  )
r   rI   ru   rv   rU   r¥   rX   Úrepeated_bytesr  Ú__setitem__rL   r   r   r   ÚtestRepeatedScalarTypeSafetyÓ  s   
ÿz+ReflectionTest.testRepeatedScalarTypeSafetyc                 C   sV   t  ¡ }|  d|j¡ d|_|  d|j¡ d|_|  d|j¡ d|_|  d|j¡ d S )Nr   rP   l   ÿÿÿ r7  )r   rI   r=   rF   rà   rL   r   r   r   Ú!testSingleScalarGettersAndSettersè  s   z0ReflectionTest.testSingleScalarGettersAndSettersc                 C   sV   t  ¡ }| d¡ d|_|  | d¡¡ | d¡ |  d|j¡ |  | d¡ ¡ d S )NrF   rP   r   )r   rI   r{   rF   rz   rK   r=   rL   r   r   r   ÚtestSingleScalarClearFieldô  s   

z)ReflectionTest.testSingleScalarClearFieldc                 C   sf   t  ¡ }|  d|j¡ |  dt jj¡ |  d|j¡ |  dt jj¡ |  d|j¡ |  dt jj¡ d S )NrP   rQ   rR   )r   rI   r=   rh   ri   ÚBAZrL   r   r   r   Ú	testEnumsÿ  s   zReflectionTest.testEnumsc                 C   s  |   dtj tj¡¡ |   dtj tj¡¡ |   dtj tj¡¡ |  ttjjd¡ t 	¡ }|   d|j
 |j¡¡ |   dtj	j
 |j¡¡ |   d|j
 |j¡¡ |   dtj	j
 |j¡¡ |   d|j
 |j¡¡ |   dtj	j
 |j¡¡ |  t|j
jd¡ |  ttj	j
jd¡ d S )NÚFOREIGN_FOOrø   ÚFOREIGN_BAZi0,  rh   ri   rC  )r=   r   ÚForeignEnumÚNamerE  rø   rF  ru   r  rI   Ú
NestedEnumrh   ri   rC  rL   r   r   r   ÚtestEnum_Name  sJ   ÿÿÿÿÿÿÿÿÿÿÿ
ÿzReflectionTest.testEnum_Namec                 C   s  |   tjtj d¡¡ |   tjtj d¡¡ |   tjtj d¡¡ |  ttjjd¡ t 	¡ }|   |j
|j d¡¡ |   |j
tj	j d¡¡ |   |j|j d¡¡ |   |jtj	j d¡¡ |   |j|j d¡¡ |   |jtj	j d¡¡ |  t|jjd¡ |  ttj	jjd¡ d S )	NrE  rø   rF  ÚFOrh   ri   rC  ÚFoo)r=   r   rE  rG  ÚValuerø   rF  ru   r  rI   rh   rI  ri   rC  rL   r   r   r   ÚtestEnum_Value$  sJ   
ÿ
ÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿÿ
ÿzReflectionTest.testEnum_Valuec                 C   s¨   |   g d¢ttj ¡ ƒ¡ |   g d¢ttj ¡ ƒ¡ |   g d¢ttj ¡ ƒ¡ t ¡ }|   g d¢t|j ¡ ƒ¡ |   g d¢t|j ¡ ƒ¡ |   g d¢t|j ¡ ƒ¡ d S )N)rE  rø   rF  )r(   r–   é   ))rE  r(   )rø   r–   )rF  rO  )rh   ri   rC  ÚNEG)rP   rQ   rR   éÿÿÿÿ))rh   rP   )ri   rQ   )rC  rR   )rP  rQ  )	r=   rZ   r   rG  Úkeysr?   ÚitemsrI   rI  rL   r   r   r   ÚtestEnum_KeysAndValues@  s   
ÿ
ÿ
þ
ÿz%ReflectionTest.testEnum_KeysAndValuesc                 C   sD  t  ¡ }|  |j ¡ |  dt|jƒ¡ |j d¡ |j d¡ |j d¡ |  |j¡ |  dt|jƒ¡ |  g d¢|j¡ |  d|jd ¡ |  d|jd ¡ |  t|jj	d¡ |  t|jj	d	¡ |  t
|jj	d
¡ |  t
|jj	d ¡ d|jd< |  g d¢|j¡ |j dd¡ |  g d¢|j¡ |j d¡ |  g d¢|jdd… ¡ |  g d¢|jd d … ¡ dd„ tdƒD ƒ|jdd…< |  g d¢|j¡ g d¢|jdd…< |  g d¢|j¡ g }|jD ]}| |¡ qà|  g d¢|¡ |jd= |  g d¢|j¡ |jdd …= |  ddg|j¡ |j ddg¡ |  g d¢|j¡ | d¡ |  |j ¡ |  dt|jƒ¡ |j d¡ |  d|jd ¡ d|jd< |  d|jd ¡ g d¢|jd d …< |jd= |  g d ¢|j¡ |jd!= |  ddg|j¡ |  t|jjd"¡ |  t|jjd#¡ |jd!d…= |  dg|j¡ |jd$d%…= |  dg|j¡ d S )&Nr   r–   r  é   rR   )r–   r  rU  rQ  rq   é.ûÿÿro   r}   rP   )r–   r}   rU  é   )r–   rW  r}   rU  é   )rW  r}   rU  r(   )r–   rW  r}   rU  rX  c                 s   s   � | ]}|V  qd S r   r   )r·   rA   r   r   r   r¹   t  s   € z5ReflectionTest.testRepeatedScalars.<locals>.<genexpr>)r–   r   rP   rQ   rX  )é#   é(   é-   )r–   rY  rZ  r[  rX  rQ   )r–   rY  r[  rX  rY  é   )r–   rY  rR   r\  rU   )r   rP   rQ   rR   ©r   rP   rQ   éþÿÿÿéýÿÿÿi,  éd   é'  )r   rI   rz   rU   r=   r0   r¥   ru   r  Ú__getitem__rv   Úinsertr>   r¾   r{   Ú__delitem__)r   rM   r   rA   r   r   r   ÚtestRepeatedScalarsO  sl   



z"ReflectionTest.testRepeatedScalarsc                 C   sF  t  ¡ }|  |j ¡ |  dt|jƒ¡ |j d¡ |j d¡ |j d¡ |j d¡ |  dt|jƒ¡ |j d¡ |  dt|jƒ¡ |  d|jd ¡ |  d|jd ¡ |  d|jd ¡ |j d¡ |  dt|jƒ¡ |  d|jd ¡ |  d|jd ¡ |j d¡ |  dt|jƒ¡ |  d|jd ¡ |  t	|jjd¡ d S )	Nr   r–   r  r(   rR   rP   rQ   r­   )
r   rI   rz   rU   r=   r0   r¥   Úremoveru   r  rL   r   r   r   ÚtestRepeatedScalarsRemove©  s*   z(ReflectionTest.testRepeatedScalarsRemovec                 C   s:  t  ¡ }|  |j ¡ |  dt|jƒ¡ |j ¡ }|j ¡ }|  |j¡ |  dt|jƒ¡ |  ||g|j¡ |  |t jj	¡ |  
t|jjd¡ |  
t|jjd¡ |  
t|jjd¡ |  
t|jjd ¡ |j ¡ }|j ¡ }|j ¡ }|  |||g|jdd… ¡ |  |||||g|jd d … ¡ |  ||g|jd d… ¡ |  |||g|jdd … ¡ |  ||jd ¡ |  |g|jd d… ¡ g }|jD ]}| |¡ qÄ|  |||||g|¡ |jd= |  ||||g|j¡ |jdd …= |  ||g|j¡ t jj	dd�}	t jj	dd�}
|j |	|
g¡ |  dt|jƒ¡ |  |	|jd ¡ |  |
|jd	 ¡ |  
t|jj|	¡ |  
t|jjdg¡ t  ¡ }|  
t|jj|g¡ | d
¡ |  |j ¡ |  dt|jƒ¡ |jjdd� |  dt|jƒ¡ |  d|jd j¡ |  
t|jjd¡ |  
t¡� d|jd< W d   ƒ d S 1 �s–w   Y  d S )Nr   rQ   rq   rV  ro   rP   r(   r\   rR   rd   r�   )r   rI   rz   rd   r=   r0   r§   rB   r  rg   ru   r  rb  rv   r¥   r¾   r{   r]   Ú	Exception)r   rM   Úm0Úm1Úm2Úm3Úm4r   rA   Ún1Ún2Úwrong_message_typer   r   r   ÚtestRepeatedCompositesÆ  sš   

ÿÿÿÿ


ÿÿÿÿ
ÿÿ
ÿ
ÿþ
$ÿz%ReflectionTest.testRepeatedCompositesc                 C   s<  t  ¡ }|  dt|jƒ¡ |j ¡ }t|jƒ|_|j ¡ }t|jƒ|_|  ||k¡ |j ¡ }t|jƒ|_|  |||g|j¡ |  dt|jƒ¡ |j 	|¡ |  dt|jƒ¡ |  ||jd ¡ |  ||jd ¡ |  
t|jj	|¡ |  
t|jj	d ¡ |  dt|jƒ¡ |j 	|¡ |  dt|jƒ¡ |  ||jd ¡ d S )Nr   rR   rQ   rP   )r   rI   r=   r0   rd   r§   r]   rz   rB   rf  ru   r  )r   rM   ri  rj  rk  r   r   r   ÚtestRepeatedCompositeRemove  s*   


z*ReflectionTest.testRepeatedCompositeRemovec                    sÔ   t  ¡ dkrd S tj}|dddd|j|j|jdd d d dd t ¡ d�}tj	ddd	d g g |gg t 
¡ d
�	‰ G ‡ fdd„dt tjtj¡ƒ}|ƒ }|  d|j¡ |  | d¡ ¡ d|_|  d|j¡ |  | d¡¡ d S )NrŸ   Ú	foo_fieldzMyProto.foo_fieldr   rP   F)ÚnameÚ	full_namer=  ÚnumberÚtypeÚcpp_typeÚlabelÚdefault_valueÚcontaining_typeÚmessage_typeÚ	enum_typeÚis_extensionÚextension_scopeÚoptionsÚMyProtoÚignored)	rt  ru  Úfilenamer{  Únested_typesÚ
enum_typesÚfieldsÚ
extensionsr€  c                       ó   e Zd Z” ZdS )z>ReflectionTest.testHandWrittenReflection.<locals>.MyProtoClassN©r3   r4   r5   r®   r   ©Úmydescriptorr   r   ÚMyProtoClassJ  ó    rŒ  r�   )r
   r¡   r   ÚFieldDescriptorÚ
TYPE_INT64ÚCPPTYPE_INT64ÚLABEL_OPTIONALr   ÚFieldOptionsÚ
DescriptorÚMessageOptionsÚsixÚwith_metaclassr   ÚGeneratedProtocolMessageTyper   ÚMessager=   rs  rz   rK   )r   rŽ  Úfoo_field_descriptorrŒ  Úmyproto_instancer   rŠ  r   ÚtestHandWrittenReflection6  s2   ùü z(ReflectionTest.testHandWrittenReflectionú MakeDescriptor is not repeatablec                    sÐ  t  ¡ dkrd S ‡ fdd„‰ dˆ _t ¡ }d|_tj}ˆ |d|jƒ ˆ |d|jƒ ˆ |d|j	ƒ ˆ |d	|j
ƒ ˆ  jd
7  _|j ¡ }d|_|j|_ˆ j|_tjj|_t |¡‰|  dˆjv ¡ |  dˆjv ¡ |  dˆjv ¡ |  d	ˆjv ¡ |  dˆjv ¡ G ‡fdd„dt tjtj¡ƒ}|ƒ }d|_d|_d|_d|_|j ddg¡ |  ¡ }t !ˆ|¡}|  ||u¡ |  "||¡ |  "|j|j¡ |  "|j|j¡ |  "|j|j¡ |  "|j|j¡ |  "|j|j¡ d S )NrŸ   c                    s:   ˆ  j d7  _ | j ¡ }||_||_ˆ j |_tjj|_	d S r2  )
Úfield_indexÚfieldr§   rt  rw  rv  r   ÚFieldDescriptorProtor‘  ry  )rM   r  Ú
field_typeÚ	new_field)ÚAddDescriptorFieldr   r   r¢  Z  s   
zEReflectionTest.testDescriptorProtoSupport.<locals>.AddDescriptorFieldr   ÚCarrt  ÚyearÚ	automaticÚpricerP   Úownersc                       rˆ  )z=ReflectionTest.testDescriptorProtoSupport.<locals>.CarMessageNr‰  r   )Údescr   r   Ú
CarMessagez  s    r©  ÚpriusiÚ  Tg    °‹Ø@ÚbobÚsusan)#r
   r¡   r�  r   ÚDescriptorProtort  rŸ  ÚTYPE_STRINGr�  Ú	TYPE_BOOLÚTYPE_DOUBLErž  r§   rw  rv  ÚLABEL_REPEATEDry  r   ÚMakeDescriptorrz   r¯   r•  r–  r   r—  r   r˜  r¤  r¥  r¦  r§  r¾   r  ÚParseMessager=   )r   Ú
desc_protoÚfdpr¡  r©  rª  Úserialized_priusÚ	new_priusr   )r¢  r¨  r   ÚtestDescriptorProtoSupportS  sR   


ÿz)ReflectionTest.testDescriptorProtoSupportc                 C   s¢   t  ¡ }t j}|  | |¡ ¡ |  d|j| ¡ |  | |¡ ¡ d|j|< |  d|j| ¡ |  | |¡¡ | |¡ |  d|j| ¡ |  | |¡ ¡ d S ©Nr   r�   )r   rÀ   rÃ   rz   ÚHasExtensionr=   rÁ   ÚClearExtension)r   Úextendee_protoÚ	extensionr   r   r   Ú'testTopLevelExtensionsForOptionalScalar’  s   

z6ReflectionTest.testTopLevelExtensionsForOptionalScalarc                 C   s    t  ¡ }t j}|  dt|j| ƒ¡ |j|  d¡ |  dg|j| ¡ |j| }| |¡ |  dt|j| ƒ¡ |  ||j| u¡ |  	t
tj|j|d¡ d S )Nr   ro   rc   )r   rÀ   rÈ   r=   r0   rÁ   r¥   r»  rz   ru   rv   ÚoperatorÚsetitem)r   r¼  r½  Ústring_listr   r   r   Ú'testTopLevelExtensionsForRepeatedScalar£  s   

ÿz6ReflectionTest.testTopLevelExtensionsForRepeatedScalarc                 C   sî   t  ¡ }t j}|  | |¡ ¡ |  d|j| j¡ |  | |¡ ¡ d|j| _|  d|j| j¡ |  | |¡¡ |j| }| |¡ |  ||j| u¡ d|_|  d|j¡ |  | 	d¡¡ |  | |¡ ¡ |  
ttj|j|d¡ d S )Nr   r�   rÖ   r`   rc   )r   rÀ   Ú"optional_foreign_message_extensionrz   rº  r=   rÁ   r`   r»  rK   ru   rv   r¿  rÀ  )r   r¼  r½  Úforeign_messager   r   r   Ú(testTopLevelExtensionsForOptionalMessage±  s$   

ÿz7ReflectionTest.testTopLevelExtensionsForOptionalMessagec                 C   sÆ   t  ¡ }t j}|  dt|j| ƒ¡ |j|  ¡ }d|_|  d|j| d j¡ d|_|  d|j| d j¡ |j| }| |¡ |  dt|j| ƒ¡ |  	||j| u¡ |  
ttj|j|d¡ d S )Nr   r�   rÖ   rc   )r   rÀ   Úrepeatedgroup_extensionr=   r0   rÁ   r§   rc   r»  rz   ru   rv   r¿  rÀ  )r   r¼  r½  ÚgroupÚ
group_listr   r   r   Ú(testTopLevelExtensionsForRepeatedMessageÊ  s   

ÿz7ReflectionTest.testTopLevelExtensionsForRepeatedMessagec                 C   sª   t  ¡ }t jj}|  | |¡ ¡ |j| }|  d|j¡ |  | |¡ ¡ d|_|  d|j| j¡ |  | |¡¡ | 	|¡ |  ||j| u¡ |  | |¡ ¡ d S r¹  )
r   rÀ   ÚTestRequiredÚsinglerz   rº  rÁ   r=   rc   r»  )r   r¼  r½  Úrequiredr   r   r   ÚtestNestedExtensionsÛ  s   

z#ReflectionTest.testNestedExtensionsc                 C   sT   t jj}|  | t jjd¡¡ |  | d¡jt jj¡ |  	dt
| t jj¡ƒ¡ d S )NrP   z*protobuf_unittest.optional_int32_extensionr   )r   r®   Úpoolrz   ÚFindExtensionByNumberrÀ   ÚassertIsÚFindExtensionByNamer{  r=   r0   ÚFindAllExtensionsrI   )r   rÎ  r   r   r   ÚtestRegisteredExtensionsë  s    ÿÿÿý
ÿz'ReflectionTest.testRegisteredExtensionsc                 C   sö  t  ¡ }|  | d¡ ¡ |  d|jjt j ¡ |  | d¡ ¡ d|jjt j< |  d|jjt j ¡ |  | d¡¡ t  ¡ }|  | d¡ ¡ |  g |jjt j ¡ |  | d¡ ¡ |jjt j  	d¡ |  dg|jjt j ¡ |  | d¡¡ t  ¡ }|  | d¡ ¡ |  d|jjt j
 j¡ |  | d¡ ¡ d|jjt j
 _|  d|jjt j
 j¡ |  | d¡¡ t  ¡ }|  | d¡ ¡ |  dt|jjt j ƒ¡ |  | d¡ ¡ |jjt j  ¡ }|  ||jjt j d ¡ |  | d¡¡ d S )NÚ
submessager   r�   )r   ÚTopLevelMessagerz   rK   r=   rÔ  rÁ   Úoptional_int_extensionÚrepeated_int_extensionr¥   Úoptional_message_extensionÚforeign_message_intr0   Úrepeated_message_extensionr§   )r   ÚtoplevelÚforeignr   r   r   Ú(testHasBitsForAncestorsOfExtendedMessageý  s€   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz7ReflectionTest.testHasBitsForAncestorsOfExtendedMessagec                 C   sF   t  ¡ }|j}t j}|j| }| |¡ d|_|  ||j| u¡ d S rŒ   )r   rÕ  rÔ  rØ  rÁ   r»  rÙ  rz   )r   rÛ  r¼  r½  Úextension_protor   r   r   Ú*testDisconnectionAfterClearingEmptyMessage.  s   

z9ReflectionTest.testDisconnectionAfterClearingEmptyMessagec                 C   sÄ   t  ¡ }|  t|jd¡ |  t|jd¡ |  t|jjd¡ |  t|jjdd¡ t	j
t	jt	jt	jfD ]%}|  t|j|¡ |  t|j|¡ |  t|jj|¡ |  t|jj|d¡ q1|  t|jt j¡ d S )Nrq   r–   )r   rÀ   ru   ÚKeyErrorrº  r»  rÁ   rb  r?  r   rÖ  rØ  r×  rÚ  rÈ   )r   r¼  Úunknown_handler   r   r   ÚtestExtensionFailureModes8  s2   ý
ÿ
ÿÿÿ
ÿz(ReflectionTest.testExtensionFailureModesc                 C   s6   t  ¡ }t |¡ | ¡ }t j |¡}|  ||¡ d S r   )r   rI   r   ÚSetAllFieldsr  Ú
FromStringr=   )r   rœ   Ústring1r�   r   r   r   ÚtestStaticParseFromW  s
   
z"ReflectionTest.testStaticParseFromc                 C   sF   t  ¡ }d|_t  ¡ }d|_| |¡ |  d|j¡ |  d|j¡ d S )NrP   r  )r   rI   rF   rE   rš   r=   r›   r   r   r   ÚtestMergeFromSingularFielda  s   
z)ReflectionTest.testMergeFromSingularFieldc                 C   sx   t  ¡ }|j d¡ |j d¡ t  ¡ }|j d¡ | |¡ |  d|jd ¡ |  d|jd ¡ |  d|jd ¡ d S ©NrP   rQ   r   )r   rI   rU   r¥   rš   r=   r›   r   r   r   ÚtestMergeFromRepeatedFieldn  s   
z)ReflectionTest.testMergeFromRepeatedFieldc                 C   s6   t  ¡ }d|j_t  ¡ }| |¡ |  d|jj¡ d S )Nrb   )r   rI   r‡   rc   rš   r=   r›   r   r   r   ÚtestMergeFromOptionalGroup|  s
   
z)ReflectionTest.testMergeFromOptionalGroupc                 C   sÜ   t  ¡ }|j ¡ }d|_|j ¡ }d|_t  ¡ }|j ¡ }d|_| |¡ |  d|jd j¡ |  d|jd j¡ |  d|jd j¡ t  ¡ }|j |j¡ |  d|jd j¡ |  d|jd j¡ |  d|jd j¡ d S )Nr­   iA  éç  r   rP   rQ   )r   rI   rd   r§   r]   rš   r=   )r   rœ   Úmr�   Úproto3r   r   r   Ú"testMergeFromRepeatedNestedMessage„  s"   



z1ReflectionTest.testMergeFromRepeatedNestedMessagec                 C   óP   t  ¡ }t |¡ t  ¡ }| |¡ |  ||¡ | ¡ }| ¡ }|  ||¡ d S r   )r   rI   r   rã  rš   r=   r  ©r   rœ   r�   rå  Ústring2r   r   r   ÚtestMergeFromAllFieldsš  ó   

z%ReflectionTest.testMergeFromAllFieldsc                 C   s>   t  ¡ }d|jt j< t  ¡ }| |¡ |  d|jt j ¡ d S r2  )r   rÀ   rÁ   rÃ   rš   r=   r›   r   r   r   ÚtestMergeFromExtensionsSingular©  s   
ÿz.ReflectionTest.testMergeFromExtensionsSingularc                 C   s´   t  ¡ }|jt j  d¡ |jt j  d¡ t  ¡ }|jt j  d¡ | |¡ |  dt|jt j ƒ¡ |  d|jt j d ¡ |  d|jt j d ¡ |  d|jt j d ¡ d S )NrP   rQ   r   rR   )r   rÀ   rÁ   rÇ   r¥   rš   r=   r0   r›   r   r   r   ÚtestMergeFromExtensionsRepeated²  s$   
ÿÿÿÿz.ReflectionTest.testMergeFromExtensionsRepeatedc                 C   s²   t  ¡ }|jt j }| ¡ }d|_| ¡ }d|_t  ¡ }|jt j }| ¡ }d|_| |¡ |jt j }|  dt|ƒ¡ |  d|d j¡ |  d|d j¡ |  d|d j¡ d S )NéÞ   iM  éo   rR   r   rP   rQ   )	r   rÀ   rÁ   Ú!repeated_nested_message_extensionr§   r]   rš   r=   r0   )r   rœ   Úext1rì  r�   Úext2r   r   r   Ú$testMergeFromExtensionsNestedMessageÃ  s,   ÿÿ
ÿz3ReflectionTest.testMergeFromExtensionsNestedMessagec                 C   sD   t  ¡ }t  ¡ }|j |  | d¡¡ | |¡ |  | d¡¡ d S r’   )r   rI   rm   rJ   rK   rš   )r   Úmessage1Úmessage2r   r   r   ÚtestMergeFromBugÚ  s   
zReflectionTest.testMergeFromBugc                 C   sL   t  ¡ }d|_d|_t  ¡ }d|_| |¡ |  d|j¡ |  d|j¡ d S )NrP   úimportant-textr  )r   rI   rF   rE   r  r=   r›   r   r   r   ÚtestCopyFromSingularFieldç  s   
z(ReflectionTest.testCopyFromSingularFieldc                 C   sf   t  ¡ }|j d¡ |j d¡ t  ¡ }|j d¡ | |¡ |  d|jd ¡ |  d|jd ¡ d S rè  )r   rI   rU   r¥   r  r=   r›   r   r   r   ÚtestCopyFromRepeatedFieldô  s   
z(ReflectionTest.testCopyFromRepeatedFieldc                 C   rï  r   )r   rI   r   rã  r  r=   r  rð  r   r   r   ÚtestCopyFromAllFields  ró  z$ReflectionTest.testCopyFromAllFieldsc                 C   s\   t  ¡ }|j d¡ d|_d|_| |¡ |  d|jd ¡ |  d|j¡ |  d|j¡ d S )NrP   rQ   rÿ  r   )r   rI   rU   r¥   rF   rE   r  r=   )r   rœ   r   r   r   ÚtestCopyFromSelf  s   
zReflectionTest.testCopyFromSelfc                 C   s4   t  ¡ dkrd S t ¡ }t ¡ }|  t|j|¡ d S )NrŸ   )r
   r¡   r   rI   rÀ   ru   rv   r  r›   r   r   r   ÚtestCopyFromBadType  s
   z"ReflectionTest.testCopyFromBadTypec                 C   sÖ   t  ¡ }d|_t |¡}|  d|j¡ |j d¡ |j d¡ t |j¡}|  ddg|¡ | |d ¡ |  dg|¡ |j	 
¡ }d|_t |j	¡}|  |j	|¡ d|_|  |j	|¡ | |d ¡ |  t|ƒd¡ d S )NrP   rQ   rR   r   )r   rI   rF   ÚcopyÚdeepcopyr=   rU   r¥   rf  rd   r§   r]   ÚassertNotEqualr0   )r   rœ   r�   Ú	containerrü  Úmessagesr   r   r   ÚtestDeepCopy$  s$   

zReflectionTest.testDeepCopyc                 C   s˜   t  ¡ }t ¡ dkrt |¡ nt |¡ | ¡  |  | 	¡ d¡ t  ¡ }|  ||¡ t  
¡ }t |¡ | ¡  |  | 	¡ d¡ t  
¡ }|  ||¡ d S )NrŸ   r   )r   rI   r
   r¡   r   rã  ÚSetAllNonLazyFieldsÚClearr=   rx   rÀ   ÚSetAllExtensions)r   rM   Úempty_protor   r   r   Ú	testClear<  s   

zReflectionTest.testClearc                 C   s  t  ¡ }|j}| ¡  |  ||ju¡ d|_|  | d¡ ¡ |  d|jj¡ t  ¡ }|j}d|_|j}d|_	| ¡  |  ||ju¡ |  ||ju¡ |  d|j¡ |  d|j	¡ d|_d|_	|  
| d¡¡ |  d|jj¡ |  
| d¡¡ |  d|jj	¡ d S )	Nr�   rm   r   r–   rO  rU  é   rˆ   )r   rI   rm   r  rz   r]   rK   r=   rˆ   r`   rJ   )r   rM   r�   rÜ  r   r   r   ÚtestDisconnectingBeforeClearS  s.   z+ReflectionTest.testDisconnectingBeforeClearc                 C   sf   t  ¡ }d|j_|j}|  |jjd¡ |  |jjd¡ d|j_|  |jjd¡ |  |jd¡ d|_d S )Nr–   r   rO  é   )r   Ú
TestOneof2Úfoo_messageÚqux_intr=   Úfoo_lazy_message)r   rì  Úsub_messager   r   r   ÚtestDisconnectingInOneofn  s   
z'ReflectionTest.testDisconnectingInOneofc                 C   sr   t  ¡ }d|_d|j_|  d|jj¡ |  | d¡¡ |j}d|_|  d|j¡ |  d|j¡ |  | d¡¡ d S )Nr  r³   Úoneof_uint32r<  Úoneof_nested_message)	r   rI   r  r  r]   r=   rJ   rK   Úoneof_stringrŽ   r   r   r   Ú	testOneOf|  s   zReflectionTest.testOneOfc                 C   s"   |   | ¡ ¡ | ¡  | ¡  d S r   )rz   ÚIsInitializedr  ÚSerializePartialToStringrL   r   r   r   ÚassertInitializedˆ  s   z ReflectionTest.assertInitializedNc                 C   sN   g }|   | ¡ ¡ |   | |¡¡ |  |t|ƒ¡ |  tj|j¡ | ¡  d S r   )	rJ   r  r=   r0   ru   r   ÚEncodeErrorr  r  )r   rM   Ú
error_sizeÚerrorsr   r   r   ÚassertNotInitializedŽ  s   z#ReflectionTest.assertNotInitializedc                 C   s²  t  ¡ }|  |¡ t  ¡ }|  |¡ t  ¡ }|  |d¡ d |_ |_|_|  |¡ t  	¡ }|  |¡ d|j
_|  |d¡ d|j
_d|j
_|  |¡ |j ¡ }|  |d¡ d |_ |_|_|  |¡ t  ¡ }t jj}|j|  ¡ }|j|  ¡ }|  |d¡ d|_d|_d|_|  |d¡ d|_d|_d|_|  |¡ t  ¡ }t jj}d|j| _|  |d¡ d|j| _d|j| _|  |¡ g }t  ¡ }|  | |¡¡ |  |g d¢¡ d S )NrR   rQ   rP   r   rO  ©rc   Úbr`   )r   rI   r  rÀ   rÊ  r#  rc   r%  r`   r
  Úoptional_messager  r§   ÚmultirÁ   rË  rJ   r  r=   )r   rM   rü  r½  rý  r"  r   r   r   ÚtestIsInitialized—  sV   








z ReflectionTest.testIsInitializedÚcpprQ   zBErrors are only available from the most recent C++ implementation.c              	   C   sä   d}d}t  ¡ }||_||_|j ¡ }d|_tj||| ¡ d� d}||_|j ¡ }d|_|  	t
¡�6}tj||| ¡ d� |  t|dƒdt|jd|jƒ ¡ |  dt|jƒ¡ |  d	t|jƒ¡ W d   ƒ d S 1 skw   Y  d S )
Nz!test_file_descriptor_errors.protoÚmsg1)Úserialized_pbz)another_test_file_descriptor_errors.protoÚmsg2Ú	exceptionú%s not raisedr3   z test_file_descriptor_errors.msg1)r   ÚFileDescriptorProtort  Úpackager|  r§   r   ÚFileDescriptorr  ru   rv   rz   Úhasattrr~   ÚexpectedÚassertInr¶   r-  )r   Ú	file_nameÚpackage_nameÚfile_descriptor_protorj  Úanother_file_namerk  Úcmr   r   r   ÚtestFileDescriptorErrorsÑ  s8   
ý
ýÿ"õz'ReflectionTest.testFileDescriptorErrorsc                 C   sœ   t  ¡ }|  tt|dd¡ |  t|jƒtj	¡ t 	d¡|_|  |jt
dƒ¡ t
dƒ|_|  |jt 	d¡¡ |  tt|dd¡ d d¡}||_d|_d|_d S )	Nrç   zunicode objectÚTestingrE   s   a€aõ   Ð¢ÐµÑ�Ñ‚úutf-8r<  )r   rI   ru   rv   r   r=   rw  rE   r•  Ú	text_typer¶   r  Úencode)r   rM   Ú
utf8_bytesr   r   r   ÚtestStringUTF8Encodingó  s    ÿ
ÿ

z%ReflectionTest.testStringUTF8Encodingc                 C   sd  t  ¡ }t j}|j}d}| d¡}||j| _| ¡ }|  | 	¡ t
|ƒ¡ t ¡ }| |¡}|  t
|ƒ|¡ t  ¡ }	|  dt
|jƒ¡ |  |jd jd¡ |  |jd j |¡¡ |	 |jd j¡}|  t
|jd jƒ|¡ |  t|	jƒtj¡ |  |	j|¡ |jd j |t
|ƒd ¡}
d}z|	 |
¡ W n ty¡   d}Y nw |	j}|  |p®t|ƒtu ¡ d S )	Nr<  r=  rP   r   iÊ¿Ýó   ÿFT)r   ÚTestMessageSetÚTestMessageSetExtension2Úmessage_set_extensionr?  rÁ   r¶   r  r=   rx   r0   r   ÚRawMessageSetÚMergeFromStringÚitemÚtype_idrz   r   Úendswithrw  r•  r>  ÚreplaceÚUnicodeDecodeErrorr   )r   rM   Úextension_messager½  Ú	test_utf8Útest_utf8_bytesÚ
serializedÚrawÚ
bytes_readrý  ÚbadbytesÚunicode_decode_failedÚstring_fieldr   r   r   ÚtestStringUTF8Serialization  s<   

	ÿÿz*ReflectionTest.testStringUTF8Serializationc                 C   s"   t jdd�}|  dt |¡¡ d S )Ns    €ÿ)rç   z#optional_bytes: "\000\177\200\377"
)r   rI   r=   r•  r>  rL   r   r   r   ÚtestBytesInTextFormatE  s   ÿz$ReflectionTest.testBytesInTextFormatc                 C   sâ   t  ¡ }|j t j ¡ ¡ |  | d¡¡ t  ¡ }|j t j ¡ ¡ |  | d¡¡ t  ¡ }|j d¡}|  	d|¡ |  | d¡¡ t  ¡ }|j 
d¡ |  | d¡¡ | ¡ }t  ¡ }|  	t|ƒ| |¡¡ |  | d¡¡ d S )Nrm   rÔ   r   )r   rI   rm   rš   rg   rz   rK   r  rG  r=   r  r  r0   )r   rM   rR  rP  r�   r   r   r   ÚtestEmptyNestedMessageJ  s0   ÿÿþz%ReflectionTest.testEmptyNestedMessagec                 C   s6   t  ¡ }|  | d¡¡ |j ¡  |  | d¡¡ d S )Nr‡   )r   rI   rJ   rK   r‡   ÚSetInParentrz   rL   r   r   r   ÚtestSetInParente  s   
zReflectionTest.testSetInParentc                 C   s*   ddl m} |j ¡ }|  d|jj¡ dS )a•  Test that we can import nested messages from their __init__.py.

    Such setup is not trivial since at the time of processing of __init__.py one
    can't refer to its submodules by name in code, so expressions like
    google.protobuf.internal.import_test_package.inner_pb2
    don't work. They do work in imports, so we have assign an alias at import
    and then use that alias in generated code.
    r   )Úimport_test_packageé9   N)Úgoogle.protobuf.internalr[  ÚmyprotoÚOuterr=   Úinnerr  )r   r[  Úmsgr   r   r   ÚtestPackageInitializationImportk  s   
z.ReflectionTest.testPackageInitializationImportr   )br3   r4   r5   rB   rN   r[   rl   rn   rw   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+  r1  r9  r:  r;  r@  rA  rB  rD  rJ  rN  rT  re  rg  rq  rr  r›  r   ÚSkipReferenceLeakCheckerr¸  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ÚskipIfr
   r¡   ÚVersionr:  rA  rV  rW  rX  rZ  rb  r   r   r   r   r<   w   s¼    "#Q	)!	ZS
>1

		
	:þ
6r<   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestAllTypesEqualityTestc                 C   s   t  ¡ | _t  ¡ | _d S r   )r   rI   Úfirst_protoÚsecond_protor"   r   r   r   ÚsetUpƒ  s   
zTestAllTypesEqualityTest.setUpc                 C   ó   |   tt| j¡ d S r   ©ru   rv   Úhashrh  r"   r   r   r   ÚtestNotHashable‡  ó   z(TestAllTypesEqualityTest.testNotHashablec                 C   s   |   | j| j¡ d S r   )r=   rh  r"   r   r   r   ÚtestSelfEqualityŠ  ro  z)TestAllTypesEqualityTest.testSelfEqualityc                 C   ó   |   | j| j¡ d S r   ©r=   rh  ri  r"   r   r   r   ÚtestEmptyProtosEqual�  ro  z-TestAllTypesEqualityTest.testEmptyProtosEqualN)r3   r4   r5   rj  rn  rp  rs  r   r   r   r   rg  �  s
    rg  c                   @   sh   e Zd 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S )ÚFullProtosEqualityTestz@Equality tests using completely-full protos as a starting point.c                 C   s0   t  ¡ | _t  ¡ | _t | j¡ t | j¡ d S r   )r   rI   rh  ri  r   rã  r"   r   r   r   rj  •  s   

zFullProtosEqualityTest.setUpc                 C   rk  r   rl  r"   r   r   r   rn  ›  ro  z&FullProtosEqualityTest.testNotHashablec                 C   s    |   | jd ¡ |   d | j¡ d S r   )r  rh  ri  r"   r   r   r   ÚtestNoneNotEqualž  s   z'FullProtosEqualityTest.testNoneNotEqualc                 C   s(   t  ¡ }|  | j|¡ |  || j¡ d S r   )r   rÊ  r  rh  ri  )r   Úthird_protor   r   r   ÚtestNotEqualToOtherMessage¢  s   z1FullProtosEqualityTest.testNotEqualToOtherMessagec                 C   rq  r   rr  r"   r   r   r   ÚtestAllFieldsFilledEquality§  ro  z2FullProtosEqualityTest.testAllFieldsFilledEqualityc                 C   s@   | j  jd7  _|  | j | j¡ | j  d¡ |  | j | j¡ d S )NrP   rF   )rh  rF   r  ri  r{   r"   r   r   r   ÚtestNonRepeatedScalarª  s   z,FullProtosEqualityTest.testNonRepeatedScalarc                 C   s¢   | j j jd7  _|  | j | j¡ | j j jd8  _|  | j | j¡ | j j d¡ |  | j | j¡ | jjj| j j_|  | j | j¡ | j  d¡ |  | j | j¡ d S )NrP   r]   rm   )rh  rm   r]   r  ri  r=   r{   r"   r   r   r   ÚtestNonRepeatedComposite²  s   ÿz/FullProtosEqualityTest.testNonRepeatedCompositec                 C   s>   | j j d¡ |  | j | j¡ | j  d¡ |  | j | j¡ d S )Nr–   rU   )rh  rU   r¥   r  ri  r{   r"   r   r   r   ÚtestRepeatedScalarÂ  s   z)FullProtosEqualityTest.testRepeatedScalarc                 C   sˆ   | j jd  jd7  _|  | j | j¡ | j jd  jd8  _|  | j | j¡ | j j ¡  |  | j | j¡ | jj ¡  |  | j | j¡ d S )Nr   rP   )rh  rd   r]   r  ri  r=   r§   r"   r   r   r   ÚtestRepeatedCompositeÉ  s   z,FullProtosEqualityTest.testRepeatedCompositec                 C   s(   | j  d¡ d| j_|  | j | j¡ d S )NrF   r   )rh  r{   ri  rF   r  r"   r   r   r   ÚtestNonRepeatedScalarHasBitsÕ  s   z3FullProtosEqualityTest.testNonRepeatedScalarHasBitsc                 C   sV   | j  d¡ | jj d¡ |  | j | j¡ d| j j_| j j d¡ |  | j | j¡ d S )Nrm   r]   r   )rh  r{   ri  rm   r  r]   r=   r"   r   r   r   ÚtestNonRepeatedCompositeHasBitsÜ  s   
z6FullProtosEqualityTest.testNonRepeatedCompositeHasBitsN)r3   r4   r5   r6   rj  rn  ru  rw  rx  ry  rz  r{  r|  r}  r~  r   r   r   r   rt  ‘  s    rt  c                   @   ó   e Zd Zdd„ ZdS )ÚExtensionEqualityTestc                 C   sø   t  ¡ }t  ¡ }|  ||¡ t |¡ |  ||¡ t |¡ |  ||¡ |jt j  d7  < |  ||¡ |jt j  d8  < |  ||¡ | t j¡ d|jt j< |  ||¡ d|jt j< |  ||¡ t  ¡ }t  ¡ }|  d|jt j ¡ |  ||¡ d S )NrP   r   )	r   rÀ   r=   r   r  r  rÁ   rÃ   r»  ©r   rh  ri  r   r   r   ÚtestExtensionEqualityé  s,   

ÿz+ExtensionEqualityTest.testExtensionEqualityN)r3   r4   r5   r‚  r   r   r   r   r€  ç  ó    r€  c                   @   r  )ÚMutualRecursionEqualityTestc                 C   sP   t  ¡ }t  ¡ }|  ||¡ d|jjj_|  ||¡ d|jjj_|  ||¡ d S rŒ   )r   r©   r=   r]   rc   rF   r  r�  r   r   r   ÚtestEqualityWithMutualRecursion
  s   z;MutualRecursionEqualityTest.testEqualityWithMutualRecursionN)r3   r4   r5   r…  r   r   r   r   r„    rƒ  r„  c                   @   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-S ).ÚByteSizeTestc                 C   s,   t  ¡ | _t ¡ | _t  ¡ | _t  ¡ | _	d S r   )
r   rI   rM   r   ÚExtendedMessageÚextended_protoÚTestPackedTypesÚpacked_protoÚTestPackedExtensionsÚpacked_extended_protor"   r   r   r   rj    s   


zByteSizeTest.setUpc                 C   s
   | j  ¡ S r   )rM   rx   r"   r   r   r   ÚSize  s   
zByteSizeTest.Sizec                 C   s   |   d| j ¡ ¡ d S r   )r=   rM   rx   r"   r   r   r   ÚtestEmptyMessage  s   zByteSizeTest.testEmptyMessagec                 C   s8   t  ¡ }|  d| ¡ ¡ t jdd�}|  d| ¡ ¡ d S )Nr   rP   )rÞ   rQ   )r   rI   r=   rx   )r   rM   Úproto_kwargsr   r   r   ÚtestSizedOnKwargs"  s   zByteSizeTest.testSizedOnKwargsc                    sv   ‡ fdd„}|ddƒ |ddƒ t tdddƒtddƒƒD ]\}}|d|> d |ƒ q|dd	ƒ |d
d	ƒ |dd	ƒ d S )Nc                    s*   ˆ j  ¡  | ˆ j _ˆ  |d ˆ  ¡ ¡ d S r2  )rM   r  rÞ   r=   r�  )rA   Úexpected_varint_sizer"   r   r   ÚTest+  s   
z&ByteSizeTest.testVarints.<locals>.Testr   rP   r  é?   ra  rQ  r  r^  r6  )Úzipr>   )r   r’  rA   Ú	num_bytesr   r"   r   ÚtestVarints*  s   

 

zByteSizeTest.testVarintsc                 C   sd   d| j _|  d|  ¡ ¡ d| j _|  dt| j jƒ |  ¡ ¡ d| j _|  dt| j jƒ |  ¡ ¡ d S )NrÓ   rQ   r<  Ú€xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrR   )rM   rE   r=   r�  r0   r"   r   r   r   ÚtestStrings9  s    zByteSizeTest.testStringsc                 C   s®   d| j _|  d|  ¡ ¡ t ¡ | _ d| j _|  d|  ¡ ¡ t ¡ | _ d| j _|  d|  ¡ ¡ t ¡ | _ d| j _|  d|  ¡ ¡ t ¡ | _ d| j _	|  d|  ¡ ¡ t ¡ | _ d S )Nrq   r–   é	   gX9´Èv¾ó?é@   rR   )
rM   r¬   r=   r�  r   rI   rã   rH   rG   rá   r"   r   r   r   ÚtestOtherNumericsF  s   



zByteSizeTest.testOtherNumericsc                 C   ó   d| j j_|  d|  ¡ ¡ d S )Ni @  r  )rM   rm   r]   r=   r�  r"   r   r   r   ÚtestComposites`  s   
zByteSizeTest.testCompositesc                 C   rœ  )Ni    r  )rM   r‡   rc   r=   r�  r"   r   r   r   Ú
testGroupsh  s   
zByteSizeTest.testGroupsc                 C   s0   | j j d¡ | j j d¡ |  d|  ¡ ¡ d S ©Nr  é€   r  )rM   rU   r¥   r=   r�  r"   r   r   r   re  o  s   z ByteSizeTest.testRepeatedScalarsc                 C   s&   | j j ddg¡ |  d|  ¡ ¡ d S rŸ  )rM   rU   r¾   r=   r�  r"   r   r   r   ÚtestRepeatedScalarsExtendu  s   z&ByteSizeTest.testRepeatedScalarsExtendc                 C   sN   | j j d¡ | j j d¡ |  d|  ¡ ¡ | j j d¡ |  d|  ¡ ¡ d S )Nr  r   r  rR   )rM   rU   r¥   r=   r�  rf  r"   r   r   r   rg  z  s
   z&ByteSizeTest.testRepeatedScalarsRemovec                 C   ó2   | j j ¡ }| j j ¡ }d|_|  d|  ¡ ¡ d S )Nr  r.   )rM   rd   r§   r]   r=   r�  )r   Úforeign_message_0Úforeign_message_1r   r   r   rq  ‚  s   z#ByteSizeTest.testRepeatedCompositesc                 C   s  | j j ¡ }| j j ¡ }d|_|  d|  ¡ ¡ t | j j¡}| j jd= |  d|  ¡ ¡ | j j ¡ }d|_|  d|  ¡ ¡ | j jd= |  d|  ¡ ¡ | j jd= |  d|  ¡ ¡ |  dt|ƒ¡ |dd…= t	 
¡ d	krq|  dt|ƒ¡ |d
= t	 
¡ d	kr„|  dt|ƒ¡ d S d S )Nr™  r.   r   r–   rb   r  rP   rQ   rŸ   rQ  )rM   rd   r§   r]   r=   r�  r  r  r0   r
   r¡   )r   r£  r¤  rd   Úforeign_message_2r   r   r   ÚtestRepeatedCompositesDeleteŠ  s0   ÿ



ÿz)ByteSizeTest.testRepeatedCompositesDeletec                 C   r¢  )Nr  r³   )rM   rf   r§   rc   r=   r�  )r   Úgroup_0Úgroup_1r   r   r   ÚtestRepeatedGroups±  s   zByteSizeTest.testRepeatedGroupsc                 C   s€   t  ¡ }|  d| ¡ ¡ t j}d|j|< |  d| ¡ ¡ t jjjd }|  	t
¡� d|j|< W d   ƒ d S 1 s9w   Y  d S )Nr   r�   rQ   rF   )r   rÀ   r=   rx   rÃ   rÁ   rI   r®   r¯   ru   rà  )r   rM   r½  rž  r   r   r   ÚtestExtensionsº  s   
ÿ"ÿzByteSizeTest.testExtensionsc                 C   s¶   d| j _|  d| j  ¡ ¡ d| j _|  d| j  ¡ ¡ | j  d¡ |  d| j  ¡ ¡ tj}d| jj|< |  d| j ¡ ¡ d| jj|< |  d| j ¡ ¡ | j 	|¡ |  d| j ¡ ¡ d S )NrP   rQ   r   rR   rF   r   )
rM   rF   r=   rx   r{   r   rÖ  rˆ  rÁ   r»  ©r   r½  r   r   r   Ú)testCacheInvalidationForNonrepeatedScalarÆ  s   z6ByteSizeTest.testCacheInvalidationForNonrepeatedScalarc                 C   s  | j j d¡ |  d| j  ¡ ¡ | j j d¡ |  d| j  ¡ ¡ d| j jd< |  d| j  ¡ ¡ | j  d¡ |  d| j  ¡ ¡ tj}| jj	| }| d¡ |  d| j ¡ ¡ | d¡ |  d	| j ¡ ¡ d|d< |  d
| j ¡ ¡ | j 
|¡ |  d| j ¡ ¡ d S )NrP   rR   rO  r   r  rU   r   rQ   r(   r–   )rM   rU   r¥   r=   rx   r{   r   r×  rˆ  rÁ   r»  )r   r½  Úrepeatedr   r   r   Ú&testCacheInvalidationForRepeatedScalarØ  s$   

z3ByteSizeTest.testCacheInvalidationForRepeatedScalarc                 C   s$  d| j j_|  d| j  ¡ ¡ d| j j_|  d| j  ¡ ¡ | j j d¡ |  d| j  ¡ ¡ | j  d¡ |  d| j  ¡ ¡ t ¡ d	krW| j j}| j  d¡ d|_|  d| j  ¡ ¡ tj	}| j
j| }|  d| j
 ¡ ¡ d|_|  d
| j
 ¡ ¡ d|_|  d| j
 ¡ ¡ | j
 |¡ |  d| j
 ¡ ¡ d S )NrP   r–   r   rO  r`   rR   rˆ   r   rŸ   r(   )rM   rˆ   r`   r=   rx   r{   r
   r¡   r   rØ  rˆ  rÁ   rÙ  r»  )r   Úchildr½  r   r   r   Ú*testCacheInvalidationForNonrepeatedMessageï  s,   

z7ByteSizeTest.testCacheInvalidationForNonrepeatedMessagec                 C   s  | j j ¡ }|  d| j  ¡ ¡ | j j ¡  |  d| j  ¡ ¡ d|_|  d| j  ¡ ¡ | j  d¡ |  d| j  ¡ ¡ tj}| j	j
| }| ¡ }|  d| j	 ¡ ¡ | ¡  |  d| j	 ¡ ¡ d|_|  d| j	 ¡ ¡ | d	¡ |  d| j	 ¡ ¡ | j	 |¡ |  d| j	 ¡ ¡ d S )
NrR   rO  rP   r.   re   r   rQ   r(   rÙ  )rM   re   r§   r=   rx   r`   r{   r   rÚ  rˆ  rÁ   rÙ  r»  )r   Úchild0r½  Ú
child_listr   r   r   Ú'testCacheInvalidationForRepeatedMessage	  s(   
z4ByteSizeTest.testCacheInvalidationForRepeatedMessagec                 C   sœ   |   d| j ¡ ¡ | jj d¡ | jj d¡ d}|   || j ¡ ¡ | jj d¡ | jj d¡ d}|   || | j ¡ ¡ | j d¡ |   || j ¡ ¡ d S )	Nr   r  r   rO  gÍÌÌÌÌÌ@g      
@é   Úpacked_int32)r=   rŠ  rx   rµ  r¥   Úpacked_doubler{   )r   Úint_sizeÚdouble_sizer   r   r   ÚtestPackedRepeatedScalars%	  s   z&ByteSizeTest.testPackedRepeatedScalarsc                 C   sD   |   d| j ¡ ¡ | jjtj }| g d¢¡ |   d| j ¡ ¡ d S )Nr   rO   r´  )r=   rŒ  rx   rÁ   r   Úpacked_fixed32_extensionr¾   r«  r   r   r   ÚtestPackedExtensions8	  s   ÿz!ByteSizeTest.testPackedExtensionsN)r3   r4   r5   rj  r�  rŽ  r�  r–  r˜  r›  r�  rž  re  r¡  rg  rq  r¦  r©  rª  r¬  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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=S )>ÚSerializationTestc                 C   sR   t  ¡ }t  ¡ }| ¡ }|  | ¡ t|ƒ¡ |  t|ƒ| |¡¡ |  ||¡ d S r   )r   rI   r  r=   rx   r0   rG  ©r   rh  ri  rP  r   r   r   ÚtestSerializeEmtpyMessageN	  s   þz+SerializationTest.testSerializeEmtpyMessagec                 C   s\   t  ¡ }t  ¡ }t |¡ | ¡ }|  | ¡ t|ƒ¡ |  t|ƒ| |¡¡ |  ||¡ d S r   )	r   rI   r   rã  r  r=   rx   r0   rG  r½  r   r   r   ÚtestSerializeAllFieldsX	  s   
þz(SerializationTest.testSerializeAllFieldsc                 C   sH   t  ¡ }t  ¡ }t |¡ | ¡ }|  t|ƒ| |¡¡ |  ||¡ d S r   )r   rÀ   r   r  r  r=   r0   rG  r½  r   r   r   ÚtestSerializeAllExtensionsc	  s   
þz,SerializationTest.testSerializeAllExtensionsc                 C   sF   t  ¡ }t  ¡ }d|j_| ¡ }|  t|ƒ| |¡¡ |  ||¡ d S )Néò   )r   rI   r‡   rc   r  r=   r0   rG  r½  r   r   r   ÚtestSerializeWithOptionalGroupm	  s   þz0SerializationTest.testSerializeWithOptionalGroupc                 C   sL   t  ¡ }d|_d|_d|_d|_d|_d|_t j | 	¡ ¡}|  
||¡ d S )NrQ  lýÿÿÿ     r_  lýÿÿÿ     éûÿÿÿlýÿÿÿ     )r   rI   rF   rÞ   rá   râ   rä   rå   rä  r  r=   r�  r   r   r   ÚtestSerializeNegativeValuesw	  s   ÿz-SerializationTest.testSerializeNegativeValuesc                 C   sÞ   t  ¡ dkrd S t ¡ }t |¡ t| ¡ ƒ}tt	|ƒd ƒD ]M}z6t ¡ }t 
¡ }| |d|¡}|  ||¡ z| |d|¡}|  ||¡ W n tjyU   |  d¡ Y nw W q tjyl   |  tj|j|d|¡ Y qw d S )NrŸ   rP   r   z@Parsing unknown fields failed when parsing known fields did not.)r
   r¡   r   rI   r   rã  Ú
memoryviewr  r>   r0   ÚTestEmptyMessageÚ_InternalParser=   r   ÚDecodeErrorÚfailru   )r   rh  rP  Útruncation_pointri  Úunknown_fieldsÚposÚpos2r   r   r   ÚtestParseTruncated†	  s0   
ÿ€ÿþðz$SerializationTest.testParseTruncatedc                 C   s  t  ¡ }d|_d|jt j< d|_d|jt j< d|_| ¡ }|  	| 
¡ t|ƒ¡ t|ƒ}|j}|  	dtjf|ƒ ¡ |  	d| ¡ ¡ |  	dtjf|ƒ ¡ |  	d| ¡ ¡ |  	dtjf|ƒ ¡ |  	d| ¡ ¡ |  	dtjf|ƒ ¡ |  	d| ¡ ¡ |  	dtjf|ƒ ¡ |  	d| ¡ ¡ d S )Nr–   r(   rR   rQ   rP   )r   ÚOutOfOrderFieldsrá   rÁ   rà   rß   rÞ   rF   r  r=   rx   r0   r   r&   r   ÚWIRETYPE_VARINTr7   r8   r9   r:   r;   ©r   rM   rP  rŠ   ÚReadTagr   r   r   ÚtestCanonicalSerializationOrder¤	  s(   z1SerializationTest.testCanonicalSerializationOrderc                 C   s(   t  ¡ }t |¡ | ¡ }t |¡ d S r   )r   rÎ   r   rÏ   r  Ú#ExpectAllFieldsAndExtensionsInOrder)r   rM   rP  r   r   r   Ú(testCanonicalSerializationOrderSameAsCpp½	  s   
z:SerializationTest.testCanonicalSerializationOrderSameAsCppc                 C   sž   t  ¡ }|j d¡ d|_d|j_| ¡ }t  ¡ }|j d¡ d|_d|j_| |¡}|  	t
|ƒ|¡ |  	ddgt|jƒ¡ |  	d|j¡ |  	d|jj¡ d S )NÚfoobarr�   rÖ   rµ   r`  rë  )r   rI   rX   r¥   rF   rm   r]   r  rG  r=   r0   rZ   )r   rh  rP  ri  Úbytes_parsedr   r   r   Ú'testMergeFromStringWhenFieldsAlreadySetÄ	  s   
z9SerializationTest.testMergeFromStringWhenFieldsAlreadySetc                 C   sÐ  t  ¡ }t j}t j}|j}|j}t j}d|j| _d|j| _d|j| _	| 
¡ }t ¡ }|  d|j ¡ j¡ |  t|ƒ| |¡¡ |  dt|jƒ¡ t  ¡ }	|  t|jd jƒ|	 |jd j¡¡ |  d|	j¡ t  ¡ }
|  t|jd jƒ|
 |jd j¡¡ |  d|
j¡ t  ¡ }|  t|jd jƒ| |jd j¡¡ |  d|j	¡ t  ¡ }|  t|ƒ| |¡¡ |  d|j| j¡ |  d|j| j¡ |  d|j| j	¡ |  | ¡ t|ƒ¡ |  | ¡ t|ƒ¡ d S )	Nr­   ro   r´   FrR   r   rP   rQ   )r   rC  ÚTestMessageSetExtension1rD  rE  Úmessage_set_extension3rÁ   rA   r¶   Útextr  r   rF  r=   r®   Ú
GetOptionsÚmessage_set_wire_formatr0   rG  rH  r   ÚTestMessageSetExtension3rx   )r   rM   Úextension_message1Úextension_message2Ú
extension1Ú
extension2Ú
extension3rP  rQ  rü  rý  Úmessage3r�   r   r   r   ÚtestMessageSetWireFormatÛ	  s^   
ÿþþþþþz*SerializationTest.testMessageSetWireFormatc                 C   sÖ   t  ¡ }|j ¡ }d|_tj}t ¡ }d|_| ¡ |_	|j ¡ }d|_tj}t ¡ }d|_| ¡ |_	|j ¡ }d|_t 
¡ }d|_| ¡ |_	| ¡ }t ¡ }|  t|ƒ| |¡¡ tj}|j}|  d|j| j¡ d S )Ni«¿Ýi90  i¬¿Ýi:0  i­¿Ýro   )r   rF  rH  r§   rI  r   rÙ  rA   r  r   rD  r¶   rC  r=   r0   rG  rE  rÁ   )r   rQ  rH  rß  rü  rP  rM   rá  r   r   r   Ú(testMessageSetWireFormatUnknownExtension
  s6   





þz:SerializationTest.testMessageSetWireFormatUnknownExtensionc                 C   sp   t  ¡ }t |¡ | ¡ }t  ¡ }|  t|ƒ| |¡¡ t  ¡ }d|_	| ¡ }t  ¡ }|  t|ƒ| |¡¡ d S )Nl   ÿÿÿÿ)
r   rI   r   rã  r  rÆ  r=   r0   rG  rÞ   )r   rM   rP  r�   r   r   r   ÚtestUnknownFields:
  s    
þþz#SerializationTest.testUnknownFieldsc              
   C   sT   z|ƒ  W n |y  } z|   |t|ƒ¡ W Y d}~dS d}~ww |  dt|ƒ ¡‚)zEThis method checks if the excpetion type and message are as expected.Nr.  )r=   r¶   ÚfailureException)r   Ú	exc_classÚcallable_objr-  Úexr   r   r   Ú_CheckRaisesU
  s   
€ýzSerializationTest._CheckRaisesc                 C   s6  t  ¡ }|  tj|jd¡ | ¡ }t  ¡ }|  | d¡¡ | 	|¡ |  | d¡¡ d|_
|  tj|jd¡ | ¡ }d|_|  tj|jd¡ | ¡ }d|_| ¡ }| ¡ }t  ¡ }|  t|ƒ| |¡¡ |  d|j
¡ |  d|j¡ |  d|j¡ |  t|ƒ| |¡¡ |  d|j
¡ |  d|j¡ |  d|j¡ d S )NzHMessage protobuf_unittest.TestRequired is missing required fields: a,b,crc   rP   zFMessage protobuf_unittest.TestRequired is missing required fields: b,crQ   zDMessage protobuf_unittest.TestRequired is missing required fields: crR   )r   rÊ  rì  r   r   r  r  rJ   rK   r  rc   r%  r`   r=   r0   rG  )r   rM   Úpartialr�   rP  r   r   r   ÚtestSerializeUninitialized`
  sV   ý
ýýþþz,SerializationTest.testSerializeUninitializedc                 C   s¨   t  ¡ }| ¡  d|j_|  tj|jd¡ d|j_d|j_	| ¡  d|j
 ¡ _d|j
 ¡ _|  tj|jd¡ d|j
d _d|j
d _	d|j
d _d|j
d _	| ¡  d S )NrP   zoMessage protobuf_unittest.TestRequiredForeign is missing required fields: optional_message.b,optional_message.crQ   rR   z¡Message protobuf_unittest.TestRequiredForeign is missing required fields: repeated_message[0].b,repeated_message[0].c,repeated_message[1].a,repeated_message[1].cr   )r   r
  r  r&  rc   rì  r   r   r%  r`   r  r§   rL   r   r   r   Ú$testSerializeUninitializedSubMessage“
  s.   ýýz6SerializationTest.testSerializeUninitializedSubMessagec                 C   s`   t  ¡ }t  ¡ }t |¡ | ¡ }|  | ¡ t|ƒ¡ | |¡}|  | ¡ |¡ |  ||¡ d S r   )	r   r‰  r   ÚSetAllPackedFieldsr  r=   rx   r0   rG  ©r   rh  ri  rP  rR  r   r   r   ÚtestSerializeAllPackedFields´
  s   

z.SerializationTest.testSerializeAllPackedFieldsc                 C   sL   t  ¡ }t  ¡ }t |¡ | ¡ }| |¡}|  | ¡ |¡ |  ||¡ d S r   )r   r‹  r   ÚSetAllPackedExtensionsr  rG  r=   rx   rñ  r   r   r   Ú testSerializeAllPackedExtensions¾
  s   

z2SerializationTest.testSerializeAllPackedExtensionsc                 C   sª   t  ¡ }|j ddg¡ |j d¡ | ¡ }t  ¡ }|j d¡ |j ddg¡ |j d¡ |  t	|ƒ| 
|¡¡ |  g d¢|j¡ |  g d	¢|j¡ |  dg|j¡ d S )
NrP   rQ   ç      @rR   rÍ   ç       @r(   )rR   rP   rQ   )rÍ   rö  rõ  )r   r‰  rµ  r¾   r¶  r¥   r  Úpacked_sint32r=   r0   rG  )r   rh  rP  ri  r   r   r   Ú1testMergePackedFromStringWhenSomeFieldsAlreadySetÇ
  s   þzCSerializationTest.testMergePackedFromStringWhenSomeFieldsAlreadySetc                 C   sL  t  ¡ }|j g d¢¡ |j ddg¡ |j d¡ | ¡ }|  | 	¡ t
|ƒ¡ t|ƒ}|j}|  dtjf|ƒ ¡ |  d| ¡ ¡ |  d| ¡ ¡ |  d| ¡ ¡ |  d	| ¡ ¡ |  d
| ¡ ¡ |  dtjf|ƒ ¡ |  d| ¡ ¡ |  d| ¡ ¡ |  dtjf|ƒ ¡ |  d| ¡ ¡ |  d| ¡ ¡ |  d| ¡ ¡ |  | ¡ ¡ d S )N)rP   rQ   é–   rR   rÍ   g     @�@rö  éZ   r–   rP   rQ   rù  rR   r`  r(   ée   r  )r   r‰  rµ  r¾   r¶  Úpacked_floatr¥   r  r=   rx   r0   r   r&   r   ÚWIRETYPE_LENGTH_DELIMITEDr7   r,   r/   rz   r1   rÑ  r   r   r   ÚtestPackedFieldsWireFormatÙ
  s,   z,SerializationTest.testPackedFieldsWireFormatc                 C   óZ   t  ¡ }t |¡ t  ¡ }| ¡ }|  t|ƒ| |¡¡ t  ¡ }t 	|¡ |  ||¡ d S r   )
r   ÚTestUnpackedTypesr   ÚSetAllUnpackedFieldsr‰  r  r=   r0   rG  rð  )r   ÚunpackedÚpackedrP  r3  r   r   r   ÚtestParsePackedFromUnpackedñ
  ó   
þ
z-SerializationTest.testParsePackedFromUnpackedc                 C   rÿ  r   )
r   r‰  r   rð  r   r  r=   r0   rG  r  )r   r  r  rP  r3  r   r   r   ÚtestParseUnpackedFromPackedý
  r  z-SerializationTest.testParseUnpackedFromPackedc                 C   sž   t  ¡ }|  t jjjd¡ |  t jjd¡ |  t jjd¡ |  t jjd¡ |  t jjd¡ |  t jj	d¡ |  t jj
d¡ |  t jjd¡ |  t jjd¡ d S )	NrP   r  é   rº   é   rÙ   rÛ   é3   )r   rI   r=   rg   ÚBB_FIELD_NUMBERÚOPTIONAL_INT32_FIELD_NUMBERÚOPTIONALGROUP_FIELD_NUMBERÚ$OPTIONAL_NESTED_MESSAGE_FIELD_NUMBERÚ!OPTIONAL_NESTED_ENUM_FIELD_NUMBERÚREPEATED_INT32_FIELD_NUMBERÚREPEATEDGROUP_FIELD_NUMBERÚ$REPEATED_NESTED_MESSAGE_FIELD_NUMBERÚ!REPEATED_NESTED_ENUM_FIELD_NUMBERrL   r   r   r   ÚtestFieldNumbers	  s$   ÿÿÿÿz"SerializationTest.testFieldNumbersc                 C   s8  |   tjjjd¡ |   tjjd¡ |   tjjjd¡ |   tjjd¡ |   tjjd¡ |   tj	d¡ |   tj
jd¡ |   tjd¡ |   tjjd¡ |   tjd¡ |   tjjd¡ |   tjd¡ |   tjjd¡ |   tjd¡ |   tjjd¡ |   tjd¡ |   tjjd	¡ |   tjd	¡ |   tjjd
¡ |   tjd
¡ d S )Niè  ié  rP   r  r  rº   r  rÙ   rÛ   r	  )r=   r   rÊ  rË  rv  ÚSINGLE_FIELD_NUMBERr'  ÚMULTI_FIELD_NUMBERrÃ   Ú%OPTIONAL_INT32_EXTENSION_FIELD_NUMBERÚoptionalgroup_extensionÚ$OPTIONALGROUP_EXTENSION_FIELD_NUMBERÚ!optional_nested_message_extensionÚ.OPTIONAL_NESTED_MESSAGE_EXTENSION_FIELD_NUMBERÚoptional_nested_enum_extensionÚ+OPTIONAL_NESTED_ENUM_EXTENSION_FIELD_NUMBERrÇ   Ú%REPEATED_INT32_EXTENSION_FIELD_NUMBERrÆ  Ú$REPEATEDGROUP_EXTENSION_FIELD_NUMBERrø  Ú.REPEATED_NESTED_MESSAGE_EXTENSION_FIELD_NUMBERÚrepeated_nested_enum_extensionÚ+REPEATED_NESTED_ENUM_EXTENSION_FIELD_NUMBERr"   r   r   r   ÚtestExtensionFieldNumbers  s8   ÿÿÿÿz+SerializationTest.testExtensionFieldNumbersc                 C   sŽ   t j}|  |jj|jjd ¡ |  |j|jjj¡ |  |j	j|jjd ¡ |  |j
|j	jj¡ |  |jj|jjd ¡ |  |j|jjj¡ d S )NrF   rm   rU   )r   rI   rÐ  rF   r®   r¯   r=   r  rv  rm   r  rU   r  )r   Úclsr   r   r   ÚtestFieldProperties3  s&   

ÿÿ

ÿÿ

ÿÿz%SerializationTest.testFieldPropertiesc                 C   sž   t  ¡ }d|_|  t jj |¡d¡ t jj |d¡ |  |jd¡ |  t¡�
 |`W d   ƒ n1 s3w   Y  z	t jj	 |¡ W n
 t
yK   Y d S w 	 d S )NrÖ   rW  )r   rI   rF   r=   Ú__get__Ú__set__ru   r  rj   r`   rv   )r   ra  r   r   r   ÚtestFieldDataDescriptorB  s   ÿÿz)SerializationTest.testFieldDataDescriptorc                 C   sV  t jddddt jjdd�t jdd�t jjt jg d¢d�	}|  | ¡ ¡ |  | d	¡¡ |  | d
¡¡ |  | d¡¡ |  | d¡¡ |  | d¡¡ |  | d¡¡ |  | d¡¡ |  | d¡¡ |  	d|j
¡ |  	d|j¡ |  	d|j¡ |  	d|j¡ |  	d|jj¡ |  	d|jj¡ |  	t jj|j¡ |  	t j|j¡ |  	g d¢|j¡ d S )NrP   ro   Ts   barr\   r_   ©rP   rQ   rR   )	rF   rE   ræ   rç   rm   rˆ   r8  Úoptional_foreign_enumrU   rF   rE   ræ   rç   rm   rˆ   r8  r)  )r   rI   rg   rj   rh   rE  rz   r  rK   r=   rF   rE   ræ   rç   rm   r]   rˆ   r`   r8  r)  rU   rL   r   r   r   ÚtestInitKwargsS  s>   
÷

ÿz SerializationTest.testInitKwargsc                 C   s   dd„ }|   t|d¡ d S )Nc                  S   s   t jdd�} d S )NÚunknown)r+  )r   rÆ  )Úunused_protor   r   r   Ú(InitalizeEmptyMessageWithExtraKeywordArgs  r2   z`SerializationTest.testInitArgsUnknownFieldName.<locals>.InitalizeEmptyMessageWithExtraKeywordArgz9Protocol message TestEmptyMessage has no "unknown" field.)rì  r  )r   r-  r   r   r   ÚtestInitArgsUnknownFieldNamer  s   ýz.SerializationTest.testInitArgsUnknownFieldNamec                 C   sŽ   t jdddd�}|  | ¡ ¡ |  | d¡¡ |  | d¡¡ |  | d¡¡ |  | d¡ ¡ |  d|j¡ |  d|j¡ |  d|j¡ d S )NrP   r$  rc   r%  r`   Údummy2)	r   rÊ  rz   r  rK   r=   rc   r%  r`   rL   r   r   r   ÚtestInitRequiredKwargsz  s   z(SerializationTest.testInitRequiredKwargsc                 C   sÞ   t jt jdddd�d�}|  | ¡ ¡ |  | d¡¡ |  |j ¡ ¡ |  |j d¡¡ |  |j d¡¡ |  |j d¡¡ |  |j d¡ ¡ |  t jdddd�|j¡ |  d|jj¡ |  d|jj	¡ |  d|jj
¡ d S )	NrP   r$  )r&  r&  rc   r%  r`   r/  )r   r
  rÊ  rz   r  rK   r&  r=   rc   r%  r`   rL   r   r   r   ÚtestInitRequiredForeignKwargs…  s    ÿÿz/SerializationTest.testInitRequiredForeignKwargsc                 C   sX   t jg d¢d�}|  | ¡ ¡ |  d|jd ¡ |  d|jd ¡ |  d|jd ¡ d S )Nr(  rs   rP   r   rQ   rR   )r   rI   rz   r  r=   rU   rL   r   r   r   ÚtestInitRepeatedKwargs•  s
   z(SerializationTest.testInitRepeatedKwargsN)!r3   r4   r5   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  r1  r2  r   r   r   r   r¼  L	  s>    


6)3!
	r¼  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚOptionsTestc                 C   s<   t  ¡ }|  d|j ¡ j¡ t ¡ }|  d|j ¡ j¡ d S )NTF)r   rC  r=   r®   rÜ  rÝ  r   rI   rL   r   r   r   ÚtestMessageOptionsŸ  s   
ÿ
ÿzOptionsTest.testMessageOptionsc                 C   s’   t  ¡ }d|_d|_| ¡ D ]\}}|  d| ¡ j¡ qt  ¡ }|j	 
d¡ |j 
d¡ | ¡ D ]\}}|  d| ¡ j¡ |  tjj|j¡ q0d S )NrP   rõ  FT)r   rI   rF   rG   r°   r=   rÜ  r  r‰  rµ  r¥   r¶  r   rŽ  r±  ry  )r   rM   Úfield_descriptorÚ_r   r   r   ÚtestPackedOptions§  s   
ÿþzOptionsTest.testPackedOptionsN)r3   r4   r5   r4  r7  r   r   r   r   r3  �  s    r3  c                   @   s|   e Zd Ze e ¡ dkoe ¡ dkd¡e 	d¡dd„ ƒƒZ
dd„ Ze 	d	¡d
d„ ƒZe 	d	¡dd„ ƒZe 	d	¡dd„ ƒZdS )ÚClassAPITestr)  rQ   z6C++ implementation requires a call to MakeDescriptor()zMakeClass is not repeatablec              
   C   s|   t jdddd g g g g d�}t jdddd g |gg g d�}t jdddd g g g g d�}t jd	d
dd g ||gg g d�}t |¡ d S )NÚleafzpackage.parent.child.leafrÓ   )r{  r†  r„  r…  r‡  r¯  zpackage.parent.childÚsiblingzpackage.parent.siblingÚparentzpackage.parent)r   r“  r   Ú	MakeClass)r   Ú	leaf_descÚ
child_descÚsibling_descÚparent_descr   r   r   Ú!testMakeClassWithNestedDescriptorº  s*   
ý
ýý
ýz.ClassAPITest.testMakeClassWithNestedDescriptorc                 C   s(   d| d }t  ¡ }t ||¡ | ¡ S )a   Get a serialized representation of a test FileDescriptorProto.

    Args:
      name: All calls to this must use a unique message name, to avoid
          collisions in the cpp descriptor pool.
    Returns:
      A string containing the serialized form of a test FileDescriptorProto.
    zmessage_type {  name: "ai  "  field {    name: "flat"    number: 1    label: LABEL_REPEATED    type: TYPE_UINT32  }  field {    name: "bar"    number: 2    label: LABEL_OPTIONAL    type: TYPE_MESSAGE    type_name: "Bar"  }  nested_type {    name: "Bar"    field {      name: "baz"      number: 3      label: LABEL_OPTIONAL      type: TYPE_MESSAGE      type_name: "Baz"    }    nested_type {      name: "Baz"      enum_type {        name: "deep_enum"        value {          name: "VALUE_A"          number: 0        }      }      field {        name: "deep"        number: 4        label: LABEL_OPTIONAL        type: TYPE_UINT32      }    }  }})r   r/  r	   ÚMerger  )r   rt  Úfile_descriptor_strÚfile_descriptorr   r   r   Ú_GetSerializedFileDescriptorÑ  s   
ÿÿÿ+z)ClassAPITest._GetSerializedFileDescriptorrœ  c                    s„   t  ¡ dkrdS t ¡ }| |  d¡¡ t |jd ¡‰ G ‡ fdd„dt	 
tjtj¡ƒ}|ƒ }d}t ||¡ |  |jg d¢¡ dS )	ú7Test that the generated class can parse a flat message.rŸ   NÚAr   c                       rˆ  )zSClassAPITest.testParsingFlatClassWithExplicitClassDeclaration.<locals>.MessageClassNr‰  r   ©Úmsg_descriptorr   r   ÚMessageClass  r�  rJ  úflat: 0 flat: 1 flat: 2 r]  )r
   r¡   r   r/  r  rE  r   r²  r|  r•  r–  r   r—  r   r˜  r	   rB  r=   Úflat)r   rD  rJ  ra  Úmsg_strr   rH  r   Ú0testParsingFlatClassWithExplicitClassDeclaration	  s   
ÿ ÿz=ClassAPITest.testParsingFlatClassWithExplicitClassDeclarationc                 C   s^   t  ¡ }| |  d¡¡ t |jd ¡}t |¡}|ƒ }d}t	 
||¡ |  |jg d¢¡ dS )rF  ÚBr   rK  r]  N)r   r/  r  rE  r   r²  r|  r   r<  r	   rB  r=   rL  ©r   rD  rI  Ú	msg_classra  rM  r   r   r   ÚtestParsingFlatClass$  s   ÿ
ÿz!ClassAPITest.testParsingFlatClassc                 C   s^   t  ¡ }| |  d¡¡ t |jd ¡}t |¡}|ƒ }d}t	 
||¡ |  |jjjd¡ dS )z9Test that the generated class can parse a nested message.ÚCr   zbar {  baz {    deep: 4  }}r(   N)r   r/  r  rE  r   r²  r|  r   r<  r	   rB  r=   r´   rµ   ÚdeeprP  r   r   r   ÚtestParsingNestedClass4  s   ÿ
ÿz#ClassAPITest.testParsingNestedClassN)r3   r4   r5   rd  re  r
   r¡   rf  r   rc  rA  rE  rN  rR  rU  r   r   r   r   r8  ¸  s    þ8

r8  Ú__main__),r6   r  r“   r¿  r•  r*   Ú	unittest2rd  ÚImportErrorÚgoogle.protobufr   r   r   r   r   r   r   r	   r]  r
   r   r   r   r   r   r   r   ÚPY3r  r  ÚBaseTestCaseÚobjectr   r<   rg  rt  r€  r„  r†  r¼  r3  r8  r3   Úmainr   r   r   r   Ú<module>   s€   !ÿ-              V!  :    U ÿ