o
    1ήc                     @   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   O/tmp/pip-target-vg8gfxp4/lib/python/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+   Gz?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 )zVerifies 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 )zVerifies 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 sw   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   aa   Тест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\ Z1e23e45 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   ig     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 sw   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}| |pt|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_package9   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   	   gX9v?@   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\   zMessage 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 
