o
    1ήc                     @   s   d Z dZddlZddlZddlZddlmZ ddlmZ ze	 W n e
y+   eZ	Y nw dd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZG dd dejZdS ) zpUtilities for Python proto2 tests.

This is intentionally modeled on C++ code in
//google/protobuf/test_util.*.
z#robinson@google.com (Will Robinson)    N)unittest_import_pb2)unittest_pb2c                 C   s   | j jdkS )Nproto2)
DESCRIPTORsyntaxmessage r	   I/tmp/pip-target-vg8gfxp4/lib/python/google/protobuf/internal/test_util.pyIsProto27   s   r   c                 C   s  d| _ d| _d| _d| _d| _d| _d| _d| _d	| _d
| _	d| _
d| _d| _d| _d| _t| r5d| j_d| j_d| j_d| j_d| j_tjj| _tj| _t| rVt j!| _"d| _#d| _$| j%&d | j'&d | j(&d | j)&d | j*&d | j+&d | j,&d | j-&d | j.&d | j/&d  | j0&d! | j1&d" | j2&d | j3&d# | j4&d$ t| rd%| j56 _d&| j76 _d'| j86 _d(| j96 _d)| j:6 _| j;&tjj< | j=&tj> t| r| j?&t j@ | jA&d* | jB&d+ | j%&d, | j'&d, | j(&d, | j)&d, | j*&d, | j+&d, | j,&d, | j-&d, | j.&d, | j/&d, | j0&d, | j1&d, | j2&d | j3&d- | j4&d. d/| j%d0< d1| j'd0< d2| j(d0< d3| j)d0< d4| j*d0< d5| j+d0< d6| j,d0< d7| j-d0< d8| j.d0< d9| j/d0< d:| j0d0< d;| j1d0< d<| j2d0< d=| j3d0< d>| j4d0< t| rd?| j56 _d@| j76 _dA| j86 _dB| j96 _dC| j:6 _| j;&tjj< tjj| j;d0< | j=&tj t| r| j?&t j! | jA&dD | jB&dE t| r9dF| _CdG| _DdH| _EdI| _FdJ| _GdK| _HdL| _IdM| _JdN| _KdO| _LdP| _MdQ| _Nd<| _OdR| _PdS| _QtjjR| _StjT| _Ut jV| _WdT| _XdU| _YdV| _ZdW| j[_dX| _\dY| _]dZS )[zmSets every non-lazy field in the message to a unique value.

  Args:
    message: A TestAllTypes instance.
  e   f   g   h   i   j   k   l   m   n   o   p   T115   116u   v   w   x   ~   124125                                    215   216               224225r   0   0-     .  /  0  1  2  3  4  5  6  7  8  F315   316=  >  ?  @  G  324325                        415   416424425Y  Z  603   604N)^optional_int32optional_int64optional_uint32optional_uint64optional_sint32optional_sint64optional_fixed32optional_fixed64optional_sfixed32optional_sfixed64optional_floatoptional_doubleoptional_booloptional_stringoptional_bytesr   optionalgroupaoptional_nested_messagebboptional_foreign_messagecoptional_import_messagedoptional_public_import_messageer   TestAllTypesBAZoptional_nested_enumFOREIGN_BAZoptional_foreign_enumr   
IMPORT_BAZoptional_import_enumoptional_string_pieceoptional_cordrepeated_int32appendrepeated_int64repeated_uint32repeated_uint64repeated_sint32repeated_sint64repeated_fixed32repeated_fixed64repeated_sfixed32repeated_sfixed64repeated_floatrepeated_doublerepeated_boolrepeated_stringrepeated_bytesrepeatedgroupaddrepeated_nested_messagerepeated_foreign_messagerepeated_import_messagerepeated_lazy_messagerepeated_nested_enumBARrepeated_foreign_enumFOREIGN_BARrepeated_import_enum
IMPORT_BARrepeated_string_piecerepeated_cord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_bytesFOOdefault_nested_enumFOREIGN_FOOdefault_foreign_enum
IMPORT_FOOdefault_import_enumdefault_string_piecedefault_cordoneof_uint32oneof_nested_messageoneof_stringoneof_bytesr   r	   r	   r
   SetAllNonLazyFields;   s   




















r   c                 C   s   t |  d| j_d| j_d S )N      )r   optional_lazy_messagert    optional_unverified_lazy_messager   r	   r	   r
   SetAllFields   s   r   c                 C   sn  | j }t}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 _|jj||j < |jj||j < |j!||j"< |j#||j$< d||j%< d||j&< ||j' (d ||j) (d ||j* (d ||j+ (d ||j, (d ||j- (d ||j. (d ||j/ (d  ||j0 (d! ||j1 (d" ||j2 (d# ||j3 (d$ ||j4 (d ||j5 (d% ||j6 (d& d'||j7 8 _d(||j9 8 _d)||j: 8 _d*||j; 8 _d+||j< 8 _||j= (|jj> ||j? (|j@ ||jA (|jB ||jC (d, ||jD (d- ||j' (d. ||j) (d/ ||j* (d0 ||j+ (d1 ||j, (d2 ||j- (d3 ||j. (d4 ||j/ (d5 ||j0 (d6 ||j1 (d7 ||j2 (d8 ||j3 (d9 ||j4 (d: ||j5 (d; ||j6 (d< d=||j7 8 _d>||j9 8 _d?||j: 8 _d@||j; 8 _dA||j< 8 _||j= (|jj ||j? (|j! ||jA (|j# ||jC (dB ||jD (dC dD||jE< dE||jF< dF||jG< dG||jH< dH||jI< dI||jJ< dJ||jK< dK||jL< dL||jM< dM||jN< dN||jO< dO||jP< d:||jQ< dP||jR< dQ||jS< |jjT||jU< |jV||jW< |jX||jY< dR||jZ< dS||j[< dT||j\< dU||j] _dV||j^< dW||j_< dXS )YzzSets every extension in the message to a unique value.

  Args:
    message: A unittest_pb2.TestAllExtensions instance.
  r   r   r   r   r   r   r   r   r   r   r   r   Tr   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r8   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   FrE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   N)`
Extensionsr   r   optional_int32_extensionoptional_int64_extensionoptional_uint32_extensionoptional_uint64_extensionoptional_sint32_extensionoptional_sint64_extensionoptional_fixed32_extensionoptional_fixed64_extensionoptional_sfixed32_extensionoptional_sfixed64_extensionoptional_float_extensionoptional_double_extensionoptional_bool_extensionoptional_string_extensionoptional_bytes_extensionoptionalgroup_extensionrr   !optional_nested_message_extensionrt   "optional_foreign_message_extensionrv   !optional_import_message_extensionrx   (optional_public_import_message_extensionrz   optional_lazy_message_extension*optional_unverified_lazy_message_extensionr{   r|   optional_nested_enum_extensionr~   optional_foreign_enum_extensionr   optional_import_enum_extensionoptional_string_piece_extensionoptional_cord_extensionrepeated_int32_extensionr   repeated_int64_extensionrepeated_uint32_extensionrepeated_uint64_extensionrepeated_sint32_extensionrepeated_sint64_extensionrepeated_fixed32_extensionrepeated_fixed64_extensionrepeated_sfixed32_extensionrepeated_sfixed64_extensionrepeated_float_extensionrepeated_double_extensionrepeated_bool_extensionrepeated_string_extensionrepeated_bytes_extensionrepeatedgroup_extensionr   !repeated_nested_message_extension"repeated_foreign_message_extension!repeated_import_message_extensionrepeated_lazy_message_extensionrepeated_nested_enum_extensionr   repeated_foreign_enum_extensionr   repeated_import_enum_extensionr   repeated_string_piece_extensionrepeated_cord_extensiondefault_int32_extensiondefault_int64_extensiondefault_uint32_extensiondefault_uint64_extensiondefault_sint32_extensiondefault_sint64_extensiondefault_fixed32_extensiondefault_fixed64_extensiondefault_sfixed32_extensiondefault_sfixed64_extensiondefault_float_extensiondefault_double_extensiondefault_bool_extensiondefault_string_extensiondefault_bytes_extensionr   default_nested_enum_extensionr   default_foreign_enum_extensionr   default_import_enum_extensiondefault_string_piece_extensiondefault_cord_extensiononeof_uint32_extensiononeof_nested_message_extensiononeof_string_extensiononeof_bytes_extension)r   
extensionspb2
import_pb2r	   r	   r
   SetAllExtensions   s   



































r  c                 C   s.   d| _ d| _d| _d| jtj< d| jtj< dS )zSets every field and extension in the message to a unique value.

  Args:
    message: A unittest_pb2.TestAllExtensions message.
  r9   foo      ?   barN)my_int	my_stringmy_floatr   r   my_extension_intmy_extension_stringr   r	   r	   r
   SetAllFieldsAndExtensionso  s
   r  c                 C   s   t j}t j}g }t  }d|_||  |  d|j|< ||  |  d|_	||  |  d|j|< ||  |  d|_
||  |  d|}|| krgtd|| f dS )	zEnsures that serialized is the serialization we expect for a message
  filled with SetAllFieldsAndExtensions().  (Specifically, ensures that the
  serialization is in canonical, tag-number order).
  r9   r  r  r  r      zExpected %r, found %rN)r   r  r  TestFieldOrderingsr  r   SerializeToStringClearr   r  r  join
ValueError)
serializedr  r  expected_stringsr   expectedr	   r	   r
   #ExpectAllFieldsAndExtensionsInOrder|  s.   


r'  c                 C   s
  |  |d |  |d |  |d |  |d |  |d |  |d |  |d |  |d |  |d	 |  |d
 |  |d |  |d |  |d |  |d |  |d t|r|  |d |  |d |  |d |  |d |  |jd |  |jd |  |jd |  |jd |  |d |  |d t|r|  |d |  |d |  |d | d|j | d|j	 | d|j
 | d |j | d!|j | d"|j | d#|j | d$|j | d%|j | d&|j | d'|j | d(|j | d)|j | d*|j | d+|j t|rb| d,|jj | d-|jj | d.|jj | d/|jj | d0|jj | d1|jj | d2|jj | tj j!|j" | tj#|j$ t|r| t%j&|j' | d3t(|j) | d3t(|j* | d3t(|j+ | d3t(|j, | d3t(|j- | d3t(|j. | d3t(|j/ | d3t(|j0 | d3t(|j1 | d3t(|j2 | d3t(|j3 | d3t(|j4 | d3t(|j5 | d3t(|j6 | d3t(|j7 t|rE| d3t(|j8 | d3t(|j9 | d3t(|j: | d3t(|j; | d3t(|j< | d3t(|j= t|r| d3t(|j> | d3t(|j? | d3t(|j@ | d4|j)d5  | d6|j*d5  | d7|j+d5  | d8|j,d5  | d9|j-d5  | d:|j.d5  | d;|j/d5  | d<|j0d5  | d=|j1d5  | d>|j2d5  | d?|j3d5  | d@|j4d5  | d)|j5d5  | dA|j6d5  | dB|j7d5  t|r(| dC|j8d5 j | dD|j9d5 j | dE|j:d5 j | dF|j;d5 j | dG|jAd5 j | tj jB|j<d5  | tjC|j=d5  t|rt| t%jD|j>d5  | dH|j)dI  | dJ|j*dI  | dK|j+dI  | dL|j,dI  | dM|j-dI  | dN|j.dI  | dO|j/dI  | dP|j0dI  | dQ|j1dI  | dR|j2dI  | dS|j3dI  | dT|j4dI  | dU|j5dI  | dV|j6dI  | dW|j7dI  t|r
| dX|j8dI j | dY|j9dI j | dZ|j:dI j | d[|j;dI j | d\|jAdI j | tj j!|j<dI  | tj#|j=dI  t|rV| t%j&|j>dI  t|ro|  |d] |  |d^ |  |d_ |  |d` |  |da |  |db |  |dc |  |dd |  |de |  |df |  |dg |  |dh |  |di |  |dj |  |dk |  |dl |  |dm |  |dn | do|jE | dp|jF | dq|jG | dr|jH | ds|jI | dt|jJ | du|jK | dv|jL | dw|jM | dx|jN | dy|jO | dz|jP | dU|jQ | d{|jR | d||jS | tj jT|jU | tjV|jW | t%jX|jY d}S d}S )~zFCheck all fields for correct values have after Set*Fields() is called.rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rs   ru   rw   rr   rt   rv   rx   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Tr   r   r   r   r   r   r   r   r      r!   r   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   FrE   rF   rG   rH   rI   rJ   rK   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   N)Z
assertTrueHasFieldr   rq   rs   ru   rw   assertEqualrb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rr   rt   rv   rx   ry   rz   r   r   r   r{   r|   r}   r~   r   r   r   r   lenr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )	test_caser   r	   r	   r
   ExpectAllFieldsSet  s  












r.  c                 C   s   d}t j|r-t jt j|dr t j|d| }t|dS t j|d}t j|sd}t j|d| }t j|rBt|dS t jd| }t j|rTt|dS td)	zFFinds the given golden file and returns a file object representing it..zsrc/google/protobufzsrc/google/protobuf/testdatarbz..z'third_party/py/google/protobuf/testdataz9external/com_google_protobuf/src/google/protobuf/testdatazCould not find golden files.  This test must be run from within the protobuf source package so that it can read test data files from the C++ source tree.)ospathexistsr"  openRuntimeError)filenamer2  	full_pathr	   r	   r
   
GoldenFilel  s*   



r8  c                 C   s4   t | }| W  d   S 1 sw   Y  dS )z5Finds the given golden file and returns its contents.N)r8  read)r6  fr	   r	   r
   GoldenFileData  s   
$r;  c                 C      | j ddg | jddg | jddg | jddg | jd	d
g | jddg | jddg | jddg | j	ddg | j
ddg | jddg | jddg | jddg | jtjtjg dS )zgSets every field in the message to a unique value.

  Args:
    message: A TestPackedTypes instance.
  r^     r_     [    \    ]    ^    _    `    a    b         @     8@      @     @@TFN)packed_int32extendpacked_int64packed_uint32packed_uint64packed_sint32packed_sint64packed_fixed32packed_fixed64packed_sfixed32packed_sfixed64packed_floatpacked_doublepacked_boolpacked_enumr   r   r~   r   r	   r	   r
   SetAllPackedFields      

rb  c                 C   s*  | j }t}||j ddg ||j ddg ||j ddg ||j ddg ||j d	d
g ||j ddg ||j	 ddg ||j
 ddg ||j ddg ||j ddg ||j ddg ||j ddg ||j ddg ||j tjtjg dS )z}Sets every extension in the message to a unique value.

  Args:
    message: A unittest_pb2.TestPackedExtensions instance.
  r^   r=  r_   r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  TFN)r   r   packed_int32_extensionrT  packed_int64_extensionpacked_uint32_extensionpacked_uint64_extensionpacked_sint32_extensionpacked_sint64_extensionpacked_fixed32_extensionpacked_fixed64_extensionpacked_sfixed32_extensionpacked_sfixed64_extensionpacked_float_extensionpacked_double_extensionpacked_bool_extensionpacked_enum_extensionr   r~   )r   r  r  r	   r	   r
   SetAllPackedExtensions  s$   
rr  c                 C   r<  )zvSets every field in the message to a unique value.

  Args:
    message: A unittest_pb2.TestUnpackedTypes instance.
  r^   r=  r_   r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  TFN)unpacked_int32rT  unpacked_int64unpacked_uint32unpacked_uint64unpacked_sint32unpacked_sint64unpacked_fixed32unpacked_fixed64unpacked_sfixed32unpacked_sfixed64unpacked_floatunpacked_doubleunpacked_boolunpacked_enumr   r   r~   r   r	   r	   r
   SetAllUnpackedFields  rc  r  c                   @   sZ  e Zd ZdZdUddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd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,dS )VNonStandardIntegera  An integer object that does not subclass int.

  This is used to verify that both C++ and regular proto systems can handle
  integer others than int and long and that they handle them in predictable
  ways.

  NonStandardInteger is the minimal legal specification for a custom Integral.
  As such, it does not support 0 < x < 5 and it is not hashable.

  Note: This is added here instead of relying on numpy or a similar library
  with custom integers to limit dependencies.
  Nc                 C   s0   t |tjsJ t |tr|j}|| _|| _d S N)
isinstancenumbersIntegralr  valerror_string_on_conversion)selfr  r  r	   r	   r
   __init__  s
   

zNonStandardInteger.__init__c                 C      | j rt| j t| jS r  )r  r5  longr  r  r	   r	   r
   __long__     

zNonStandardInteger.__long__c                 C      t t| jS r  )r  operatorabsr  r  r	   r	   r
   __abs__     zNonStandardInteger.__abs__c                 C      t t| j|S r  r  r  r   r  r  yr	   r	   r
   __add__     zNonStandardInteger.__add__c                 C   r  r  r  r  divr  r  r	   r	   r
   __div__  r  zNonStandardInteger.__div__c                 C   s   t | j|S r  )r  eqr  r  r	   r	   r
   __eq__  s   zNonStandardInteger.__eq__c                 C   r  r  r  r  floordivr  r  r	   r	   r
   __floordiv__  r  zNonStandardInteger.__floordiv__c                 C   r  r  r  r  truedivr  r  r	   r	   r
   __truediv__  r  zNonStandardInteger.__truediv__c                 C   r  r  )r  r  invertr  r  r	   r	   r
   
__invert__  r  zNonStandardInteger.__invert__c                 C   r  r  r  r  modr  r  r	   r	   r
   __mod__
  r  zNonStandardInteger.__mod__c                 C   r  r  r  r  mulr  r  r	   r	   r
   __mul__  r  zNonStandardInteger.__mul__c                 C   r  r  )r  r  negr  r  r	   r	   r
   __neg__  r  zNonStandardInteger.__neg__c                 C   r  r  )r  r  posr  r  r	   r	   r
   __pos__  r  zNonStandardInteger.__pos__c                 C   r  r  r  r  powr  r  r	   r	   r
   __pow__  r  zNonStandardInteger.__pow__c                 C   s
   t | jS r  )intr  r  r	   r	   r
   	__trunc__     
zNonStandardInteger.__trunc__c                 C      t t|| jS r  r  r  r	   r	   r
   __radd__  r  zNonStandardInteger.__radd__c                 C   r  r  r  r  r	   r	   r
   __rdiv__  r  zNonStandardInteger.__rdiv__c                 C   r  r  r  r  r	   r	   r
   __rmod__"  r  zNonStandardInteger.__rmod__c                 C   r  r  r  r  r	   r	   r
   __rmul__%  r  zNonStandardInteger.__rmul__c                 C   r  r  r  r  r	   r	   r
   __rpow__(  r  zNonStandardInteger.__rpow__c                 C   r  r  r  r  r	   r	   r
   __rfloordiv__+  r  z NonStandardInteger.__rfloordiv__c                 C   r  r  r  r  r	   r	   r
   __rtruediv__.  r  zNonStandardInteger.__rtruediv__c                 C   r  r  r  r  lshiftr  r  r	   r	   r
   
__lshift__1  r  zNonStandardInteger.__lshift__c                 C   r  r  r  r  rshiftr  r  r	   r	   r
   
__rshift__4  r  zNonStandardInteger.__rshift__c                 C   r  r  r  r  r	   r	   r
   __rlshift__7  r  zNonStandardInteger.__rlshift__c                 C   r  r  r  r  r	   r	   r
   __rrshift__:  r  zNonStandardInteger.__rrshift__c                 C      t |tr|j}t| j|S r  )r  r  r  r  ler  r	   r	   r
   __le__=     
zNonStandardInteger.__le__c                 C   r  r  )r  r  r  r  ltr  r	   r	   r
   __lt__B  r  zNonStandardInteger.__lt__c                 C   r  r  r  r  and_r  r  r	   r	   r
   __and__G  r  zNonStandardInteger.__and__c                 C   r  r  r  r  or_r  r  r	   r	   r
   __or__J  r  zNonStandardInteger.__or__c                 C   r  r  r  r  xorr  r  r	   r	   r
   __xor__M  r  zNonStandardInteger.__xor__c                 C   r  r  r  r  r	   r	   r
   __rand__P  r  zNonStandardInteger.__rand__c                 C   r  r  r  r  r	   r	   r
   __ror__S  r  zNonStandardInteger.__ror__c                 C   r  r  r  r  r	   r	   r
   __rxor__V  r  zNonStandardInteger.__rxor__c                 C      | j S r  r  r  r	   r	   r
   __bool__Y     zNonStandardInteger.__bool__c                 C   r  r  r  r  r	   r	   r
   __nonzero__\  r  zNonStandardInteger.__nonzero__c                 C      | S r  r	   r  r	   r	   r
   __ceil___     zNonStandardInteger.__ceil__c                 C   r  r  r	   r  r	   r	   r
   	__floor__b  r  zNonStandardInteger.__floor__c                 C   r  r  )r  r5  r  r  r  r	   r	   r
   __int__e  r  zNonStandardInteger.__int__c                 C   r  r  r	   r  r	   r	   r
   	__round__j  r  zNonStandardInteger.__round__c                 C   s
   d| j  S )NzNonStandardInteger(%s)r  r  r	   r	   r
   __repr__m  r  zNonStandardInteger.__repr__r  )-__name__
__module____qualname____doc__r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	   r	   r	   r
   r    sV    
r  )r  
__author__r  r  os.pathr1  google.protobufr   r   r  	NameErrorr  r   r   r   r  r  r'  r.  r8  r;  rb  rr  r  r  r  r	   r	   r	   r
   <module>   s8       S!