U
    4Je×  ã                   @   sJ  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m	Z	 ddlm
Z
 ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ e de¡ G dd„ deƒZ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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,d.krFe -¡  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)Úunittest_proto3_arena_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)Údecoder)Ú_parameterizedÚerrorc                   @   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   úL/tmp/pip-unpacked-wheel-0oacnh65/google/protobuf/internal/reflection_test.pyÚ__init__M   s    z_MiniDecoder.__init__c                 C   s   t  | j| j¡\}| _|S ©N)r   Z_DecodeVarintr   r   ©r   Úresultr   r   r   Ú
ReadVarintQ   s    z_MiniDecoder.ReadVarintc                 C   s   t  |  ¡ ¡S r   )r   ZZigZagDecoder!   ©r   r   r   r   Ú
ReadSInt64Z   s    z_MiniDecoder.ReadSInt64c                 C   s   t  |  ¡ ¡S r   )r   Z	UnpackTagr!   r"   r   r   r   ÚReadFieldNumberAndWireType_   s    z'_MiniDecoder.ReadFieldNumberAndWireTypec                 C   s4   t  d| j| j| jd … ¡d }|  jd7  _|S )Nz<fé   r   ©ÚstructÚunpackr   r   r   r   r   r   Ú	ReadFloatb   s    "z_MiniDecoder.ReadFloatc                 C   s4   t  d| j| j| jd … ¡d }|  jd7  _|S )Nz<dé   r   r&   r   r   r   r   Ú
ReadDoubleg   s    "z_MiniDecoder.ReadDoublec                 C   s   | j t| jƒkS r   )r   Úlenr   r"   r   r   r   ÚEndOfStreaml   s    z_MiniDecoder.EndOfStreamN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r!   Ú	ReadInt32Ú	ReadInt64Ú
ReadUInt32Ú
ReadUInt64r#   Ú
ReadSInt32r$   r)   r+   r-   r   r   r   r   r   C   s   	r   Z_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]S )^ÚReflectionTestc                 C   s>   |   t|ƒt|ƒ¡ tt|ƒƒD ]}|   || || ¡ q d S r   ©ÚassertEqualr,   Úrange©r   ÚvaluesZothersÚir   r   r   ÚassertListsEqualv   s    zReflectionTest.assertListsEqualc                 C   sX   |j dddd d}|  d|j¡ |  d|j¡ |  d|j¡ |tkrT|  | d¡¡ d S )Né   ç+‡)K@Úoptional_string)Úoptional_int32Úoptional_doublerA   Úoptional_floatrD   )ÚTestAllTypesr9   rB   rC   rA   r   ÚassertFalseÚHasField©r   Úmessage_moduleÚprotor   r   r   ÚtestScalarConstructor{   s    üz$ReflectionTest.testScalarConstructorc                 C   sš   |j ddddgddgdddgd	gd d
}|  ddddgt|jƒ¡ |  ddgt|jƒ¡ |  dddgt|jƒ¡ |  d	gt|jƒ¡ |  g t|jƒ¡ d S )Né   é   é   r%   ç®Gáz®ó?r@   TFrA   )Úrepeated_int32Úrepeated_doubleÚrepeated_boolÚrepeated_stringÚrepeated_float)rE   r9   ÚlistrP   rQ   rR   rS   rT   rH   r   r   r   ÚtestRepeatedScalarConstructor‰   s    
ûz,ReflectionTest.testRepeatedScalarConstructorc                 C   s   |j ddddgdddg|j j|j jd|j j|j jdg|jdd	|jd
d	|jdd	gd d}|  d|j¡ |  d|j¡ |  ddgt|j	ƒ¡ |  dddgt|j
ƒ¡ |  |j j|j jd|j j|j jdgt|jƒ¡ |  |jdd	|jd
d	|jdd	gt|jƒ¡ |  | d¡¡ d S )Nr?   rA   rO   r@   TF©ÚbbéÕÿÿÿ©Úcé±  é   )rB   rA   rQ   rR   Úrepeated_nested_messageÚrepeated_foreign_messageÚoptional_nested_messager`   )rE   ÚNestedMessageÚFOOÚBARÚForeignMessager9   rB   rA   rU   rQ   rR   r^   r_   rF   rG   rH   r   r   r   ÚtestMixedConstructor˜   sP    ÿÿý


ýòÿÿþû


þüz#ReflectionTest.testMixedConstructorc                 C   s¬   | j t|jdd | j t|jdd | j t|jdd | j t|jdd | j t|jdgd | j t|jdd | j t|jdgd | j t|jdd | j t|jdgd d S )	NÚfoo©rB   éÒ  )rA   ©r`   ©rP   )rS   ©r^   )ÚassertRaisesÚ	TypeErrorrE   ©r   rI   r   r   r   ÚtestConstructorTypeError»   sZ      ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿz'ReflectionTest.testConstructorTypeErrorc                 C   sŒ   |j dd}|  d| ¡ ¡ |j |j  ¡ d}|  d| ¡ ¡ |j dgd}|tkrd|  d| ¡ ¡ |j |j  ¡ gd}|  d| ¡ ¡ d S )Nr]   rg   rM   ri   rN   rj   rk   )rE   r9   ÚByteSizera   r   )r   rI   r   r   r   r   Ú(testConstructorInvalidatesCachedByteSizeÏ   s    ÿ
ÿz7ReflectionTest.testConstructorInvalidatesCachedByteSizec                 C   s   |  ¡ }|j}~d|_d S ©Né   )rE   r`   rX   ©r   rI   rJ   Únestedr   r   r   ÚtestReferencesToNestedMessageà   s    z,ReflectionTest.testReferencesToNestedMessagec                 C   sr   |  ¡ }d|_d|j_|  d|jj¡ |  | d¡¡ |j}d|_|  d|j¡ |  d|j¡ |  | d¡¡ d S )Né
   é   Úoneof_uint32ÚabcÚoneof_nested_message)rE   ry   r{   rX   r9   rF   rG   Zoneof_stringrt   r   r   r   Ú	testOneOfè   s    zReflectionTest.testOneOfc                 C   s6   |  ¡ }|j}| d¡ ~~t ¡  |  ¡ }|j}d S ©Nr`   )rE   r`   Ú
ClearFieldÚgcÚcollectrt   r   r   r   Ú5testGetDefaultMessageAfterDisconnectingDefaultMessageô   s    
zDReflectionTest.testGetDefaultMessageAfterDisconnectingDefaultMessagec                 C   s„   |  ¡ }|j}d|_|  | d¡¡ | d¡ |  d|j¡ |  d|jj¡ |  ||j¡ d|_|  | d¡¡ |  d|jj¡ d S )Né   r`   r   rs   )	rE   r`   rX   Ú
assertTruerG   r~   r9   ÚassertIsNotrF   rt   r   r   r   Ú/testDisconnectingNestedMessageAfterSettingField  s    
z>ReflectionTest.testDisconnectingNestedMessageAfterSettingFieldc                 C   s6   |  ¡ }|  | d¡¡ | d¡ |  | d¡¡ d S r}   )rE   rF   rG   r~   rH   r   r   r   Ú0testDisconnectingNestedMessageBeforeGettingField  s    
z?ReflectionTest.testDisconnectingNestedMessageBeforeGettingFieldc                 C   sP   |  ¡ }|  ¡ }d|j_| |¡ |  | d¡¡ | d¡ |  | d¡¡ d S ©Nr‚   r`   )rE   r`   rX   Ú	MergeFromrƒ   rG   r~   rF   ©r   rI   Úproto1Úproto2r   r   r   Ú(testDisconnectingNestedMessageAfterMerge  s    

z7ReflectionTest.testDisconnectingNestedMessageAfterMergec                 C   s8   t  ¡ dkrd S | ¡ }d|j_| d¡ ~t ¡  d S )NÚpythonr‚   Úoptional_lazy_message)r   ÚTyperE   rŽ   rX   r~   r   r€   rH   r   r   r   Ú"testDisconnectingLazyNestedMessage"  s    
z1ReflectionTest.testDisconnectingLazyNestedMessagec                 C   s®   |  ¡ }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 )	NrL   r‚   rf   rB   Úoptional_fixed32rA   é{   r`   )
rE   r‘   rB   rA   r`   r9   Ú
DESCRIPTORÚfields_by_nameÚ
ListFieldsrX   )r   rI   rJ   Znested_messager   r   r   ÚtestSingularListFields/  s.    þü
ÿýúz%ReflectionTest.testSingularListFieldsc                 C   sÖ   |  ¡ }|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 dddddgfg| ¡ ¡ d S )NrL   r‚   rx   rf   ÚbarÚbazc                 s   s   | ]}t |ƒV  qd S r   )Ústr)Ú.0Úxr   r   r   Ú	<genexpr>M  s     z8ReflectionTest.testRepeatedListFields.<locals>.<genexpr>rM   é   rB   rP   Úrepeated_fixed32rS   Ú0Ú1)rE   rž   ÚappendrP   rS   Úextendr:   rB   rR   r9   r“   r”   r•   rH   r   r   r   ÚtestRepeatedListFieldsE  s(    
ÿýúz%ReflectionTest.testRepeatedListFieldsc                 C   s,   |  ¡ }|  t|jd¡ |  t|jd¡ d S )NÚnonexistent_fields   nonexistent_field)rE   rl   Ú
ValueErrorr~   rH   r   r   r   Ú"testClearFieldWithUnknownFieldNameX  s    z1ReflectionTest.testClearFieldWithUnknownFieldNamec                 C   s~   |  ¡ }|  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 )	NrP   rw   r`   rs   rX   é"   Zsome_attributer¤   )rE   rl   ÚAttributeErrorÚsetattrr^   rT   rH   r   r   r   ÚtestDisallowedAssignments]  s     
 ÿ ÿ ÿz(ReflectionTest.testDisallowedAssignmentsc                 C   sÄ   |  ¡ }|  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s¦tjjtjj	fdkrº|  tt|dd¡ nd|_
d S )NrB   çš™™™™™ñ?rf   rA   rw   Úoptional_bytesÚoptional_boolrD   rC   r   )rN   rw   )rE   rl   rm   r©   r   r   ÚsysÚversion_infoÚmajorÚminorr­   rH   r   r   r   ÚtestSingleScalarTypeSafetyr  s    ÿz)ReflectionTest.testSingleScalarTypeSafetyc                    s”   ‡ ‡‡fdd„}|ddt ƒ |ddt ƒ |ddt ƒ t }t d¡dkrT|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.
      message_module: unittest_pb2 or unittest_proto3_arena_pb2
    c                    sZ   ˆ  ¡ }ˆ |ƒ}t|| |ƒ ˆ t|| ƒ|¡ ˆ  ¡ }| | ¡ ¡ ˆ t|| ƒ|¡ d S r   )rE   r©   ÚassertIsInstanceÚgetattrÚParseFromStringÚSerializeToString)Ú
field_nameÚvalueZexpected_typerJ   r‹   ©Ú
integer_fnrI   r   r   r   ÚTestGetAndDeserialize‰  s    z@ReflectionTest.assertIntegerTypes.<locals>.TestGetAndDeserializerB   rL   i   @Úoptional_uint32ÚLr%   l        Úoptional_int64l            Úoptional_uint64N)Úintr'   Úcalcsize)r   rº   rI   r»   Z
integer_64r   r¹   r   ÚassertIntegerTypes‚  s    	z!ReflectionTest.assertIntegerTypesc                 C   s   |   dd„ |¡ d S )Nc                 S   s   | S r   r   ©r›   r   r   r   Ú<lambda>£  ó    z1ReflectionTest.testIntegerTypes.<locals>.<lambda>)rÂ   rn   r   r   r   ÚtestIntegerTypes¢  s    zReflectionTest.testIntegerTypesc                 C   s   |   tj|¡ d S r   )rÂ   r   ÚNonStandardIntegerrn   r   r   r   ÚtestNonStandardIntegerTypes¥  s    z*ReflectionTest.testNonStandardIntegerTypesc              	   C   sN   |  ¡ }|  t¡ d|_W 5 Q R X |  td¡ t dd¡|_W 5 Q R X d S )NÚ2Zmy_errorr‚   )rE   rl   rm   r¿   ÚassertRaisesRegexÚRuntimeErrorr   rÇ   )r   rI   Ú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f¡ ˆ d
ƒ|_W 5 Q R X ˆ  ¡ }ˆ 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.
      message_module: unittest_pb2 or unittest_proto3_arena_pb2
    c                    sŒ   ˆ  ¡ }ˆ |ƒ}ˆ |ƒ}t|| |ƒ ˆ |t|| ƒ¡ t|| |ƒ ˆ |t|| ƒ¡ ˆ ttft|| |d ¡ ˆ ttft|| |d ¡ d S ©NrL   )rE   r©   r9   r´   rl   r¥   rm   )r·   Zexpected_minZexpected_maxrÌ   r¹   r   r   ÚTestMinAndMaxIntegersº  s    ÿÿzHReflectionTest.assetIntegerBoundsChecking.<locals>.TestMinAndMaxIntegersrB   i   €iÿÿÿr¼   r   l   ÿÿ r¾   ìûÿÿÿ         l   ÿÿÿÿ r¿   ì   ÿÿÿÿ rL   N)rE   rl   r¥   rm   r¿   Úoptional_nested_enumr9   )r   rº   rI   rÏ   rÌ   r   r¹   r   ÚassetIntegerBoundsChecking³  s    
z)ReflectionTest.assetIntegerBoundsCheckingc                 C   s   |   dd„ |¡ d S )Nc                 S   s   | S r   r   rÃ   r   r   r   rÄ   Ö  rÅ   z?ReflectionTest.testSingleScalarBoundsChecking.<locals>.<lambda>)rÓ   rn   r   r   r   ÚtestSingleScalarBoundsCheckingÕ  s    z-ReflectionTest.testSingleScalarBoundsCheckingc                 C   s   |   tj|¡ d S r   )rÓ   r   rÇ   rn   r   r   r   Ú)testNonStandardSingleScalarBoundsCheckingØ  s     ÿz8ReflectionTest.testNonStandardSingleScalarBoundsCheckingc                 C   sÖ   |  ¡ }|  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«   rf   rw   rs   r   iô  rz   ÚindexrÉ   )	rE   rl   rm   rP   r¡   rS   Zrepeated_bytesÚ
IndexErrorÚ__setitem__rH   r   r   r   ÚtestRepeatedScalarTypeSafetyÜ  s     
 ÿz+ReflectionTest.testRepeatedScalarTypeSafetyc                 C   sV   |  ¡ }|  d|j¡ d|_|  d|j¡ d|_|  d|j¡ d|_|  d|j¡ d S )Nr   rL   l   ÿÿÿ rÑ   )rE   r9   rB   r¿   rH   r   r   r   Ú!testSingleScalarGettersAndSettersñ  s    z0ReflectionTest.testSingleScalarGettersAndSettersc                 C   sf   |  ¡ }|  d|j¡ |  d|j j¡ |  d|j¡ |  d|j j¡ |  d|j¡ |  d|j j¡ d S )NrL   rM   rN   )rE   r9   rb   rc   ÚBAZrH   r   r   r   Ú	testEnumsý  s    zReflectionTest.testEnumsc                 C   sN  |   d|j |j¡¡ |   d|j |j¡¡ |   d|j |j¡¡ |  t|jjd¡ | ¡ }|   d|j	 |j
¡¡ |   d|jj	 |j
¡¡ |   d|j	 |j¡¡ |   d|jj	 |j¡¡ |   d|j	 |j¡¡ |   d|jj	 |j¡¡ |  t|j	jd¡ |  t|jj	jd¡ |  t|jj	jd¡ |  t|jj	jd ¡ |   d|jj	 d	¡¡ d S )
NÚFOREIGN_FOOÚFOREIGN_BARÚFOREIGN_BAZi0,  rb   rc   rÛ   g     Æ@T)r9   ÚForeignEnumÚNamerÝ   rÞ   rß   rl   r¥   rE   Ú
NestedEnumrb   rc   rÛ   rm   rH   r   r   r   ÚtestEnum_Name  sd    þþþ ÿÿÿÿÿÿÿ ÿ ÿÿÿzReflectionTest.testEnum_Namec              	   C   s  |   |j|j d¡¡ |   |j|jj¡ |   |j|j d¡¡ |   |j|jj¡ |   |j|j d¡¡ |   |j|jj¡ |  t|jjd¡ |  t¡ |jj	 W 5 Q R X | 
¡ }|   |j|j d¡¡ |   |j|jj¡ |   |j|j
j d¡¡ |   |j|j
jj¡ |   |j|j d¡¡ |   |j|jj¡ |   |j|j
j d¡¡ |   |j|j
jj¡ |   |j|j d¡¡ |   |j|jj¡ |   |j|j
j d¡¡ |   |j|j
jj¡ |  t|jjd¡ |  t¡ |jjj W 5 Q R X |  t|j
jjd¡ |  t¡ |j
jjj W 5 Q R X d S )	NrÝ   rÞ   rß   ÚFOrb   rc   rÛ   ÚFoo)r9   rÝ   rà   ÚValuerÞ   rß   rl   r¥   r¨   rä   rE   rb   râ   rc   rÛ   rå   rH   r   r   r   ÚtestEnum_Value,  s’    
ÿÿ
ÿÿ
ÿÿ ÿ
ÿÿÿÿ
ÿÿÿÿ
ÿÿÿÿ ÿ ÿzReflectionTest.testEnum_Valuec                 C   s4  |t kr(dddg}dddg}ddd	g}n$d
dddg}ddddg}dddd	g}|  |t|j ¡ ƒ¡ |  |t|j ¡ ƒ¡ |  |t|j ¡ ƒ¡ | ¡ }|t krÄddddg}ddddg}ddddg}n*dddddg}dddddg}dddddg}|  |t|j ¡ ƒ¡ |  |t|j ¡ ƒ¡ |  |t|j ¡ ƒ¡ d S )NrÝ   rÞ   rß   r%   r‚   é   )rÝ   r%   )rÞ   r‚   )rß   rè   ÚFOREIGN_ZEROr   )ré   r   rb   rc   rÛ   ÚNEGrL   rM   rN   éÿÿÿÿ)rb   rL   )rc   rM   )rÛ   rN   )rê   rë   ÚZERO)rì   r   )	r   r9   rU   rà   Úkeysr<   ÚitemsrE   râ   )r   rI   rí   r<   rî   rJ   r   r   r   ÚtestEnum_KeysAndValuesj  s@    

 ÿÿÿÿÿz%ReflectionTest.testEnum_KeysAndValuesc                 C   s6   |  ¡ }t |¡ | ¡ }|j  |¡}|  ||¡ d S r   )rE   r   ÚSetAllFieldsr¶   Ú
FromStringr9   )r   rI   rŠ   Ústring1r‹   r   r   r   ÚtestStaticParseFrom‰  s
    
z"ReflectionTest.testStaticParseFromc                 C   sF   |  ¡ }d|_|  ¡ }d|_| |¡ |  d|j¡ |  d|j¡ d S )NrL   r¸   )rE   rB   rA   rˆ   r9   r‰   r   r   r   ÚtestMergeFromSingularField“  s    
z)ReflectionTest.testMergeFromSingularFieldc                 C   sx   |  ¡ }|j d¡ |j d¡ |  ¡ }|j d¡ | |¡ |  d|jd ¡ |  d|jd ¡ |  d|jd ¡ d S ©NrL   rM   r   )rE   rP   r¡   rˆ   r9   r‰   r   r   r   ÚtestMergeFromRepeatedField   s    
z)ReflectionTest.testMergeFromRepeatedFieldc                 C   sÜ   |  ¡ }|j ¡ }d|_|j ¡ }d|_|  ¡ }|j ¡ }d|_| |¡ |  d|jd j¡ |  d|jd j¡ |  d|jd j¡ |  ¡ }|j |j¡ |  d|jd j¡ |  d|jd j¡ |  d|jd j¡ d S )Nr’   iA  éç  r   rL   rM   )rE   r^   ÚaddrX   rˆ   r9   )r   rI   rŠ   Úmr‹   Zproto3r   r   r   Ú"testMergeFromRepeatedNestedMessage®  s"    



z1ReflectionTest.testMergeFromRepeatedNestedMessagec                 C   sP   |  ¡ }t |¡ |  ¡ }| |¡ |  ||¡ | ¡ }| ¡ }|  ||¡ d S r   )rE   r   rð   rˆ   r9   r¶   ©r   rI   rŠ   r‹   rò   Zstring2r   r   r   ÚtestMergeFromAllFieldsÄ  s    

z%ReflectionTest.testMergeFromAllFieldsc                 C   sD   |  ¡ }|  ¡ }|j |  | d¡¡ | |¡ |  | d¡¡ d S r}   )rE   r`   rF   rG   rˆ   )r   rI   Úmessage1Úmessage2r   r   r   ÚtestMergeFromBugÓ  s    
zReflectionTest.testMergeFromBugc                 C   sL   |  ¡ }d|_d|_|  ¡ }d|_| |¡ |  d|j¡ |  d|j¡ d S )NrL   úimportant-textr¸   )rE   rB   rA   ÚCopyFromr9   r‰   r   r   r   ÚtestCopyFromSingularFieldà  s    
z(ReflectionTest.testCopyFromSingularFieldc                 C   sf   |  ¡ }|j d¡ |j d¡ |  ¡ }|j d¡ | |¡ |  d|jd ¡ |  d|jd ¡ d S rõ   )rE   rP   r¡   r  r9   r‰   r   r   r   ÚtestCopyFromRepeatedFieldí  s    
z(ReflectionTest.testCopyFromRepeatedFieldc                 C   sP   |  ¡ }t |¡ |  ¡ }| |¡ |  ||¡ | ¡ }| ¡ }|  ||¡ d S r   )rE   r   rð   r  r9   r¶   rû   r   r   r   ÚtestCopyFromAllFieldsú  s    

z$ReflectionTest.testCopyFromAllFieldsc                 C   s\   |  ¡ }|j d¡ d|_d|_| |¡ |  d|jd ¡ |  d|j¡ |  d|j¡ d S )NrL   rM   r   r   )rE   rP   r¡   rB   rA   r  r9   )r   rI   rŠ   r   r   r   ÚtestCopyFromSelf	  s    
zReflectionTest.testCopyFromSelfc                 C   sÖ   |  ¡ }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 )NrL   rM   rN   r   )rE   rB   ÚcopyÚdeepcopyr9   rP   r¡   Úremover^   rø   rX   ÚassertNotEqualr,   )r   rI   rŠ   r‹   Ú	containerrý   Úmessagesr   r   r   ÚtestDeepCopy  s$    

zReflectionTest.testDeepCopyc                 C   sú   |  ¡ }|j}| ¡  |  ||j¡ d|_|  | d¡¡ |  d|jj¡ |  ¡ }|j}d|_|j}d|_	| ¡  |  ||j¡ |  ||j¡ |  d|j¡ |  d|j	¡ d|_d|_	|  | d¡¡ |  d|jj¡ |  | d¡¡ |  d|jj	¡ d S )	Nrs   r`   r   r‚   rè   é   é   Úoptional_foreign_message)
rE   r`   ÚClearr„   rX   rF   rG   r9   r  r[   )r   rI   rJ   ru   Úforeignr   r   r   ÚtestDisconnectingBeforeClear,  s.    z+ReflectionTest.testDisconnectingBeforeClearc                 C   s–   |  ¡ }|  tt|dd¡ |  t|jƒt¡ tdƒ|_|  |jtdƒ¡ tdƒ|_|  |jtdƒ¡ |  tt|dd¡ d 	d¡}||_d|_d|_d S )	Nr¬   zunicode objectZTestingrA   s   a€aõ   Ð¢ÐµÑÑ‚úutf-8rz   )
rE   rl   rm   r©   r9   ÚtyperA   r™   r¥   Úencode)r   rI   rJ   Z
utf8_bytesr   r   r   ÚtestStringUTF8EncodingF  s,       ÿ

   ÿ
z%ReflectionTest.testStringUTF8Encodingc                 C   s    |j dd}|  dt|ƒ¡ d S )Ns    €ÿ)r¬   z#optional_bytes: "\000\177\200\377"
)rE   r9   r™   rH   r   r   r   ÚtestBytesInTextFormatb  s    z$ReflectionTest.testBytesInTextFormatc                 C   sâ   |  ¡ }|j |j  ¡ ¡ |  | d¡¡ |  ¡ }|j |j  ¡ ¡ |  | d¡¡ |  ¡ }|j d¡}|  d|¡ |  | d¡¡ |  ¡ }|j 	d¡ |  | d¡¡ | 
¡ }|  ¡ }|  t|ƒ| |¡¡ |  | d¡¡ d S )Nr`   rÅ   r   )rE   r`   rˆ   ra   rƒ   rG   r  ÚMergeFromStringr9   rµ   r¶   r,   )r   rI   rJ   Ú
bytes_readÚ
serializedr‹   r   r   r   ÚtestEmptyNestedMessagef  s0    ÿÿþz%ReflectionTest.testEmptyNestedMessageN)1r.   r/   r0   r>   rK   rV   re   ro   rq   rv   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   r7   p   s\   # "	&>
r7   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e d-¡d.d/„ ƒZd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Z d:d;„ Z!d<d=„ Z"d>d?„ Z#d@dA„ Z$dBdC„ Z%dDdE„ Z&dFdG„ Z'dHdI„ Z(dJdK„ Z)dLdM„ Z*dNdO„ Z+dPdQ„ Z,dRdS„ Z-dTdU„ Z.dVdW„ Z/dgdYdZ„Z0d[d\„ Z1e2 3e4 5¡ d]kd^¡d_d`„ ƒZ6dadb„ Z7dcdd„ Z8dedf„ Z9dXS )hÚProto2ReflectionTestc                 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 )
NrW   rY   rZ   r\   r]   rL   )ÚarM   )r^   r_   Úrepeatedgroup)r   rE   ra   rb   rc   rd   ZRepeatedGroupr9   rU   r^   r_   r  ©r   rJ   r   r   r   Ú testRepeatedCompositeConstructor†  sR    ÿÿý


ýýöÿÿþû


þüþüz5Proto2ReflectionTest.testRepeatedCompositeConstructorc                 C   s>   |   t|ƒt|ƒ¡ tt|ƒƒD ]}|   || || ¡ q d S r   r8   r;   r   r   r   r>   ¨  s    z%Proto2ReflectionTest.assertListsEqualc                 C   sj   t  ¡ }|  | d¡¡ |  d|j¡ |  | d¡¡ d|_|  | d¡¡ | d¡ |  | d¡¡ d S )NrB   r   rL   )r   rE   rF   rG   r9   rB   rƒ   r~   r   r   r   r   ÚtestSimpleHasBits­  s    
z&Proto2ReflectionTest.testSimpleHasBitsc                    s8   ‡ fdd„}|ddƒ |ddƒ |ddƒ |d	d
ƒ d S )Nc                    s"  t  ¡ }t|| ƒ}t||ƒ}ˆ  d|¡ ˆ  | |¡¡ ˆ  | | ¡¡ d}t|||ƒ ˆ  |t||ƒ¡ |}ˆ  | |¡¡ ˆ  | | ¡¡ | | ¡ t|| ƒ}ˆ  | |¡¡ ˆ  | | ¡¡ ˆ  dt||ƒ¡ ˆ  	||¡ t|||ƒ ˆ  | |¡¡ ˆ  | | ¡¡ ˆ  dt||ƒ¡ d S )Nr   é   )
r   rE   r´   r9   rF   rG   r©   rƒ   r~   r„   )Zcomposite_field_nameZscalar_field_namerJ   Zcomposite_fieldZoriginal_scalar_valueÚnew_valZold_composite_fieldr"   r   r   ÚTestCompositeHasBitsÞ  s,    



zTProto2ReflectionTest.testHasBitsWithSinglyNestedScalar.<locals>.TestCompositeHasBitsÚoptionalgroupr  r`   rX   r  r[   Zoptional_import_messageÚdr   )r   r%  r   r"   r   Ú!testHasBitsWithSinglyNestedScalar¼  s
    "*


z6Proto2ReflectionTest.testHasBitsWithSinglyNestedScalarc                 C   sr   t  ¡ }|jj d¡ |  dg|jj¡ |  | d¡¡ | d¡ |  	| d¡¡ |jj
 ¡  |  | d¡¡ d S r‡   )r   ZTestNestedMessageHasBitsr`   Znestedmessage_repeated_int32r¡   r9   rƒ   rG   r~   rF   Z%nestedmessage_repeated_foreignmessagerø   r   r   r   r   Ú&testHasBitsWhenModifyingRepeatedFields  s     ÿ
z;Proto2ReflectionTest.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 )NrX   r   r‚   r  rB   )	r   ÚTestMutualRecursionArF   rG   r9   rX   r  rB   rƒ   )r   Zrecursive_protor   r   r   Ú!testHasBitsForManyLevelsOfNesting  s    z6Proto2ReflectionTest.testHasBitsForManyLevelsOfNestingc                 C   s‚   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| ¡ ¡ |jt j= |  t jdft jdfg| ¡ ¡ d S )NrL   r‚   rf   )r   ÚTestAllExtensionsÚ
ExtensionsZoptional_fixed32_extensionÚoptional_int32_extensionZoptional_string_extensionr9   r•   r   r   r   r   ÚtestSingularListExtensions,  s$    þü
ÿýz/Proto2ReflectionTest.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dddgfg| 	¡ ¡ |jt j= |jt j= |  t jdft jdgfg| 	¡ ¡ d S )NrL   r‚   rx   rf   r—   r˜   r   )
r   r,  r-  Zrepeated_fixed32_extensionr¡   Úrepeated_int32_extensionÚrepeated_string_extensionr.  r9   r•   r   r   r   r   ÚtestRepeatedListExtensions<  s0    
ýû


ÿýz/Proto2ReflectionTest.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 )	NZmy_intrL   rs   Z	my_stringrf   r—   Zmy_floatç      ð?)
r   ÚTestFieldOrderingsr   ÚSetAllFieldsAndExtensionsZmy_extension_intr9   r“   r”   Zmy_extension_stringr•   r   r   r   r   ÚtestListFieldsAndExtensionsR  s    
üúz0Proto2ReflectionTest.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Ú rÅ   é)   é*   é+   é,   iÓÿÿÿé.   é/   é0   é1   iÎÿÿÿg     ÀI@g     dé@TZhellos   worldu   áˆ´)*r   rE   r9   rB   r¾   r¼   r¿   Úoptional_sint32Úoptional_sint64r‘   Úoptional_fixed64Úoptional_sfixed32Úoptional_sfixed64rD   rC   r­   rA   r¬   Zdefault_int32Zdefault_int64Zdefault_uint32Zdefault_uint64Zdefault_sint32Zdefault_sint64Zdefault_fixed32Zdefault_fixed64Zdefault_sfixed32Zdefault_sfixed64Zdefault_floatZdefault_doubleZdefault_boolZdefault_stringZdefault_bytesrc   Zdefault_nested_enumrÞ   Zdefault_foreign_enumr   Z
IMPORT_BARZdefault_import_enumZTestExtremeDefaultValuesZutf8_stringr   r   r   r   ÚtestDefaultValues^  sL    ÿz&Proto2ReflectionTest.testDefaultValuesc                 C   s   t  ¡ }|  t|jd¡ d S )Nr¤   )r   rE   rl   r¥   rG   r   r   r   r   Ú testHasFieldWithUnknownFieldName‡  s    z5Proto2ReflectionTest.testHasFieldWithUnknownFieldNamec                    sJ   t  ¡ ‰ tdƒD ]}ˆ j ¡  qt  ¡ }ˆ  |¡ |  t‡ fdd„¡ d S )Nrw   c                      s
   ˆ j d S )Nr‚   )Úrepeated_messager   ©rJ   r   r   rÄ   ”  rÅ   z?Proto2ReflectionTest.testClearRemovesChildren.<locals>.<lambda>)r   ÚTestRequiredForeignr:   rG  rø   r  rl   r×   )r   r=   r‹   r   rH  r   ÚtestClearRemovesChildren‹  s    
z-Proto2ReflectionTest.testClearRemovesChildrenc                 C   sT   t  ¡ }| d¡ d|_|  | d¡¡ | d¡ |  d|j¡ |  | d¡¡ d S )NrB   rL   r   )r   rE   r~   rB   rƒ   rG   r9   rF   r   r   r   r   ÚtestSingleScalarClearField–  s    

z/Proto2ReflectionTest.testSingleScalarClearFieldc                 C   st  t  ¡ }|  |j¡ |  dt|jƒ¡ |j d¡ |j d¡ |j d¡ |  |j¡ |  dt|jƒ¡ |  dddg|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< |  dd
dg|j¡ |j dd¡ |  ddd
dg|j¡ |j d¡ |  dd
dg|jdd… ¡ |  ddd
ddg|jd d … ¡ dd„ tdƒD ƒ|jdd…< |  dddddg|j¡ dddg|jdd…< |  dddddg|j¡ g }|jD ]}| |¡ qÜ|  dddddg|¡ |jd= |  ddddg|j¡ |jdd …= |  ddg|j¡ |j ddg¡ |  ddddg|j¡ | d¡ |  |j¡ |  dt|jƒ¡ |j d¡ |  d|jd ¡ d|jd< |  d|jd ¡ ddddg|jd d …< |jd= |  dddg|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‚   rw   r  rN   rë   rh   é.ûÿÿrf   r#  rL   é   é   r%   c                 s   s   | ]
}|V  qd S r   r   )rš   r=   r   r   r   rœ   Æ  s     z;Proto2ReflectionTest.testRepeatedScalars.<locals>.<genexpr>rM   é#   é(   é-   é   rP   éþÿÿÿéýÿÿÿi,  éd   é'  )r   rE   rF   rP   r9   r,   r¡   rƒ   rl   r×   Ú__getitem__rm   Úinsertr:   r¢   r~   Ú__delitem__)r   rJ   r    r=   r   r   r   ÚtestRepeatedScalars¡  sl    
 


z(Proto2ReflectionTest.testRepeatedScalarsc                 C   sD  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‚   rw   r%   rN   rL   rM   r’   )
r   rE   rF   rP   r9   r,   r¡   r  rl   r¥   r   r   r   r   ÚtestRepeatedScalarsRemoveû  s*    z.Proto2ReflectionTest.testRepeatedScalarsRemovec                 C   sX   t  ¡ }|  |j¡ |  dt|jƒ¡ |  |j ¡ ¡ |  |j¡ |  dt|jƒ¡ d S r   )r   rE   rF   rP   r9   r,   ÚassertIsNoneÚreverser   r   r   r   Ú testRepeatedScalarsReverse_Empty  s    z5Proto2ReflectionTest.testRepeatedScalarsReverse_Emptyc                 C   sÖ   t  ¡ }|  |j¡ |  dt|jƒ¡ |j d¡ |j d¡ |j d¡ |j d¡ |  dt|jƒ¡ |  |j ¡ ¡ |  dt|jƒ¡ |  d|jd ¡ |  d|jd ¡ |  d|jd ¡ |  d|jd ¡ d S )Nr   rL   rM   rN   r%   )	r   rE   rF   rP   r9   r,   r¡   r\  r]  r   r   r   r   Ú#testRepeatedScalarsReverse_NonEmpty#  s    z8Proto2ReflectionTest.testRepeatedScalarsReverse_NonEmptyc              	   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 5 Q R X d S )Nr   rM   rh   rL  rf   rL   r%   rW   rN   r^   rs   )r   rE   rF   r^   r9   r,   rø   rƒ   r>   r³   ra   rl   r×   rW  rm   r¡   r¢   r~   rX   Ú	Exception)r   rJ   Úm0Úm1Úm2Zm3Zm4r    r=   Zn1Zn2Zwrong_message_typer   r   r   ÚtestRepeatedComposites8  s¨    

ÿÿÿÿ


 ÿ ÿ ÿ ÿ ÿ ÿ
 ÿ ÿþ
z+Proto2ReflectionTest.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   rN   rM   rL   )r   rE   r9   r,   r^   rø   rX   rƒ   r>   r  rl   r¥   ©r   rJ   ra  rb  rc  r   r   r   ÚtestRepeatedCompositeRemove‹  s*    


z0Proto2ReflectionTest.testRepeatedCompositeRemovec                 C   sX   t  ¡ }|  |j¡ |  dt|jƒ¡ |  |j ¡ ¡ |  |j¡ |  dt|jƒ¡ d S r   )r   rE   rF   r^   r9   r,   r\  r]  r   r   r   r   Ú"testRepeatedCompositeReverse_Empty¨  s    z7Proto2ReflectionTest.testRepeatedCompositeReverse_Emptyc                 C   s¤   t  ¡ }|  |j¡ |  dt|jƒ¡ |j ¡ }t|jƒ|_|j ¡ }t|jƒ|_|j ¡ }t|jƒ|_|  |||g|j¡ |  	|j 
¡ ¡ |  |||g|j¡ d S r   )r   rE   rF   r^   r9   r,   rø   rX   r>   r\  r]  re  r   r   r   Ú%testRepeatedCompositeReverse_NonEmpty³  s    


z:Proto2ReflectionTest.testRepeatedCompositeReverse_NonEmptyc                    sÖ   t  ¡ dkrd S tj}|dddd|j|j|jdd d d dd t ¡ tj	d}tj
ddd	d g g |gg t ¡ tj	d

‰ G ‡ fdd„dtjtjd}|ƒ }|  d|j¡ |  | d¡¡ d|_|  d|j¡ |  | d¡¡ d S )Nr   Ú	foo_fieldzMyProto.foo_fieldr   rL   F)ÚnameÚ	full_namerÖ   Únumberr  Zcpp_typeÚlabelÚdefault_valueÚcontaining_typeÚmessage_typeZ	enum_typeZis_extensionZextension_scopeÚoptionsÚ
create_keyZMyProtoZignored)
rj  rk  Úfilenamero  Únested_typesÚ
enum_typesÚfieldsÚ
extensionsrq  rr  c                       s   e Zd Z” ZdS )zDProto2ReflectionTest.testHandWrittenReflection.<locals>.MyProtoClassN©r.   r/   r0   r“   r   ©Zmydescriptorr   r   ÚMyProtoClassÞ  s   rz  ©Ú	metaclassrs   )r   r   r   ÚFieldDescriptorÚ
TYPE_INT64ZCPPTYPE_INT64ÚLABEL_OPTIONALr   ZFieldOptionsÚ_internal_create_keyÚ
DescriptorZMessageOptionsr   ÚMessager	   ÚGeneratedProtocolMessageTyper9   ri  rF   rG   rƒ   )r   r}  Zfoo_field_descriptorrz  Zmyproto_instancer   ry  r   ÚtestHandWrittenReflectionÅ  sT           ÷
     ú ÿz.Proto2ReflectionTest.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k¡ |  dˆjk¡ |  dˆjk¡ |  d	ˆjk¡ |  dˆjk¡ G ‡fdd„dtjtjd}|ƒ }d|_d|_d|_d|_|j ddg¡ | ¡ }t ˆ|¡}|   ||¡ |  !||¡ |  !|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 rÎ   )
Úfield_indexÚfieldrø   rj  r  rl  r   ÚFieldDescriptorProtor  rm  )rJ   r·   Z
field_typeÚ	new_field)ÚAddDescriptorFieldr   r   rŠ  ï  s    
zKProto2ReflectionTest.testDescriptorProtoSupport.<locals>.AddDescriptorFieldr   ZCarrj  ÚyearÚ	automaticÚpricerL   Úownersc                       s   e Zd Z” ZdS )zCProto2ReflectionTest.testDescriptorProtoSupport.<locals>.CarMessageNrx  r   )Údescr   r   Ú
CarMessage  s   r  r{  ÚpriusiÚ  Tg    °‹Ø@ZbobZsusan)"r   r   r†  r   ZDescriptorProtorj  rˆ  ZTYPE_STRINGr~  Z	TYPE_BOOLZTYPE_DOUBLEr‡  rø   r  rl  ÚLABEL_REPEATEDrm  r   ÚMakeDescriptorrƒ   r”   r   r‚  r	   rƒ  r‹  rŒ  r  rŽ  r¢   r¶   ZParseMessager„   r9   )r   Z
desc_protoZfdpr‰  r  r‘  Zserialized_priusZ	new_priusr   )rŠ  r  r   ÚtestDescriptorProtoSupportè  sT    


 ÿz/Proto2ReflectionTest.testDescriptorProtoSupportc                 C   s¾   t  ¡ }t j}d|j|< t j}|j|  d¡ t j}d|j| _|  t	|jƒd¡ |j|= |  t	|jƒd¡ |j|= |  t	|jƒd¡ |j|= |  t	|jƒd¡ |j|= |  t	|jƒd¡ d S )Nrs   rx   é8   rN   rM   rL   r   )
r   ÚExtendedMessageÚoptional_int_extensionr-  Úrepeated_int_extensionr¡   Úoptional_message_extensionÚforeign_message_intr9   r,   )r   Úextendee_protoÚextension_int32Úextension_repeatedÚextension_msgr   r   r   ÚtestExtensionDelete'  s     
z(Proto2ReflectionTest.testExtensionDeletec                 C   s¦   t  ¡ }t j}d|j|< t j}|j|  d¡ t j}d|j| _d|_|j	 d¡ |||f}d}|jD ].}|  
|j|| j¡ |  ||j¡ |d7 }qf|  
|d¡ d S )Nrs   rx   r•  rL   Úhir   rN   )r   r–  r—  r-  r˜  r¡   r™  rš  rB   rS   r9   rj  ÚassertIn)r   r›  rœ  r  rž  ÚexpectedÚcountÚitemr   r   r   ÚtestExtensionIterA  s     



z&Proto2ReflectionTest.testExtensionIterc                 C   s>   t  ¡ }|  t|jjd¡ t jjjd }|  t|jj|¡ d S )Nr   rB   )r   r–  rl   ÚKeyErrorr-  Ú__contains__r“   r”   )r   r›  r‡  r   r   r   ÚtestExtensionContainsErrorY  s    ÿz/Proto2ReflectionTest.testExtensionContainsErrorc                 C   sÔ   t  ¡ }t j}|  | |¡¡ |  ||j¡ |  d|j| ¡ |  | |¡¡ |  ||j¡ d|j|< |  d|j| ¡ |  | |¡¡ |  	||j¡ | 
|¡ |  d|j| ¡ |  | |¡¡ |  ||j¡ d S ©Nr   rs   )r   r,  r.  rF   ÚHasExtensionÚassertNotInr-  r9   rƒ   r¡  ÚClearExtension)r   r›  Ú	extensionr   r   r   Ú'testTopLevelExtensionsForOptionalScalara  s    

z<Proto2ReflectionTest.testTopLevelExtensionsForOptionalScalarc                 C   sÈ   t  ¡ }t j}|  dt|j| ƒ¡ |  ||j¡ |j|  d¡ |  dg|j| ¡ |  ||j¡ |j| }| 	|¡ |  dt|j| ƒ¡ |  ||j¡ |  
||j| ¡ |  ttj|j|d¡ d S )Nr   rf   r  )r   r,  r1  r9   r,   r-  r«  r¡   r¡  r¬  r„   rl   rm   ÚoperatorÚsetitem)r   r›  r­  Zstring_listr   r   r   Ú'testTopLevelExtensionsForRepeatedScalarv  s     

 ÿz<Proto2ReflectionTest.testTopLevelExtensionsForRepeatedScalarc                 C   s  t  ¡ }t j}|  | |¡¡ |  ||j¡ |  d|j| j¡ |  | |¡¡ |  ||j¡ d|j| _|  d|j| j¡ |  	| |¡¡ |  
||j¡ |j| }| |¡ |  ||j| ¡ d|_|  d|j¡ |  	| d¡¡ |  | |¡¡ |  ||j¡ |  ttj|j|d¡ d S )Nr   rs   r9  r[   r  )r   r,  Z"optional_foreign_message_extensionrF   rª  r«  r-  r9   r[   rƒ   r¡  r¬  r„   rG   rl   rm   r¯  r°  )r   r›  r­  Zforeign_messager   r   r   Ú(testTopLevelExtensionsForOptionalMessage‡  s.    

 ÿz=Proto2ReflectionTest.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| ¡ |  
ttj|j|d¡ d S )Nr   rs   r9  r  )r   r,  Úrepeatedgroup_extensionr9   r,   r-  rø   r  r¬  r„   rl   rm   r¯  r°  )r   r›  r­  ÚgroupZ
group_listr   r   r   Ú(testTopLevelExtensionsForRepeatedMessage¤  s     

 ÿz=Proto2ReflectionTest.testTopLevelExtensionsForRepeatedMessagec                 C   sÚ   t  ¡ }t jj}|  | |¡¡ |  ||j¡ |j| }|  d|j	¡ |  | |¡¡ |  ||j¡ d|_	|  d|j| j	¡ |  
| |¡¡ |  ||j¡ | |¡ |  ||j| ¡ |  | |¡¡ |  ||j¡ d S r©  )r   r,  ÚTestRequiredÚsinglerF   rª  r«  r-  r9   r  rƒ   r¡  r¬  r„   )r   r›  r­  Úrequiredr   r   r   ÚtestNestedExtensionsµ  s     

z)Proto2ReflectionTest.testNestedExtensionsc                 C   sT   t jj}|  | t jjd¡¡ |  | d¡jt jj¡ |  	dt
| t jj¡ƒ¡ d S )NrL   z*protobuf_unittest.optional_int32_extensionr   )r   r“   Úpoolrƒ   ZFindExtensionByNumberr,  ÚassertIsZFindExtensionByNamero  r9   r,   ZFindAllExtensionsrE   )r   rº  r   r   r   ÚtestRegisteredExtensionsÉ  s      ÿÿÿýÿz-Proto2ReflectionTest.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   rs   )r   ÚTopLevelMessagerF   rG   r9   r½  r-  r—  rƒ   r˜  r¡   r™  rš  r,   Úrepeated_message_extensionrø   )r   Útoplevelr  r   r   r   Ú(testHasBitsForAncestorsOfExtendedMessageÛ  st    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz=Proto2ReflectionTest.testHasBitsForAncestorsOfExtendedMessagec                 C   sD   t  ¡ }|j}t j}|j| }| |¡ d|_|  ||j| ¡ d S rr   )r   r¾  r½  r™  r-  r¬  rš  r„   )r   rÀ  r›  r­  Zextension_protor   r   r   Ú*testDisconnectionAfterClearingEmptyMessage  s    

z?Proto2ReflectionTest.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 ]J}|  t|j|¡ |  t|j|¡ |  t|jj|¡ |  t|jj|d¡ qb|  t|jt j¡ d S )Nrh   r‚   )r   r,  rl   r¦  rª  r¬  r-  rW  rØ   r   r—  r™  r˜  r¿  r1  )r   r›  Zunknown_handler   r   r   ÚtestExtensionFailureModes  s4    ý
ÿ
ÿÿ ÿ
ÿz.Proto2ReflectionTest.testExtensionFailureModesc                 C   s6   t  ¡ }d|j_t  ¡ }| |¡ |  d|jj¡ d S )Nr]   )r   rE   r&  r  rˆ   r9   ©r   rŠ   r‹   r   r   r   ÚtestMergeFromOptionalGroup5  s
    
z/Proto2ReflectionTest.testMergeFromOptionalGroupc                 C   s>   t  ¡ }d|jt j< t  ¡ }| |¡ |  d|jt j ¡ d S rÎ   )r   r,  r-  r.  rˆ   r9   rÄ  r   r   r   ÚtestMergeFromExtensionsSingular=  s    
 
ÿz4Proto2ReflectionTest.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 )NrL   rM   r   rN   )r   r,  r-  r0  r¡   rˆ   r9   r,   rÄ  r   r   r   ÚtestMergeFromExtensionsRepeatedF  s,    
 ÿ ÿ ÿ ÿz4Proto2ReflectionTest.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   rN   r   rL   rM   )	r   r,  r-  Ú!repeated_nested_message_extensionrø   rX   rˆ   r9   r,   )r   rŠ   Zext1rù   r‹   Zext2r   r   r   Ú$testMergeFromExtensionsNestedMessageW  s,    ÿÿ
ÿz9Proto2ReflectionTest.testMergeFromExtensionsNestedMessagec                 C   s4   t  ¡ dkrd S t ¡ }t ¡ }|  t|j|¡ d S )Nr   )r   r   r   rE   r,  rl   rm   r  rÄ  r   r   r   ÚtestCopyFromBadTypen  s
    z(Proto2ReflectionTest.testCopyFromBadTypec                 C   s˜   t  ¡ }t ¡ dkr t |¡ n
t |¡ | ¡  |  | 	¡ d¡ t  ¡ }|  ||¡ t  
¡ }t |¡ | ¡  |  | 	¡ d¡ t  
¡ }|  ||¡ d S )Nr   r   )r   rE   r   r   r   rð   ZSetAllNonLazyFieldsr  r9   rp   r,  ÚSetAllExtensions)r   rJ   Zempty_protor   r   r   Ú	testClearw  s    

zProto2ReflectionTest.testClearc                 C   sf   t  ¡ }d|j_|j}|  |jjd¡ |  |jjd¡ d|j_|  |jjd¡ |  |jd¡ d|_d S )Nr‚   r   rè   é   )r   Z
TestOneof2Zfoo_messageZmoo_intr9   Zfoo_lazy_message)r   rù   Zsub_messager   r   r   ÚtestDisconnectingInOneofŽ  s    z-Proto2ReflectionTest.testDisconnectingInOneofc                 C   s"   |   | ¡ ¡ | ¡  | ¡  d S r   )rƒ   ÚIsInitializedr¶   ÚSerializePartialToStringr   r   r   r   ÚassertInitializedœ  s    z&Proto2ReflectionTest.assertInitializedNc                 C   sN   g }|   | ¡ ¡ |   | |¡¡ |  |t|ƒ¡ |  tj|j¡ | ¡  d S r   )	rF   rÑ  r9   r,   rl   r   ÚEncodeErrorr¶   rÒ  )r   rJ   Z
error_sizeÚerrorsr   r   r   ÚassertNotInitialized¢  s    z)Proto2ReflectionTest.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  ¡ }|  | |¡¡ |  |dddg¡ |  t|jddd¡ d S )	NrN   rM   rL   r   rè   r  Úbr[   )r   rE   rÓ  r,  r¶  rÖ  r  r×  r[   rI  Úoptional_messagerG  rø   Úmultir-  r·  rF   rÑ  r9   rl   rm   )r   rJ   rý   r­  rþ   rÕ  r   r   r   ÚtestIsInitialized«  sX    








z&Proto2ReflectionTest.testIsInitializedr   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
¡`}tj||| ¡ d |  t|dƒdt|jd|jƒ ¡ |  dt|jƒ¡ |  d	t|jƒ¡ W 5 Q R X d S )
Nz!test_file_descriptor_errors.protoZmsg1)Zserialized_pbz)another_test_file_descriptor_errors.protoZmsg2Ú	exceptionú%s not raisedr.   z test_file_descriptor_errors.msg1)r   ÚFileDescriptorProtorj  Úpackagerp  rø   r   ZFileDescriptorr¶   rl   rm   rƒ   Úhasattrr´   r¢  r¡  r™   rÛ  )r   Ú	file_nameÚpackage_nameZfile_descriptor_protorb  Zanother_file_namerc  Úcmr   r   r   ÚtestFileDescriptorErrorsæ  s6    
ý
ýÿz-Proto2ReflectionTest.testFileDescriptorErrorsc                 C   sh  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d j |t
|ƒd ¡}
d}z|	 |
¡ W n tk
rD   d}Y nX |	j}|  |p`t|ƒtk¡ d S )	Nr  r  rL   r   iÊ¿Ýó   ÿFT)r   ÚTestMessageSetÚTestMessageSetExtension2Úmessage_set_extensionr  r-  r™   r¶   r9   rp   r,   r   ÚRawMessageSetr  r¤  Útype_idrƒ   r   Úendswithr  ÚreplaceÚUnicodeDecodeErrorr   )r   rJ   Zextension_messager­  Z	test_utf8Ztest_utf8_bytesr  Úrawr  rþ   ZbadbytesZunicode_decode_failedZstring_fieldr   r   r   ÚtestStringUTF8Serialization  s<    

	 
ÿ
z0Proto2ReflectionTest.testStringUTF8Serializationc                 C   s6   t  ¡ }|  | d¡¡ |j ¡  |  | d¡¡ d S )Nr&  )r   rE   rF   rG   r&  ZSetInParentrƒ   r   r   r   r   ÚtestSetInParent>  s    
z$Proto2ReflectionTest.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ð  ZmyprotoZOuterr9   Úinnerr¸   )r   rð  Úmsgr   r   r   ÚtestPackageInitializationImportD  s    
z4Proto2ReflectionTest.testPackageInitializationImport)N):r.   r/   r0   r!  r>   r"  r(  r)  r+  r/  r2  r6  rE  rF  rJ  rK  rZ  r[  r^  r_  rd  rf  rg  rh  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Ú  ÚunittestÚskipIfr   r   rã  rî  rï  rõ  r   r   r   r   r  ƒ  sl   "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   rE   Úfirst_protoÚsecond_protor"   r   r   r   ÚsetUp]  s    
zTestAllTypesEqualityTest.setUpc                 C   s   |   tt| j¡ d S r   ©rl   rm   Úhashrú  r"   r   r   r   ÚtestNotHashablea  s    z(TestAllTypesEqualityTest.testNotHashablec                 C   s   |   | j| j¡ d S r   )r9   rú  r"   r   r   r   ÚtestSelfEqualityd  s    z)TestAllTypesEqualityTest.testSelfEqualityc                 C   s   |   | j| j¡ d S r   ©r9   rú  rû  r"   r   r   r   ÚtestEmptyProtosEqualg  s    z-TestAllTypesEqualityTest.testEmptyProtosEqualN)r.   r/   r0   rü  rÿ  r   r  r   r   r   r   rù  Z  s   rù  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   rE   rú  rû  r   rð   r"   r   r   r   rü  p  s    

zFullProtosEqualityTest.setUpc                 C   s   |   tt| j¡ d S r   rý  r"   r   r   r   rÿ  v  s    z&FullProtosEqualityTest.testNotHashablec                 C   s    |   | jd ¡ |   d | j¡ d S r   )r	  rú  rû  r"   r   r   r   ÚtestNoneNotEqualy  s    z'FullProtosEqualityTest.testNoneNotEqualc                 C   s(   t  ¡ }|  | j|¡ |  || j¡ d S r   )r   r¶  r	  rú  rû  )r   Zthird_protor   r   r   ÚtestNotEqualToOtherMessage}  s    z1FullProtosEqualityTest.testNotEqualToOtherMessagec                 C   s   |   | j| j¡ d S r   r  r"   r   r   r   ÚtestAllFieldsFilledEquality‚  s    z2FullProtosEqualityTest.testAllFieldsFilledEqualityc                 C   s@   | j  jd7  _|  | j | j¡ | j  d¡ |  | j | j¡ d S )NrL   rB   )rú  rB   r	  rû  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 )NrL   rX   r`   )rú  r`   rX   r	  rû  r9   r~   r"   r   r   r   ÚtestNonRepeatedComposite  s    ÿz/FullProtosEqualityTest.testNonRepeatedCompositec                 C   s>   | j j d¡ |  | j | j¡ | j  d¡ |  | j | j¡ d S )Nr‚   rP   )rú  rP   r¡   r	  rû  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   rL   )rú  r^   rX   r	  rû  r9   rø   r"   r   r   r   ÚtestRepeatedComposite¤  s    z,FullProtosEqualityTest.testRepeatedCompositec                 C   s(   | j  d¡ d| j_|  | j | j¡ d S )NrB   r   )rú  r~   rû  rB   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 )Nr`   rX   r   )rú  r~   rû  r`   r	  rX   r9   r"   r   r   r   ÚtestNonRepeatedCompositeHasBits·  s    
z6FullProtosEqualityTest.testNonRepeatedCompositeHasBitsN)r.   r/   r0   r1   rü  rÿ  r  r  r  r  r  r	  r
  r  r  r   r   r   r   r  k  s   r  c                   @   s   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 )NrL   r   )	r   r,  r9   r   rÍ  r	  r-  r.  r¬  ©r   rú  rû  r   r   r   ÚtestExtensionEqualityÅ  s.    

 
ÿz+ExtensionEqualityTest.testExtensionEqualityN)r.   r/   r0   r  r   r   r   r   r  Â  s   r  c                   @   s   e Zd Zdd„ ZdS )ÚMutualRecursionEqualityTestc                 C   sP   t  ¡ }t  ¡ }|  ||¡ d|jjj_|  ||¡ d|jjj_|  ||¡ d S rr   )r   r*  r9   rX   r  rB   r	  r  r   r   r   ÚtestEqualityWithMutualRecursionç  s    z;MutualRecursionEqualityTest.testEqualityWithMutualRecursionN)r.   r/   r0   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-S ).ÚByteSizeTestc                 C   s,   t  ¡ | _t ¡ | _t  ¡ | _t  ¡ | _	d S r   )
r   rE   rJ   r   r–  Úextended_protoÚTestPackedTypesÚpacked_protoÚTestPackedExtensionsÚpacked_extended_protor"   r   r   r   rü  ô  s    


zByteSizeTest.setUpc                 C   s
   | j  ¡ S r   )rJ   rp   r"   r   r   r   ÚSizeú  s    zByteSizeTest.Sizec                 C   s   |   d| j ¡ ¡ d S r   )r9   rJ   rp   r"   r   r   r   ÚtestEmptyMessageý  s    zByteSizeTest.testEmptyMessagec                 C   s8   t  ¡ }|  d| ¡ ¡ t jdd}|  d| ¡ ¡ d S )Nr   rL   )r¾   rM   )r   rE   r9   rp   )r   rJ   Z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 |ƒ q8|dd	ƒ |d
d	ƒ |dd	ƒ d S )Nc                    s*   ˆ j  ¡  | ˆ j _ˆ  |d ˆ  ¡ ¡ d S rÎ   )rJ   r  r¾   r9   r  )r=   Zexpected_varint_sizer"   r   r   ÚTest		  s    
z&ByteSizeTest.testVarints.<locals>.Testr   rL   rÏ  é?   rV  rë   rw   rS  rÐ   )Úzipr:   )r   r  r=   Ú	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 )Nr7  rM   rz   Z€xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrN   )rJ   rA   r9   r  r,   r"   r   r   r   ÚtestStrings	  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 )Nrh   r‚   é	   gX9´Èv¾ó?é@   rN   )
rJ   r‘   r9   r  r   rE   rB  rD   rC   r@  r"   r   r   r   ÚtestOtherNumerics$	  s    



zByteSizeTest.testOtherNumericsc                 C   s   d| j j_|  d|  ¡ ¡ d S )Ni @  rÏ  )rJ   r`   rX   r9   r  r"   r   r   r   ÚtestComposites>	  s    
zByteSizeTest.testCompositesc                 C   s   d| j j_|  d|  ¡ ¡ d S )Ni    rw   )rJ   r&  r  r9   r  r"   r   r   r   Ú
testGroupsF	  s    
zByteSizeTest.testGroupsc                 C   s0   | j j d¡ | j j d¡ |  d|  ¡ ¡ d S ©Nrw   é€   rÏ  )rJ   rP   r¡   r9   r  r"   r   r   r   rZ  M	  s    z ByteSizeTest.testRepeatedScalarsc                 C   s&   | j j ddg¡ |  d|  ¡ ¡ d S r&  )rJ   rP   r¢   r9   r  r"   r   r   r   ÚtestRepeatedScalarsExtendS	  s    z&ByteSizeTest.testRepeatedScalarsExtendc                 C   sN   | j j d¡ | j j d¡ |  d|  ¡ ¡ | j j d¡ |  d|  ¡ ¡ d S )Nrw   r'  rÏ  rN   )rJ   rP   r¡   r9   r  r  r"   r   r   r   r[  X	  s
    z&ByteSizeTest.testRepeatedScalarsRemovec                 C   s2   | j j ¡ }| j j ¡ }d|_|  d|  ¡ ¡ d S )NrÏ  r*   )rJ   r^   rø   rX   r9   r  )r   Úforeign_message_0Úforeign_message_1r   r   r   rd  `	  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râ|  dt|ƒ¡ |d
= t	 
¡ d	kr|  dt|ƒ¡ d S )Nr!  r*   r   r‚   r]   rw   rL   rM   r   rë   )rJ   r^   rø   rX   r9   r  r  r  r,   r   r   )r   r)  r*  r^   Zforeign_message_2r   r   r   ÚtestRepeatedCompositesDeleteh	  s.    ÿ



z)ByteSizeTest.testRepeatedCompositesDeletec                 C   s2   | j j ¡ }| j j ¡ }d|_|  d|  ¡ ¡ d S )NrÏ  rx   )rJ   r  rø   r  r9   r  )r   Zgroup_0Zgroup_1r   r   r   ÚtestRepeatedGroups	  s    zByteSizeTest.testRepeatedGroupsc              	   C   sj   t  ¡ }|  d| ¡ ¡ t j}d|j|< |  d| ¡ ¡ t jjjd }|  	t
¡ d|j|< W 5 Q R X d S )Nr   rs   rM   rB   )r   r,  r9   rp   r.  r-  rE   r“   r”   rl   r¦  )r   rJ   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 )NrL   rM   r'  rN   rB   r   )
rJ   rB   r9   rp   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 )NrL   rN   rè   r'  rÏ  rP   r   rM   r%   r‚   )rJ   rP   r¡   r9   rp   r~   r   r˜  r  r-  r¬  )r   r­  Z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r®| j j}| j  d¡ d|_|  d| j  ¡ ¡ tj	}| j
j| }|  d| j
 ¡ ¡ d|_|  d
| j
 ¡ ¡ d|_|  d| j
 ¡ ¡ | j
 |¡ |  d| j
 ¡ ¡ d S )NrL   r‚   r'  rè   r[   rN   r  r   r   r%   )rJ   r  r[   r9   rp   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 )
NrN   rè   rL   r*   r_   r   rM   r%   rš  )rJ   r_   rø   r9   rp   r[   r~   r   r¿  r  r-  rš  r¬  )r   Zchild0r­  Z
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   rw   r'  rè   gÍÌÌÌÌÌ@g      
@é   Úpacked_int32)r9   r  rp   r5  r¡   Úpacked_doubler~   )r   Zint_sizeZdouble_sizer   r   r   ÚtestPackedRepeatedScalars
  s    z&ByteSizeTest.testPackedRepeatedScalarsc                 C   sH   |   d| j ¡ ¡ | jjtj }| ddddg¡ |   d| j ¡ ¡ d S )Nr   rL   rM   rN   r%   r4  )r9   r  rp   r-  r   Zpacked_fixed32_extensionr¢   r.  r   r   r   ÚtestPackedExtensions
  s    ÿz!ByteSizeTest.testPackedExtensionsN)r.   r/   r0   rü  r  r  r  r  r   r#  r$  r%  rZ  r(  r[  rd  r+  r,  r-  r/  r0  r2  r3  r7  r8  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   rE   r¶   r9   rp   r,   r  ©r   rú  rû  r  r   r   r   ÚtestSerializeEmtpyMessage-
  s    þz+SerializationTest.testSerializeEmtpyMessagec                 C   s\   t  ¡ }t  ¡ }t |¡ | ¡ }|  | ¡ t|ƒ¡ |  t|ƒ| |¡¡ |  ||¡ d S r   )	r   rE   r   rð   r¶   r9   rp   r,   r  r:  r   r   r   ÚtestSerializeAllFields7
  s    
þz(SerializationTest.testSerializeAllFieldsc                 C   sH   t  ¡ }t  ¡ }t |¡ | ¡ }|  t|ƒ| |¡¡ |  ||¡ d S r   )r   r,  r   rÍ  r¶   r9   r,   r  r:  r   r   r   ÚtestSerializeAllExtensionsB
  s    
þz,SerializationTest.testSerializeAllExtensionsc                 C   sF   t  ¡ }t  ¡ }d|j_| ¡ }|  t|ƒ| |¡¡ |  ||¡ d S )Néò   )r   rE   r&  r  r¶   r9   r,   r  r:  r   r   r   ÚtestSerializeWithOptionalGroupL
  s    þz0SerializationTest.testSerializeWithOptionalGroupc                 C   sL   t  ¡ }d|_d|_d|_d|_d|_d|_t j | 	¡ ¡}|  
||¡ d S )Nrë   lýÿÿÿ     rT  lýÿÿÿ     éûÿÿÿlýÿÿÿ     )r   rE   rB   r¾   r@  rA  rC  rD  rñ   r¶   r9   r  r   r   r   ÚtestSerializeNegativeValuesV
  s    ÿz-SerializationTest.testSerializeNegativeValuesc                 C   sä   t  ¡ dkrd S t ¡ }t |¡ t| ¡ ƒ}tt	|ƒd ƒD ] }znt ¡ }t 
¡ }| |d|¡}|  ||¡ z| |d|¡}|  ||¡ W n  tjk
r¬   |  d¡ Y nX W q> tjk
rÜ   |  tj|j|d|¡ Y q>X q>d S )Nr   rL   r   z@Parsing unknown fields failed when parsing known fields did not.)r   r   r   rE   r   rð   Ú
memoryviewr¶   r:   r,   ÚTestEmptyMessageZ_InternalParser9   r   ÚDecodeErrorZfailrl   )r   rú  r  Ztruncation_pointrû  Zunknown_fieldsÚposÚpos2r   r   r   ÚtestParseTruncatede
  s,    
  ÿ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%   rN   rM   rL   )r   ZOutOfOrderFieldsr@  r-  r¿   r¼   r¾   rB   r¶   r9   rp   r,   r   r$   r   ZWIRETYPE_VARINTr2   r3   r4   r5   r6   ©r   rJ   r  r'  ZReadTagr   r   r   ÚtestCanonicalSerializationOrderƒ
  s(    z1SerializationTest.testCanonicalSerializationOrderc                 C   s(   t  ¡ }t |¡ | ¡ }t |¡ d S r   )r   r4  r   r5  r¶   Z#ExpectAllFieldsAndExtensionsInOrder)r   rJ   r  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 )NZfoobarrs   r9  r˜   rU  r÷   )r   rE   rS   r¡   rB   r`   rX   r¶   r  r9   r,   rU   )r   rú  r  rû  Z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’   rf   r—   FrN   r   rL   rM   )r   rå  ÚTestMessageSetExtension1ræ  rç  Zmessage_set_extension3r-  r=   r™   Útextr¶   r   rè  r9   r“   Ú
GetOptionsÚmessage_set_wire_formatr,   r  r¤  r   ZTestMessageSetExtension3rp   )r   rJ   Úextension_message1Zextension_message2Ú
extension1Z
extension2Z
extension3r  rí  rý   rþ   Z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­¿Ýrf   )r   rè  r¤  rø   ré  r   rL  r=   r¶   r   ræ  r™   rå  r9   r,   r  rç  r-  )r   rí  r¤  rP  rý   r  rJ   rQ  r   r   r   Ú(testMessageSetWireFormatUnknownExtensionð
  s6    





þz:SerializationTest.testMessageSetWireFormatUnknownExtensionc                 C   sp   t  ¡ }t |¡ | ¡ }t  ¡ }|  t|ƒ| |¡¡ t  ¡ }d|_	| ¡ }t  ¡ }|  t|ƒ| |¡¡ d S )Nl   ÿÿÿÿ)
r   rE   r   rð   r¶   rC  r9   r,   r  r¾   )r   rJ   r  r‹   r   r   r   ÚtestUnknownFields  s     
þþz#SerializationTest.testUnknownFieldsc              
   C   sZ   z
|ƒ  W n8 |k
rB } z|   |t|ƒ¡ W Y ¢dS d}~X Y nX |  dt|ƒ ¡‚dS )zEThis method checks if the exception type and message are as expected.NrÜ  )r9   r™   ZfailureException)r   Ú	exc_classZcallable_objrÛ  Úexr   r   r   Ú_CheckRaises4  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,cr  rL   zFMessage protobuf_unittest.TestRequired is missing required fields: b,crM   zDMessage protobuf_unittest.TestRequired is missing required fields: crN   )r   r¶  rW  r   rÔ  r¶   rÒ  rF   rG   rµ   r  r×  r[   r9   r,   r  )r   rJ   Úpartialr‹   r  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 )NrL   zoMessage protobuf_unittest.TestRequiredForeign is missing required fields: optional_message.b,optional_message.crM   rN   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   rI  r¶   rØ  r  rW  r   rÔ  r×  r[   rG  rø   r   r   r   r   Ú$testSerializeUninitializedSubMessager  s.    ýýz6SerializationTest.testSerializeUninitializedSubMessagec                 C   s`   t  ¡ }t  ¡ }t |¡ | ¡ }|  | ¡ t|ƒ¡ | |¡}|  | ¡ |¡ |  ||¡ d S r   )	r   r  r   ÚSetAllPackedFieldsr¶   r9   rp   r,   r  ©r   rú  rû  r  r  r   r   r   ÚtestSerializeAllPackedFields“  s    

z.SerializationTest.testSerializeAllPackedFieldsc                 C   sL   t  ¡ }t  ¡ }t |¡ | ¡ }| |¡}|  | ¡ |¡ |  ||¡ d S r   )r   r  r   ZSetAllPackedExtensionsr¶   r  r9   rp   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	|ƒ| 
|¡¡ |  dddg|j¡ |  dddg|j¡ |  dg|j¡ d S )NrL   rM   ç      @rN   r3  ç       @r%   )r   r  r5  r¢   r6  r¡   r¶   Zpacked_sint32r9   r,   r  )r   rú  r  rû  r   r   r   Ú1testMergePackedFromStringWhenSomeFieldsAlreadySet¦  s    þzCSerializationTest.testMergePackedFromStringWhenSomeFieldsAlreadySetc                 C   sP  t  ¡ }|j ddddg¡ |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 )NrL   rM   é–   rN   r3  g     @@r`  éZ   r‚   rU  r%   ée   r  )r   r  r5  r¢   r6  Zpacked_floatr¡   r¶   r9   rp   r,   r   r$   r   ZWIRETYPE_LENGTH_DELIMITEDr2   r)   r+   rƒ   r-   rH  r   r   r   ÚtestPackedFieldsWireFormat¸  s,    z,SerializationTest.testPackedFieldsWireFormatc                 C   sZ   t  ¡ }t |¡ t  ¡ }| ¡ }|  t|ƒ| |¡¡ t  ¡ }t 	|¡ |  ||¡ d S r   )
r   ÚTestUnpackedTypesr   ÚSetAllUnpackedFieldsr  r¶   r9   r,   r  r[  )r   ÚunpackedÚpackedr  r¢  r   r   r   ÚtestParsePackedFromUnpackedÐ  s    
þ
z-SerializationTest.testParsePackedFromUnpackedc                 C   sZ   t  ¡ }t |¡ t  ¡ }| ¡ }|  t|ƒ| |¡¡ t  ¡ }t 	|¡ |  ||¡ d S r   )
r   r  r   r[  rf  r¶   r9   r,   r  rg  )r   ri  rh  r  r¢  r   r   r   ÚtestParseUnpackedFromPackedÜ  s    
þ
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 )	NrL   r  é   r   é   r<  r>  é3   )r   rE   r9   ra   ZBB_FIELD_NUMBERÚOPTIONAL_INT32_FIELD_NUMBERZOPTIONALGROUP_FIELD_NUMBERÚ$OPTIONAL_NESTED_MESSAGE_FIELD_NUMBERZ!OPTIONAL_NESTED_ENUM_FIELD_NUMBERÚREPEATED_INT32_FIELD_NUMBERZREPEATEDGROUP_FIELD_NUMBERZ$REPEATED_NESTED_MESSAGE_FIELD_NUMBERZ!REPEATED_NESTED_ENUM_FIELD_NUMBERr   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é  rL   r  rl  r   rm  r<  r>  rn  )r9   r   r¶  r·  rl  ZSINGLE_FIELD_NUMBERrÙ  ZMULTI_FIELD_NUMBERr.  Z%OPTIONAL_INT32_EXTENSION_FIELD_NUMBERZoptionalgroup_extensionZ$OPTIONALGROUP_EXTENSION_FIELD_NUMBERZ!optional_nested_message_extensionZ.OPTIONAL_NESTED_MESSAGE_EXTENSION_FIELD_NUMBERZoptional_nested_enum_extensionZ+OPTIONAL_NESTED_ENUM_EXTENSION_FIELD_NUMBERr0  Z%REPEATED_INT32_EXTENSION_FIELD_NUMBERr³  Z$REPEATEDGROUP_EXTENSION_FIELD_NUMBERrÊ  Z.REPEATED_NESTED_MESSAGE_EXTENSION_FIELD_NUMBERZrepeated_nested_enum_extensionZ+REPEATED_NESTED_ENUM_EXTENSION_FIELD_NUMBERr"   r   r   r   ÚtestExtensionFieldNumbersø  s<     ÿÿ ÿÿ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 )NrB   r`   rP   )r   rE   r»  rB   r“   r”   r9   ro  rl  r`   rp  rP   rq  )r   Úclsr   r   r   ÚtestFieldProperties  s&    

ÿÿ

ÿÿ

ÿÿz%SerializationTest.testFieldPropertiesc              	   C   sˆ   t  ¡ }d|_|  t jj |¡d¡ t jj |d¡ |  |jd¡ |  t¡
 |`W 5 Q R X zt jj	 |¡ W n t
k
r‚   Y nX d S )Nr9  rM  )r   rE   rB   r9   Ú__get__Ú__set__rl   r¨   rd   r[   rm   )r   rô  r   r   r   ÚtestFieldDataDescriptor!  s    z)SerializationTest.testFieldDataDescriptorc                 C   sZ  t jddddt jjddt jddt jjt jdddg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¡ |  	dddg|j¡ d S )NrL   rf   Ts   barrW   rZ   rM   rN   )	rB   rA   r­   r¬   r`   r  rÒ   Úoptional_foreign_enumrP   rB   rA   r­   r¬   r`   r  rÒ   ry  )r   rE   ra   rd   rb   rÝ   rƒ   rÑ  rG   r9   rB   rA   r­   r¬   r`   rX   r  r[   rÒ   ry  rP   r   r   r   r   ÚtestInitKwargs2  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   rC  )Zunused_protor   r   r   Ú(InitalizeEmptyMessageWithExtraKeywordArgR  s    z`SerializationTest.testInitArgsUnknownFieldName.<locals>.InitalizeEmptyMessageWithExtraKeywordArgz9Protocol message TestEmptyMessage has no "unknown" field.)rW  r¥   )r   r|  r   r   r   ÚtestInitArgsUnknownFieldNameQ  s    ýz.SerializationTest.testInitArgsUnknownFieldNamec                 C   sŒ   t jdddd}|  | ¡ ¡ |  | d¡¡ |  | d¡¡ |  | d¡¡ |  | d¡¡ |  d|j¡ |  d|j¡ |  d|j	¡ d S )NrL   ©r  r×  r[   r  r×  r[   Údummy2)
r   r¶  rƒ   rÑ  rG   rF   r9   r  r×  r[   r   r   r   r   ÚtestInitRequiredKwargsY  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 )	NrL   r~  )rØ  rØ  r  r×  r[   r  )r   rI  r¶  rƒ   rÑ  rG   rØ  rF   r9   r  r×  r[   r   r   r   r   ÚtestInitRequiredForeignKwargsd  s     ÿÿz/SerializationTest.testInitRequiredForeignKwargsc                 C   sZ   t jdddgd}|  | ¡ ¡ |  d|jd ¡ |  d|jd ¡ |  d|jd ¡ d S )NrL   rM   rN   rj   r   )r   rE   rƒ   rÑ  r9   rP   r   r   r   r   ÚtestInitRepeatedKwargst  s
    z(SerializationTest.testInitRepeatedKwargsN)!r.   r/   r0   r;  r<  r=  r?  rA  rG  rI  rJ  rK  rR  rS  rT  rW  rY  rZ  r]  r^  ra  re  rj  rk  rr  rs  ru  rx  rz  r}  r€  r  r‚  r   r   r   r   r9  *
  s<   


6)3!
	r9  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   rå  r9   r“   rN  rO  r   rE   r   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¡ q`d S )NrL   r_  FT)r   rE   rB   rC   r•   r9   rN  ri  r  r5  r¡   r6  r   r}  r’  rm  )r   rJ   Zfield_descriptorÚ_r   r   r   ÚtestPackedOptions‡  s    
ÿzOptionsTest.testPackedOptionsN)r.   r/   r0   r„  r†  r   r   r   r   rƒ  |  s   rƒ  c                   @   sp   e Zd Ze 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   z6C++ implementation requires a call to MakeDescriptor()zMakeClass is not repeatablec                 C   sŒ   t jdddd g g g g t jd	}t jdddd g |gg g t jd	}t jdddd g g g g t jd	}t jd	d
dd g ||gg g t jd	}t |¡ d S )NZleafzpackage.parent.child.leafr7  )ro  rv  rt  ru  rw  rr  r1  zpackage.parent.childZsiblingzpackage.parent.siblingÚparentzpackage.parent)r   r  r€  r	   Ú	MakeClass)r   Z	leaf_descZ
child_descZsibling_descZparent_descr   r   r   Ú!testMakeClassWithNestedDescriptor›  sZ        ú    ú    ú    ú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   rj  Z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	j
tjd}|ƒ }d}t ||¡ |  |jdd	d
g¡ dS )ú7Test that the generated class can parse a flat message.r   NÚAr   c                       s   e Zd Z” ZdS )zSClassAPITest.testParsingFlatClassWithExplicitClassDeclaration.<locals>.MessageClassNrx  r   ©Úmsg_descriptorr   r   ÚMessageClass  s   r’  r{  úflat: 0 flat: 1 flat: 2 rL   rM   )r   r   r   rÝ  rµ   r  r   r“  rp  r   r‚  r	   rƒ  r
   r‹  r9   Úflat)r   rŒ  r’  rô  Úmsg_strr   r  r   Ú0testParsingFlatClassWithExplicitClassDeclarationö  s     
ÿ ÿÿz=ClassAPITest.testParsingFlatClassWithExplicitClassDeclarationc                 C   s`   t  ¡ }| |  d¡¡ t |jd ¡}t |¡}|ƒ }d}t	 
||¡ |  |jdddg¡ dS )rŽ  ÚBr   r“  rL   rM   N)r   rÝ  rµ   r  r   r“  rp  r	   r‰  r
   r‹  r9   r”  ©r   rŒ  r‘  Z	msg_classrô  r•  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µ   r  r   r“  rp  r	   r‰  r
   r‹  r9   r—   r˜   Údeepr˜  r   r   r   ÚtestParsingNestedClass"  s    ÿ
ÿz#ClassAPITest.testParsingNestedClassN)r.   r/   r0   r÷  rø  r   r   r   rö  rŠ  r  r–  r™  rœ  r   r   r   r   r‡  ˜  s   
þ8

r‡  Ú__main__).r1   r  r   r¯  r'   r®   Úwarningsr÷  Zgoogle.protobufr   r   r   r   r   r   r   r	   r
   rò  r   r   r   r   r   r   r   r   r   ÚsimplefilterÚDeprecationWarningÚobjectr   Znamed_parametersZTestCaser7   r  rù  r  r  r  r  r9  rƒ  r‡  r.   Úmainr   r   r   r   Ú<module>    s–   -þ               _V!  :    U 
