o
    1ήcS                    @   s  d Z 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	Z	ddl
Z
dd 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Ze
de 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	&e' d"kd#ej G d$d% d%e	j Z(e)d&kre	*  dS dS )'a  Tests python protocol buffers against the golden message.

Note that the golden messages exercise every known field type, thus this
test ends up exercising and verifying nearly all of the parsing and
serialization code in the whole library.

TODO(kenton):  Merge with wire_format_test?  It doesn't make a whole lot of
sense to call this a test of the "message" module, which only declares an
abstract interface.
z!gps@google.com (Gregory P. Smith)    Nc                 C   s   | |k| |k  S N )xyr   r   L/tmp/pip-target-vg8gfxp4/lib/python/google/protobuf/internal/message_test.py<lambda>7   s    r   )map_proto2_unittest_pb2)map_unittest_pb2)unittest_pb2)unittest_proto3_arena_pb2)
descriptor)api_implementation)encoder)more_extensions_pb2)packed_field_test_pb2)	test_util)test_proto3_optional_pb2)testing_refleaks)message)_parameterizedi  error_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]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkdl Z8dmdn Z9dodp Z:dqdr Z;dsdt Z<dudv Z=dwdxdydzd{d|e> g i e? g
Z@d}d~ ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGG dd deHZIdd ZJdd ZKdd ZLG dd deHZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdwS )MessageTestc                 C   sl   t  dkr| d td}| t}|j| W d    n1 s&w   Y  | 	dt
|j d S )NpythonzSkipping testBadUtf8String, currently only the python api implementation raises UnicodeDecodeError when a string field contains bad utf-8.bad_utf8_stringzTestAllTypes.optional_string)r   TypeskipTestr   GoldenFileDataassertRaisesUnicodeDecodeErrorTestAllTypes
FromStringassertInstr	exception)selfmessage_modulebad_utf8_datacontextr   r   r   testBadUtf8StringR   s   

zMessageTest.testBadUtf8Stringc                 C   sr   |t u r
td}ntd}| }|| |t u r"t| | | ||  t	|}| ||  d S )N golden_message_oneof_implementedgolden_message_proto3)
r
   r   r   r!   ParseFromStringExpectAllFieldsSetassertEqualSerializeToStringcopydeepcopy)r&   r'   golden_datagolden_messagegolden_copyr   r   r   testGoldenMessage\   s   


zMessageTest.testGoldenMessagec                 C   sx   t d}| }||}| }t | | |t| | || | ||  t	|}| ||  d S Ngolden_packed_fields_message)
r   r   TestPackedTypesr-   SetAllPackedFieldsr/   lenr0   r1   r2   )r&   r'   r3   r4   parsed_bytesall_setr5   r   r   r   testGoldenPackedMessagem   s   



z#MessageTest.testGoldenPackedMessagec                 C   s   |  }| t|jd | t|jd tdd}t dks&t dkrP| t	j
}|| W d    n1 s<w   Y  t dkrP| dt|j | t	j
|jd d S )	Nr   0      r   upbzUnexpected end-group tag.s   )r!   r   	TypeErrorr"   	Exceptionr   TagBytesr   r   r   DecodeErrorr/   r$   r%   )r&   r'   msgend_tagr)   r   r   r   testParseErrorsy   s   
zMessageTest.testParseErrorsc                    s   d}|  }|jg d | ||jd d | ||jdd | ||jdd G dd dt G  fdd	d	t}|   |j| d W d    d S 1 sVw   Y  d S )
Ns5   
One string
Two string
Red stringBlue string)z
One stringz
Two stringz
Red stringzBlue stringdeterministicFTc                   @   s   e Zd ZdS )z:MessageTest.testDeterminismParameters.<locals>.BadArgErrorN)__name__
__module____qualname__r   r   r   r   BadArgError   s    rO   c                       s$   e Zd Z fddZ fddZdS )z5MessageTest.testDeterminismParameters.<locals>.BadArgc                         r   r   r&   rO   r   r   __nonzero__      zAMessageTest.testDeterminismParameters.<locals>.BadArg.__nonzero__c                    rP   r   r   rQ   rR   r   r   __bool__   rT   z>MessageTest.testDeterminismParameters.<locals>.BadArg.__bool__N)rL   rM   rN   rS   rU   r   rR   r   r   BadArg   s    rV   )r!   repeated_stringextendr/   r0   rD   objectr   )r&   r'   r3   r4   rV   r   rR   r   testDeterminismParameters   s"   


"z%MessageTest.testDeterminismParametersc                 C   s@   t d}| }|| t|}t|}| || d S Nr4   )r   r   r!   r-   pickledumpsloadsr/   )r&   r'   r3   r4   pickled_messageunpickled_messager   r   r   testPickleSupport   s   



zMessageTest.testPickleSupportc                 C   s2   |j jdd}t|}t|}| || d S )Nr@   bb)TestPickleNestedMessageNestedMessager\   r]   r^   r/   )r&   r'   r4   r_   r`   r   r   r   testPickleNestedMessage   s   

z#MessageTest.testPickleNestedMessagec                 C   s8   |j j}|jdd}t|}t|}| || d S )Nr@   )cc)rd   re   NestedNestedMessager\   r]   r^   r/   )r&   r'   clsr4   r_   r`   r   r   r   testPickleNestedNestedMessage   s
   

z)MessageTest.testPickleNestedNestedMessagec                 C   s   |t u rd}nd}| }|| | |jtj | |jtj | |jd tj | |j	d tj | ||
  d S )Ns   ]  a              s    ]  a              r   r
   r!   r-   r/   optional_floatmathinfoptional_doublerepeated_floatrepeated_doubler0   r&   r'   r3   r4   r   r   r   testPositiveInfinity   s   
z MessageTest.testPositiveInfinityc                 C   s   |t u rd}nd}| }|| | |jtj  | |jtj  | |jd tj  | |j	d tj  | ||
  d S )Ns   ]  a              s    ]  a              r   rk   rr   r   r   r   testNegativeInfinity   s   
z MessageTest.testNegativeInfinityc                 C   s   d}|  }|| | t|j | t|j | t|jd  | t|jd  |	 }|  }|| | t|j | t|j | t|jd  | t|jd  d S )Ns   ]  a              r   )
r!   r-   
assertTruerm   isnanrl   ro   rp   rq   r0   r&   r'   r3   r4   
serializedr   r   r   r   testNotANumber   s   

zMessageTest.testNotANumberc                 C   sR   d}|  }|| | |jd tj | |jd tj | ||  d S )Ns           r   r9   r-   r/   packed_floatrm   rn   packed_doubler0   rr   r   r   r   testPositiveInfinityPacked  s   
z&MessageTest.testPositiveInfinityPackedc                 C   sV   d}|  }|| | |jd tj  | |jd tj  | ||  d S )Ns           r   rz   rr   r   r   r   testNegativeInfinityPacked  s   
z&MessageTest.testNegativeInfinityPackedc                 C   s   d}|  }|| | t|jd  | t|jd  | }|  }|| | t|jd  | t|jd  d S )Ns           r   )r9   r-   ru   rm   rv   r{   r|   r0   rw   r   r   r   testNotANumberPacked  s   

z MessageTest.testNotANumberPackedc           	      C   s  |  }tdd}||_||  | |j|k dtdd }||_||  | |j|k | |_||  | |j| k | |_||  | |j| k tdd}||_||  | |j|k dtdd }||_||  | |j|k | |_||  | |j| k | |_||  | |j| k td}||_| 	|j| | }|| | 	|j| d|_| 
|jtd | }|| | 
|jtd d|_| 
|jtd	 d
|_| 	|jd
 d S )N            ?iz0x1.fffffep+127gP#Hrn   gP#z-infg 7)r!   rm   powrl   r-   r0   ru   floatfromhexassertAlmostEqualr/   )	r&   r'   r   kMostPosExponentNoSigBitskMostPosExponentOneSigBitkMostNegExponentNoSigBitskMostNegExponentOneSigBit	max_floatserialized_datar   r   r   testExtremeFloatValues%  sX   


z"MessageTest.testExtremeFloatValuesc                 C   st  |  }tdd}||_||  | |j|k dtdd }||_||  | |j|k | |_||  | |j| k | |_||  | |j| k tdd}||_||  | |j|k dtdd }||_||  | |j|k | |_||  | |j| k | |_||  | |j| k d S )Nr   i  r   i)r!   rm   r   ro   r-   r0   ru   )r&   r'   r   r   r   r   r   r   r   r   testExtremeDoubleValuesg  s:   z#MessageTest.testExtremeDoubleValuesc                 C   "   |  }d|_| t|d d S )N       @zoptional_float: 2.0
)r!   rl   r/   r$   r&   r'   r   r   r   r   testFloatPrinting     zMessageTest.testFloatPrintingc                 C   s4   |  }d|_|j}||  | ||j d S )N^!7ݚ?)r!   rl   r-   r0   r/   )r&   r'   rG   	old_floatr   r   r   testHighPrecisionFloatPrinting  s
   z*MessageTest.testHighPrecisionFloatPrintingc                 C   r   )Nr   z%optional_double: 0.12345678912345678
)r!   ro   r/   r$   r&   r'   rG   r   r   r   testHighPrecisionDoublePrinting  r   z+MessageTest.testHighPrecisionDoublePrintingc                 C   s<   |  }t| | }||  | t|d d S )N )r!   r   SetAllNonLazyFieldsTestEmptyMessager-   r0   r/   r$   )r&   r'   	populatedemptyr   r   r   testUnknownFieldPrinting  s
   
z$MessageTest.testUnknownFieldPrintingc                 C   s   |  }|j|j jdd |j jdd}|j| z|jd W n	 ty-   Y nw | dt|j | ddgdd |jD  d S )Nr@   rb   r   c                 S      g | ]}|j qS r   rb   .0mr   r   r   
<listcomp>      z@MessageTest.testAppendRepeatedCompositeField.<locals>.<listcomp>)r!   repeated_nested_messageappendre   rC   r/   r;   )r&   r'   rG   nestedr   r   r    testAppendRepeatedCompositeField  s    z,MessageTest.testAppendRepeatedCompositeFieldc                 C   s   |  }|jd|j jdd |jd }|jd|j jdd |jd|j jdd |jd|j jdd |jd	|j jd	d z	|jdd
 W n	 tyW   Y nw | dt|j | g ddd |jD  | t|d | |jd d S )Nr@   rb   r   r   c           )r   r   r   r@   r   c                 S   r   r   rb   r   r   r   r   r     r   z@MessageTest.testInsertRepeatedCompositeField.<locals>.<listcomp>zrepeated_nested_message {
  bb: -1000
}
repeated_nested_message {
  bb: 2
}
repeated_nested_message {
  bb: -1
}
repeated_nested_message {
  bb: 1
}
repeated_nested_message {
  bb: 3
}
)	r!   r   insertre   rC   r/   r;   r$   rc   )r&   r'   rG   sub_msgr   r   r    testInsertRepeatedCompositeField  s<   

z,MessageTest.testInsertRepeatedCompositeFieldc                 C   s   |  }|jd |jd |jjdd |jjdd |  }|jjdd |jjdd |jd |jd |j|j | dt|j |j|j | g dd	d
 |jD  d S )Nr@   r   rb   r   rA   r      r@   r   r   rA   c                 S   r   r   rb   r   r   r   r   r     r   z:MessageTest.testMergeFromRepeatedField.<locals>.<listcomp>)r!   repeated_int32r   r   add	MergeFromr/   r;   )r&   r'   rG   	other_msgr   r   r   testMergeFromRepeatedField  s    z&MessageTest.testMergeFromRepeatedFieldc                 C   sh   |  }z|jd W n	 ty   Y nw z	|jjdd W n	 ty(   Y nw | t|jd d S )Nwrong)value_fieldr   )r!   r   r   rC   
ValueErrorr/   r;   r   r   r   r   testAddWrongRepeatedNestedField  s   z+MessageTest.testAddWrongRepeatedNestedFieldc                 C   s   |  }|jg d | d|j | d|j |jjdd |jd }|j jdd}|j jdd}|j| |j	d| | ||j | ||j | ||j d S )Nr@   r   r   r   r   r@   rb   r   )
r!   r   rX   r#   assertNotInr   r   re   r   r   )r&   r'   rG   sub_msg1sub_msg2sub_msg3r   r   r   testRepeatedContains  s   
z MessageTest.testRepeatedContainsc                 C   s@   |  }|jg d d}|jD ]}||7 }q| |d d S )Nr   r      r!   r   rX   r/   )r&   r'   rG   r   itemr   r   r   testRepeatedScalarIterable  s   

z&MessageTest.testRepeatedScalarIterablec                 C   s   |  }|jjdd |jjdd |jjdd |jjdd | g ddd |jD  | g d	d
d t|jD  | g d	dd |jd d d D  d S )Nr@   rb   r   r   rA   r   c                 S   r   r   rb   r   r   r   r   r     r   z@MessageTest.testRepeatedNestedFieldIteration.<locals>.<listcomp>)rA   r   r   r@   c                 S   r   r   rb   r   r   r   r   r     r   c                 S   r   r   rb   r   r   r   r   r      r   r   )r!   r   r   r/   reversedr   r   r   r    testRepeatedNestedFieldIteration  s   

z,MessageTest.testRepeatedNestedFieldIterationc                 C   s  |  }|jd |jd |jd |j  | |jd d | |jd d | |jd d | t|jtg d |jd |jd |jd |j  | |jd d | |jd d | |jd d |jd	 |jd
 |jd |j  | |jd d	 | |jd d | |jd d
 | t|jtg d |j	d |j	d |j	d |j	  | |j	d d | |j	d d | |j	d d | t|j	tg d dS )z7Check some different types with the default comparator.r@   r   r   r   r   皙?g?333333?acbr   r   r      a   c   b)r   r   r   N)
r!   r   r   sortr/   r$   rp   r   rW   repeated_bytesr   r   r   r   0testSortingRepeatedScalarFieldsDefaultComparator"  s@   



z<MessageTest.testSortingRepeatedScalarFieldsDefaultComparatorc                 C   s   |  }|jd |jd |jd |jjtd | |jd d | |jd d | |jd d |jd |jd	 |jd
 |jjtd | |jd d
 | |jd d	 | |jd d dS )z2Check some different types with custom comparator.r   r   keyr   r@   r   aaarc   r   N)r!   r   r   r   absr/   rW   r;   r   r   r   r   /testSortingRepeatedScalarFieldsCustomComparatorJ  s   z;MessageTest.testSortingRepeatedScalarFieldsCustomComparatorc                 C   s   |  }d|j _d|j _d|j _d|j _d|j _d|j _|jjt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 | t|jd
 dS )ECheck passing a custom comparator to sort a repeated composite field.r@   r   r   r   r   rA   rc   r   r   z0[bb: 1
, bb: 2
, bb: 3
, bb: 4
, bb: 5
, bb: 6
]N)	r!   r   r   rc   r   operator
attrgetterr/   r$   r   r   r   r   2testSortingRepeatedCompositeFieldsCustomComparator^  s$   z>MessageTest.testSortingRepeatedCompositeFieldsCustomComparatorc                 C   s   |  }d|j _d|j _d|j _d|j _d|j _d|j _d|j _|jjdd	 d
 | g ddd |jD  | }|  || | g ddd |jD  dS )r            !         
   c                 S   s
   | j d S )Nr   rb   )zr   r   r   r   ~  s   
 zFMessageTest.testSortingRepeatedCompositeFieldsStable.<locals>.<lambda>r   )r   r   r   r   r   r   r   c                 S   r   r   rb   r   nr   r   r   r     r   zHMessageTest.testSortingRepeatedCompositeFieldsStable.<locals>.<listcomp>c                 S   r   r   rb   r   r   r   r   r     r   N)	r!   r   r   rc   r   r/   r0   ClearMergeFromString)r&   r'   r   pbr   r   r   (testSortingRepeatedCompositeFieldsStables  s$   


z4MessageTest.testSortingRepeatedCompositeFieldsStablec                 C   s   |  }td}d|j _d|j _d|j _d|j _d|j _d|j _|jj|d | d	d
 |jD g d |jj|dd | dd
 |jD g d dS )zECheck sorting a repeated composite field using list.sort() arguments.rc   r@   r   r   r   r   rA   r   c                 S   r   r   rb   r   kr   r   r   r     r   zGMessageTest.testRepeatedCompositeFieldSortArguments.<locals>.<listcomp>)r@   r   r   rA   r   r   Tr   reversec                 S   r   r   rb   r   r   r   r   r     r   )r   r   rA   r   r   r@   N)r!   r   r   r   r   rc   r   r/   )r&   r'   r   get_bbr   r   r   'testRepeatedCompositeFieldSortArguments  s    
z3MessageTest.testRepeatedCompositeFieldSortArgumentsc                 C   s   |  }|jd |jd |jd |jjtd | t|jg d |jjtdd | t|jg d |jd	 |jd
 |jd |jjtd | t|jg d |jjtdd | t|jg d dS )z9Check sorting a scalar field using list.sort() arguments.r   r   r   r   )r   r   r   Tr   )r   r   r   r   rc   r   )r   rc   r   )r   rc   r   N)	r!   r   r   r   r   r/   listrW   r;   r   r   r   r   $testRepeatedScalarFieldSortArguments  s   z0MessageTest.testRepeatedScalarFieldSortArgumentsc                 C   s   |  }|  }|jd |jd |jd |jd |jd |jd d|j _d|j _d|j _d|j _d|j _d|j _d S )Nr   r@   r   r   )r!   r   r   r   r   rc   r&   r'   m1m2r   r   r   testRepeatedFieldsComparable  s   z(MessageTest.testRepeatedFieldsComparablec                 C   s0   |  }| |jtjj | |jtjj d S r   )r!   assertIsInstancer   collectionsabcMutableSequencer   r&   r'   r   r   r   r   testRepeatedFieldsAreSequences  s
   z*MessageTest.testRepeatedFieldsAreSequencesc                 C   sv   |  }| t t|j W d    n1 sw   Y  | t t|j W d    d S 1 s4w   Y  d S r   )r!   r   rC   hashr   r   r   r   r   r   testRepeatedFieldsNotHashable  s   "z)MessageTest.testRepeatedFieldsNotHashablec                 C   s*   |  }|jjg  | |d d S )Npayload)NestedTestAllTypesr  r   rX   ru   HasFieldr   r   r   r   $testRepeatedFieldInsideNestedMessage  s   z0MessageTest.testRepeatedFieldInsideNestedMessagec                 C   s   |  }|  }|j}| d|j d|j_|| | d|j | }| }|jjj}| d|j d|jjj_|| | d|j | |jj|jj |jj	 }d|_|| | dt
|jj | d|j d S Nr   r@   )r!   optional_nested_messager/   rc   r   r  childr  r   r   r;   )r&   r'   r   r   r   msg1msg2r   r   r   testMergeFrom  s,   




zMessageTest.testMergeFromc                 C   sJ   |  }|  }| d|jj d|j_||  | d|jj d S r  )r!   r/   r  rc   r   r0   r   r   r   r   testMergeFromString  s   zMessageTest.testMergeFromStringc                 C   s   |  }d|_|jd d|_|jd | }t|}|j |}| 	|jd | 	|jdg | 	|jd | 	|jdg | 
|jt | 
|jd t | 
|jt | 
|jd t d S )Nzscalar stringzrepeated strings   scalar bytess   repeated bytesr   )r!   optional_stringrW   r   optional_bytesr   r0   
memoryviewr"   r/   r   bytesr$   )r&   r'   r   rx   memviewr   r   r   r   "testMergeFromStringUsingMemoryView  s    z.MessageTest.testMergeFromStringUsingMemoryViewc                 C   sF   |  }| d|jj | |d |d | |d d S )Nr   r      )r!   r/   r  rc   assertFalser  r   )r&   r'   r   r   r   r   testMergeFromEmpty  s
   
zMessageTest.testMergeFromEmptyc                 C   s   t || | || dS )zMake sure that a nested message object exists.

    As soon as a nested message attribute is accessed, it will be present in the
    _fields dict, without being marked as actually being set.
    N)getattrr  r  )r&   rG   	attributer   r   r   ensureNestedMessageExists  s   
z%MessageTest.ensureNestedMessageExistsc                 C   s,   |  }| t|jd | t|jd d S )Nno_such_oneof_fieldr   )r!   r   r   
WhichOneofrD   r   r   r   r    testOneofGetCaseNonexistingField#  s   z,MessageTest.testOneofGetCaseNonexistingFieldc                 C   s   |  }| d |d | |d | |d d|_| d|d | |d | |d | |d d|_| d|d | |d | |d d S )Noneof_fieldoneof_uint32r   oneof_stringr   )	r!   assertIsr  r  r  r  r/   ru   r  r   r   r   r   testOneofDefaultValues(  s   z"MessageTest.testOneofDefaultValuesc                 C   sb  |  }| d |d d|_| d|d | |d d|_| d|d | |d | |d |j	 | d|d | |d | |d |j	j
 | d|d | |d | |d d|j	_
| d|d | |d | |d d|_| d|d | |d | |d d S )	Nr  r   r  foor  oneof_nested_message   bboneof_bytes)r!   r  r  r  r/   ru   r  r  r  r"  rc   r$  r   r   r   r   testOneofSemantics:  s2   zMessageTest.testOneofSemanticsc                 C   s>   |  }d|_| |d | d|d | d|j d S )Nr   r"  r  r  )r!   r  r  r/   r  r   r   r   r   !testOneofCompositeFieldReadAccess]  s
   z-MessageTest.testOneofCompositeFieldReadAccessc                 C   s   |  }| d |d |tu r| |d d|_| d|d |tu r1| |d d|_	| d|d |
d | d |d |tu rY| |d d S d S )Nr  r   r  r#  r$  )r!   r  r  r
   r  r  r  r/   ru   r$  
ClearFieldr   r   r   r   testOneofWhichOneofe  s   
zMessageTest.testOneofWhichOneofc                 C   sV   |  }d|_|d |tu r| |d | |d | d |d d S )Nr   r  r  r!   r  r'  r
   r  r  r  r  r   r   r   r   testOneofClearFieldx     
zMessageTest.testOneofClearFieldc                 C   sV   |  }d|_|d |tu r| |d | |d | d |d d S Nr   r  r  r)  r   r   r   r   testOneofClearSetField  r+  z"MessageTest.testOneofClearSetFieldc                 C   sp   |  }d|_| |d |d | d|j |tu r%| |d | |d | d|d d S )Nr   r"  r  r  )	r!   r  r  r'  r/   r
   ru   r  r  r   r   r   r   testOneofClearUnsetField  s   
z$MessageTest.testOneofClearUnsetFieldc                 C   s:   |  }d|_|  }||  | d|d d S r,  )r!   r  r-   r0   r/   r  r&   r'   r   r   r   r   r   testOneofDeserialize  s
   z MessageTest.testOneofDeserializec                 C   s6   |  }d|_|  }|| | d|d d S r,  )r!   r  CopyFromr/   r  r/  r   r   r   testOneofCopyFrom  s
   
zMessageTest.testOneofCopyFromc                 C   sb   |  }d|j_|  }d|j_d|jj_|| | d|jd | d|jjd d S )Nr   r#  r  r  r$  )r  r  r  r$  r  r   r/   r  r/  r   r   r   testOneofNestedMergeFrom  s   

z$MessageTest.testOneofNestedMergeFromc                 C   sf   |  }d|jj_d|jjj_|  }d|j_|| | d|jd | d|jjd d S )Nr      r   r"  r  )	r  r  r"  rc   r  r  r   r/   r  r/  r   r   r   testOneofMessageMergeFrom  s   


z%MessageTest.testOneofMessageMergeFromc                 C   s(   |j |j  d}| d|d d S )N)r"  r"  r  )r!   re   r/   r  r   r   r   r   testOneofNestedMessageInit  s   z&MessageTest.testOneofNestedMessageInitc                 C   sB   |  }d|_|  | |d d|_| d|d d S )Nr   r  r#  r$  )r!   r  r   assertIsNoner  r$  r/   r   r   r   r   testOneofClear  s   zMessageTest.testOneofClearc                 C   s$   |  }td|_| |jt dS )zsAssigning a byte string to a string field should result

    in the value being converted to a Unicode string.
    r   N)r!   r$   r  r   r   r   r   r   "testAssignByteStringToUnicodeField  s   
z.MessageTest.testAssignByteStringToUnicodeFieldc                 C   s   |  }|jd |jtdtt|j }| t|jt| d|j _|jtdtt|j }| t|jt| dS )z{It should be possible to use int-valued indices in slices.

    This didn't used to work in the v2 C++ implementation.
    r@   r   r   N)	r!   r   r   intr;   r/   r   r   rc   )r&   r'   r   slr   r   r   testLongValuedSlice  s   zMessageTest.testLongValuedSlicec                 C   s   |  }| t}|jdd tdD  W d   n1 s!w   Y  | t}|jdd tdD  W d   dS 1 sDw   Y  dS )z5This didn't use to work in the v2 C++ implementation.c                 s       | ]}t V  qd S r   r   r   ir   r   r   	<genexpr>      zCMessageTest.testExtendShouldNotSwallowExceptions.<locals>.<genexpr>r   Nc                 s   r=  r   r>  r?  r   r   r   rA    rB  )r!   r   	NameErrorr   rX   rangerepeated_nested_enumr&   r'   r   _r   r   r   $testExtendShouldNotSwallowExceptions  s   "z0MessageTest.testExtendShouldNotSwallowExceptionsNFr           r  r   c                 C   Z   |  }| g |j tjD ]}|j| | g |j q|jg  | g |j dS )z,Test no-ops extending repeated int32 fields.N)r!   assertSequenceEqualr   r   FALSY_VALUESrX   r&   r'   r   falsy_valuer   r   r   testExtendInt32WithNothing     
z&MessageTest.testExtendInt32WithNothingc                 C   rJ  )z,Test no-ops extending repeated float fields.N)r!   rK  rp   r   rL  rX   rM  r   r   r   testExtendFloatWithNothing  rP  z&MessageTest.testExtendFloatWithNothingc                 C   rJ  )z-Test no-ops extending repeated string fields.N)r!   rK  rW   r   rL  rX   rM  r   r   r   testExtendStringWithNothing  rP  z'MessageTest.testExtendStringWithNothingc                 C   |   |  }| g |j |jdg | dg|j |jddg | g d|j |jddg | g d|j dS )	z7Test extending repeated int32 fields with python lists.r   r@   r   r   r@   r   r   rA   r   r@   r   r   rA   N)r!   rK  r   rX   r   r   r   r   testExtendInt32WithPythonList     z)MessageTest.testExtendInt32WithPythonListc                 C   rS  )	z7Test extending repeated float fields with python lists.rI        ?r   rI  rX  r         @      @rI  rX  r   rZ  r[  N)r!   rK  rp   rX   r   r   r   r   testExtendFloatWithPythonList  rW  z)MessageTest.testExtendFloatWithPythonListc                 C   rS  )	z8Test extending repeated string fields with python lists.r   1122)r   r^  r_  3344)r   r^  r_  r`  ra  Nr!   rK  rW   rX   r   r   r   r   testExtendStringWithPythonList'  rW  z*MessageTest.testExtendStringWithPythonListc                 C   s8   |  }| g |j |jd | g d|j dS )zDTest extending repeated string fields with characters from a string.r   r   Nrb  r   r   r   r   testExtendStringWithString2  s   z&MessageTest.testExtendStringWithStringc                   @   s2   e Zd ZdZdddZdd Zdd Zd	d
 ZdS )zMessageTest.TestIterablezThis iterable object mimics the behavior of numpy.array.

    __nonzero__ fails for length > 1, and returns bool(item[0]) for length == 1.

    Nc                 C   s   |pg | _ d S r   )_list)r&   valuesr   r   r   __init__@  s   z!MessageTest.TestIterable.__init__c                 C   s4   t | j}|dkrdS |dkrt| jd S td)Nr   Fr@   zTruth value is ambiguous.)r;   re  boolr   )r&   sizer   r   r   rS   C  s   
z$MessageTest.TestIterable.__nonzero__c                 C   s
   t | jS r   )r;   re  rQ   r   r   r   __len__K     
z MessageTest.TestIterable.__len__c                 C   s
   | j  S r   )re  __iter__rQ   r   r   r   rl  N  rk  z!MessageTest.TestIterable.__iter__r   )rL   rM   rN   __doc__rg  rS   rj  rl  r   r   r   r   TestIterable9  s    
rn  c                 C      |  }| g |j |jtg  | g |j |jtdg | dg|j |jtddg | g d|j |jtddg | g d|j dS )	z3Test extending repeated int32 fields with iterable.r   r@   r   rT  r   rA   rU  N)r!   rK  r   rX   r   rn  r   r   r   r   testExtendInt32WithIterableQ     z'MessageTest.testExtendInt32WithIterablec                 C   ro  )	z3Test extending repeated float fields with iterable.rI  rX  r   rY  rZ  r[  r\  N)r!   rK  rp   rX   r   rn  r   r   r   r   testExtendFloatWithIterable^  rq  z'MessageTest.testExtendFloatWithIterablec                 C   ro  )	z4Test extending repeated string fields with iterable.r   12)r   rs  rt  34)r   rs  rt  ru  rv  N)r!   rK  rW   rX   r   rn  r   r   r   r   testExtendStringWithIterablek  rq  z(MessageTest.testExtendStringWithIterablec                   @   s"   e Zd ZdZdddZdd ZdS )zMessageTest.TestIndexzEThis index object mimics the behavior of numpy.int64 and other types.Nc                 C   s
   || _ d S r   value)r&   ry  r   r   r   rg  {  rk  zMessageTest.TestIndex.__init__c                 C   s   | j S r   rx  rQ   r   r   r   	__index__~  rT   zMessageTest.TestIndex.__index__r   )rL   rM   rN   rm  rg  rz  r   r   r   r   	TestIndexx  s    
r{  c                 C   4   |  }|jg d | d|jtd  d S )Nr   r@   r   r!   r   rX   r/   r   r{  r   r   r   r    testRepeatedIndexingWithIntIndex     z,MessageTest.testRepeatedIndexingWithIntIndexc                 C   r|  Nr   r   r   r}  r   r   r   r   )testRepeatedIndexingWithNegative1IntIndex  r  z5MessageTest.testRepeatedIndexingWithNegative1IntIndexc                 C   s.   |  }|jg d | d|jd  d S r  r   r   r   r   r   $testRepeatedIndexingWithNegative1Int  s   z0MessageTest.testRepeatedIndexingWithNegative1Intc                 C   sJ   |  }| tj}t|jtj W d    d S 1 sw   Y  d S r   )r!   r   r\   PickleErrorr]   r   HIGHEST_PROTOCOLrF  r   r   r   !testPickleRepeatedScalarContainer  s   "z-MessageTest.testPickleRepeatedScalarContainerc                 C   s   |  }|j  dS )z:Exercise a scenario that has led to segfaults in the past.N)r!   r   r   r   r   r   r   'testSortEmptyRepeatedCompositeContainer  s   z3MessageTest.testSortEmptyRepeatedCompositeContainerc                 C   sB   |  }| t}|d W d   dS 1 sw   Y  dS )z=Using HasField on a repeated field should raise an exception.r   N)r!   r   r   r  rF  r   r   r   testHasFieldOnRepeatedField  s   "z'MessageTest.testHasFieldOnRepeatedFieldc                 C   s   |  }| t}|j  W d    n1 sw   Y  |jtd | d|j  | d|jd | d|jd | ddg|j d S )Nr   rA   r   r   r@   r   )r!   r   
IndexErrorr   poprX   rD  r/   rF  r   r   r   testRepeatedScalarFieldPop  s   z&MessageTest.testRepeatedScalarFieldPopc                 C   s   |  }| t}|j  W d    n1 sw   Y  | t}|jd W d    n1 s4w   Y  tdD ]
}|j }||_q=| 	d|j j | 	d|jdj | 	d|jdj | 	ddgdd	 |jD  d S )
Nr?   r   rA   r   r   r@   r   c                 S   r   r   rb   r   r   r   r   r     r   z=MessageTest.testRepeatedCompositeFieldPop.<locals>.<listcomp>)
r!   r   r  r   r  rC   rD  r   rc   r/   )r&   r'   r   rG  r@  r   r   r   r   testRepeatedCompositeFieldPop  s   
 z)MessageTest.testRepeatedCompositeFieldPopc                 C   sX   |  }tdD ]}|j|| |j }||_q| |j|j | |j|j d S )Nr   )	r!   rD  r   r   r   r   rc   rK  r/   )r&   r'   r   r@  r   r   r   r   testRepeatedCompareWithSelf  s   
z'MessageTest.testRepeatedCompareWithSelfc                 C   s6   |  }|j }|j}|j }| |jjd dS )zxA case that lead to a segfault when a message detached from its parent

    container has itself a child container.
    r   N)r  repeated_childr   r  r/   r  optional_int32r   r   r   r   testReleasedNestedMessages  s
   

z&MessageTest.testReleasedNestedMessagesc                 C   sz   |  }| t g |_W d    n1 sw   Y  |jd | t g |_W d    d S 1 s6w   Y  d S )Nr@   )r!   r   AttributeErrorr   r   r   r   r   r   testSetRepeatedComposite  s   "z$MessageTest.testSetRepeatedCompositec                 C   s"  |  }| tt|j | tt|j | tt|j d|_d|_d|_|j	d |j
	d |j	d ||  | tt|j | tt|j | dt|j | tt|j | tt|jd  | tt|j
d  | tt|jd  | d|jd  d S )Nr@   z1.0r   T)r!   r/   r   typerl   ro   rh  optional_boolrp   r   rq   repeated_boolr-   r0   r$   r   r   r   r   testReturningType  s&   zMessageTest.testReturningType)ZrL   rM   rN   r*   r6   r>   rI   rZ   ra   rf   rj   rs   rt   ry   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r   r%  r&  r(  r*  r-  r.  r0  r2  r3  r5  r6  r8  r9  r<  rH  	bytearraysetrL  rO  rQ  rR  rV  r]  rc  rd  rY   rn  rp  rr  rw  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   M   s    
$			B-&(		#		
		
	r   c                   @   sl   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S )
Proto2Testc                 C   s  t  }| |d | |d | |d | t |d W d    n1 s1w   Y  | t |d W d    n1 sKw   Y  | t |d W d    n1 sew   Y  | d|j | d|j | d|j	j
 d|_d|_d|j	_
| |d | |d | |d d	|_d
|_d|j	_
| |d | |d | |d |d |d |d | |d | |d | |d | d|j | d|j | d|j	j
 d S )Nr  r  r  field_doesnt_existr   r   r   Fr   T   )r
   r!   r  r  r   r   r/   r  r  r  rc   ru   r'  r&   r   r   r   r   testFieldPresence  sJ   


zProto2Test.testFieldPresencec                 C   s2  t  }| t}d|_W d   n1 sw   Y  | t|jjd |jd d|jd< | t d|jd< W d   n1 sEw   Y  t }d|_|jd | }t  }|	| | 
|d | d|j | dt|j |  |	|  | d|j | d|jd  dS )	z:Assigning an invalid enum number is not allowed in proto2. Nr   r   i@ t optional_nested_enumr@   )r
   r!   r   r   r  rE  r   r   r0   r-   r  r  r/   r;   r   )r&   r   rG  r   rx   m3r   r   r   testAssignInvalidEnum  s.   

z Proto2Test.testAssignInvalidEnumc                 C   sL   t  }d|jd< | t d|jd< W d    d S 1 sw   Y  d S )Nr   {   r@   )r   TestEnumMapknown_map_fieldr   r   unknown_map_field)r&   r   r   r   r   testUnknownEnumMap>  s
   
"zProto2Test.testUnknownEnumMapc                 C   s   t  }| tt|d d S )N
Extensions)r
   r!   r   r  r  r&   rG   r   r   r   testExtensionsErrorsD     zProto2Test.testExtensionsErrorsc                 C   sh   t  }t  }| d|jjt j  | |d d|jjt j< || | d|jjt j  d S )Nr   
submessager  )	r   TopLevelMessager/   r  r  optional_int_extensionr  r  r   r&   r	  r
  r   r   r   testMergeFromExtensionsH  s   
z"Proto2Test.testMergeFromExtensionsc                 C   sh   t d}t }|| t }t | | || | ||  t	|}| ||  d S r[   )
r   r   r
   TestAllExtensionsr-   SetAllExtensionsr/   r0   r1   r2   r&   r3   r4   r=   r5   r   r   r   testGoldenExtensionsX     



zProto2Test.testGoldenExtensionsc                 C   sh   t d}t }|| t }t | | || | ||  t	|}| ||  d S r7   )
r   r   r
   TestPackedExtensionsr-   SetAllPackedExtensionsr/   r0   r1   r2   r  r   r   r   testGoldenPackedExtensionsc  r  z%Proto2Test.testGoldenPackedExtensionsc                 C   sN   t jdd}t|}t|}| || | |jd | tj	|j
 d S )Nr@   r>  )r
   TestRequiredr\   r]   r^   r/   r   r   r   EncodeErrorr0   )r&   r4   r_   r`   r   r   r   testPickleIncompleteProton  s   

z$Proto2Test.testPickleIncompleteProtoc                 C   s  t  t  t  g}d|d _d|d _d|d _d|d _t  }d|_d|_d|_t j }|j| |j	| |j
| |j| |j| |j j|d  |j j|d  |j j|d  |j j|d  |j j|d  |j j|d  | }t  }|| | |j| | |j| | |jj| | |jt jj | | t|jd | t|jd | t|jt jj d dS )ziCheck the merge behavior when a required or optional field appears

    multiple times in the input.
    r@   r   r   r   helloN)r
   r!   r  optional_int64r  TestParsingMergeRepeatedFieldsGeneratorfield1rX   field2field3ext1ext2group1r   r   group2r0   r-   r/   required_all_typesoptional_all_typesoptionalgroupoptional_group_all_typesr  optional_extr;   repeated_all_typesrepeatedgrouprepeated_ext)r&   messagesmerged_message	generatordataparsing_merger   r   r   testParsingMerge{  sX   






zProto2Test.testParsingMergec                 C   s  t jddddddiddii d	dd
iddigdt jjgddd}| |t j | d|j | d|j | d|j | d|j | d|j	j
 | |jt jj | d|jj | |d | |jt   | t jj|j | dt|j | d
|jd j
 | d|jd j
 | dt|j | t jj|jd  | t jj|jd  | d|j | d|j | |d | dt|j | d|j t jd	d}| t jj|j | t t jddid W d    n1 sw   Y  | t t jddid W d    n	1 sw   Y  | t t jdd W d    n	1 s8w   Y  | t t jdd W d    d S 1 sUw   Y  d S )Nd      g     r@   xr   i  rc   i  BAZiX  i  FOOi   r   )r  optional_fixed32rl   r  r  r  optional_foreign_messager  r  rE  default_int32r  r  r   r   r@   r  *   )r  INVALID_NESTED_FIELD   )r  INVALID_VALUE_TYPEINVALID_LABEL)rE  ) r
   r!   BARr   r/   r  r  rl   r  r  r   r  re   rc   ru   r  r  ForeignMessager  r  r;   r  rE  r  r  r  r  rp   default_int64r   r   rC   r  r   r   r   testPythonicInit  s   




$zProto2Test.testPythonicInitc                 C   s:   ddd}t jdi |}| d|j | d|j d S )Nr  r  )r  r  r   )r
   r!   r/   r  r  )r&   kwargsrG   r   r   r   testPythonicInitWithDict  s   z#Proto2Test.testPythonicInitWithDictc                 C   sT   t jtjd}| d| | d| | d| tjjd }| tt	|d d S )Nr   zclass TestAllTypesSerializePartialToStringrp   r   _extensions_by_name)
pydochtmldocumentr
   r!   r#   	__bases__r   r  r  )r&   docbaser   r   r   test_documentation  s   zProto2Test.test_documentationN)rL   rM   rN   r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r    s    05@r  c                   @   sf  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)e*+e,j-e.kdOdPdQ Z/dRdS Z0dTS )U
Proto3Testc                 C   s<   t |}|D ]\}}| |||  ||= q| i | d S r   )dictr/   )r&   map_iter
dict_valuer   vr   r   r   assertMapIterEquals
  s
   zProto3Test.assertMapIterEqualsc                 C   s  t  }| t |d W d    n1 sw   Y  | t |d W d    n1 s3w   Y  | t |d W d    n1 sMw   Y  | t |d W d    n1 sgw   Y  | |d | t |d W d    n1 sw   Y  | t |d W d    n1 sw   Y  | t |d W d    n1 sw   Y  | d	|j | d	|j | d
|j	 | d|j
 | d	|jj d	|j_| |d d|_d|_d|_	d|_
d|j_|d |d |d |d |d | d	|j | d	|j | d
|j	 | d|j
 | d	|jj d S )Nr  rl   r  r  r  r  r   r   r   r   Fr   r   r   Tr  )r   r!   r   r   r  r  r/   r  rl   r  r  r  rc   ru   r'  r  r   r   r   r    sZ   




zProto3Test.testFieldPresencec                 C   s\   t  }d|_d|_d|_| t| d t }|	|
  | t| d d S )Nr   r   r  r   )r
   r!   r  r  r  r/   r;   
ListFieldsr   r-   r0   )r&   message_proto2message_proto3r   r   r   !testProto3ParserDropDefaultScalarM  s   z,Proto3Test.testProto3ParserDropDefaultScalarc           
      C   s  t  }| |d | |d | |d | |d | |jd d|_d|_d|_d|j_| 	|d | 	|d | 	|d | 	|d | 	|jd d	|_d
|_d|_d	|j_| 	|d | 	|d | 	|d | 	|d | 	|jd t  }|
|  | 	|d | 	|d | 	|d | 	|d | 	|jd | |dd |d |d |d |d | |d | |d | |d | |d | |jd | |dd  t jjjD ]	}| 	|j q!tjjjD ]}|jtjjkrB| |j q0| 	|j q0tjj}|jd }| |j |jd }| |j |jd }| 	|j |jd }| 	|j |jd }	| 	|	j d S )Nr  rl   r  r  rc   r@   rX  123r   rI  r   _optional_int32r   proto3_optional_int32r  )r   TestProto3Optionalr  r  r  r  rl   r  rc   ru   r-   r0   r/   r  r'  
DESCRIPTORfieldshas_presencer
   r!   labelr   FieldDescriptorLABEL_REPEATEDr   fields_by_name)
r&   rG   r
  fieldproto3_descriptorrepeated_fieldsingular_fieldoptional_fieldmessage_fieldr  r   r   r   testProto3OptionalX  sv   








zProto3Test.testProto3Optionalc                 C   s   t  }d|_| d|j |jd | d|jd  d|jd< | d|jd  | }t  }|| | d|j | d|jd  dS )zCAssigning an unknown enum value is allowed and preserves the value.r  iTr   r  N)r   r!   r  r/   rE  r   r0   r-   )r&   r   rx   r   r   r   r   testAssignUnknownEnum  s   

z Proto3Test.testAssignUnknownEnumc                 C   sz  t  }| d|jv  | d|jv  | d|jv  | d|jv  | d|jv  | d|jv  | d|j	v  | d|j
v  | d|jv  | d	|jd  | d	|jd  | d	|jd  | d	|jd  | d
|jd  | t|jd t | d|jd  | t|jd t | d|j	d  | d|j
d  | d	|jd  | d|jv  | d|jv  | d|jv  | d|jv  | d|jv  | d|jv  | d|j	v  | d|j
v  | d|jv  | |j	d t | t |j	d  W d    n	1 sw   Y  | t d|j	v  W d    d S 1 s6w   Y  d S )N     r          Fr   o   x  r   rI  r   r  )r	   TestMapr  map_int32_int32map_int64_int64map_uint32_uint32map_uint64_uint64map_int32_doublemap_bool_boolmap_string_stringmap_int32_bytesmap_int32_enumr/   ru   
isinstancer   rh  r   r$   r   rC   r  r   r   r   testScalarMapDefaults  sJ   $z Proto3Test.testScalarMapDefaultsc                 C   s\  t  }| |jd | d|jdd | d|jjddd | |jd d|jd< | d|jd | d|jd | t |jd W d    n1 s\w   Y  | |jd | d|jdd | d|jjddd |jd }| 	||jd | t |jd W d    d S 1 sw   Y  d S )Nr   r   )r   defaultr  r   )
r	   r  r7  r  getr/   r   rC   map_int32_foreign_messager  )r&   rG   submsgr   r   r   
testMapGet  s&   

"zProto3Test.testMapGetc                 C   sv  t  }| dt|j | d|jv  d|jd< d|jd< d|jd< d	|jd
< d|j	d< d|j
d< d|jd< d|jd< d|jd< d|jd< | g |  | dt|j | t d|jd< W d    n1 smw   Y  | dt|j | t d|jd< W d    n1 sw   Y  | }t  }|| | t d|jd< W d    n1 sw   Y  | t d|jd< W d    n1 sw   Y  | d|jd  | d|jd  | d|jd  | d	|jd
  | d|j	d  | d|j
d  | d|jd  | d|jd  | d|jd  | d|jd  | dt|j d S )Nr   r   8r       r    r          r  r   r   gffffff
@r@   r  r   Tr  z{-123: -456})r	   r  r/   r;   r  r  r  r  r  map_int32_floatr  r  r  r  FindInitializationErrorsr   rC   r0   r-   r   r$   r&   rG   rx   r
  r   r   r   testScalarMap  sT   










zProto3Test.testScalarMapc                 C   s@   t  }d|jd< d|jd< | | d | d|  d S )Nr   r   r4  s   
  r
  )r	   r  r  r  r/   ByteSizer0   r  r   r   r   testMapEntryAlwaysSerialized<  s   

z'Proto3Test.testMapEntryAlwaysSerializedc                 C   sj   t  }d}|d}||j|< t|j d \}}| || | || | |t | |t d S )Nu   ሴutf8r   )	r	   r  encoder  r   itemsr/   r   r$   )r&   rG   unicode_obj	bytes_objr   ry  r   r   r    testStringUnicodeConversionInMapD  s   

z+Proto3Test.testStringUnicodeConversionInMapc                 C   s|  t  }| dt|j | d|jv  |jd  |jd | dt|j | d|j | d|j | dt|j | t	 |jd  W d    n1 sUw   Y  | t
 |jd |jd< W d    n1 srw   Y  | dt|j | }t  }|| | dt|j | d|j | d|j | dt|j d|jd _| t|jd	 d S )
Nr   r   r  r#  r   r  r   r@   )z{-456: , 123: c: 1
}z{123: c: 1
, -456: })r	   r  r/   r;   r   r  get_or_creater#   r   rC   r   r0   r-   r   r$   r)  r   r   r   testMessageMapT  s8   

zProto3Test.testMessageMapc                 C   s   t  }d|jd j_|jd= d|jd j_| dt|j d|jd j_| dt|j | }t  }|| ddg}|D ]}|j|= qBd S )Nr@   r   )	r	   r  map_int32_all_typesr  rc   r/   r;   r0   r-   )r&   rG   rx   r
  keysr   r   r   r   testNestedMessageMapItemDelete}  s   

z)Proto3Test.testNestedMessageMapItemDeletec                 C   sp   t  }d|jd< | }d|jd< | | |d  d|jd _| }d|jd _| | |d  d S )Nr@         )r	   r  r  r+  r/   r   r   )r&   rG   ri  r   r   r   testMapByteSize  s   

zProto3Test.testMapByteSizec                 C   s  t  }d|jd< d|jd< d|jd< d|jd _d	|jd
 _t  }d|jd< d|jd< d|jd
 _d|jd
 _|jd
 }|| t  }|| d|jd< | 	|| | 	d|jd  | 	d|jd  | 	d|jd  | 	d|jd  | 	d|jd j | 	d	|jd
 j | 
|jd
 d t dkr| 	d|j i }|jD ]}| 
||v  |j| j||< q| 	dd	d| |jd= | 
d|jv  |jd
= | 
d
|jv  | t |jd= W d    d S 1 sw   Y  d S )N"   r4  N   8   r      r   r  r      7   r   X   r  r   dcpp)r  r?  r   )r	   r  r  r  r   r   rB  r   r1  r/   r  r  r   r   r   rC   )r&   rG   r
  old_map_valueexpected_msgas_dictr   r   r   r   r    sL   










"zProto3Test.testMergeFromc                 C   s8  t  }d|jd< d|jd< d|jd< d|jd _d	|jd
 _t  }d|jd< d|jd< d|jd
 _d|jd
 _|j|j | d|jd  | d|jd  |j|j | d|jd  | d|jd  |j|j t  }|	| d|jd< | || t  }t  }| |j|j d	|jd _|| | d	|jd j t  }t 
 }d	|jd _|j|j | d	|jd j t  }d|jd
 _t  }d|jd
 _||  | |jd
 jd | |jd
 jd | t |jdt i W d    d S 1 sw   Y  d S )Nr;  r4  r<  r=  r   r>  r   r  r   r?  r@  r   rA  r  r   r  r@   )r	   r  r  r  r   r   rB  r   r/   r1  TestMessageMapmap_int32_messager  r5  r   r0   assertNotEqualr   r  r   r!   )r&   rG   r
  rE  r   r   r   r   r   testMapMergeFrom  sZ   








$zProto3Test.testMapMergeFromc                 C   D   t  }| td |d W d    d S 1 sw   Y  d S )NzWParameter to MergeFrom\(\) must be instance of same class: expected .+TestMap got int\.r@   )r	   r  assertRaisesRegexrC   r   r  r   r   r   testMergeFromBadType     "zProto3Test.testMergeFromBadTypec                 C   rK  )Nz[Parameter to [A-Za-z]*From\(\) must be instance of same class: expected .+TestMap got int\.r@   )r	   r  rL  rC   r1  r  r   r   r   testCopyFromBadType  rN  zProto3Test.testCopyFromBadTypec                 C   s   t  }td|jtd< td|jtd< td|jtd< td|jtd< | }t  }|| | 	d|jd  | 	d|jd  | 	d|jd  | 	d|jd  d S )	Nr#  r  r$  r  r%  r  r&  r  )
r	   r  r:  r  r  r  r  r0   r-   r/   r)  r   r   r   testIntegerMapWithLongs%  s   
z"Proto3Test.testIntegerMapWithLongsc                 C   s   t  }d|jjd< | }t  }|| | || d|jjd< | }|| | || |jj  | }|| | || d S )Nr%  r  r   r  )r	   TestMapSubmessagetest_mapr  r0   r-   r/   clearr)  r   r   r   testMapAssignmentCausesPresence5  s   


z*Proto3Test.testMapAssignmentCausesPresencec                 C   s   t  }d|jjd _| }t  }|| | || d|jjd _| }|| | || |jjd |jjd  | }|| | || |jj	  | }|| | || d S )Nr   r  r   r  )
r	   rQ  rR  r   r   r0   r-   r/   r   rS  r)  r   r   r   -testMapAssignmentCausesPresenceForSubmessagesK  s(   




z8Proto3Test.testMapAssignmentCausesPresenceForSubmessagesc                 C   s   t  }t|j}t|j}d|jd< d|jd _| t |D ]}q!W d    n1 s.w   Y  | t |D ]}q;W d    d S 1 sIw   Y  d S )Nr  r   r   )r	   r  iterr  r   r   r   RuntimeError)r&   rG   string_string_iterint32_foreign_iterr   r   r   r   testModifyMapWhileIteratingg  s   


"z&Proto3Test.testModifyMapWhileIteratingc                 C   s   t  }d|jd< d|jd< d|jd< d|jd _d|jd _d	|jd	 _t|j }t|j }g }|jD ]}|| d
|j|< q8| || | |t|j  g }|jD ]}|| d|j| _q[| || | |t|j  d S )Nr  r   456def789ghir   r   r   000r   )	r	   r  r  r   r   r   r6  r   r/   )r&   rG   string_string_keysint32_foreign_keysr6  r   r   r   r    testModifyMapEntryWhileIteratingx  s*   






z+Proto3Test.testModifyMapEntryWhileIteratingc                 C   s   t  }|jd }| ||jd  | |tj d|_| }t  }|	| | 
d|jd j | t t |jd< W d    d S 1 sKw   Y  d S )Nr  r   rA  )r	   r  r   r  r   r
   r  r   r0   r-   r/   r   r   )r&   rG   r!  rx   r
  r   r   r   testSubmessageMap  s   

"zProto3Test.testSubmessageMapc                 C   sx   t  }|j D ]	\}}| d q	d|jd< d|jd< d|jd< | dt|j dddd}| |j | d S )NFrA   r   r   r      r   r   rA   )r	   r  r  r/  ru   r/   r;   r  )r&   rG   r   r  matching_dictr   r   r   testMapIteration  s   


zProto3Test.testMapIterationc                 C   s^   t  }d|jd< d|jd< d|jd< d|jd< d|jd< |j }|j }| || d S )Nr   local_init_optrainable_variables	variablesinit_op	summaries)r	   r  r  r/  r/   )r&   rG   items1items2r   r   r   testMapItems  s   






zProto3Test.testMapItemsc                 C   s~   d}t  }d|jd< d|jd< d|jd< d|jd	< d
|jd< d
|jd< d|jd< d|jd< d|jd< | ||jdd d S )Ns   r
init_opdr

item1er

item2fr

item3gr
item4QQr
local_init_opar
	summarieser
trainable_variablesbr
	variablescr   rh  r   ri  r   rj  rB  rk  erl  item1fitem2gitem3QQitem4TrJ   )r	   r  r  r/   r0   )r&   r3   rG   r   r   r   !testMapDeterministicSerialization  s   	








z,Proto3Test.testMapDeterministicSerializationc                 C   sN   t  }d|jd< d|jd< d|jd< |j }~dddd}| || d S )NrA   r   r   r   rd  re  )r	   r  r  r/  r  )r&   rG   itrf  r   r   r   testMapIterationClearMessage  s   



z'Proto3Test.testMapIterationClearMessagec                 C   sf   t jdddd}| d|jd  | d|jd  t jdtjddid	}| d|jd j d S )
Nr   rA   )r@   r   r  r@   r   r   )r   )r   )r	   r  r/   r  r
   r  r   r   r  r   r   r   testMapConstruction  s   zProto3Test.testMapConstructionc                 C   s6   t  }d|jd< t j|jd}| d|jd  d S )Nr  r@   r{  )r	   r  r  r/   r  r   r   r   testMapScalarFieldConstruction  s   
z)Proto3Test.testMapScalarFieldConstructionc                 C   s:   t  }d|jd _t j|jd}| d|jd j d S )Nr  testmap_string_foreign_message)r	   r  r  r   r/   r  r   r   r   testMapMessageFieldConstruction  s   z*Proto3Test.testMapMessageFieldConstructionc                 C   s<   |  t tjdd W d    d S 1 sw   Y  d S )Nr@   r  )r   rC   r	   r  rQ   r   r   r   testMapFieldRaisesCorrectError	  s   "z)Proto3Test.testMapFieldRaisesCorrectErrorc                 C   s`   t  }|j}d|d< d|d< d|d< |d | d|  dddd}| | | d S )	NrA   r   r   r   rd  r  r  re  )r	   r  r  r'  r/   r0   r  r/  )r&   rG   	int32_maprf  r   r   r   testMapValidAfterFieldCleared	  s   
z(Proto3Test.testMapValidAfterFieldClearedc                 C   sH   t  }|j}d|d _|d | d|  | d| v  d S )Nr   r   r   r  )	r	   r  r   r   r'  r/   r0   ru   r6  )r&   rG   int32_foreign_messager   r   r   $testMessageMapValidAfterFieldCleared	  s   

z/Proto3Test.testMessageMapValidAfterFieldClearedc                 C   sV   t  }d|jd _t dkr|j}|jd }|  d|jd _| |jd d S )Nbarr   rC  r!  r   )r	   r  r5  r  r   r   r   r/   )r&   rG   
unused_map	msg_valuer   r   r   -testMessageMapItemValidAfterTopMessageCleared(	  s   
z8Proto3Test.testMessageMapItemValidAfterTopMessageClearedc                 C   s   t  }t|j}|d | t |D ]}qW d    n1 s#w   Y  t|j}|d | t |D ]}q:W d    d S 1 sHw   Y  d S )Nr  r   )r	   r  rV  r  r'  r   rW  r   )r&   rG   ry  rG  r   r   r   "testMapIterInvalidatedByClearField:	  s   



"z-Proto3Test.testMapIterInvalidatedByClearFieldc                 C   s   t  }| dt|j d|jd< | dt|j | t |jd= W d    n1 s/w   Y  |jd= | dt|j | t |jd= W d    d S 1 sVw   Y  d S )Nr   r   rA   r@   rA      )r	   r  r/   r;   r  r   KeyErrorr5  r  r   r   r   testMapDeleteN	  s   


"zProto3Test.testMapDeletec                 C   sT   t  }| |jtjj | |jtjj | |jtjj | |jtjj d S r   )	r	   r  r   r  r   r   MappingMutableMappingr   r  r   r   r   testMapsAreMapping_	  s   zProto3Test.testMapsAreMappingc                 C   sD   t  }d|jd< | |j|j | |j|j | |jd d S )Nr#  r  r   )r	   r  r  r/   r   rI  r  r   r   r   testMapsCompareh	  s   
zProto3Test.testMapsComparec                 C   s@   t  }d|jd< d|jd< d|jd _| dt|  d S )Nr  r   @   #   r   r!  r   )	r	   r  r  r  r  r   r/   r;   r(  r  r   r   r   (testMapFindInitializationErrorsSmokeTestp	  s
   

z3Proto3Test.testMapFindInitializationErrorsSmokeTestzSkip for ucs2c                 C   s   d}t  }| t}|| W d    n1 sw   Y  t dkr0| dt|j	 n	| dt|j	 t jdd
 }t  }|| | |jd t jdd}| |jd d S )Ns   rr   r  Error parsing messageu   😍r  u   퀁)r   r!   r   rD   r   r   r   r#   r$   r%   r0   r/   r  )r&   rx   rG   r)   r
  r   r   r   testStrictUtf8Checkw	  s$   
zProto3Test.testStrictUtf8Checkc                 C   s   |  t tjdd W d    n1 sw   Y  |  t tjdd W d    n1 s1w   Y  |  t tjdd W d    n1 sLw   Y  |  t tjdd W d    d S 1 shw   Y  d S )Nu   r  s   u   u   )r   r   r   r!   rQ   r   r   r   testSurrogatesInPython3	  s   "z"Proto3Test.testSurrogatesInPython3N)1rL   rM   rN   r  r  r  r  r  r  r"  r*  r,  r2  r4  r7  r:  r  rJ  rM  rO  rP  rT  rU  rZ  rb  rc  rg  ro  rx  rz  r|  r}  r  r  r  r  r  r  r  r  r  r  unittestskipIfsys
maxunicodeUCS2_MAXUNICODEr  r  r   r   r   r   r    sV    
9I0:)?<		
r  c                   @   s   e Zd Zdd Zdd ZdS )ValidTypeNamesTestc                    s   t t|dd  d| d| f}| t fdd|D d |f   d}|d	 }d|d d	 }t||gd
 d S )N'r@   zRepeated%sContainerzRepeated%sFieldContainerc                 3   s    | ]}  |V  qd S r   )endswith)r   r  tp_namer   r   rA  	  s    z:ValidTypeNamesTest.assertImportFromName.<locals>.<genexpr>z%r does end with any of %r.r   )fromlist)r$   r  splitru   anyjoin
__import__)r&   rG   	base_namevalid_namesparts
class_namemodule_namer   r  r   assertImportFromName	  s   

z'ValidTypeNamesTest.assertImportFromNamec                 C   s(   t  }| |jd | |jd d S )NScalar	Composite)r
   r!   r  r   r   )r&   r   r   r   r   testTypeNamesCanBeImported	  s   z-ValidTypeNamesTest.testTypeNamesCanBeImportedN)rL   rM   rN   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S )PackedFieldTestc                 C   s   |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 d S )Nr@   rX  T)r   r   repeated_int64repeated_uint32repeated_uint64repeated_sint32repeated_sint64repeated_fixed32repeated_fixed64repeated_sfixed32repeated_sfixed64rp   rq   r  rE  r  r   r   r   
setMessage	  s   zPackedFieldTest.setMessagec                 C   *   t  }| | d}| ||  d S )NsH   
"*2:   B       J   R       Z  ?b      ?jr)r   r9   r  r/   r0   r&   r   r3   r   r   r   testPackedFields	     
z PackedFieldTest.testPackedFieldsc                 C   r  )Ns:    (0=   A       M   Q       ]  ?a      ?hp)r   TestUnpackedTypesr  r/   r0   r  r   r   r   testUnpackedFields	  r  z"PackedFieldTest.testUnpackedFieldsN)rL   rM   rN   r  r  r  r   r   r   r   r  	  s    r  r   z(explicit tests of the C++ implementationc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
OversizeProtosTestc                 C   s.   t  }|}t|D ]}|j}q
d|_| S )Nr   )r
   TestRecursiveMessagerD  r   r@  r0   )r&   r   rG   subrG  r   r   r   GenerateNestedProto	  s   z&OversizeProtosTest.GenerateNestedProtoc                 C   s   t  }|| d d S )Nr  )r
   r  r-   r  r  r   r   r   testSucceedOkSizedProto	  r  z*OversizeProtosTest.testSucceedOkSizedProtoc                 C   sf   t jd t }| tj}|| 	d W d    n1 s#w   Y  | 
dt|j d S )NFe   r  )r   	_c_moduleSetAllowOversizeProtosr
   r  r   r   rF   r-   r  r#   r$   r%   )r&   rG   r)   r   r   r   testAssertOversizeProto	  s   z*OversizeProtosTest.testAssertOversizeProtoc                 C   s(   t jd t }|| d d S )NTr  )r   r  r  r
   r  r-   r  r  r   r   r   testSucceedOversizeProto
  s   z+OversizeProtosTest.testSucceedOversizeProtoN)rL   rM   rN   r  r  r  r  r   r   r   r   r  	  s
    r  __main__)+rm  
__author__r   r1   rm   r   r\   r  r  r  warningscmpgoogle.protobufr   r	   r
   r   r   google.protobuf.internalr   r   r   r   r   r   r   r   r   r  simplefilterDeprecationWarningnamed_parametersTestCaser   r  r  r  r  r  r   r  rL   mainr   r   r   r   <module>   s   
         %         9