o
    ÞË·e×  ã                   @   sN  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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)Ú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   ú_/var/www/ideatree/venv/lib/python3.10/site-packages/google/protobuf/internal/reflection_test.pyÚ__init__M   s   
z_MiniDecoder.__init__c                 C   s   t  | j| j¡\}| _|S ©N)r   Ú_DecodeVarintr   r   ©r   Úresultr   r   r   Ú
ReadVarintQ   s   z_MiniDecoder.ReadVarintc                 C   ó   t  |  ¡ ¡S r   )r   ÚZigZagDecoder"   ©r   r   r   r   Ú
ReadSInt64Z   ó   z_MiniDecoder.ReadSInt64c                 C   r#   r   )r   Ú	UnpackTagr"   r%   r   r   r   ÚReadFieldNumberAndWireType_   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   Ú	ReadFloatb   ó   "z_MiniDecoder.ReadFloatc                 C   r*   )Nz<dé   r   r,   r    r   r   r   Ú
ReadDoubleg   r0   z_MiniDecoder.ReadDoublec                 C   s   | j t| jƒkS r   )r   Úlenr   r%   r   r   r   ÚEndOfStreaml   ó   z_MiniDecoder.EndOfStreamN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r"   Ú	ReadInt32Ú	ReadInt64Ú
ReadUInt32Ú
ReadUInt64r&   Ú
ReadSInt32r)   r/   r2   r4   r   r   r   r   r   C   s    	r   Ú_proto2Ú_proto3c                   @   s|  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"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   ó>   |   t|ƒt|ƒ¡ tt|ƒƒD ]}|   || || ¡ qd S r   ©ÚassertEqualr3   Úrange©r   ÚvaluesÚothersÚir   r   r   ÚassertListsEqualv   ó   ÿzReflectionTest.assertListsEqualc                 C   s\   |j dddd d}|  d|j¡ |  d|j¡ |  d|j¡ |tu r,|  | d¡¡ d S d S )Né   ç+‡)K@Úoptional_string)Úoptional_int32Úoptional_doublerN   Úoptional_floatrQ   )ÚTestAllTypesrD   rO   rP   rN   r   ÚassertFalseÚHasField©r   Úmessage_moduleÚprotor   r   r   ÚtestScalarConstructor{   s   üÿz$ReflectionTest.testScalarConstructorc                 C   sŽ   |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®ó?rM   ©TFFrN   )Úrepeated_int32Úrepeated_doubleÚrepeated_boolÚrepeated_stringÚrepeated_float)rR   rD   Úlistr_   r`   ra   rb   rc   rU   r   r   r   ÚtestRepeatedScalarConstructor‰   s   ûz,ReflectionTest.testRepeatedScalarConstructorc                 C   s  |j ddddgg d¢|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	ƒ¡ |  g d¢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 )NrL   rN   r]   rM   r^   ©ÚbbéÕÿÿÿ©Úcé±  é   )rO   rN   r`   ra   Úrepeated_nested_messageÚrepeated_foreign_messageÚoptional_nested_messagero   )rR   ÚNestedMessageÚFOOÚBARÚForeignMessagerD   rO   rN   rd   r`   ra   rm   rn   rS   rT   rU   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©rO   éÒ  )rN   ©ro   ©r_   )rb   ©rm   )ÚassertRaisesÚ	TypeErrorrR   ©r   rV   r   r   r   ÚtestConstructorTypeError»   s6   ÿÿÿÿ
ÿÿ
ÿÿ

ÿz'ReflectionTest.testConstructorTypeErrorc                 C   sŒ   |j dd}|  d| ¡ ¡ |j |j  ¡ d}|  d| ¡ ¡ |j dgd}|tu r2|  d| ¡ ¡ |j |j  ¡ gd}|  d| ¡ ¡ d S )Nrl   rv   r[   rx   r\   ry   rz   )rR   rD   ÚByteSizerp   r   )r   rV   r   r   r   r   Ú(testConstructorInvalidatesCachedByteSizeÏ   s   ÿ
ÿz7ReflectionTest.testConstructorInvalidatesCachedByteSizec                 C   s   |  ¡ }|j}~d|_d S ©Né   )rR   ro   rg   ©r   rV   rW   Ú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)rR   rˆ   rŠ   rg   rD   rS   rT   Úoneof_stringrƒ   r   r   r   Ú	testOneOfè   s   zReflectionTest.testOneOfc                 C   s6   |  ¡ }|j}| d¡ ~~t ¡  |  ¡ }|j}d S ©Nro   )rR   ro   Ú
ClearFieldÚgcÚcollectrƒ   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é   ro   r   r‚   )	rR   ro   rg   Ú
assertTruerT   rŽ   rD   ÚassertIsNotrS   rƒ   r   r   r   Ú/testDisconnectingNestedMessageAfterSettingField  s   
z>ReflectionTest.testDisconnectingNestedMessageAfterSettingFieldc                 C   s6   |  ¡ }|  | d¡¡ | d¡ |  | d¡¡ d S r   )rR   rS   rT   rŽ   rU   r   r   r   Ú0testDisconnectingNestedMessageBeforeGettingField  ó   
z?ReflectionTest.testDisconnectingNestedMessageBeforeGettingFieldc                 C   sP   |  ¡ }|  ¡ }d|j_| |¡ |  | d¡¡ | d¡ |  | d¡¡ d S ©Nr’   ro   )rR   ro   rg   Ú	MergeFromr“   rT   rŽ   rS   ©r   rV   Ú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   ÚTyperR   rŸ   rg   rŽ   r   r   rU   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 )	NrZ   r’   ru   rO   Úoptional_fixed32rN   é{   ro   )
rR   r¢   rO   rN   ro   rD   Ú
DESCRIPTORÚfields_by_nameÚ
ListFieldsrg   )r   rV   rW   Ú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 g d¢fg| ¡ ¡ d S )NrZ   r’   r‡   ru   ÚbarÚbazc                 s   s    | ]}t |ƒV  qd S r   )Ústr)Ú.0Úxr   r   r   Ú	<genexpr>M  s   € z8ReflectionTest.testRepeatedListFields.<locals>.<genexpr>r[   é   rO   r_   Úrepeated_fixed32rb   )ru   r©   rª   Ú0Ú1)rR   r°   Úappendr_   rb   ÚextendrE   rO   ra   rD   r¤   r¥   r¦   rU   r   r   r   ÚtestRepeatedListFieldsE  s(   
ÿýúz%ReflectionTest.testRepeatedListFieldsc                 C   s,   |  ¡ }|  t|jd¡ |  t|jd¡ d S )NÚnonexistent_fields   nonexistent_field)rR   r{   Ú
ValueErrorrŽ   rU   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 )	Nr_   r†   ro   r‚   rg   é"   Úsome_attributer¶   )rR   r{   ÚAttributeErrorÚsetattrrm   rc   rU   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sStjjtjj	fdkr^|  tt|dd¡ d S d|_
d S )NrO   çš™™™™™ñ?ru   rN   r†   Úoptional_bytesÚoptional_boolrQ   rP   rž   )r\   r†   )rR   r{   r|   r¼   r   r    ÚsysÚversion_infoÚmajorÚminorrÀ   rU   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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.
      message_module: unittest_pb2 or unittest_proto3_arena_pb2
    c                    sZ   ˆ  ¡ }ˆ |ƒ}t|| |ƒ ˆ t|| ƒ|¡ ˆ  ¡ }| | ¡ ¡ ˆ t|| ƒ|¡ d S r   )rR   r¼   ÚassertIsInstanceÚgetattrÚParseFromStringÚSerializeToString)Ú
field_nameÚvalueÚexpected_typerW   rœ   ©Ú
integer_fnrV   r   r   r   ÚTestGetAndDeserialize‰  s   z@ReflectionTest.assertIntegerTypes.<locals>.TestGetAndDeserializerO   rZ   i   @Úoptional_uint32ÚLr+   l        Úoptional_int64l            Úoptional_uint64N)Úintr-   Úcalcsize)r   rÎ   rV   rÏ   Ú
integer_64r   rÍ   r   ÚassertIntegerTypes‚  s   	z!ReflectionTest.assertIntegerTypesc                 C   ó   |   dd„ |¡ d S )Nc                 S   ó   | S r   r   ©r­   r   r   r   Ú<lambda>£  ó    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¥  s   z*ReflectionTest.testNonStandardIntegerTypesc                 C   sx   |  ¡ }|  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’   )rR   r{   r|   rÓ   ÚassertRaisesRegexÚRuntimeErrorr   rà   )r   rV   Ú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 d  ƒ n1 s;w   Y  ˆ  ¡ }ˆ 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 ©NrZ   )rR   r¼   rD   rÇ   r{   r·   r|   )rÊ   Úexpected_minÚexpected_maxræ   rÍ   r   r   ÚTestMinAndMaxIntegersº  s   ÿÿzHReflectionTest.assetIntegerBoundsChecking.<locals>.TestMinAndMaxIntegersrO   i   €iÿÿÿrÐ   r   l   ÿÿ rÒ   ìûÿÿÿ         l   ÿÿÿÿ rÓ   ì   ÿÿÿÿ NrZ   )rR   r{   r·   r|   rÓ   Úoptional_nested_enumrD   )r   rÎ   rV   rë   ræ   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>)rï   r}   r   r   r   ÚtestSingleScalarBoundsCheckingÕ  rÞ   z-ReflectionTest.testSingleScalarBoundsCheckingc                 C   rß   r   )rï   r   rà   r}   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¾   ru   r†   r‚   r   iô  r‰   Úindexrâ   )	rR   r{   r|   r_   r³   rb   Úrepeated_bytesÚ
IndexErrorÚ__setitem__rU   r   r   r   ÚtestRepeatedScalarTypeSafetyÜ  s   
ÿz+ReflectionTest.testRepeatedScalarTypeSafetyc                 C   sV   |  ¡ }|  d|j¡ d|_|  d|j¡ d|_|  d|j¡ d|_|  d|j¡ d S )Nr   rZ   l   ÿÿÿ rí   )rR   rD   rO   rÓ   rU   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 )NrZ   r[   r\   )rR   rD   rq   rr   ÚBAZrU   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,  rq   rr   rø   g     Æ@T)rD   ÚForeignEnumÚNamerú   rû   rü   r{   r·   rR   Ú
NestedEnumrq   rr   rø   r|   rU   r   r   r   ÚtestEnum_Name  s^   þþþÿÿÿÿÿÿÿÿ
ÿÿÿzReflectionTest.testEnum_Namec                 C   sX  |   |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 d   ƒ n1 sYw   Y  | 
¡ }|   |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 d   ƒ n1 sþw   Y  |  t|j
jjd¡ |  t¡ |j
jjj W d   ƒ d S 1 s%w   Y  d S )	Nrú   rû   rü   ÚFOrq   rr   rø   ÚFoo)rD   rú   rý   ÚValuerû   rü   r{   r·   r»   r  rR   rq   rÿ   rr   rø   r  rU   r   r   r   ÚtestEnum_Value,  s’   
ÿÿ
ÿÿ
ÿÿÿ
ÿ
ÿÿÿÿ
ÿÿÿÿ
ÿÿÿÿÿÿ
ÿ$ÿzReflectionTest.testEnum_Valuec                 C   s  |t krg d¢}g d¢}g d¢}ng d¢}g d¢}g d¢}|  |t|j ¡ ƒ¡ |  |t|j ¡ ƒ¡ |  |t|j ¡ ƒ¡ | ¡ }|t krSg d¢}g d¢}g d	¢}ng d
¢}g d¢}g d¢}|  |t|j ¡ ƒ¡ |  |t|j ¡ ƒ¡ |  |t|j ¡ ƒ¡ d S )N)rú   rû   rü   )r+   r’   é   )©rú   r+   ©rû   r’   ©rü   r  )ÚFOREIGN_ZEROrú   rû   rü   )r   r+   r’   r  ))r	  r   r  r  r  )rq   rr   rø   ÚNEG)rZ   r[   r\   éÿÿÿÿ)©rq   rZ   ©rr   r[   ©rø   r\   ©r
  r  )ÚZEROrq   rr   rø   r
  )r   rZ   r[   r\   r  ))r  r   r  r  r  r  )	r   rD   rd   rý   ÚkeysrG   ÚitemsrR   rÿ   )r   rV   r  rG   r  rW   r   r   r   ÚtestEnum_KeysAndValuesj  s:   
ÿÿÿ
ÿz%ReflectionTest.testEnum_KeysAndValuesc                 C   s6   |  ¡ }t |¡ | ¡ }|j  |¡}|  ||¡ d S r   )rR   r   ÚSetAllFieldsrÉ   Ú
FromStringrD   )r   rV   r›   Ústring1rœ   r   r   r   ÚtestStaticParseFrom‰  s
   
z"ReflectionTest.testStaticParseFromc                 C   sF   |  ¡ }d|_|  ¡ }d|_| |¡ |  d|j¡ |  d|j¡ d S )NrZ   rË   )rR   rO   rN   r™   rD   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 ©NrZ   r[   r   )rR   r_   r³   r™   rD   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   rZ   r[   )rR   rm   Úaddrg   r™   rD   )r   rV   r›   Úmrœ   Úproto3r   r   r   Ú"testMergeFromRepeatedNestedMessage®  s"   



z1ReflectionTest.testMergeFromRepeatedNestedMessagec                 C   óP   |  ¡ }t |¡ |  ¡ }| |¡ |  ||¡ | ¡ }| ¡ }|  ||¡ d S r   )rR   r   r  r™   rD   rÉ   ©r   rV   r›   rœ   r  Ústring2r   r   r   ÚtestMergeFromAllFieldsÄ  ó   

z%ReflectionTest.testMergeFromAllFieldsc                 C   sD   |  ¡ }|  ¡ }|j |  | d¡¡ | |¡ |  | d¡¡ d S r   )rR   ro   rS   rT   r™   )r   rV   Úmessage1Úmessage2r   r   r   ÚtestMergeFromBugÓ  s   
zReflectionTest.testMergeFromBugc                 C   sL   |  ¡ }d|_d|_|  ¡ }d|_| |¡ |  d|j¡ |  d|j¡ d S )NrZ   úimportant-textrË   )rR   rO   rN   ÚCopyFromrD   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  )rR   r_   r³   r)  rD   rš   r   r   r   ÚtestCopyFromRepeatedFieldí  s   
z(ReflectionTest.testCopyFromRepeatedFieldc                 C   r   r   )rR   r   r  r)  rD   rÉ   r!  r   r   r   ÚtestCopyFromAllFieldsú  r$  z$ReflectionTest.testCopyFromAllFieldsc                 C   s\   |  ¡ }|j d¡ d|_d|_| |¡ |  d|jd ¡ |  d|j¡ |  d|j¡ d S )NrZ   r[   r(  r   )rR   r_   r³   rO   rN   r)  rD   )r   rV   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 )NrZ   r[   r\   r   )rR   rO   ÚcopyÚdeepcopyrD   r_   r³   Úremoverm   r  rg   ÚassertNotEqualr3   )r   rV   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 )	Nr‚   ro   r   r’   r  é   é   Úoptional_foreign_message)
rR   ro   ÚClearr”   rg   rS   rT   rD   r7  rj   )r   rV   rW   r„   Ú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 objectÚTestingrN   s   a€aõ   Ð¢ÐµÑÑ‚úutf-8r‰   )
rR   r{   r|   r¼   rD   ÚtyperN   r«   r·   Úencode)r   rV   rW   Ú
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"
)rR   rD   r«   rU   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 )Nro   ó    r   )rR   ro   r™   rp   r“   rT   r)  ÚMergeFromStringrD   rÈ   rÉ   r3   )r   rV   rW   Ú
bytes_readÚ
serializedrœ   r   r   r   ÚtestEmptyNestedMessagef  s0   ÿÿþz%ReflectionTest.testEmptyNestedMessageN)1r6   r7   r8   rJ   rX   re   rt   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-  r4  r:  rA  rB  rG  r   r   r   r   rA   p   s^    # "	&>
rA   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 )
Nrf   rh   ri   rk   rl   rZ   )Úar[   )rm   rn   Úrepeatedgroup)r   rR   rp   rq   rr   rs   ÚRepeatedGrouprD   rd   rm   rn   rJ  ©r   rW   r   r   r   Ú testRepeatedCompositeConstructor†  sR   ÿÿý


ýýöÿÿþû


þüþüz5Proto2ReflectionTest.testRepeatedCompositeConstructorc                 C   rB   r   rC   rF   r   r   r   rJ   ¨  rK   z%Proto2ReflectionTest.assertListsEqualc                 C   sj   t  ¡ }|  | d¡¡ |  d|j¡ |  | d¡¡ d|_|  | d¡¡ | d¡ |  | d¡¡ d S )NrO   r   rZ   )r   rR   rS   rT   rD   rO   r“   rŽ   rL  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   rR   rÇ   rD   rS   rT   r¼   r“   rŽ   r”   )Úcomposite_field_nameÚscalar_field_namerW   Úcomposite_fieldÚoriginal_scalar_valueÚnew_valÚold_composite_fieldr%   r   r   ÚTestCompositeHasBitsÞ  s,   



zTProto2ReflectionTest.testHasBitsWithSinglyNestedScalar.<locals>.TestCompositeHasBitsÚoptionalgrouprI  ro   rg   r7  rj   Úoptional_import_messageÚdr   )r   rV  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   ÚTestNestedMessageHasBitsro   Únestedmessage_repeated_int32r³   rD   r“   rT   rŽ   rS   Ú%nestedmessage_repeated_foreignmessager  rL  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 )Nrg   r   r’   rI  rO   )	r   ÚTestMutualRecursionArS   rT   rD   rg   rI  rO   r“   )r   Ú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 )NrZ   r’   ru   )r   ÚTestAllExtensionsÚ
ExtensionsÚoptional_fixed32_extensionÚoptional_int32_extensionÚoptional_string_extensionrD   r¦   rL  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g d¢fg| 	¡ ¡ |jt j= |jt j= |  t jdft jdgfg| 	¡ ¡ d S )	NrZ   r’   r‡   ru   r©   rª   r¯   )ru   r©   rª   )
r   rb  rc  Úrepeated_fixed32_extensionr³   Úrepeated_int32_extensionÚrepeated_string_extensionre  rD   r¦   rL  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 )	NÚmy_intrZ   r‚   Ú	my_stringru   r©   Úmy_floatç      ð?)
r   ÚTestFieldOrderingsr   ÚSetAllFieldsAndExtensionsÚmy_extension_intrD   r¤   r¥   Úmy_extension_stringr¦   rL  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Ú rC  é)   é*   é+   é,   iÓÿÿÿé.   é/   é0   é1   iÎÿÿÿg     ÀI@g     dé@TÚhellos   worldu   áˆ´)*r   rR   rD   rO   rÒ   rÐ   rÓ   Úoptional_sint32Úoptional_sint64r¢   Úoptional_fixed64Úoptional_sfixed32Úoptional_sfixed64rQ   rP   rÀ   rN   r¿   Ú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_bytesrr   Údefault_nested_enumrû   Údefault_foreign_enumr   Ú
IMPORT_BARÚdefault_import_enumÚTestExtremeDefaultValuesÚutf8_stringrL  r   r   r   ÚtestDefaultValues^  sL   ÿz&Proto2ReflectionTest.testDefaultValuesc                 C   s   t  ¡ }|  t|jd¡ d S )Nr¶   )r   rR   r{   r·   rT   rL  r   r   r   Ú testHasFieldWithUnknownFieldName‡  s   z5Proto2ReflectionTest.testHasFieldWithUnknownFieldNamec                    sJ   t  ¡ ‰ tdƒD ]}ˆ j ¡  qt  ¡ }ˆ  |¡ |  t‡ fdd„¡ d S )Nr†   c                      s
   ˆ j d S )Nr’   )Úrepeated_messager   ©rW   r   r   rÛ   ”  s   
 z?Proto2ReflectionTest.testClearRemovesChildren.<locals>.<lambda>)r   ÚTestRequiredForeignrE   r›  r  r)  r{   rô   )r   rI   rœ   r   rœ  r   ÚtestClearRemovesChildren‹  s   
z-Proto2ReflectionTest.testClearRemovesChildrenc                 C   sT   t  ¡ }| d¡ d|_|  | d¡¡ | d¡ |  d|j¡ |  | d¡¡ d S )NrO   rZ   r   )r   rR   rŽ   rO   r“   rT   rD   rS   rL  r   r   r   ÚtestSingleScalarClearField–  s   

z/Proto2ReflectionTest.testSingleScalarClearFieldc                 C   s@  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†   r5  r\   )r’   r†   r5  r  rw   é.ûÿÿru   rO  rZ   )r’   rO  r5  é   )r’   r¡  rO  r5  é   )r¡  rO  r5  r+   )r’   r¡  rO  r5  r¢  c                 s   s    | ]}|V  qd S r   r   )r¬   rI   r   r   r   r®   Æ  s   € z;Proto2ReflectionTest.testRepeatedScalars.<locals>.<genexpr>)r’   r   rZ   r[   r¢  )é#   é(   é-   )r’   r£  r¤  r¥  r¢  r[   )r’   r£  r¥  r¢  r£  é   )r’   r£  r\   r¦  r_   )r   rZ   r[   r\   ©r   rZ   r[   éþÿÿÿéýÿÿÿi,  éd   é'  )r   rR   rS   r_   rD   r3   r³   r“   r{   rô   Ú__getitem__r|   ÚinsertrE   r´   rŽ   Ú__delitem__)r   rW   r!   rI   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’   r†   r+   r\   rZ   r[   r£   )
r   rR   rS   r_   rD   r3   r³   r0  r{   r·   rL  r   r   r   ÚtestRepeatedScalarsRemoveû  s*   z.Proto2ReflectionTest.testRepeatedScalarsRemovec                 C   óX   t  ¡ }|  |j¡ |  dt|jƒ¡ |  |j ¡ ¡ |  |j¡ |  dt|jƒ¡ d S r   )r   rR   rS   r_   rD   r3   ÚassertIsNoneÚreverserL  r   r   r   Ú testRepeatedScalarsReverse_Empty  ó   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   rZ   r[   r\   r+   )	r   rR   rS   r_   rD   r3   r³   r²  r³  rL  r   r   r   Ú#testRepeatedScalarsReverse_NonEmpty#  s   z8Proto2ReflectionTest.testRepeatedScalarsReverse_NonEmptyc                 C   s6  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   r[   rw   r   ru   rZ   r+   rf   r\   rm   r‚   )r   rR   rS   rm   rD   r3   r  r“   rJ   rÆ   rp   r{   rô   r¬  r|   r³   r´   rŽ   rg   Ú	Exception)r   rW   Úm0Úm1Úm2Úm3Úm4r!   rI   Ún1Ún2Ú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   r\   r[   rZ   )r   rR   rD   r3   rm   r  rg   r“   rJ   r0  r{   r·   ©r   rW   r¸  r¹  rº  r   r   r   ÚtestRepeatedCompositeRemove‹  s*   


z0Proto2ReflectionTest.testRepeatedCompositeRemovec                 C   r±  r   )r   rR   rS   rm   rD   r3   r²  r³  rL  r   r   r   Ú"testRepeatedCompositeReverse_Empty¨  rµ  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   rR   rS   rm   rD   r3   r  rg   rJ   r²  r³  rÁ  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   rZ   F)ÚnameÚ	full_namerò   Únumberr>  Úcpp_typeÚlabelÚdefault_valueÚcontaining_typeÚmessage_typeÚ	enum_typeÚis_extensionÚextension_scopeÚoptionsÚ
create_keyÚMyProtoÚignored)
rÆ  rÇ  ÚfilenamerÌ  Únested_typesÚ
enum_typesÚfieldsÚ
extensionsrÑ  rÒ  c                       ó   e Zd Z” ZdS )zDProto2ReflectionTest.testHandWrittenReflection.<locals>.MyProtoClassN©r6   r7   r8   r¤   r   ©Úmydescriptorr   r   ÚMyProtoClassÞ  ó    rÞ  ©Ú	metaclassr‚   )r   r    r   ÚFieldDescriptorÚ
TYPE_INT64ÚCPPTYPE_INT64ÚLABEL_OPTIONALr   ÚFieldOptionsÚ_internal_create_keyÚ
DescriptorÚMessageOptionsr   ÚMessager	   ÚGeneratedProtocolMessageTyperD   rÅ  rS   rT   r“   )r   râ  Úfoo_field_descriptorrÞ  Úmyproto_instancer   rÜ  r   ÚtestHandWrittenReflectionÅ  s:   ÷
úÿ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v ¡ |  dˆjv ¡ |  dˆjv ¡ |  d	ˆjv ¡ |  dˆjv ¡ 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  rÆ  r>  rÈ  r   ÚFieldDescriptorProtorå  rÊ  )rW   rÊ   Ú
field_typeÚ	new_field)ÚAddDescriptorFieldr   r   rõ  ï  s   
zKProto2ReflectionTest.testDescriptorProtoSupport.<locals>.AddDescriptorFieldr   ÚCarrÆ  ÚyearÚ	automaticÚpricerZ   Úownersc                       rÚ  )zCProto2ReflectionTest.testDescriptorProtoSupport.<locals>.CarMessageNrÛ  r   )Údescr   r   Ú
CarMessage  rß  rü  rà  ÚpriusiÚ  Tg    °‹Ø@ÚbobÚsusan)"r   r    rð  r   ÚDescriptorProtorÆ  rò  ÚTYPE_STRINGrã  Ú	TYPE_BOOLÚTYPE_DOUBLErñ  r  r>  rÈ  ÚLABEL_REPEATEDrÊ  r   ÚMakeDescriptorr“   r¥   r   rê  r	   rë  r÷  rø  rù  rú  r´   rÉ   ÚParseMessager”   rD   )r   Ú
desc_protoÚfdprô  rü  rý  Úserialized_priusÚ	new_priusr   )rõ  rû  r   ÚtestDescriptorProtoSupportè  sR   


ÿ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 )Nr‚   r‡   é8   r\   r[   rZ   r   )
r   ÚExtendedMessageÚoptional_int_extensionrc  Úrepeated_int_extensionr³   Úoptional_message_extensionÚforeign_message_intrD   r3   )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 }q3|  
|d¡ d S )Nr‚   r‡   r  rZ   Úhir   r\   )r   r  r  rc  r  r³   r  r  rO   rb   rD   rÆ  Ú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   rO   )r   r  r{   ÚKeyErrorrc  Ú__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   r‚   )r   rb  re  rS   ÚHasExtensionÚassertNotInrc  rD   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   ru   rI  )r   rb  rj  rD   r3   rc  r"  r³   r  r#  r”   r{   r|   ÚoperatorÚsetitem)r   r  r$  Ú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   r‚   rw  rj   rI  )r   rb  Ú"optional_foreign_message_extensionrS   r!  r"  rc  rD   rj   r“   r  r#  r”   rT   r{   r|   r&  r'  )r   r  r$  Ú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   r‚   rw  rI  )r   rb  Úrepeatedgroup_extensionrD   r3   rc  r  rI  r#  r”   r{   r|   r&  r'  )r   r  r$  ÚgroupÚ
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   rb  ÚTestRequiredÚsinglerS   r!  r"  rc  rD   rI  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 )NrZ   z*protobuf_unittest.optional_int32_extensionr   )r   r¤   Úpoolr“   ÚFindExtensionByNumberrb  ÚassertIsÚFindExtensionByNamerÌ  rD   r3   ÚFindAllExtensionsrR   )r   r5  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   r‚   )r   ÚTopLevelMessagerS   rT   rD   r;  rc  r  r“   r  r³   r  r  r3   Úrepeated_message_extensionr  )r   Útoplevelr9  r   r   r   Ú(testHasBitsForAncestorsOfExtendedMessageÛ  s€   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz=Proto2ReflectionTest.testHasBitsForAncestorsOfExtendedMessagec                 C   sD   t  ¡ }|j}t j}|j| }| |¡ d|_|  ||j| ¡ d S r   )r   r<  r;  r  rc  r#  r  r”   )r   r>  r  r$  Ú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 ]%}|  t|j|¡ |  t|j|¡ |  t|jj|¡ |  t|jj|d¡ q1|  t|jt j¡ d S )Nrw   r’   )r   rb  r{   r  r!  r#  rc  r¬  rõ   r   r  r  r  r=  rj  )r   r  Úunknown_handler   r   r   ÚtestExtensionFailureModes  s2   ý
ÿ
ÿÿÿ
ÿz.Proto2ReflectionTest.testExtensionFailureModesc                 C   s6   t  ¡ }d|j_t  ¡ }| |¡ |  d|jj¡ d S )Nrl   )r   rR   rW  rI  r™   rD   ©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   rb  rc  re  r™   rD   rD  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 )NrZ   r[   r   r\   )r   rb  rc  ri  r³   r™   rD   r3   rD  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   r\   r   rZ   r[   )	r   rb  rc  Ú!repeated_nested_message_extensionr  rg   r™   rD   r3   )r   r›   Úext1r  rœ   Ú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   rR   rb  r{   r|   r)  rD  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   rR   r   r    r   r  ÚSetAllNonLazyFieldsr8  rD   r   rb  ÚSetAllExtensions)r   rW   Ú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   Ú
TestOneof2Úfoo_messageÚmoo_intrD   Úfoo_lazy_message)r   r  Úsub_messager   r   r   ÚtestDisconnectingInOneofŽ  s   
z-Proto2ReflectionTest.testDisconnectingInOneofc                 C   s"   |   | ¡ ¡ | ¡  | ¡  d S r   )r“   ÚIsInitializedrÉ   ÚSerializePartialToStringrL  r   r   r   ÚassertInitializedœ  s   z&Proto2ReflectionTest.assertInitializedNc                 C   sN   g }|   | ¡ ¡ |   | |¡¡ |  |t|ƒ¡ |  tj|j¡ | ¡  d S r   )	rS   rZ  rD   r3   r{   r   ÚEncodeErrorrÉ   r[  )r   rW   Ú
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  ¡ }|  | |¡¡ |  |g d¢¡ |  t|jddd¡ d S )Nr\   r[   rZ   r   r  ©rI  Úbrj   )r   rR   r\  rb  r1  r`  rI  rb  rj   r  Úoptional_messager›  r  Úmultirc  r2  rS   rZ  rD   r{   r|   )r   rW   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
¡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 raisedr6   z test_file_descriptor_errors.msg1)r   ÚFileDescriptorProtorÆ  ÚpackagerÍ  r  r   ÚFileDescriptorrÉ   r{   r|   r“   ÚhasattrrÇ   r  r  r«   ri  )r   Ú	file_nameÚpackage_nameÚfile_descriptor_protor¹  Úanother_file_namerº  Úcmr   r   r   ÚtestFileDescriptorErrorsæ  s8   
ý
ýÿ"õz-Proto2ReflectionTest.testFileDescriptorErrorsc                 C   sb  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y    d}Y nw |	j}|  |p­t|ƒtu ¡ d S )	Nr<  r=  rZ   r   iÊ¿Ýó   ÿFT)r   ÚTestMessageSetÚTestMessageSetExtension2Úmessage_set_extensionr?  rc  r«   rÉ   rD   r   r3   r   ÚRawMessageSetrD  r  Útype_idr“   r   Úendswithr>  ÚreplaceÚUnicodeDecodeErrorr   )r   rW   Úextension_messager$  Ú	test_utf8Útest_utf8_bytesrF  ÚrawrE  r&  ÚbadbytesÚunicode_decode_failedÚstring_fieldr   r   r   ÚtestStringUTF8Serialization  s<   

	ÿÿz0Proto2ReflectionTest.testStringUTF8Serializationc                 C   s6   t  ¡ }|  | d¡¡ |j ¡  |  | d¡¡ d S )NrW  )r   rR   rS   rT   rW  ÚSetInParentr“   rL  r   r   r   ÚtestSetInParent>  r—   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ˆ  ÚmyprotoÚOuterrD   ÚinnerrË   )r   rˆ  Úmsgr   r   r   ÚtestPackageInitializationImportD  s   
z4Proto2ReflectionTest.testPackageInitializationImportr   ):r6   r7   r8   rM  rJ   rN  rZ  r^  ra  rg  rk  rt  r™  rš  rž  rŸ  r¯  r°  r´  r¶  rÀ  rÂ  rÃ  rÄ  rî  r   ÚSkipReferenceLeakCheckerr  r  r  r  r%  r)  r,  r0  r4  r:  r?  rA  rC  rE  rF  rG  rM  rN  rR  rY  r\  r`  re  ÚunittestÚskipIfr   r    rt  r…  r‡  r  r   r   r   r   rH  ƒ  sn    "Q)ZS#
>1
		
	;
þ
6rH  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   rR   Úfirst_protoÚsecond_protor%   r   r   r   ÚsetUp]  s   
zTestAllTypesEqualityTest.setUpc                 C   ó   |   tt| j¡ d S r   ©r{   r|   Úhashr”  r%   r   r   r   ÚtestNotHashablea  rÞ   z(TestAllTypesEqualityTest.testNotHashablec                 C   s   |   | j| j¡ d S r   )rD   r”  r%   r   r   r   ÚtestSelfEqualityd  rÞ   z)TestAllTypesEqualityTest.testSelfEqualityc                 C   ó   |   | j| j¡ d S r   ©rD   r”  r•  r%   r   r   r   ÚtestEmptyProtosEqualg  rÞ   z-TestAllTypesEqualityTest.testEmptyProtosEqualN)r6   r7   r8   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   rR   r”  r•  r   r  r%   r   r   r   r–  p  s   

zFullProtosEqualityTest.setUpc                 C   r—  r   r˜  r%   r   r   r   rš  v  rÞ   z&FullProtosEqualityTest.testNotHashablec                 C   s    |   | jd ¡ |   d | j¡ d S r   )r1  r”  r•  r%   r   r   r   ÚtestNoneNotEqualy  s   z'FullProtosEqualityTest.testNoneNotEqualc                 C   s(   t  ¡ }|  | j|¡ |  || j¡ d S r   )r   r1  r1  r”  r•  )r   Úthird_protor   r   r   ÚtestNotEqualToOtherMessage}  s   z1FullProtosEqualityTest.testNotEqualToOtherMessagec                 C   rœ  r   r  r%   r   r   r   ÚtestAllFieldsFilledEquality‚  rÞ   z2FullProtosEqualityTest.testAllFieldsFilledEqualityc                 C   s@   | j  jd7  _|  | j | j¡ | j  d¡ |  | j | j¡ d S )NrZ   rO   )r”  rO   r1  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 )NrZ   rg   ro   )r”  ro   rg   r1  r•  rD   rŽ   r%   r   r   r   ÚtestNonRepeatedComposite  s   ÿz/FullProtosEqualityTest.testNonRepeatedCompositec                 C   s>   | j j d¡ |  | j | j¡ | j  d¡ |  | j | j¡ d S )Nr’   r_   )r”  r_   r³   r1  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   rZ   )r”  rm   rg   r1  r•  rD   r  r%   r   r   r   ÚtestRepeatedComposite¤  s   z,FullProtosEqualityTest.testRepeatedCompositec                 C   s(   | j  d¡ d| j_|  | j | j¡ d S )NrO   r   )r”  rŽ   r•  rO   r1  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 )Nro   rg   r   )r”  rŽ   r•  ro   r1  rg   rD   r%   r   r   r   ÚtestNonRepeatedCompositeHasBits·  s   
z6FullProtosEqualityTest.testNonRepeatedCompositeHasBitsN)r6   r7   r8   r9   r–  rš  r   r¢  r£  r¤  r¥  r¦  r§  r¨  r©  r   r   r   r   rŸ  k  s    rŸ  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 )NrZ   r   )	r   rb  rD   r   rP  r1  rc  re  r#  ©r   r”  r•  r   r   r   ÚtestExtensionEqualityÅ  s,   

ÿz+ExtensionEqualityTest.testExtensionEqualityN)r6   r7   r8   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_  rD   rg   rI  rO   r1  r¬  r   r   r   ÚtestEqualityWithMutualRecursionç  s   z;MutualRecursionEqualityTest.testEqualityWithMutualRecursionN)r6   r7   r8   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   rR   rW   r   r  Úextended_protoÚTestPackedTypesÚpacked_protoÚTestPackedExtensionsÚpacked_extended_protor%   r   r   r   r–  ô  s   


zByteSizeTest.setUpc                 C   s
   | j  ¡ S r   )rW   r   r%   r   r   r   ÚSizeú  s   
zByteSizeTest.Sizec                 C   s   |   d| j ¡ ¡ d S r   )rD   rW   r   r%   r   r   r   ÚtestEmptyMessageý  s   zByteSizeTest.testEmptyMessagec                 C   s8   t  ¡ }|  d| ¡ ¡ t jdd}|  d| ¡ ¡ d S )Nr   rZ   )rÒ   r[   )r   rR   rD   r   )r   rW   Ú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 rè   )rW   r8  rÒ   rD   r·  )rI   Úexpected_varint_sizer%   r   r   ÚTest		  s   
z&ByteSizeTest.testVarints.<locals>.Testr   rZ   rS  é?   r«  r  r†   r¨  rì   )ÚziprE   )r   r¼  rI   Ú	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 )Nru  r[   r‰   Ú€xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr\   )rW   rN   rD   r·  r3   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 )Nrw   r’   é	   gX9´Èv¾ó?é@   r\   )
rW   r¢   rD   r·  r   rR   r  rQ   rP   r  r%   r   r   r   ÚtestOtherNumerics$	  s   



zByteSizeTest.testOtherNumericsc                 C   ó   d| j j_|  d|  ¡ ¡ d S )Ni @  rS  )rW   ro   rg   rD   r·  r%   r   r   r   ÚtestComposites>	  s   
zByteSizeTest.testCompositesc                 C   rÆ  )Ni    r†   )rW   rW  rI  rD   r·  r%   r   r   r   Ú
testGroupsF	  s   
zByteSizeTest.testGroupsc                 C   s0   | j j d¡ | j j d¡ |  d|  ¡ ¡ d S ©Nr†   é€   rS  )rW   r_   r³   rD   r·  r%   r   r   r   r¯  M	  s   z ByteSizeTest.testRepeatedScalarsc                 C   s&   | j j ddg¡ |  d|  ¡ ¡ d S rÉ  )rW   r_   r´   rD   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 )Nr†   rÊ  rS  r\   )rW   r_   r³   rD   r·  r0  r%   r   r   r   r°  X	  s
   z&ByteSizeTest.testRepeatedScalarsRemovec                 C   ó2   | j j ¡ }| j j ¡ }d|_|  d|  ¡ ¡ d S )NrS  r1   )rW   rm   r  rg   rD   r·  )r   Úforeign_message_0Úforeign_message_1r   r   r   rÀ  `	  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Ã  r1   r   r’   rl   r†   rZ   r[   rž   r  )rW   rm   r  rg   rD   r·  r.  r/  r3   r   r    )r   rÍ  rÎ  rm   Úforeign_message_2r   r   r   ÚtestRepeatedCompositesDeleteh	  s0   ÿ



ÿz)ByteSizeTest.testRepeatedCompositesDeletec                 C   rÌ  )NrS  r‡   )rW   rJ  r  rI  rD   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‚   r[   rO   )r   rb  rD   r   re  rc  rR   r¤   r¥   r{   r  )r   rW   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 )NrZ   r[   rÊ  r\   rO   r   )
rW   rO   rD   r   rŽ   r   r  r²  rc  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 )NrZ   r\   r  rÊ  rS  r_   r   r[   r+   r’   )rW   r_   r³   rD   r   rŽ   r   r  r²  rc  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 )NrZ   r’   rÊ  r  rj   r\   r7  r   rž   r+   )rW   r7  rj   rD   r   rŽ   r   r    r   r  r²  rc  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 )
Nr\   r  rZ   r1   rn   r   r[   r+   r  )rW   rn   r  rD   r   rj   rŽ   r   r=  r²  rc  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Ê  r  gÍÌÌÌÌÌ@g      
@é   Úpacked_int32)rD   r´  r   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   rY   rÞ  )rD   r¶  r   rc  r   Úpacked_fixed32_extensionr´   rÕ  r   r   r   ÚtestPackedExtensions
  s   ÿz!ByteSizeTest.testPackedExtensionsN)r6   r7   r8   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±  ñ  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   rR   rÉ   rD   r   r3   rD  ©r   r”  r•  rF  r   r   r   ÚtestSerializeEmtpyMessage-
  s   þz+SerializationTest.testSerializeEmtpyMessagec                 C   s\   t  ¡ }t  ¡ }t |¡ | ¡ }|  | ¡ t|ƒ¡ |  t|ƒ| |¡¡ |  ||¡ d S r   )	r   rR   r   r  rÉ   rD   r   r3   rD  rç  r   r   r   ÚtestSerializeAllFields7
  s   
þz(SerializationTest.testSerializeAllFieldsc                 C   sH   t  ¡ }t  ¡ }t |¡ | ¡ }|  t|ƒ| |¡¡ |  ||¡ d S r   )r   rb  r   rP  rÉ   rD   r3   rD  rç  r   r   r   ÚtestSerializeAllExtensionsB
  s   
þz,SerializationTest.testSerializeAllExtensionsc                 C   sF   t  ¡ }t  ¡ }d|j_| ¡ }|  t|ƒ| |¡¡ |  ||¡ d S )Néò   )r   rR   rW  rI  rÉ   rD   r3   rD  rç  r   r   r   ÚtestSerializeWithOptionalGroupL
  s   þz0SerializationTest.testSerializeWithOptionalGroupc                 C   sL   t  ¡ }d|_d|_d|_d|_d|_d|_t j | 	¡ ¡}|  
||¡ d S )Nr  lýÿÿÿ     r©  lýÿÿÿ     éûÿÿÿlýÿÿÿ     )r   rR   rO   rÒ   r  r€  r‚  rƒ  r  rÉ   rD   r¬  r   r   r   ÚtestSerializeNegativeValuesV
  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ž   rZ   r   z@Parsing unknown fields failed when parsing known fields did not.)r   r    r   rR   r   r  Ú
memoryviewrÉ   rE   r3   ÚTestEmptyMessageÚ_InternalParserD   r   ÚDecodeErrorÚfailr{   )r   r”  rF  Útruncation_pointr•  Úunknown_fieldsÚposÚpos2r   r   r   ÚtestParseTruncatede
  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+   r\   r[   rZ   )r   ÚOutOfOrderFieldsr  rc  rÓ   rÐ   rÒ   rO   rÉ   rD   r   r3   r   r)   r   ÚWIRETYPE_VARINTr:   r;   r<   r=   r>   ©r   rW   rF  rY  ÚReadTagr   r   r   ÚtestCanonicalSerializationOrderƒ
  s(   z1SerializationTest.testCanonicalSerializationOrderc                 C   s(   t  ¡ }t |¡ | ¡ }t |¡ d S r   )r   rp  r   rq  rÉ   Ú#ExpectAllFieldsAndExtensionsInOrder)r   rW   rF  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‚   rw  rª   rª  r  )r   rR   rb   r³   rO   ro   rg   rÉ   rD  rD   r3   rd   )r   r”  rF  r•  Ú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£   ru   r©   Fr\   r   rZ   r[   )r   rv  ÚTestMessageSetExtension1rw  rx  Úmessage_set_extension3rc  rI   r«   ÚtextrÉ   r   ry  rD   r¤   Ú
GetOptionsÚmessage_set_wire_formatr3   rD  r  r   ÚTestMessageSetExtension3r   )r   rW   Úextension_message1Úextension_message2Ú
extension1Ú
extension2Ú
extension3rF  r  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­¿Ýru   )r   ry  r  r  rz  r   r  rI   rÉ   r   rw  r«   rv  rD   r3   rD  rx  rc  )r   r  r  r	  r%  rF  rW   r  r   r   r   Ú(testMessageSetWireFormatUnknownExtensionð
  s6   





þz:SerializationTest.testMessageSetWireFormatUnknownExtensionc                 C   sp   t  ¡ }t |¡ | ¡ }t  ¡ }|  t|ƒ| |¡¡ t  ¡ }d|_	| ¡ }t  ¡ }|  t|ƒ| |¡¡ d S )Nl   ÿÿÿÿ)
r   rR   r   r  rÉ   rð  rD   r3   rD  rÒ   )r   rW   rF  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 exception type and message are as expected.Nrj  )rD   r«   ÚfailureException)r   Ú	exc_classÚcallable_objri  Ú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,crI  rZ   zFMessage protobuf_unittest.TestRequired is missing required fields: b,cr[   zDMessage protobuf_unittest.TestRequired is missing required fields: cr\   )r   r1  r  r   r]  rÉ   r[  rS   rT   rÈ   rI  rb  rj   rD   r3   rD  )r   rW   Úpartialrœ   rF  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 )NrZ   zoMessage protobuf_unittest.TestRequiredForeign is missing required fields: optional_message.b,optional_message.cr[   r\   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É   rc  rI  r  r   r]  rb  rj   r›  r  rL  r   r   r   Ú$testSerializeUninitializedSubMessager  s.   ýýz6SerializationTest.testSerializeUninitializedSubMessagec                 C   s`   t  ¡ }t  ¡ }t |¡ | ¡ }|  | ¡ t|ƒ¡ | |¡}|  | ¡ |¡ |  ||¡ d S r   )	r   r³  r   ÚSetAllPackedFieldsrÉ   rD   r   r3   rD  ©r   r”  r•  rF  rE  r   r   r   ÚtestSerializeAllPackedFields“  s   

z.SerializationTest.testSerializeAllPackedFieldsc                 C   sL   t  ¡ }t  ¡ }t |¡ | ¡ }| |¡}|  | ¡ |¡ |  ||¡ d S r   )r   rµ  r   ÚSetAllPackedExtensionsrÉ   rD  rD   r   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 )
NrZ   r[   ç      @r\   ro  ç       @r+   )r\   rZ   r[   )ro  r   r  )r   r³  rß  r´   rà  r³   rÉ   Úpacked_sint32rD   r3   rD  )r   r”  rF  r•  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)rZ   r[   é–   r\   ro  g     @@r   éZ   r’   rZ   r[   r#  r\   rª  r+   ée   r6  )r   r³  rß  r´   rà  Úpacked_floatr³   rÉ   rD   r   r3   r   r)   r   ÚWIRETYPE_LENGTH_DELIMITEDr:   r/   r2   r“   r4   rû  r   r   r   ÚtestPackedFieldsWireFormat¸  s,   z,SerializationTest.testPackedFieldsWireFormatc                 C   óZ   t  ¡ }t |¡ t  ¡ }| ¡ }|  t|ƒ| |¡¡ t  ¡ }t 	|¡ |  ||¡ d S r   )
r   ÚTestUnpackedTypesr   ÚSetAllUnpackedFieldsr³  rÉ   rD   r3   rD  r  )r   ÚunpackedÚpackedrF  r  r   r   r   ÚtestParsePackedFromUnpackedÐ  ó   
þ
z-SerializationTest.testParsePackedFromUnpackedc                 C   r)  r   )
r   r³  r   r  r*  rÉ   rD   r3   rD  r+  )r   r-  r,  rF  r  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 )	NrZ   r6  é   r¯   é   rz  r|  é3   )r   rR   rD   rp   Ú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é  rZ   r6  r1  r¯   r2  rz  r|  r3  )rD   r   r1  r2  rÈ  ÚSINGLE_FIELD_NUMBERrd  ÚMULTI_FIELD_NUMBERre  Ú%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_NUMBERri  Ú%REPEATED_INT32_EXTENSION_FIELD_NUMBERr-  Ú$REPEATEDGROUP_EXTENSION_FIELD_NUMBERrJ  Ú.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 )NrO   ro   r_   )r   rR   r7  rO   r¤   r¥   rD   r5  rÈ  ro   r7  r_   r9  )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 d   ƒ n1 s3w   Y  z	t jj	 |¡ W n
 t
yK   Y d S w 	 d S )Nrw  r¡  )r   rR   rO   rD   Ú__get__Ú__set__r{   r»   rs   rj   r|   )r   rŽ  r   r   r   ÚtestFieldDataDescriptor!  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 )NrZ   ru   Ts   barrf   ri   ©rZ   r[   r\   )	rO   rN   rÀ   r¿   ro   r7  rî   Úoptional_foreign_enumr_   rO   rN   rÀ   r¿   ro   r7  rî   rS  )r   rR   rp   rs   rq   rú   r“   rZ  rT   rD   rO   rN   rÀ   r¿   ro   rg   r7  rj   rî   rS  r_   rL  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)rU  )r   rð  )Úunused_protor   r   r   Ú(InitalizeEmptyMessageWithExtraKeywordArgR  r5   z`SerializationTest.testInitArgsUnknownFieldName.<locals>.InitalizeEmptyMessageWithExtraKeywordArgz9Protocol message TestEmptyMessage has no "unknown" field.)r  r·   )r   rW  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 )NrZ   ra  rI  rb  rj   Údummy2)
r   r1  r“   rZ  rT   rS   rD   rI  rb  rj   rL  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 )	NrZ   ra  )rc  rc  rI  rb  rj   rY  )r   r  r1  r“   rZ  rT   rc  rS   rD   rI  rb  rj   rL  r   r   r   ÚtestInitRequiredForeignKwargsd  s    ÿÿz/SerializationTest.testInitRequiredForeignKwargsc                 C   sX   t jg d¢d}|  | ¡ ¡ |  d|jd ¡ |  d|jd ¡ |  d|jd ¡ d S )NrR  ry   rZ   r   r[   r\   )r   rR   r“   rZ  rD   r_   rL  r   r   r   ÚtestInitRepeatedKwargst  s
   z(SerializationTest.testInitRepeatedKwargsN)!r6   r7   r8   rè  ré  rê  rì  rî  rø  rý  rÿ  r  r  r  r  r  r  r  r  r  r"  r(  r.  r0  r=  rL  rN  rQ  rT  rX  rZ  r[  r\  r   r   r   r   ræ  *
  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   rv  rD   r¤   r  r  r   rR   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 )NrZ   r  FT)r   rR   rO   rP   r¦   rD   r  r-  r³  rß  r³   rà  r   râ  r  rÊ  )r   rW   Úfield_descriptorÚ_r   r   r   ÚtestPackedOptions‡  s   
ÿþzOptionsTest.testPackedOptionsN)r6   r7   r8   r^  ra  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 )NÚleafzpackage.parent.child.leafru  )rÌ  rØ  rÖ  r×  rÙ  rÒ  rÙ  zpackage.parent.childÚsiblingzpackage.parent.siblingÚparentzpackage.parent)r   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   rk  r
   ÚMergerÉ   )r   rÆ  Ú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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ß  rt  rà  úflat: 0 flat: 1 flat: 2 r§  )r   r    r   rk  rÈ   ro  r   r  rÍ  r   rê  r	   rë  r
   rl  rD   Úflat)r   rn  rt  rŽ  Úmsg_strr   rr  r   Ú0testParsingFlatClassWithExplicitClassDeclarationö  s   
ÿÿÿz=ClassAPITest.testParsingFlatClassWithExplicitClassDeclarationc                 C   s^   t  ¡ }| |  d¡¡ t |jd ¡}t |¡}|ƒ }d}t	 
||¡ |  |jg d¢¡ dS )rp  ÚBr   ru  r§  N)r   rk  rÈ   ro  r   r  rÍ  r	   rf  r
   rl  rD   rv  ©r   rn  rs  Ú	msg_classrŽ  rw  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   rk  rÈ   ro  r   r  rÍ  r	   rf  r
   rl  rD   r©   rª   Údeeprz  r   r   r   ÚtestParsingNestedClass"  s   ÿ
ÿz#ClassAPITest.testParsingNestedClassN)r6   r7   r8   r‘  r’  r   r    r   r  rk  ro  rx  r|  r  r   r   r   r   rb  ˜  s    
þ8

rb  Ú__main__).r9   r.  r   r&  r-   rÁ   Úwarningsr‘  Úgoogle.protobufr   r   r   r   r   r   r   r	   r
   rŠ  r   r   r   r   r   r   r   r   r   ÚsimplefilterÚDeprecationWarningÚobjectr   Únamed_parametersÚTestCaserA   rH  r“  rŸ  r«  r¯  r±  ræ  r]  rb  r6   Úmainr   r   r   r   Ú<module>   sš   -þ               _V!  :    U 
ÿ