U
    4JeNM  ã                   @   s@  d Z d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 zddlZW n ek
rà   Y nX 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 )zJTest for preservation of unknown fields in the pure Python implementation.z!bohdank@google.com (Bohdan Koval)é    N)Úmap_unittest_pb2)Úunittest_mset_pb2)Úunittest_pb2)Úunittest_proto3_arena_pb2)Úapi_implementation)Úencoder)Úmessage_set_extensions_pb2)Úmissing_enum_values_pb2)Ú	test_util)Útesting_refleaks)Útype_checkers)Úwire_format)Ú
descriptor)Úunknown_fieldsc                   @   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S )ÚUnknownFieldsTestc                 C   sH   t jj| _t  ¡ | _t | j¡ | j ¡ | _t  	¡ | _
| j
 | j¡ d S ©N©r   ÚTestAllTypesÚ
DESCRIPTORr   Ú
all_fieldsr
   ZSetAllFieldsÚSerializeToStringÚall_fields_dataÚTestEmptyMessageÚempty_messageÚParseFromString©Úself© r   úP/tmp/pip-unpacked-wheel-0oacnh65/google/protobuf/internal/unknown_fields_test.pyÚsetUp?   s    


zUnknownFieldsTest.setUpc                 C   s   | j  ¡ }|  || jk¡ d S r   )r   r   Ú
assertTruer   )r   Údatar   r   r   ÚtestSerializeG   s    
zUnknownFieldsTest.testSerializec                 C   s*   t  ¡ }| | j¡ |  | j| ¡ ¡ d S r   )r   r   r   r   ÚassertEqualr   ©r   Úmessager   r   r   ÚtestSerializeProto3N   s    z%UnknownFieldsTest.testSerializeProto3c                 C   s   |   | j ¡ | j ¡ ¡ d S r   )r#   r   ZByteSizer   r   r   r   r   ÚtestByteSizeT   s    zUnknownFieldsTest.testByteSizec                 C   s   |   dt| j ¡ ƒ¡ d S )Nr   )r#   Úlenr   Z
ListFieldsr   r   r   r   ÚtestListFieldsW   s    z UnknownFieldsTest.testListFieldsc                 C   sÞ   t  ¡ }|j ¡ }d|_t ¡ }d|_| ¡ |_	| ¡ }t 
¡ }| |¡ t |¡}|  t|ƒd¡ |  |d j|j¡ |  |d jtj¡ |d j}t ¡ }| |¡ |  ||¡ | ¡ }	t  ¡ }
|
 |	¡ |  ||
¡ d S )Nik²Úi90  é   r   )r   ZRawMessageSetÚitemÚaddZtype_idr   ZTestMessageSetExtension1Úir   r%   ZTestMessageSetZMergeFromStringr   ÚUnknownFieldSetr#   r(   Úfield_numberÚ	wire_typer   ÚWIRETYPE_LENGTH_DELIMITEDr!   r   )r   Úrawr+   Zmessage1Ú
serializedÚprotoÚunknown_field_setÚdZmessage_newZreserializedZnew_rawr   r   r   Ú1testSerializeMessageSetWireFormatUnknownExtension[   s.    



ÿ


zCUnknownFieldsTest.testSerializeMessageSetWireFormatUnknownExtensionc                 C   sP   t  ¡ }| | j¡ |  | j|¡ | j d¡ | | j ¡ ¡ |  	| j|¡ d S )NÚoptional_string)
r   r   r   r   r#   r   r   Ú
ClearFieldr   ÚassertNotEqualr$   r   r   r   Ú
testEquals   s    zUnknownFieldsTest.testEqualsc                 C   s  | j  ¡  |  d| j  ¡ ¡ t ¡ }t ¡ }d|_|j | ¡ ¡ |j	 
¡  | ¡ ¡ |  d|j ¡ ¡ |  d|j	d  ¡ ¡ | ¡  |  d|j ¡ ¡ |  d|j	d  ¡ ¡ t ¡ }|jd j | ¡ ¡ d|jd< |  d|jd j ¡ ¡ | ¡  |  d|jd j ¡ ¡ d S )Nó    Údiscardr   r*   ÚtestÚ1)r   ZDiscardUnknownFieldsr#   r   r   r   r8   Úoptional_nested_messager   Zrepeated_nested_messager,   r:   r   ZTestMapZmap_int32_all_typesZmap_string_string)r   r%   Zother_messageÚmsgr   r   r   ÚtestDiscardUnknownFieldsˆ   sN    
ÿ
ÿ ÿ ÿ ÿÿ
þþz*UnknownFieldsTest.testDiscardUnknownFieldsN)Ú__name__Ú
__module__Ú__qualname__r   r"   r&   r'   r)   r7   r;   rB   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	e
 ejjejjfdk d¡dd„ ƒZdd„ Zdd„ Zdd„ ZdS )ÚUnknownFieldsAccessorsTestc                 C   sH   t jj| _t  ¡ | _t | j¡ | j ¡ | _t  	¡ | _
| j
 | j¡ d S r   r   r   r   r   r   r   ¬   s    


z UnknownFieldsAccessorsTest.setUpc           
      C   s’   t  ¡ dkrd S | jj| }tj|j }t |j	|¡}i }| j
jD ]:\}}||krBtjj| d }	|	t|ƒdt|ƒ| j|ƒ qB|  ||| ¡ d S )NÚpythonr   )r   ÚTyper   Úfields_by_namer   ÚFIELD_TYPE_TO_WIRE_TYPEÚtyper   ZTagBytesÚnumberr   Z_unknown_fieldsr   r   Z_decoders_by_tagÚ
memoryviewr(   r   r#   )
r   ÚnameÚexpected_valueÚfield_descriptorr0   Z	field_tagZresult_dictZ	tag_bytesÚvalueÚdecoderr   r   r   ÚInternalCheckUnknownFieldº   s    z4UnknownFieldsAccessorsTest.InternalCheckUnknownFieldc                 C   sÞ   | j j| }tj|j }|D ]¼}|j|jkr|  ||j¡ |dkrŒ|  |d |j	d j¡ |  |d |j	d j¡ |  |d |j	d j	¡ q|t
jkr¬|  t|j	ƒttf¡ |jt jjkrÊ|  |j	|¡ q|  ||j	¡ qd S )Né   r   r*   é   )r   rI   r   rJ   rK   r/   rL   r#   r0   r!   r   r1   ÚassertInÚstrÚbytesÚlabelÚFieldDescriptorÚLABEL_REPEATED)r   rN   r5   rO   rP   Zexpected_typeÚunknown_fieldr   r   r   ÚCheckUnknownFieldÇ   s&    ÿ

ÿ
z,UnknownFieldsAccessorsTest.CheckUnknownFieldc                 C   s  t  | j¡}|  d|| jj¡ |  d| jj¡ |  d|| jj¡ |  d| jj¡ |  d|| jj¡ |  d| jj¡ |  d|| jj	¡ |  d| jj	¡ |  d|| jj
¡ |  d| jj
¡ |  d|| jj d¡¡ |  d| jj¡ |  d|d	¡ |  d| jj¡ |  d
t|ƒ¡ d S )NÚoptional_nested_enumÚrepeated_nested_enumÚoptional_int32Úoptional_fixed32Úoptional_fixed64r8   zutf-8Úoptionalgroup)é   r   éu   éb   )r   r.   r   r]   r   r^   rS   r_   r`   ra   rb   r8   Úencoderc   r#   r(   ©r   r5   r   r   r   ÚtestCheckUnknownFieldValueÜ   sf    þÿþÿþÿþÿþÿþÿþÿz5UnknownFieldsAccessorsTest.testCheckUnknownFieldValuec                 C   s*   t  ¡ }| | j¡ |  | ¡ | j¡ d S r   )r   r   ZCopyFromr   r#   r   r   r$   r   r   r   ÚtestCopyFrom  s    z'UnknownFieldsAccessorsTest.testCopyFromc                 C   sð   t  ¡ }d|_d|_t  ¡ }| | ¡ ¡ | d¡ d|_d|_t  ¡ }t	 
|¡}|  dt|ƒ¡ | | ¡ ¡ |  dt|ƒ¡ t	 
|¡}|  dt|ƒ¡ | |¡ |  dt|ƒ¡ | | ¡ ¡ |  |jd¡ |  |jd¡ |  |jd¡ d S )Nr*   rU   r`   rT   é   r   )r   r   r`   Úoptional_uint32r   r   r   r9   Zoptional_int64r   r.   r#   r(   Z	MergeFrom)r   r%   ÚsourceÚdestinationr5   r   r   r   ÚtestMergeFrom  s*    



z(UnknownFieldsAccessorsTest.testMergeFromc                 C   s<   t  | j¡}| j ¡  |  | j ¡ d¡ |  t|ƒd¡ d S )Nr<   rf   )r   r.   r   ÚClearr#   r   r(   rh   r   r   r   Ú	testClear0  s    
z$UnknownFieldsAccessorsTest.testClear)rT   rk   z tracemalloc requires python 3.4+c                    sb   d‰ ‡ ‡fdd„}t  ¡  t  ¡ }|ƒ  t  ¡ }| |d¡}t  ¡  ˆ g ‡ fdd„|D ƒ¡ d S )NiÒ  c                     s   t ˆ ƒD ]} t ˆj¡ qd S r   )Úranger   r.   r   )Ú_©Únb_leaksr   r   r   Úleaking_function=  s    zRUnknownFieldsAccessorsTest.testUnknownFieldsNoMemoryLeak.<locals>.leaking_functionÚlinenoc                    s   g | ]}|j ˆ kr|‘qS r   )Z
count_diff)Ú.0Úx)ru   r   r   Ú
<listcomp>I  s     
 zLUnknownFieldsAccessorsTest.testUnknownFieldsNoMemoryLeak.<locals>.<listcomp>)ÚtracemallocÚstartZtake_snapshotZ
compare_toÚstopr#   )r   rv   Z	snapshot1Z	snapshot2Z	top_statsr   rt   r   ÚtestUnknownFieldsNoMemoryLeak7  s    z8UnknownFieldsAccessorsTest.testUnknownFieldsNoMemoryLeakc                 C   s  t  ¡ }d|j_t  ¡ }| | ¡ ¡ t |¡d j	}|  
dt|ƒ¡ |  
|d j	d¡ | ¡  |  
dt|ƒ¡ |  
|d j	d¡ | ¡  d|_t  ¡ }|jj | ¡ ¡ t |jj¡}|  
|d j	d¡ | d¡ |  
|d j	d¡ t |jj¡}|  
dt|ƒ¡ d S )Né{   r   r*   iÈ  Úpayload)r   r   rc   Úar   r   r   r   r.   r!   r#   r(   rp   rl   ZNestedTestAllTypesr€   r@   r9   )r   r%   rn   Zsub_unknown_fieldsZnested_messager5   r   r   r   ÚtestSubUnknownFieldsK  s4    ÿÿ
ÿz/UnknownFieldsAccessorsTest.testSubUnknownFieldsc                 C   sL   t  ¡ }d|_t  ¡ }| | ¡ ¡ t |¡d }| ¡  |  	|j
d¡ d S )Nr   r   )r   r   r`   r   r   r   r   r.   rp   r#   r!   )r   r%   rn   r\   r   r   r   ÚtestUnknownFieldd  s    z+UnknownFieldsAccessorsTest.testUnknownFieldc                 C   s@   t  ¡ }| | j¡ |  tt |¡ƒd¡ |  | ¡ | j¡ d S )Nrf   )	r   ZTestEmptyMessageWithExtensionsr   r   r#   r(   r   r.   r   r$   r   r   r   ÚtestUnknownExtensionsm  s    z0UnknownFieldsAccessorsTest.testUnknownExtensionsN)rC   rD   rE   r   rS   r]   ri   rj   ro   rq   ÚunittestZskipIfÚsysÚversion_infoÚmajorÚminorr~   r‚   rƒ   r„   r   r   r   r   rF   ©   s   5ÿ
	rF   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S )ÚUnknownEnumValuesTestc                 C   s|   t jj| _t  ¡ | _t jj| j_| jj t jjt jj	g¡ | jj
 t jjt jj	g¡ | j ¡ | _t  ¡ | _| j | j¡ d S r   )r	   ÚTestEnumValuesr   r   r%   ZZEROr^   r_   ÚextendZONEÚpacked_nested_enumr   Zmessage_dataZTestMissingEnumValuesÚmissing_messager   r   r   r   r   r   w  s    

ÿþþ
zUnknownEnumValuesTest.setUpc                 C   s¤   | j j| }t | j¡}|  |tj¡ d}|D ]D}|j|jkr.|d7 }|jt j	j
krd|  |j|¡ q.|  ||j¡ q.|jt j	j
kr”|  |t|ƒ¡ n|  |d¡ d S )Nr   r*   )r   rI   r   r.   rŽ   ZassertIsInstancer/   rL   rY   rZ   r[   rV   r!   r#   r(   )r   rN   rO   rP   r5   ÚcountÚfieldr   r   r   r]     s    z'UnknownEnumValuesTest.CheckUnknownFieldc                 C   s6   t  ¡ }d|_t  ¡ }| | ¡ ¡ |  |jd¡ d S )NZblahr   )r	   Z
JustStringÚdummyr‹   r   r   r#   r^   )r   Zjust_stringÚmissingr   r   r   Ú!testUnknownParseMismatchEnumValue¡  s
    z7UnknownEnumValuesTest.testUnknownParseMismatchEnumValuec                 C   sN   |   | j d¡¡ |  | jjd¡ | j ¡ }| j d¡ |  | j ¡ |¡ d S )Nr^   rU   )ZassertFalserŽ   ZHasFieldr#   r^   r   r9   )r   r3   r   r   r   ÚtestUnknownEnumValue®  s
    
z*UnknownEnumValuesTest.testUnknownEnumValuec                 C   s   |   g | jj¡ d S r   )r#   rŽ   r_   r   r   r   r   ÚtestUnknownRepeatedEnumValue¶  s    z2UnknownEnumValuesTest.testUnknownRepeatedEnumValuec                 C   s   |   g | jj¡ d S r   )r#   rŽ   r   r   r   r   r   ÚtestUnknownPackedEnumValue¹  s    z0UnknownEnumValuesTest.testUnknownPackedEnumValuec                 C   sP   t  | j¡}|  t|ƒd¡ |  d| jj¡ |  d| jj¡ |  d| jj	¡ d S )Né   r^   r_   r   )
r   r.   rŽ   r#   r(   r]   r%   r^   r_   r   rh   r   r   r   Ú!testCheckUnknownFieldValueForEnum¼  s    ÿÿÿz7UnknownEnumValuesTest.testCheckUnknownFieldValueForEnumc                 C   s*   t  ¡ }| | j ¡ ¡ |  | j|¡ d S r   )r	   r‹   r   rŽ   r   r#   r%   )r   Znew_messager   r   r   ÚtestRoundTripÆ  s    z#UnknownEnumValuesTest.testRoundTripN)rC   rD   rE   r   r]   r“   r”   r•   r–   r˜   r™   r   r   r   r   rŠ   t  s   
rŠ   Ú__main__)Ú__doc__Ú
__author__r†   r…   Zgoogle.protobufr   r   r   r   Zgoogle.protobuf.internalr   r   r   r	   r
   r   r   r   r   r   r{   ÚImportErrorZTestCaser   rF   rŠ   rC   Úmainr   r   r   r   Ú<module>    s<   l KW
