o
    ‹¨ÊhG  ã                   @   s  d Z dZzddlZW n ey   ddlZY nw ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ dd	l
mZ dd
l
mZ ddl
mZ ddl
mZ ddl
mZ ddl
mZ ddlmZ ejZG dd„ deƒZG dd„ deƒZG dd„ deƒ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)Ú
descriptorc                   @   ó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   ú^/var/www/html/env/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   ÚtestSerializeE   s   
zUnknownFieldsTest.testSerializec                 C   s*   t  ¡ }| | j¡ |  | j| ¡ ¡ d S r   )r   r   r   r   ÚassertEqualr   ©r   Úmessager   r   r   ÚtestSerializeProto3L   s   z%UnknownFieldsTest.testSerializeProto3c                 C   s   |   | j ¡ | j ¡ ¡ d S r   )r%   r   ÚByteSizer   r   r   r   r   ÚtestByteSizeR   s   zUnknownFieldsTest.testByteSizec                 C   s   |   dt| j ¡ ƒ¡ d S )Nr   )r%   Úlenr   Ú
ListFieldsr   r   r   r   ÚtestListFieldsU   s   z UnknownFieldsTest.testListFieldsc                 C   st   t  ¡ }|j ¡ }d|_t ¡ }d|_| ¡ |_	| ¡ }t 
¡ }| |¡ | ¡ }t  ¡ }| |¡ |  ||¡ d S )Ni«¿Ýi90  )r   ÚRawMessageSetÚitemÚaddÚtype_idr   ÚTestMessageSetExtension1Úir   r'   ÚTestMessageSetÚMergeFromStringr%   )r   Úrawr/   Úmessage1Ú
serializedÚprotoÚreserializedÚnew_rawr   r   r   Ú1testSerializeMessageSetWireFormatUnknownExtensionY   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   Ú
testEqualsq   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   é   ÚtestÚ1)r   ÚDiscardUnknownFieldsr%   r   r   r   r=   Úoptional_nested_messager   Úrepeated_nested_messager0   r?   r   ÚTestMapÚmap_int32_all_typesÚmap_string_string)r   r'   Úother_messageÚmsgr   r   r   ÚtestDiscardUnknownFieldsz   sH   
ÿ
ÿ
ÿÿÿÿ
þþz*UnknownFieldsTest.testDiscardUnknownFieldsN)Ú__name__Ú
__module__Ú__qualname__r    r$   r(   r*   r-   r<   r@   rN   r   r   r   r   r   ;   s    	r   c                   @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zd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Úcppr   )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_descriptorÚ	wire_typeÚ	field_tagÚresult_dictÚ	tag_bytesÚvalueÚdecoderr   r   r   ÚInternalCheckUnknownField«   s   €z4UnknownFieldsAccessorsTest.InternalCheckUnknownFieldc                 C   s¾   | j j| }tj|j }|D ]N}|j|jkr\|  ||j¡ |dkrF|  |d |j	d j¡ |  |d |j	d j¡ |  |d |j	d j	¡ q|j
t jjkrU|  |j	|¡ q|  ||j	¡ qd S )Né   r   rC   é   )r   rU   r   rV   rW   Úfield_numberrY   r%   r`   r#   ÚlabelÚFieldDescriptorÚLABEL_REPEATEDÚassertIn)r   r]   Úunknown_fieldsr^   r_   Úexpected_typeÚunknown_fieldr   r   r   ÚCheckUnknownField¸   s&   ÿ

ÿ€óz,UnknownFieldsAccessorsTest.CheckUnknownFieldc                 C   s  | 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_fixed64r=   zutf-8Úoptionalgroup)é   r   éu   éa   )r   ÚUnknownFieldsrq   r   rr   rf   rs   rt   ru   rv   r=   Úencoderw   r%   r+   )r   rn   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   ó   z'UnknownFieldsAccessorsTest.testCopyFromc                 C   s   t  ¡ }d|_d|_t  ¡ }| | ¡ ¡ | d¡ d|_d|_t  ¡ }| 	¡ }|  
dt|ƒ¡ | | ¡ ¡ |  t¡�}t|ƒ W d   ƒ n1 sKw   Y  |  dt|jƒ¡ | 	¡ }|  
dt|ƒ¡ | |¡ |  
dt|ƒ¡ | | ¡ ¡ |  
|jd¡ |  
|jd¡ |  
|jd¡ d S )NrC   rh   rt   rg   é   r   úUnknownFields does not exist.)r   r   rt   Úoptional_uint32r   r   r   r>   Úoptional_int64r{   r%   r+   ÚassertRaisesÚ
ValueErrorrm   ÚstrÚ	exceptionÚ	MergeFrom)r   r'   ÚsourceÚdestinationrn   Úcontextr   r   r   ÚtestMergeFrom  s4   

ÿÿ
z(UnknownFieldsAccessorsTest.testMergeFromc                 C   sn   | j  ¡ }| j  ¡  |  | j  ¡ d¡ |  t¡�}t|ƒ W d   ƒ n1 s'w   Y  |  dt	|j
ƒ¡ d S )NrA   r‚   )r   r{   ÚClearr%   r   r…   r†   r+   rm   r‡   rˆ   )r   rn   rŒ   r   r   r   Ú	testClear#  s   


ÿÿz$UnknownFieldsAccessorsTest.testClearc                 C   sh  t  ¡ }d|j_t  ¡ }| | ¡ ¡ | ¡ d j}|  	dt
|ƒ¡ |  	|d jd¡ | ¡  |  t¡�}t
|ƒ W d   ƒ n1 sCw   Y  |  dt|jƒ¡ |  t¡�}|d  W d   ƒ n1 sew   Y  |  dt|jƒ¡ | ¡  d|_t  ¡ }|jj | ¡ ¡ |jj ¡ }|  	|d jd¡ | d¡ |  	|d jd¡ |jj ¡ }|  	dt
|ƒ¡ d S )Né{   r   rC   r‚   iÈ  Úpayload)r   r   rw   Úar   r   r   r{   r#   r%   r+   rŽ   r…   r†   rm   r‡   rˆ   rƒ   ÚNestedTestAllTypesr‘   rG   r>   )r   r'   r‹   Úsub_unknown_fieldsrŒ   Únested_messagern   r   r   r   ÚtestSubUnknownFields-  sD   
ÿÿ
þÿÿ
ÿ

ÿz/UnknownFieldsAccessorsTest.testSubUnknownFieldsc                 C   s~   t  ¡ }d|_t  ¡ }| | ¡ ¡ | ¡ d }| ¡  |  t	¡�}|j
 W d   ƒ n1 s/w   Y  |  dt|jƒ¡ d S )Nr�   r   z$The parent message might be cleared.)r   r   rt   r   r   r   r{   rŽ   r…   r†   r#   rm   r‡   rˆ   )r   r'   r‹   rp   rŒ   r   r   r   ÚtestUnknownFieldM  s   ÿÿz+UnknownFieldsAccessorsTest.testUnknownFieldc                 C   s*   t  ¡ }| | j¡ |  | ¡ | j¡ d S r   )r   ÚTestEmptyMessageWithExtensionsr   r   r%   r   r&   r   r   r   ÚtestUnknownExtensionsY  r€   z0UnknownFieldsAccessorsTest.testUnknownExtensionsN)rO   rP   rQ   r    rf   rq   r}   r   r�   r�   r–   r—   r™   r   r   r   r   rR   ›   s    5
 rR   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'   ÚZEROrr   rs   ÚextendÚONEÚpacked_nested_enumr   Úmessage_dataÚTestMissingEnumValuesÚmissing_messager   r   r   r   r   r    a  s   

ÿþþ
zUnknownEnumValuesTest.setUpc                 C   s\   | j j| }| j ¡ }|D ]}|j|jkr+|jt jjkr$|  	|j
|¡ q|  ||j
¡ qd S r   )r   rU   r¢   r{   ri   rY   rj   rk   rl   rm   r#   r%   )r   r]   r^   r_   rn   Úfieldr   r   r   rq   z  s   
€ûz'UnknownEnumValuesTest.CheckUnknownFieldc                 C   s6   t  ¡ }d|_t  ¡ }| | ¡ ¡ |  |jd¡ d S )NÚblahr   )r	   Ú
JustStringÚdummyr›   r   r   r%   rr   )r   Újust_stringÚmissingr   r   r   Ú!testUnknownParseMismatchEnumValue„  s
   z7UnknownEnumValuesTest.testUnknownParseMismatchEnumValuec                 C   sN   |   | j d¡¡ |  | jjd¡ | j ¡ }| j d¡ |  | j ¡ |¡ d S )Nrr   rh   )ÚassertFalser¢   ÚHasFieldr%   rr   r   r>   )r   r8   r   r   r   ÚtestUnknownEnumValue‘  s
   
z*UnknownEnumValuesTest.testUnknownEnumValuec                 C   ó   |   g | jj¡ d S r   )r%   r¢   rs   r   r   r   r   ÚtestUnknownRepeatedEnumValue™  ó   z2UnknownEnumValuesTest.testUnknownRepeatedEnumValuec                 C   r­   r   )r%   r¢   rŸ   r   r   r   r   ÚtestUnknownPackedEnumValueœ  r¯   z0UnknownEnumValuesTest.testUnknownPackedEnumValuec                 C   s4   |   d| jj¡ |   d| jj¡ |   d| jj¡ d S )Nrr   rs   rŸ   )rq   r'   rr   rs   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)rO   rP   rQ   r    rq   r©   r¬   r®   r°   r±   r³   r   r   r   r   rš   _  s    
rš   Ú__main__)Ú__doc__Ú
__author__Ú	unittest2ÚunittestÚImportErrorÚgoogle.protobufr   r   r   r   Úgoogle.protobuf.internalr   r   r   r	   r
   r   r   r   ÚBaseTestCaser   rR   rš   rO   Úmainr   r   r   r   Ú<module>   s6   !ÿ` ENÿ