o
    ÞË·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yo   Y nw ejG dd„ dejƒƒZejG dd„ dejƒƒZejG dd„ dejƒƒZedkrže ¡  dS dS )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                   @   óL   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   óH   t jj| _t  ¡ | _t | j¡ | j ¡ | _t  	¡ | _
| j
 | j¡ d S ©N©r   ÚTestAllTypesÚ
DESCRIPTORr   Ú
all_fieldsr
   ÚSetAllFieldsÚSerializeToStringÚall_fields_dataÚTestEmptyMessageÚempty_messageÚParseFromString©Úself© r    úc/var/www/ideatree/venv/lib/python3.10/site-packages/google/protobuf/internal/unknown_fields_test.pyÚsetUp?   ó   


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   ÚByteSizer   r   r    r    r!   ÚtestByteSizeT   s   zUnknownFieldsTest.testByteSizec                 C   s   |   dt| j ¡ ƒ¡ d S )Nr   )r'   Úlenr   Ú
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   ÚRawMessageSetÚitemÚaddÚtype_idr   ÚTestMessageSetExtension1Úir   r)   ÚTestMessageSetÚMergeFromStringr   ÚUnknownFieldSetr'   r-   Úfield_numberÚ	wire_typer   ÚWIRETYPE_LENGTH_DELIMITEDr%   r   )r   Úrawr2   Úmessage1Ú
serializedÚprotoÚunknown_field_setÚdÚmessage_newÚreserializedÚ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   r0   ÚtestÚ1)r   ÚDiscardUnknownFieldsr'   r   r   r   rG   Úoptional_nested_messager   Úrepeated_nested_messager3   rI   r   ÚTestMapÚmap_int32_all_typesÚmap_string_string)r   r)   Úother_messageÚmsgr    r    r!   ÚtestDiscardUnknownFieldsˆ   sH   
ÿ
ÿ
ÿÿÿÿ
þþz*UnknownFieldsTest.testDiscardUnknownFieldsN)Ú__name__Ú
__module__Ú__qualname__r"   r&   r*   r,   r/   rF   rJ   rW   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   r   r   r   r   r    r    r!   r"   ¬   r#   z UnknownFieldsAccessorsTest.setUpc           
      C   s’   t  ¡ dkrd S | jj| }tj|j }t |j	|¡}i }| j
jD ]\}}||kr>tjj| d }	|	t|ƒdt|ƒ| j|ƒ q!|  ||| ¡ d S )NÚpythonr   )r   ÚTyper   Úfields_by_namer   ÚFIELD_TYPE_TO_WIRE_TYPEÚtyper   ÚTagBytesÚnumberr   Ú_unknown_fieldsr   r   Ú_decoders_by_tagÚ
memoryviewr-   r   r'   )
r   ÚnameÚexpected_valueÚfield_descriptorr;   Ú	field_tagÚresult_dictÚ	tag_bytesÚvalueÚdecoderr    r    r!   ÚInternalCheckUnknownFieldº   s   €z4UnknownFieldsAccessorsTest.InternalCheckUnknownFieldc                 C   sÞ   | j j| }tj|j }|D ]^}|j|jkrl|  ||j¡ |dkrF|  |d |j	d j¡ |  |d |j	d j¡ |  |d |j	d j	¡ q|t
jkrV|  t|j	ƒttf¡ |jt jjkre|  |j	|¡ q|  ||j	¡ qd S )Né   r   r0   é   )r   r^   r   r_   r`   r:   rb   r'   r;   r%   r   r<   ÚassertInÚstrÚbytesÚlabelÚFieldDescriptorÚLABEL_REPEATED)r   rf   rA   rg   rh   Ú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_fixed64rG   zutf-8Úoptionalgroup)é   r   éu   éb   )r   r9   r   ry   r   rz   rn   r{   r|   r}   r~   rG   Úencoder   r'   r-   ©r   rA   r    r    r!   ÚtestCheckUnknownFieldValueÜ   sf   þÿþÿþÿþÿþÿþÿþÿz5UnknownFieldsAccessorsTest.testCheckUnknownFieldValuec                 C   s*   t  ¡ }| | j¡ |  | ¡ | j¡ d S r   )r   r   Ú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 )Nr0   rp   r|   ro   é   r   )r   r   r|   Úoptional_uint32r   r   r   rH   Úoptional_int64r   r9   r'   r-   Ú	MergeFrom)r   r)   ÚsourceÚdestinationrA   r    r    r!   ÚtestMergeFrom  s*   



z(UnknownFieldsAccessorsTest.testMergeFromc                 C   s<   t  | j¡}| j ¡  |  | j ¡ d¡ |  t|ƒd¡ d S )NrK   r‚   )r   r9   r   ÚClearr'   r   r-   r„   r    r    r!   Ú	testClear0  s   
z$UnknownFieldsAccessorsTest.testClear)ro   rˆ   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   r9   r   )Ú_©Únb_leaksr   r    r!   Úleaking_function=  s   ÿzRUnknownFieldsAccessorsTest.testUnknownFieldsNoMemoryLeak.<locals>.leaking_functionÚlinenoc                    s   g | ]	}|j ˆ kr|‘qS r    )Ú
count_diff)Ú.0Úx)r”   r    r!   Ú
<listcomp>I  s    zLUnknownFieldsAccessorsTest.testUnknownFieldsNoMemoryLeak.<locals>.<listcomp>)ÚtracemallocÚstartÚtake_snapshotÚ
compare_toÚstopr'   )r   r•   Ú	snapshot1Ú	snapshot2Ú	top_statsr    r“   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   r0   iÈ  Úpayload)r   r   r   Úar   r   r   r   r9   r%   r'   r-   r   r‰   ÚNestedTestAllTypesr¥   rP   rH   )r   r)   r   Úsub_unknown_fieldsÚnested_messagerA   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   r9   r   r'   r%   )r   r)   r   rx   r    r    r!   ÚtestUnknownFieldd  s   z+UnknownFieldsAccessorsTest.testUnknownFieldc                 C   s@   t  ¡ }| | j¡ |  tt |¡ƒd¡ |  | ¡ | j¡ d S )Nr‚   )	r   ÚTestEmptyMessageWithExtensionsr   r   r'   r-   r   r9   r   r(   r    r    r!   ÚtestUnknownExtensionsm  s   z0UnknownFieldsAccessorsTest.testUnknownExtensionsN)rX   rY   rZ   r"   rn   ry   r…   r‡   rŽ   r   ÚunittestÚskipIfÚsysÚversion_infoÚmajorÚminorr£   rª   r«   r­   r    r    r    r!   r[   ©   s    5ÿ
	r[   c                   @   r   )Ú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)   ÚZEROrz   r{   ÚextendÚONEÚpacked_nested_enumr   Úmessage_dataÚTestMissingEnumValuesÚmissing_messager   r   r    r    r!   r"   w  s   

ÿþþ
zUnknownEnumValuesTest.setUpc                 C   s¦   | j j| }t | j¡}|  |tj¡ d}|D ]"}|j|jkr9|d7 }|jt j	j
kr2|  |j|¡ q|  ||j¡ q|jt j	j
krK|  |t|ƒ¡ d S |  |d¡ d S )Nr   r0   )r   r^   r   r9   r¼   ÚassertIsInstancer:   rb   rt   ru   rv   rq   r%   r'   r-   )r   rf   rg   rh   rA   ÚcountÚfieldr    r    r!   ry     s   €z'UnknownEnumValuesTest.CheckUnknownFieldc                 C   s6   t  ¡ }d|_t  ¡ }| | ¡ ¡ |  |jd¡ d S )NÚblahr   )r	   Ú
JustStringÚdummyrµ   r   r   r'   rz   )r   Újust_stringÚmissingr    r    r!   Ú!testUnknownParseMismatchEnumValue¡  s
   z7UnknownEnumValuesTest.testUnknownParseMismatchEnumValuec                 C   sN   |   | j d¡¡ |  | jjd¡ | j ¡ }| j d¡ |  | j ¡ |¡ d S )Nrz   rp   )ÚassertFalser¼   ÚHasFieldr'   rz   r   rH   )r   r?   r    r    r!   ÚtestUnknownEnumValue®  s
   
z*UnknownEnumValuesTest.testUnknownEnumValuec                 C   ó   |   g | jj¡ d S r   )r'   r¼   r{   r   r    r    r!   ÚtestUnknownRepeatedEnumValue¶  ó   z2UnknownEnumValuesTest.testUnknownRepeatedEnumValuec                 C   rÉ   r   )r'   r¼   r¹   r   r    r    r!   ÚtestUnknownPackedEnumValue¹  rË   z0UnknownEnumValuesTest.testUnknownPackedEnumValuec                 C   sP   t  | j¡}|  t|ƒd¡ |  d| jj¡ |  d| jj¡ |  d| jj	¡ d S )Né   rz   r{   r¹   )
r   r9   r¼   r'   r-   ry   r)   rz   r{   r¹   r„   r    r    r!   Ú!testCheckUnknownFieldValueForEnum¼  s   ÿÿÿz7UnknownEnumValuesTest.testCheckUnknownFieldValueForEnumc                 C   s*   t  ¡ }| | j ¡ ¡ |  | j|¡ d S r   )r	   rµ   r   r¼   r   r'   r)   )r   Únew_messager    r    r!   ÚtestRoundTripÆ  s   z#UnknownEnumValuesTest.testRoundTripN)rX   rY   rZ   r"   ry   rÅ   rÈ   rÊ   rÌ   rÎ   rÐ   r    r    r    r!   r´   t  s    
r´   Ú__main__)Ú__doc__Ú
__author__r°   r®   Úgoogle.protobufr   r   r   r   Úgoogle.protobuf.internalr   r   r   r	   r
   r   r   r   r   r   r›   ÚImportErrorÚTestCaser   r[   r´   rX   Úmainr    r    r    r!   Ú<module>   sB   þl KWÿ