o
    ‹¨Êh�F ã                   @   s"  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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 ddl
mZ ddlmZ G dd„ dejƒZG dd„ dejƒZe ee¡G dd„ deƒƒZe ee¡G dd„ deƒƒZe ee¡G dd„ deƒƒZ e ee¡G dd„ deƒƒZ!G dd„ deƒZ"G dd„ deƒZ#G d d!„ d!ejƒZ$G d"d#„ d#ejƒZ%e ee¡G d$d%„ d%eƒƒZ&G d&d'„ d'eƒZ'e(d(k�re )¡  dS dS ))z%Test for google.protobuf.text_format.é    N)Úany_pb2)Úany_test_pb2)Úmap_unittest_pb2)Úunittest_custom_options_pb2)Úunittest_mset_pb2)Úunittest_pb2)Úunittest_proto3_arena_pb2)Údescriptor_pb2)Úmessage_set_extensions_pb2)Ú	test_util©Údescriptor_pool)Útext_format)Ú_parameterizedc                   @   s   e Zd Zdd„ ZdS )ÚSimpleTextFormatTestsc                 C   s    t jD ]
}|  dt|ƒ¡ qd S )Né   )r   Ú_QUOTESÚassertEqualÚlen)ÚselfÚquote© r   ú[/var/www/html/env/lib/python3.10/site-packages/google/protobuf/internal/text_format_test.pyÚtestQuoteMarksAreSingleCharsJ   s   
ÿz2SimpleTextFormatTests.testQuoteMarksAreSingleCharsN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   D   s    r   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTextFormatBasec                 C   sL   t  |¡�}ttu r| ¡ ndd„ |D ƒW  d   ƒ S 1 sw   Y  d S )Nc                 S   s   g | ]}|  d ¡‘qS )úutf-8)Údecode)Ú.0Úgolden_liner   r   r   Ú
<listcomp>U   s    z-TextFormatBase.ReadGolden.<locals>.<listcomp>)r   Ú
GoldenFileÚstrÚbytesÚ	readlines)r   Úgolden_filenameÚfr   r   r   Ú
ReadGoldenR   s   $þzTextFormatBase.ReadGoldenc                 C   s    |   |¡}|  |d |¡¡ d S ©NÚ )r)   ÚassertMultiLineEqualÚjoin)r   Útextr'   Úgolden_linesr   r   r   ÚCompareToGoldenFileW   s   
z"TextFormatBase.CompareToGoldenFilec                 C   s   |   ||¡ d S ©N)r   )r   r.   Úgolden_textr   r   r   ÚCompareToGoldenText[   s   z"TextFormatBase.CompareToGoldenTextc                 C   s>   |  dd¡  dd¡  dd¡  dd¡}t dtj¡ d|¡}|S )Nze+0ze+ze-0ze-z\.0$r+   )ÚreplaceÚreÚcompileÚ	MULTILINEÚsub)r   r.   r   r   r   ÚRemoveRedundantZeros^   s
   ÿz#TextFormatBase.RemoveRedundantZerosN)r   r   r   r)   r0   r3   r9   r   r   r   r   r   P   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d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#S )$ÚTextFormatMessageToStringTestsc                 C   sx   |  ¡ }|j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |  |  t 	|¡¡d¡ d S )	Nìûÿÿÿ         ì   ÿÿÿÿ çw¾Ÿ/Ý^@çÆtþQFÖ„DçŽ‹Â‚°6<ú 
	\'"õ   Ã¼êœŸzørepeated_int64: -9223372036854775808
repeated_uint64: 18446744073709551615
repeated_double: 123.456
repeated_double: 1.23e+22
repeated_double: 1.23e-18
repeated_string: "\000\001\007\010\014\n\r\t\013\\\'\""
repeated_string: "\303\274\352\234\237"
©
ÚTestAllTypesÚrepeated_int64ÚappendÚrepeated_uint64Úrepeated_doubleÚrepeated_stringr3   r9   r   ÚMessageToString©r   Úmessage_moduleÚmessager   r   r   ÚtestPrintExoticl   s   þz.TextFormatMessageToStringTests.testPrintExoticc                 C   s@   G dd„ dt jƒ}| ¡ }|j |dƒ¡ |  t |¡d¡ d S )Nc                   @   s   e Zd ZdS )zQTextFormatMessageToStringTests.testPrintExoticUnicodeSubclass.<locals>.UnicodeSubN)r   r   r   r   r   r   r   Ú
UnicodeSub‚   s    rN   rA   z(repeated_string: "\303\274\352\234\237"
)ÚsixÚ	text_typerC   rH   rE   r3   r   rI   )r   rK   rN   rL   r   r   r   ÚtestPrintExoticUnicodeSubclass€   s   þz=TextFormatMessageToStringTests.testPrintExoticUnicodeSubclassc                 C   s2   |  ¡ }|j ¡ }d|_|  tj|dd�d¡ d S )Né*   T©Úas_one_lineú"repeated_nested_message { bb: 42 }©rC   Úrepeated_nested_messageÚaddÚbbr3   r   rI   )r   rK   rL   Úmsgr   r   r   ÚtestPrintNestedMessageAsOneLine‹   s   
þz>TextFormatMessageToStringTests.testPrintNestedMessageAsOneLinec                 C   s^   |  ¡ }|j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |  tj|dd�d¡ d S )Nr   é   ÚGoogleÚZurichTrS   zirepeated_int32: 1 repeated_int32: 1 repeated_int32: 3 repeated_string: "Google" repeated_string: "Zurich")rC   Úrepeated_int32rE   rH   r3   r   rI   rJ   r   r   r   Ú testPrintRepeatedFieldsAsOneLine“   s   þz?TextFormatMessageToStringTests.testPrintRepeatedFieldsAsOneLinec           	      C   sè   |  ¡ }|j d¡ |j d¡ |j d¡ |j tj¡ |j tj¡ |j tj¡ d|j	_
dD ]
}|j ¡ }||_
q1d}|rT| dd¡}t d	d|¡}t d
d|¡}tj|d|d�}|  ||¡ |  ¡ }t ||¡ |  ||¡ d S )Nr   r]   zHello,Worldr\   )é   é    zúoptional_nested_message {
  bb: 3
}
repeated_int32: [1]
repeated_string: "Google"
repeated_string: "Hello,World"
repeated_nested_message {
  bb: 21
}
repeated_nested_message {
  bb: 32
}
repeated_foreign_enum: [FOREIGN_FOO, FOREIGN_BAR, FOREIGN_BAZ]
Ú
ú z\s+z\s$r+   T)Úuse_short_repeated_primitivesrT   )rC   r_   rE   rH   Úrepeated_foreign_enumr   ÚFOREIGN_FOOÚFOREIGN_BARÚFOREIGN_BAZÚoptional_nested_messagerY   rW   rX   r4   r5   r8   r   rI   r3   ÚParser   )	r   rK   rT   rL   ÚirZ   Úexpected_asciiÚactual_asciiÚparsed_messager   r   r   Ú$VerifyPrintShortFormatRepeatedFieldsŸ   s2   
ÿþzCTextFormatMessageToStringTests.VerifyPrintShortFormatRepeatedFieldsc                 C   s   |   |d¡ |   |d¡ d S )NFT)rp   )r   rK   r   r   r   Ú"testPrintShortFormatRepeatedFieldsÀ   s   zATextFormatMessageToStringTests.testPrintShortFormatRepeatedFieldsc                 C   s(   |  ¡ }d|_|  tj|dd�d¡ d S )Nz
a
new
lineTrS   zoptional_string: "a\nnew\nline")rC   Úoptional_stringr3   r   rI   rJ   r   r   r   Ú'testPrintNestedNewLineInStringAsOneLineÄ   s   þzFTextFormatMessageToStringTests.testPrintNestedNewLineInStringAsOneLinec                 C   s|   |  ¡ }|j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |  |  tj	|dd	�¡d
¡ d S )Nr;   r<   r=   r>   r?   r@   rA   TrS   z÷repeated_int64: -9223372036854775808 repeated_uint64: 18446744073709551615 repeated_double: 123.456 repeated_double: 1.23e+22 repeated_double: 1.23e-18 repeated_string: "\000\001\007\010\014\n\r\t\013\\\'\"" repeated_string: "\303\274\352\234\237"rB   rJ   r   r   r   ÚtestPrintExoticAsOneLineË   s   ÿýz7TextFormatMessageToStringTests.testPrintExoticAsOneLinec                 C   sâ   |  ¡ }|j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ tj|dd	d
�}|  ¡ }t ||¡}|  	||¡ |  
||¡ tj|ddd
�}|  ¡ }t ||¡}|  	||¡ |  
||d||f ¡ d S )Nr;   r<   r=   r>   r?   r@   rA   TF)rT   Úas_utf8z	
%s != %s)rC   rD   rE   rF   rG   rH   r   rI   rk   ÚassertIsr   )r   rK   rL   Ú	wire_textro   Úrr   r   r   ÚtestRoundTripExoticAsOneLineà   s4   þþ
ÿz;TextFormatMessageToStringTests.testRoundTripExoticAsOneLinec              
   C   s„   |  ¡ }|j d¡ tj|dd�}d}tjr|n| d¡}|  ||¡ |  ¡ }t 	||¡ |  
||d|||jd |jd f ¡ d S )Nõ   Ã¼	êœŸT©ru   u   repeated_string: "Ã¼\têœŸ"
r   ú
%s != %s  (%s != %s)r   )rC   rH   rE   r   rI   rO   ÚPY3Úencoder3   rk   r   )r   rK   rL   r.   Úgolden_unicoder2   ro   r   r   r   ÚtestPrintRawUtf8Stringý   s   ÿÿÿz5TextFormatMessageToStringTests.testPrintRawUtf8Stringc                 C   sŽ   |  ¡ }d|j_d|j_|jj d¡ |jj d¡ g d¢}tj|dd�}|  	|  
|¡dj|Ž ¡ tj|d	dd
�}|  	|  
|¡dj|Ž ¡ d S )Ng      ô?g÷/_ÛeÿÌ¾iöéÿÿgâ¹­ã®?)zoptional_float: 1.25z%optional_double: -3.45678901234568e-6zrepeated_float: -5642zrepeated_double: 7.89e-5z.15g)Úfloat_formatz&payload {{
  {0}
  {1}
  {2}
  {3}
}}
T)rT   r�   zpayload {{ {0} {1} {2} {3} }})ÚNestedTestAllTypesÚpayloadÚoptional_floatÚoptional_doubleÚrepeated_floatrE   rG   r   rI   r3   r9   Úformat)r   rK   rL   Úformatted_fieldsÚtext_messager   r   r   ÚtestPrintFloatFormat  s*   ÿþþþz3TextFormatMessageToStringTests.testPrintFloatFormatc                 C   s"   |  ¡ }d|_|  dt|ƒ¡ d S )Né{   zc: 123
)ÚForeignMessageÚcr   r$   rJ   r   r   r   ÚtestMessageToString-  s   z2TextFormatMessageToStringTests.testMessageToStringc                 C   sJ   d}|  d¡}| ¡ }||_||_tj|dd�}t d¡}|  ||¡ d S )Nõ!   Ã� short desÃ§ription and a ðŸ�Œ.r   Tr{   u�   optional_string: "Ã� short desÃ§ription and a ðŸ�Œ."
optional_bytes: "\303\201 short des\303\247ription and a \360\237\215\214."
)	r~   rC   rr   Úoptional_bytesr   rI   ÚtextwrapÚdedentr3   ©r   rK   r   Úgolden_bytesrL   r.   Úgolden_messager   r   r   ÚtestMessageToStringUnicode2  s   
ÿz9TextFormatMessageToStringTests.testMessageToStringUnicodec                 C   sD   d}|  d¡}| ¡ }||_||_tj|dd�}d}|  ||¡ d S )Nr�   r   Fr{   z™optional_string: "\303\201 short des\303\247ription and a \360\237\215\214."
optional_bytes: "\303\201 short des\303\247ription and a \360\237\215\214."
)r~   rC   rr   r�   r   rI   r3   r“   r   r   r   ÚtestMessageToStringASCII@  s   
ÿz7TextFormatMessageToStringTests.testMessageToStringASCIIc                 C   ó†   |  ¡ }|jjd }|j}t d¡}t |||¡ |  d| ¡ ¡ | 	¡  t d¡}t 
|¡}| ||¡ |  d| ¡ ¡ | 	¡  d S )Nr„   Fzoptional_float: 0.0
)rC   Ú
DESCRIPTORÚfields_by_namer„   r   Ú
TextWriterÚ
PrintFieldr   ÚgetvalueÚcloseÚ_Printer©r   rK   rL   ÚfieldÚvalueÚoutÚprinterr   r   r   ÚtestPrintFieldP  ó   


z-TextFormatMessageToStringTests.testPrintFieldc                 C   r˜   )Nr„   Fz0.0)rC   r™   rš   r„   r   r›   ÚPrintFieldValuer   r�   rž   rŸ   r    r   r   r   ÚtestPrintFieldValue_  r¦   z2TextFormatMessageToStringTests.testPrintFieldValuec                 C   sT   t jj}t ¡ }| |¡ d}|  |t |¡¡ t ¡ }t 	||¡ |  ||¡ d S )Naß  name: "TestMessageWithCustomOptions"
field {
  name: "field1"
  number: 1
  label: LABEL_OPTIONAL
  type: TYPE_STRING
  options {
    ctype: CORD
    [protobuf_unittest.field_opt1]: 8765432109
  }
}
field {
  name: "oneof_field"
  number: 2
  label: LABEL_OPTIONAL
  type: TYPE_INT32
  oneof_index: 0
}
enum_type {
  name: "AnEnum"
  value {
    name: "ANENUM_VAL1"
    number: 1
  }
  value {
    name: "ANENUM_VAL2"
    number: 2
    options {
      [protobuf_unittest.enum_value_opt1]: 123
    }
  }
  options {
    [protobuf_unittest.enum_opt1]: -789
  }
}
options {
  message_set_wire_format: false
  [protobuf_unittest.message_opt1]: -56
}
oneof_decl {
  name: "AnOneof"
  options {
    [protobuf_unittest.oneof_opt1]: -99
  }
}
)
r   ÚTestMessageWithCustomOptionsr™   r	   ÚDescriptorProtoÚCopyToProtor   r   rI   rk   )r   rK   Úmessage_descriptorÚmessage_protoÚexpected_textÚparsed_protor   r   r   ÚtestCustomOptionsn  s   ÿ
ÿ.ÿz0TextFormatMessageToStringTests.testCustomOptionsN)r   r   r   rM   rQ   r[   r`   rp   rq   rs   rt   ry   r€   rŠ   rŽ   r–   r—   r¥   r¨   r°   r   r   r   r   r:   i   s$    !!r:   c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú!TextFormatMessageToTextBytesTestsc                 C   s$   |  ¡ }d|_|  dt |¡¡ d S )Nr‹   s   c: 123
)rŒ   r�   r   r   ÚMessageToBytesrJ   r   r   r   ÚtestMessageToBytes«  s   z4TextFormatMessageToTextBytesTests.testMessageToBytesc              
   C   sp   |  ¡ }|j d¡ tj|dd�}d}|  ||¡ |  ¡ }t ||¡ |  ||d|||jd |jd f ¡ d S )Nrz   Tr{   s   repeated_string: "Ã¼\têœŸ"
r|   r   ©rC   rH   rE   r   r³   r3   rk   r   )r   rK   rL   Ú	utf8_textr”   ro   r   r   r   ÚtestRawUtf8RoundTrip°  s   ÿÿÿz6TextFormatMessageToTextBytesTests.testRawUtf8RoundTripc              
   C   sl   |  ¡ }|j d¡ t |¡}d}|  ||¡ |  ¡ }t ||¡ |  ||d|||jd |jd f ¡ d S )Nrz   s*   repeated_string: "\303\274\t\352\234\237"
r|   r   rµ   )r   rK   rL   Ú
ascii_textr”   ro   r   r   r   ÚtestEscapedUtf8ASCIIRoundTrip½  s   
ÿÿÿz?TextFormatMessageToTextBytesTests.testEscapedUtf8ASCIIRoundTripN)r   r   r   r´   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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Ze d ¡Zd!Ze d ¡Zd"Zd#Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Z d4S )5ÚTextFormatParserTestsc                 C   sX   |  ¡ }t |¡ t |¡}|  ¡ }t ||¡ |  ||¡ |tu r*t | |¡ d S d S r1   )	rC   r   ÚSetAllFieldsr   rI   rk   r   r   ÚExpectAllFieldsSet)r   rK   rL   r¸   ro   r   r   r   ÚtestParseAllFieldsÎ  s   

ÿz(TextFormatParserTests.testParseAllFieldsc                 C   sè   |  ¡ }t |¡ t |¡}| d¡}|  ¡ }t ||¡ |  ||¡ |tu r-t 	| |¡ | 
¡  t ||¡ |  ||¡ |tu rGt 	| |¡ |  ¡ }d}t ||¡ |  |jd¡ | 
¡  |  |jd¡ t ||¡ |  |jd¡ d S )Nr   u   optional_string: "cafÃ©"u   cafÃ©r+   )rC   r   r»   r   rI   r~   rk   r   r   r¼   ÚClearÚMergerr   )r   rK   rL   r¸   ro   Úmsg2r.   r   r   r   ÚtestParseAndMergeUtf8Ù  s,   


z+TextFormatParserTests.testParseAndMergeUtf8c                 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 ¡ d S )NuU  repeated_int64: -9223372036854775808
repeated_uint64: 18446744073709551615
repeated_double: 123.456
repeated_double: 1.23e+22
repeated_double: 1.23e-18
repeated_string: 
"\000\001\007\010\014\n\r\t\013\\\'\""
repeated_string: "foo" 'corge' "grault"
repeated_string: "\303\274\352\234\237"
repeated_string: "\xc3\xbc"
repeated_string: "ÃƒÂ¼"
r;   r   r<   r=   r>   r   r?   é   r@   ÚfoocorgegraultrA   õ   Ã¼r\   )rC   r   rk   r   rD   rF   rG   rH   ©r   rK   rL   r.   r   r   r   ÚtestParseExoticô  s   z%TextFormatParserTests.testParseExoticc                 C   óv   |  ¡ }d}t ||¡ |  d|jd ¡ |  d|jd ¡ |  d|jd ¡ |  d|jd ¡ |  d	|jd ¡ d S )
Nzorepeated_int64: 100;
repeated_int64: 200;
repeated_int64: 300,
repeated_string: "one",
repeated_string: "two";
éd   r   éÈ   r   é,  rÂ   ÚoneÚtwo©rC   r   rk   r   rD   rH   rÅ   r   r   r   ÚtestParseTrailingCommas  s   z-TextFormatParserTests.testParseTrailingCommasc                 C   rÇ   )
Nzerepeated_int64: [100, 200];
repeated_int64: []
repeated_int64: 300,
repeated_string: ["one", "two"];
rÈ   r   rÉ   r   rÊ   rÂ   rË   rÌ   rÍ   rÅ   r   r   r   Ú"testParseRepeatedScalarShortFormat  s   z8TextFormatParserTests.testParseRepeatedScalarShortFormatc                 C   sl   |  ¡ }d}t ||¡ |  d|jd j¡ |  d|jd j¡ |  d|jd j¡ |  d|jd	 j¡ d S )
Nzyrepeated_nested_message: [{bb: 100}, {bb: 200}],
repeated_nested_message: {bb: 300}
repeated_nested_message [{bb: 400}];
rÈ   r   rÉ   r   rÊ   rÂ   i�  r\   )rC   r   rk   r   rW   rY   rÅ   r   r   r   Ú#testParseRepeatedMessageShortFormat*  s   z9TextFormatParserTests.testParseRepeatedMessageShortFormatc                 C   s,   |  ¡ }d}t ||¡ |  |  ¡ |¡ d S r*   )rC   r   rk   r   rÅ   r   r   r   ÚtestParseEmptyText6  s   z(TextFormatParserTests.testParseEmptyTextc                 C   sl   |  ¡ }d}|  tj¡�}t ||¡ W d   ƒ n1 sw   Y  |  |j ¡ d¡ |  |j ¡ d¡ d S )Nzrepeated_string: "\xc3\xc3"r   é   )	rC   ÚassertRaisesr   Ú
ParseErrorrk   r   Ú	exceptionÚGetLineÚ	GetColumn)r   rK   rL   r.   Úer   r   r   ÚtestParseInvalidUtf8<  s   ÿz*TextFormatParserTests.testParseInvalidUtf8c                 C   ó(   |  ¡ }d}t | tjdtj||¡ d S )NÚfooz?1:1 : Message type "\w+.TestAllTypes" has no field named "foo".©rC   rO   ÚassertRaisesRegexr   rÔ   rk   rÅ   r   r   r   ÚtestParseSingleWordD  ó   
þz)TextFormatParserTests.testParseSingleWordc                 C   rÚ   )Nzunknown_field: 8
zI1:1 : Message type "\w+.TestAllTypes" has no field named "unknown_field".rÜ   rÅ   r   r   r   ÚtestParseUnknownFieldK  rß   z+TextFormatParserTests.testParseUnknownFieldc                 C   rÚ   )Nzoptional_nested_enum: BARRzg1:23 : \'optional_nested_enum: BARR\': Enum type "\w+.TestAllTypes.NestedEnum" has no value named BARR.rÜ   rÅ   r   r   r   ÚtestParseBadEnumValueR  ó   
üz+TextFormatParserTests.testParseBadEnumValuec                 C   rÚ   )Nzoptional_int32: borkz;1:17 : 'optional_int32: bork': Couldn't parse integer: borkrÜ   rÅ   r   r   r   ÚtestParseBadIntValue[  s   
ýz*TextFormatParserTests.testParseBadIntValuec                 C   sÐ   |  ¡ }d}t ||¡ d}|  d|jd ¡ |  |d | d |jd ¡ |  |d | d	 |jd
 ¡ |  || d | | d |jd ¡ |  || d | | d	 |jd ¡ |  |d |jd ¡ d S )Na   repeated_string: "\xf\x62"
               repeated_string: "\\xf\\x62"
               repeated_string: "\\\xf\\\x62"
               repeated_string: "\\\\xf\\\\x62"
               repeated_string: "\\\\\xf\\\\\x62"
               repeated_string: "\x5cx20"ú\zbr   ÚxfÚx62r   úÚbrÂ   r\   é   Úx20é   )rC   r   rk   r   rH   )r   rK   rL   r.   ÚSLASHr   r   r   ÚtestParseStringFieldUnescapec  s   ÿÿz2TextFormatParserTests.testParseStringFieldUnescapec                 C   s>   |  ¡ }d|_|  ¡ }t t |¡|¡ |  d| d¡¡ d S )Né   Úoneof_uint32Úoneof_field)rC   rï   r   rk   rI   r   Ú
WhichOneof)r   rK   ÚmÚm2r   r   r   ÚtestParseOneofx  s
   z$TextFormatParserTests.testParseOneofc                 C   sX   d  ddg¡}| ¡ }t | tjd¡� t ||¡ W d   ƒ d S 1 s%w   Y  d S )Nrc   úoneof_uint32: 11úoneof_string: "foo"z is specified along with field )r-   rC   rO   rÝ   r   rÔ   rk   ©r   rK   Úm_stringró   r   r   r   ÚtestParseMultipleOneof  s   
ÿ"þz,TextFormatParserTests.testParseMultipleOneofu!  
      optional_bytes: 'Ã� short desÃ§ription'
      optional_string: 'Ã� short desÃ§ription'
      repeated_bytes: '\303\201 short des\303\247ription'
      repeated_bytes: '\x12\x34\x56\x78\x90\xab\xcd\xef'
      repeated_string: '\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82'
      r   u   Ã� short desÃ§riptions   4Vx�«Íïu   ÐŸÑ€Ð¸Ð²ÐµÑ‚c                 C   óv   |  ¡ }t | j|¡ |  |j| j¡ |  |j| j¡ |  |j	d | j¡ |  |j	d | j
¡ |  |jd | j¡ d S ©Nr   r   )rC   r   rk   Ú_UNICODE_SAMPLEr   r�   Ú_GOLDEN_BYTESrr   Ú_GOLDEN_UNICODEÚrepeated_bytesÚ_GOLDEN_BYTES_1rH   Ú_GOLDEN_STR_0©r   rK   rò   r   r   r   ÚtestParseUnicode˜  ó   z&TextFormatParserTests.testParseUnicodec                 C   rú   rû   )rC   r   rk   Ú_BYTES_SAMPLEr   r�   rý   rr   rþ   rÿ   r   rH   r  r  r   r   r   ÚtestParseBytes¤  r  z$TextFormatParserTests.testParseBytesc                 C   óX   |  ¡ }t | j¡}t ||¡ |  |j| j¡ |  |j	| j
¡ |  |jd | j¡ d S ©Nr   )rC   ÚioÚBytesIOr  r   Ú
ParseLinesr   r�   rý   rr   rþ   rÿ   ©r   rK   rò   r(   r   r   r   ÚtestFromBytesFile°  ó   z'TextFormatParserTests.testFromBytesFilec                 C   r  r  )rC   r	  ÚStringIOrü   r   r  r   r�   rý   rr   rþ   rÿ   r  r   r   r   ÚtestFromUnicodeFile¸  r  z)TextFormatParserTests.testFromUnicodeFilec                 C   óT   |  ¡ }t | j d¡|¡ |  |j| j¡ |  |j| j	¡ |  |j
d | j¡ d S )Nó   
r   )rC   r   r  r  Úsplitr   r�   rý   rr   rþ   rÿ   r  r   r   r   ÚtestFromBytesLinesÀ  ó
   z(TextFormatParserTests.testFromBytesLinesc                 C   r  )Nrc   r   )rC   r   r  rü   r  r   r�   rý   rr   rþ   rÿ   r  r   r   r   ÚtestFromUnicodeLinesÇ  r  z*TextFormatParserTests.testFromUnicodeLinesc                 C   rÚ   )NúCoptional_nested_message { bb: 1 } optional_nested_message { bb: 2 }za1:59 : Message type "\w+.TestAllTypes" should not have multiple "optional_nested_message" fields.rÜ   rÅ   r   r   r   ÚtestParseDuplicateMessagesÎ  s   
üz0TextFormatParserTests.testParseDuplicateMessagesc                 C   rÚ   )Nú%optional_int32: 42 optional_int32: 67zX1:36 : Message type "\w+.TestAllTypes" should not have multiple "optional_int32" fields.rÜ   rÅ   r   r   r   ÚtestParseDuplicateScalarsØ  s   
ýz/TextFormatParserTests.testParseDuplicateScalarsN)!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º   Ë  s<    	


rº   c                   @   r±   )ÚTextFormatMergeTestsc                 C   s6   |  ¡ }d}t ||¡}|  ||¡ |  d|j¡ d S )Nr  éC   )rC   r   r¿   rv   r   Úoptional_int32©r   rK   rL   r.   rx   r   r   r   ÚtestMergeDuplicateScalarsä  s
   z.TextFormatMergeTests.testMergeDuplicateScalarsc                 C   s:   |  ¡ }d}t ||¡}|  ||u ¡ |  d|jj¡ d S )Nr  rÂ   )rC   r   r¿   Ú
assertTruer   rj   rY   r  r   r   r   Ú&testMergeDuplicateNestedMessageScalarsë  s
   z;TextFormatMergeTests.testMergeDuplicateNestedMessageScalarsc                 C   s8   d  ddg¡}| ¡ }t ||¡ |  d| d¡¡ d S )Nrc   rõ   rö   Úoneof_stringrð   )r-   rC   r   r¿   r   rñ   r÷   r   r   r   ÚtestMergeMultipleOneofó  s   z+TextFormatMergeTests.testMergeMultipleOneofN)r   r   r   r  r!  r#  r   r   r   r   r  á  s    r  c                   @   sT   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S )Ú OnlyWorksWithProto2RightNowTestsc                 C   ó2   t  ¡ }t |¡ |  |  tj|dd�¡d¡ d S )NT©Úpointy_bracketsz*text_format_unittest_data_pointy_oneof.txt©r   rC   r   r»   r0   r9   r   rI   ©r   rL   r   r   r   ÚtestPrintAllFieldsPointyÿ  ó   
ÿýz9OnlyWorksWithProto2RightNowTests.testPrintAllFieldsPointyc                 C   sR   d  |  d¡¡}t ¡ }t ||¡}|  ||¡ t ¡ }t |¡ |  	||¡ d S )Nrc   ú/text_format_unittest_data_oneof_implemented.txt)
r-   r)   r   rC   r   rk   rv   r   r»   r   )r   r2   ro   rx   rL   r   r   r   ÚtestParseGolden  s   ÿ
z0OnlyWorksWithProto2RightNowTests.testParseGoldenc                 C   ó.   t  ¡ }t |¡ |  |  t |¡¡d¡ d S ©Nr,  r(  r)  r   r   r   ÚtestPrintAllFields  ó   
þz3OnlyWorksWithProto2RightNowTests.testPrintAllFieldsc                 C   s    t  ¡ }d|_d|_d|_d|j_d|j_d|jt j	< d|jt j
j _d|jt jj _d	|jt j
jj _|  |  tj|d
d�¡d¡ |  |  t |¡¡d¡ d S )Nr$   ée   éo   r   r   Úext_str0Úext_str2Úext_str1Úext_str3T)Úuse_index_ordera·  my_string: "str"
my_int: 101
my_float: 111
optional_nested_message {
  oo: 0
  bb: 1
}
[protobuf_unittest.TestExtensionOrderings2.test_ext_orderings2] {
  my_string: "ext_str2"
}
[protobuf_unittest.TestExtensionOrderings1.test_ext_orderings1] {
  my_string: "ext_str1"
}
[protobuf_unittest.TestExtensionOrderings2.TestExtensionOrderings3.test_ext_orderings3] {
  my_string: "ext_str3"
}
[protobuf_unittest.my_extension_string]: "ext_str0"
a·  my_int: 101
my_string: "str"
[protobuf_unittest.TestExtensionOrderings2.test_ext_orderings2] {
  my_string: "ext_str2"
}
[protobuf_unittest.TestExtensionOrderings1.test_ext_orderings1] {
  my_string: "ext_str1"
}
[protobuf_unittest.TestExtensionOrderings2.TestExtensionOrderings3.test_ext_orderings3] {
  my_string: "ext_str3"
}
[protobuf_unittest.my_extension_string]: "ext_str0"
my_float: 111
optional_nested_message {
  bb: 1
  oo: 0
}
)r   ÚTestFieldOrderingsÚ	my_stringÚmy_intÚmy_floatrj   ÚoorY   Ú
ExtensionsÚmy_extension_stringÚTestExtensionOrderings2Útest_ext_orderings2ÚTestExtensionOrderings1Útest_ext_orderings1ÚTestExtensionOrderings3Útest_ext_orderings3r3   r9   r   rI   r)  r   r   r   ÚtestPrintInIndexOrder  sB   ÿÿÿÿþþÿýþz6OnlyWorksWithProto2RightNowTests.testPrintInIndexOrderc                 C   óL   |   d¡}t ¡ }t ||¡}|  ||¡ t ¡ }t |¡ |  ||¡ d S r/  )	r)   r   rC   r   Ú
MergeLinesrv   r   r»   r   ©r   Úopenedro   rx   rL   r   r   r   ÚtestMergeLinesGoldenZ  ó   

z5OnlyWorksWithProto2RightNowTests.testMergeLinesGoldenc                 C   rG  r/  )	r)   r   rC   r   r  rv   r   r»   r   rI  r   r   r   ÚtestParseLinesGoldend  rL  z5OnlyWorksWithProto2RightNowTests.testParseLinesGoldenc                 C   s\   t  ¡ }d|jd< d|jd< d|jd< d|jd< d	|jd
< d|jd _|  	t
 |¡d¡ d S )Né8þÿÿé…ÿÿÿìýÿÿÿ     ìýÿÿÿ     éÈ  r‹   ì        ì        Ú123Úabcrë   r3  áH  map_int32_int32 {
  key: -123
  value: -456
}
map_int64_int64 {
  key: -8589934592
  value: -17179869184
}
map_uint32_uint32 {
  key: 123
  value: 456
}
map_uint64_uint64 {
  key: 8589934592
  value: 17179869184
}
map_string_string {
  key: "abc"
  value: "123"
}
map_int32_foreign_message {
  key: 111
  value {
    c: 5
  }
}
)r   ÚTestMapÚmap_int32_int32Úmap_int64_int64Úmap_uint32_uint32Úmap_uint64_uint64Úmap_string_stringÚmap_int32_foreign_messager�   r3   r   rI   r)  r   r   r   ÚtestPrintMapn  s   





ÿz-OnlyWorksWithProto2RightNowTests.testPrintMapc                 C   sB   t  ¡ }|jd }d|_|  t|ƒd¡ d|_|  t|ƒd¡ d S )Nr3  r   z@map_int32_foreign_message {
  key: 111
  value {
    c: 1
  }
}
rÂ   z@map_int32_foreign_message {
  key: 111
  value {
    c: 2
  }
}
)r   rX  r^  r�   r   r$   )r   rL   Ú	inner_msgr   r   r   Ú"testPrintMapUsingCppImplementation—  s   
þþzCOnlyWorksWithProto2RightNowTests.testPrintMapUsingCppImplementationc                 C   st   t  ¡ }tjdd… D ]}d|j|< qttjdd… ƒD ]}d|j|< qd dd„ tjD ƒ¡}|  t 	|¡|¡ d S )Né   é   Údummyr   r+   c                 s   s   � | ]}d |f V  qdS )z3map_string_string {
  key: "%c"
  value: "dummy"
}
Nr   )r    Úletterr   r   r   Ú	<genexpr>³  s   € ÿÿzKOnlyWorksWithProto2RightNowTests.testMapOrderEnforcement.<locals>.<genexpr>)
r   rX  ÚstringÚascii_uppercaser]  Úreversedr-   r3   r   rI   )r   rL   re  Úgoldenr   r   r   ÚtestMapOrderEnforcement­  s   
ÿz8OnlyWorksWithProto2RightNowTests.testMapOrderEnforcementN)r   r   r   r*  r-  r0  rF  rK  rM  r_  ra  rk  r   r   r   r   r$  ý  s    A

)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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 )*ÚProto2Testsc                 C   sv   t  ¡ }t jj}t jj}d|jj| _d|jj| _|  	t
 |¡d¡ t ¡ }tj}d|j| _|  	t
 |¡d¡ d S )Né   rÛ   ú“message_set {
  [protobuf_unittest.TestMessageSetExtension1] {
    i: 23
  }
  [protobuf_unittest.TestMessageSetExtension2] {
    str: "foo"
  }
}
ÚbarzF[google.protobuf.internal.TestMessageSetExtension3] {
  text: "bar"
}
)r   ÚTestMessageSetContainerÚTestMessageSetExtension1Úmessage_set_extensionÚTestMessageSetExtension2Úmessage_setr>  rl   r$   r3   r   rI   r
   ÚTestMessageSetÚmessage_set_extension3r.   )r   rL   Úext1Úext2Úextr   r   r   ÚtestPrintMessageSetÊ  s   
ÿ
þzProto2Tests.testPrintMessageSetc                 C   sj   t  d¡}t ¡ }tjj}tjj}d|jj| _	d|jj| _
t j||dd� |  | ¡ d¡ | ¡  d S )NFrm  rÛ   T)Úuse_field_numberú?1 {
  1545008 {
    15: 23
  }
  1547769 {
    25: "foo"
  }
}
)r   r›   r   rp  rq  rr  rs  rt  r>  rl   r$   ÚPrintMessager3   r�   rž   )r   r£   rL   rw  rx  r   r   r   Ú testPrintMessageSetByFieldNumberã  s   
z,Proto2Tests.testPrintMessageSetByFieldNumberc                 C   sN   t  ¡ }t jj}t jj}d|jj| _d|jj| _|  	t
j|dd�d¡ d S )Nrm  rÛ   TrS   z‚message_set { [protobuf_unittest.TestMessageSetExtension1] { i: 23 } [protobuf_unittest.TestMessageSetExtension2] { str: "foo" } })r   rp  rq  rr  rs  rt  r>  rl   r$   r3   r   rI   )r   rL   rw  rx  r   r   r   ÚtestPrintMessageSetAsOneLineõ  s   þz(Proto2Tests.testPrintMessageSetAsOneLinec                 C   s”   t  ¡ }d}t ||¡ |  d|jd ¡ |  d|jd ¡ t ¡ }d}t ||¡ tjj	}tj
j	}|  d|jj| j¡ |  d|jj| j¡ d S )Nz&repeated_uint64: 1
repeated_uint64: 2
r   r   rÂ   rn  rm  rÛ   )r   rC   r   rk   r   rF   r   rp  rq  rr  rs  rt  r>  rl   r$   ©r   rL   r.   rw  rx  r   r   r   ÚtestParseMessageSet  s   zProto2Tests.testParseMessageSetc                 C   s>   t  ¡ }d}tj||t ¡ d� |  tj|t ¡ d�|¡ d S )Nz™value {
  [type.googleapis.com/google.protobuf.internal.TestAny] {
    [google.protobuf.internal.TestAnyExtension1.extension1] {
      i: 10
    }
  }
}
r   )Útest_extend_anyÚTestAnyr   r¿   r   ÚDefaultr3   rI   ©r   rL   r.   r   r   r   ÚtestExtensionInsideAnyMessage  s   ÿýz)Proto2Tests.testExtensionInsideAnyMessagec              	   C   sà   t  ¡ }d}tj||dd� |  d|jd ¡ |  d|jd ¡ t ¡ }d}tj||dd� tjj	}tj
j	}|  d|jj| j¡ |  d	|jj| j¡ t  ¡ }d
}t | tjdtj||¡ d}tj| tjdtj||dd� d S )Nz34: 1
repeated_uint64: 2
T)Úallow_field_numberr   r   rÂ   r|  rm  rÛ   z34:1
z>1:1 : Message type "\w+.TestAllTypes" has no field named "34".z1234:1
z@1:1 : Message type "\w+.TestAllTypes" has no field named "1234".)r   rC   r   rk   r   rF   r   rp  rq  rr  rs  rt  r>  rl   r$   rO   rÝ   rÔ   r€  r   r   r   ÚtestParseMessageByFieldNumber+  s8   
þ
øz)Proto2Tests.testParseMessageByFieldNumberc                 C   r.  )Nú(text_format_unittest_extensions_data.txt©r   ÚTestAllExtensionsr   ÚSetAllExtensionsr0   r9   r   rI   r)  r   r   r   ÚtestPrintAllExtensionsT  r1  z"Proto2Tests.testPrintAllExtensionsc                 C   r%  )NTr&  z/text_format_unittest_extensions_data_pointy.txtrŠ  r)  r   r   r   ÚtestPrintAllExtensionsPointy[  r+  z(Proto2Tests.testPrintAllExtensionsPointyc                 C   sF   d  |  d¡¡}t ¡ }t ||¡ t ¡ }t |¡ |  ||¡ d S )Nrc   r‰  )	r-   r)   r   r‹  r   rk   r   rŒ  r   )r   r2   ro   rL   r   r   r   ÚtestParseGoldenExtensionsc  s   ÿ
z%Proto2Tests.testParseGoldenExtensionsc                 C   s@   t  ¡ }t |¡ t |¡}t  ¡ }t ||¡ |  ||¡ d S r1   )r   r‹  r   rŒ  r   rI   rk   r   )r   rL   r¸   ro   r   r   r   ÚtestParseAllExtensionsm  s   

z"Proto2Tests.testParseAllExtensionsc              	   C   sV  t  ¡ }d}tj||dd� d}|  t |¡|¡ t  ¡ }d}tj| tjdtj||dd� t  ¡ }d}tj| tjdtj||dd� t  ¡ }d	}tj| tjdtj||dd� t  ¡ }d
}tj| tjdtj||dd� t  ¡ }d}tj| tjdtj||dd� t  ¡ }d}tj||dd� t j	j
}t jj
}|  d|jj| j¡ |  d|jj| j¡ d S )Nu3  message_set {
  [unknown_extension] {
    i: 23
    bin: "Ã "    [nested_unknown_ext]: {
      i: 23
      x: x
      test: "test_string"
      floaty_float: -0.315
      num: -inf
      multiline_str: "abc"
          "def"
          "xyz."
      [nested_unknown_ext.ext]: <
        i: 23
        i: 24
        pointfloat: .3
        test: "test_string"
        floaty_float: -0.315
        num: -inf
        long_string: "test" "test2" 
      >
    }
  }
  [unknown_extension]: 5
  [unknown_extension_with_number_field] {
    1: "some_field"
    2: -0.451
  }
}
T)Úallow_unknown_extensionzmessage_set {
}
z3message_set {
  [unknown_extension] {
    i:
  }
}
zInvalid field value: }zGmessage_set {
  [unknown_extension] {
    str: "malformed string
  }
}
zInvalid field value: "zSmessage_set {
  [unknown_extension] {
    str: "malformed
 multiline
 string
  }
}
z7message_set {
  [malformed_extension] <
    i: -5
  
}
z5:1 : '}': Expected ">".z&message_set {
  unknown_field: true
}
zb2:3 : Message type "proto2_wireformat_unittest.TestMessageSet" has no field named "unknown_field".rn  rm  rÛ   )r   rp  r   rk   r3   rI   rO   rÝ   rÔ   rq  rr  rs  r   rt  r>  rl   r$   )r   rL   r.   rj  Ú	malformedrw  rx  r   r   r   Ú testParseAllowedUnknownExtensionv  s|   úúúú	øz,Proto2Tests.testParseAllowedUnknownExtensionc                 C   óZ   t  ¡ }d}|  tj¡�}t ||¡ W d   ƒ n1 sw   Y  |  t|jƒd¡ d S )Nz#optional_nested_message { "bb": 1 }zV1:27 : 'optional_nested_message { "bb": 1 }': Expected identifier or number, got "bb".)	r   rC   rÓ   r   rÔ   rk   r   r$   rÕ   ©r   rL   r.   rØ   r   r   r   ÚtestParseBadIdentifieró  s   ÿÿz"Proto2Tests.testParseBadIdentifierc                 C   sH   t  ¡ }d}t | tjdtj||¡ t  ¡ }t | tjdtj||¡ d S )Nz[unknown_extension]: 8
z31:2 : Extension "unknown_extension" not registered.zM1:2 : Message type "protobuf_unittest.TestAllTypes" does not have extensions.)r   r‹  rO   rÝ   r   rÔ   rk   rC   r…  r   r   r   ÚtestParseBadExtensionü  s   
þ
þz!Proto2Tests.testParseBadExtensionc                 C   ó(   t  ¡ }d}t | tjdtj||¡ d S )Nzoptional_nested_enum: 100zk1:23 : \'optional_nested_enum: 100\': Enum type "\w+.TestAllTypes.NestedEnum" has no value with number 100.©r   rC   rO   rÝ   r   rÔ   rk   r…  r   r   r   ÚtestParseNumericUnknownEnum  râ   z'Proto2Tests.testParseNumericUnknownEnumc                 C   s0   t  ¡ }d}t ||¡ |  d|jt j ¡ d S )Núa[protobuf_unittest.optional_int32_extension]: 42 [protobuf_unittest.optional_int32_extension]: 67r  )r   r‹  r   r¿   r   r>  Úoptional_int32_extensionr…  r   r   r   Ú"testMergeDuplicateExtensionScalars  s   
ÿz.Proto2Tests.testMergeDuplicateExtensionScalarsc                 C   r˜  )Nr›  z‹1:96 : Message type "protobuf_unittest.TestAllExtensions" should not have multiple "protobuf_unittest.optional_int32_extension" extensions.©r   r‹  rO   rÝ   r   rÔ   rk   r…  r   r   r   Ú"testParseDuplicateExtensionScalars  ó   
üz.Proto2Tests.testParseDuplicateExtensionScalarsc                 C   r˜  )Nzs[protobuf_unittest.optional_nested_message_extension]: {} [protobuf_unittest.optional_nested_message_extension]: {}z•1:114 : Message type "protobuf_unittest.TestAllExtensions" should not have multiple "protobuf_unittest.optional_nested_message_extension" extensions.rž  r…  r   r   r   Ú#testParseDuplicateExtensionMessages"  r   z/Proto2Tests.testParseDuplicateExtensionMessagesc                 C   sD   t  ¡ }d}t | tjdtj||¡ d}t | tjdtj||¡ d S )NzRepeatedGroup: <z1:16 : Expected ">".zRepeatedGroup: {z1:16 : Expected "}".r™  r…  r   r   r   ÚtestParseGroupNotClosed,  s   ÿÿz#Proto2Tests.testParseGroupNotClosedc                 C   s\   t  ¡ }d}t ||¡ |  | d¡¡ | ¡  t  ¡ }d}t ||¡ |  | d¡¡ d S )NzOptionalGroup: {}ÚoptionalgroupzOptionalGroup: <>)r   rC   r   rk   r   ÚHasFieldr¾   r…  r   r   r   ÚtestParseEmptyGroup5  s   zProto2Tests.testParseEmptyGroupc                 C   sŠ   d}t  ¡ }t ||¡ |  d|jd ¡ |  d|jd ¡ |  d|jd ¡ |  d|jd	 ¡ |  d
|j	d ¡ |  d|j
d j¡ d S )NrW  rN  rO  rP  rQ  rR  r‹   rS  rT  rU  rV  rë   r3  )r   rX  r   rk   r   rY  rZ  r[  r\  r]  r^  r�   )r   r.   rL   r   r   r   ÚtestParseMapD  s   zProto2Tests.testParseMapN)r   r   r   rz  r~  r  r�  r†  rˆ  r�  rŽ  r�  r�  r“  r–  r—  rš  r�  rŸ  r¡  r¢  r¥  r¦  r   r   r   r   rl  È  s*    )
	}		

	rl  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d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!S )"ÚProto3Testsc                 C   s@   t  ¡ }d|_t ¡ }|j |¡ |  tj	|t
 ¡ d�d¡ d S )Nrg  r   ú[any_value {
  [type.googleapis.com/protobuf_unittest.OneString] {
    data: "string"
  }
}
©r   Ú	OneStringÚdatar   rƒ  Ú	any_valueÚPackr   r   rI   r   r„  ©r   Úpacked_messagerL   r   r   r   ÚtestPrintMessageExpandAnyl  s   ÿýz%Proto3Tests.testPrintMessageExpandAnyc                 C   sD   t  ¡ }t ¡ }| |¡ t |¡}t |t ¡ ¡}|  ||¡ d S r1   )	r   rª  r   ÚAnyr­  r   rI   rk   r   )r   Ú
packed_msgrZ   r.   Ú	other_msgr   r   r   ÚtestTopAnyMessagez  s   

zProto3Tests.testTopAnyMessagec                 C   sR   t  ¡ }t ¡ }d|_|j ¡  |¡ d|_|j ¡  |¡ |  t	 
|¡d¡ d S )NÚstring0Ústring1úÊrepeated_any_value {
  [type.googleapis.com/protobuf_unittest.OneString] {
    data: "string0"
  }
}
repeated_any_value {
  [type.googleapis.com/protobuf_unittest.OneString] {
    data: "string1"
  }
}
)r   rª  r   rƒ  r«  Úrepeated_any_valuerX   r­  r   r   rI   r®  r   r   r   Ú!testPrintMessageExpandAnyRepeated‚  s   þz-Proto3Tests.testPrintMessageExpandAnyRepeatedc                 C   sD   t  ¡ }d|_t ¡ }|j |¡ t ¡ }|  	t
j||d�d¡ d S )Nrg  r   údany_value {
  type_url: "type.googleapis.com/protobuf_unittest.OneString"
  value: "\n\006string"
}
)r   rª  r«  r   rƒ  r¬  r­  r   ÚDescriptorPoolr   r   rI   )r   r¯  rL   Ú
empty_poolr   r   r   Ú2testPrintMessageExpandAnyDescriptorPoolMissingType–  s   þz>Proto3Tests.testPrintMessageExpandAnyDescriptorPoolMissingTypec                 C   ó<   t  ¡ }d|_t ¡ }|j |¡ |  tj	|dd�d¡ d S )Nrg  Tr&  z[any_value <
  [type.googleapis.com/protobuf_unittest.OneString] <
    data: "string"
  >
>
©
r   rª  r«  r   rƒ  r¬  r­  r   r   rI   r®  r   r   r   Ú'testPrintMessageExpandAnyPointyBrackets£  ó   ÿýz3Proto3Tests.testPrintMessageExpandAnyPointyBracketsc                 C   r¾  )Nrg  TrS   zRany_value { [type.googleapis.com/protobuf_unittest.OneString] { data: "string" } }r¿  r®  r   r   r   Ú"testPrintMessageExpandAnyAsOneLine±  rÁ  z.Proto3Tests.testPrintMessageExpandAnyAsOneLinec                 C   sD   t  ¡ }d|_t ¡ }|j |¡ |  tj	|ddt
 ¡ d�d¡ d S )Nrg  T)rT   r'  r   zRany_value < [type.googleapis.com/protobuf_unittest.OneString] < data: "string" > >r©  r®  r   r   r   Ú0testPrintMessageExpandAnyAsOneLinePointyBrackets¾  s   ýûz<Proto3Tests.testPrintMessageExpandAnyAsOneLinePointyBracketsc                 C   sj   t  ¡ }d|_t ¡ }|j |¡ |j ¡ |j_t	 
|¡}|  |d¡ t ¡ }t	 ||¡ |  ||¡ d S )Nrg  zPany_value {
  type_url: "protobuf_unittest.OneString"
  value: "\n\006string"
}
)r   rª  r«  r   rƒ  r¬  r­  ÚTypeNameÚtype_urlr   rI   r   rk   )r   r¯  rL   r.   ro   r   r   r   Ú"testPrintAndParseMessageInvalidAnyÍ  s   
ÿz.Proto3Tests.testPrintAndParseMessageInvalidAnyc                 C   s>   t  ¡ }t  ¡ }d|_t |¡}t ||¡ |  d|j¡ d S )Niç  )r   rC   Úoptional_nested_enumr   rI   rk   r   )r   rL   Úmessage2Útext_stringr   r   r   ÚtestUnknownEnumsß  s   
zProto3Tests.testUnknownEnumsc                 C   st   t  ¡ }d}t ||¡ t ¡ }|j |¡ |  d|j	¡ | 
¡  t ||¡ t ¡ }|j |¡ |  d|j	¡ d S )Nr¨  rg  )r   rƒ  r   r¿   r   rª  r¬  ÚUnpackr   r«  r¾   rk   ©r   rL   r.   r¯  r   r   r   ÚtestMergeExpandedAnyç  s   z Proto3Tests.testMergeExpandedAnyc                 C   s`   t  ¡ }d}t ||¡ t ¡ }|jd  |¡ |  d|j	¡ |jd  |¡ |  d|j	¡ d S )Nr·  r   rµ  r   r¶  )
r   rƒ  r   r¿   r   rª  r¸  rË  r   r«  rÌ  r   r   r   ÚtestMergeExpandedAnyRepeatedø  s   
z(Proto3Tests.testMergeExpandedAnyRepeatedc                 C   s>   t  ¡ }d}t ||¡ t ¡ }|j |¡ |  d|j	¡ d S )Nz[any_value {
  [type.googleapis.com/protobuf_unittest.OneString] <
    data: "string"
  >
}
rg  ©
r   rƒ  r   r¿   r   rª  r¬  rË  r   r«  rÌ  r   r   r   Ú"testMergeExpandedAnyPointyBrackets  s   z.Proto3Tests.testMergeExpandedAnyPointyBracketsc                 C   s4   t  ¡ }d}t ||¡ t ¡ }|  d|jj¡ d S )NzYany_value {
  [type.otherapi.com/protobuf_unittest.OneString] {
    data: "string"
  }
}
z-type.otherapi.com/protobuf_unittest.OneString)	r   rƒ  r   r¿   r   rª  r   r¬  rÅ  rÌ  r   r   r   ÚtestMergeAlternativeUrl  s   ÿz#Proto3Tests.testMergeAlternativeUrlc                 C   sf   t  ¡ }d}|  tj¡�}t ¡ }tj|||d� W d   ƒ n1 s#w   Y  |  t	|j
ƒd¡ d S )Nr¨  r   z=Type protobuf_unittest.OneString not found in descriptor pool)r   rƒ  rÓ   r   rÔ   r   r»  r¿   r   r$   rÕ   )r   rL   r.   rØ   r¼  r   r   r   Ú-testMergeExpandedAnyDescriptorPoolMissingType#  s   þþz9Proto3Tests.testMergeExpandedAnyDescriptorPoolMissingTypec                 C   s>   d}t  ¡ }t ||¡ t ¡ }|j |¡ |  d|j	¡ d S )Nrº  rg  rÏ  )r   r.   rL   r¯  r   r   r   ÚtestMergeUnexpandedAny1  s   z"Proto3Tests.testMergeUnexpandedAnyc                 C   r”  )NzUany_value {
  [type.googleapis.com/protobuf_unittest.OneString] {
    data: "string"
z3:11 : Expected "}".)	r   rƒ  rÓ   r   rÔ   r¿   r   r$   rÕ   r•  r   r   r   ÚtestMergeMissingAnyEndToken<  s   ÿz'Proto3Tests.testMergeMissingAnyEndTokenN)r   r   r   r°  r´  r¹  r½  rÀ  rÂ  rÃ  rÆ  rÊ  rÍ  rÎ  rÐ  rÑ  rÒ  rÓ  rÔ  r   r   r   r   r§  j  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d„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS ) ÚTokenizerTestc                 C   sX  d}t  | ¡ ¡}g |jdf‘d‘|jdf‘|jdf‘d‘|jdf‘|jdf‘d‘|jdf‘|jd	f‘d‘|jd
f‘|jdf‘d‘|jdf‘|jdf‘d‘|jdf‘|jdf‘d‘|jdf‘|jdf‘d‘d‘|jdf‘d‘|jtdƒf‘|jdf‘d‘|jtdƒ f‘|jdf‘d‘|jdf‘|jdf‘d‘|jdf‘d‘|jdf‘d‘|jdf‘|jdf‘d‘|jdf‘|jdf‘d‘|jd f‘|jd!f‘d‘|jd"f‘|jd#f‘d‘|jd$f‘|jd%f‘d‘|jd&f‘|jd'f‘d‘|jdf‘|jd(f‘d‘|jdf‘|jd)f‘d‘|jdf‘|jd*f‘d‘|jdf‘|jd+f‘d‘|jdf‘|jd,f‘d‘|jdf‘|jd-f‘d‘|jtdƒf‘|jd.f‘d‘|jtd/ƒf‘|jd0f‘d‘|jtd1ƒf‘}d2}| 	¡ �sª|| }t
|tƒ�rx|j}|  ||¡ | ¡  n't
|d3 tƒ�r”t |d3 ¡�r”|  t |d2 ƒ ¡¡ n|  |d3 |d2 ƒ ¡ |d37 }| 	¡ �r`d S d S )4Na„  identifier1:"string1"
     

identifier2 : 
 
123  
  identifier3 :'string'
identifiER_4 : 1.1e+2 ID5:-0.23 ID6:'aaaa\'bbbb'
ID7 : "aa\"bb"



 ID8: {A:inf B:-inf C:true D:false}
ID9: 22 ID10: -111111111111111111 ID11: -22
ID12: 2222222222222222222 ID13: 1.23456f ID14: 1.2e+2f false_bool:  0 true_BOOL:t 
 true_bool1:  1 false_BOOL1:f False_bool: False True_bool: True X:iNf Y:-inF Z:nANÚidentifier1ú:r¶  Úidentifier2r‹   Úidentifier3rg  ÚidentifiER_4g     €[@ÚID5gq=
×£pÍ¿ÚID6z	aaaa'bbbbÚID7zaa"bbÚID8Ú{ÚAÚinfÚBÚCTÚDFÚ}ÚID9é   ÚID10lüÿÿÿÇqÀÞ{UÚID11iêÿÿÿÚID12l   Žc/Y-·v ÚID13g82�üÁÀó?ÚID14g      ^@Ú
false_boolÚ	true_BOOLÚ
true_bool1Úfalse_BOOL1Ú
False_boolÚ	True_boolÚXÚYz-infÚZÚnanr   r   )r   Ú	TokenizerÚ
splitlinesÚConsumeIdentifierÚConsumeStringÚConsumeIntegerÚConsumeFloatÚfloatÚConsumeBoolÚAtEndÚ
isinstancer$   Útokenr   Ú	NextTokenÚmathÚisnanr   )r   r.   Ú	tokenizerÚmethodsrl   rò   r  r   r   r   ÚtestSimpleTokenCasesH  s^  ÿþþýüüûúúùøø	÷
ö
öõôôóòòòññðïïîííìëëêêééèççæååäããâáá à!ß!ß"Þ#Ý#Ý$Ü%Û%Û&Ú'Ù'Ù(Ø)×)×*Ö+Õ+Õ,Ô-Ó-Ó.Ò/Ñ/Ñ0Ð1Ï1Ï2Î3Í3Í4Ì6

 öz"TokenizerTest.testSimpleTokenCasesc                 C   s  d}d}d|d |d f }t  | ¡ ¡}|  d| ¡ ¡ |  |d | ¡ ¡ |  |d | ¡ ¡ |  | ¡ ¡ d}t  | ¡ ¡}|  d| ¡ ¡ |  d| ¡ ¡ |  d| ¡ ¡ |  d	| ¡ ¡ |  t j	¡� | ¡  W d   ƒ n1 svw   Y  |  d
| 
¡ ¡ |  | ¡ ¡ d S )Nì   ÿÿÿÿ ì   ÿÿ ú-1 %d %dr   éÿÿÿÿz
-0 0 0 1.2r   TFg333333ó?)r   r÷  rø  r   rû  r   rÿ  ÚTryConsumeIntegerrÓ   rÔ   rü  ©r   Ú	int64_maxÚ
uint32_maxr.   r  r   r   r   ÚtestConsumeAbstractIntegers•  s&   
ÿz)TokenizerTest.testConsumeAbstractIntegersc                 C   s<  d}d}d|d |d f }t  | ¡ ¡}|  t jt j|¡ |  t jt j|¡ |  dt  |¡¡ |  t jt j|¡ |  t jt j|¡ |  |d t  	|¡¡ |  t jt j	|¡ |  |d t  |¡¡ |  
| ¡ ¡ d}t  | ¡ ¡}|  dt  |¡¡ |  dt  |¡¡ |  dt  |¡¡ |  dt  |¡¡ |  
| ¡ ¡ d S )Nr  r	  r
  r   r  z	-0 -0 0 0r   )r   r÷  rø  rÓ   rÔ   Ú_ConsumeUint32Ú_ConsumeUint64r   Ú_ConsumeInt32Ú_ConsumeInt64r   rÿ  r  r   r   r   ÚtestConsumeIntegers®  s<   ÿÿÿÿÿz!TokenizerTest.testConsumeIntegersc                 C   s  d}t  | ¡ ¡}|  d| ¡ ¡ |  d| ¡ ¡ |  d| ¡ ¡ |  d| ¡ ¡ |  d| ¡ ¡ |  d| ¡ ¡ |  d| ¡ ¡ |  t j¡� | ¡  W d  ƒ n1 sVw   Y  | ¡  |  t j¡� | ¡  W d  ƒ n1 stw   Y  | ¡  |  d	| ¡ ¡ |  | 	¡ ¡ dS )
z(Test support for C style octal integers.z'00 -00 04 0755 -010 007 -0033 08 -09 01r   ré   ií  iøÿÿÿé   iåÿÿÿNr   )
r   r÷  rø  r   rû  rÓ   rÔ   r  r   rÿ  ©r   r.   r  r   r   r   ÚtestConsumeOctalIntegersÎ  s&   
ÿ
ÿz&TokenizerTest.testConsumeOctalIntegersc                 C   s®   d}t  | ¡ ¡}|  t j|j¡ d}t  | ¡ ¡}|  t j|j¡ d}t  | ¡ ¡}|  t j|j¡ d}t  | ¡ ¡}|  t j|j¡ d}t  | ¡ ¡}|  t j|j¡ d S )Nz	"string1'zstring1"z
"\xt"z
"\"z
"\x")r   r÷  rø  rÓ   rÔ   ÚConsumeByteStringr  r   r   r   ÚtestConsumeByteStringâ  s   z#TokenizerTest.testConsumeByteStringc                 C   s&   d}t  | ¡ ¡}|  t j|j¡ d S )Nz
not-a-bool)r   r÷  rø  rÓ   rÔ   rþ  r  r   r   r   ÚtestConsumeBool÷  s   zTokenizerTest.testConsumeBoolc                 C   s0   t  d ¡ ¡}|  | ¡ ¡ |  t j|j¡ d S )Nú# some comment)r   r÷  rø  r   rÿ  rÓ   rÔ   ÚConsumeComment©r   r  r   r   r   ÚtestSkipCommentü  s   zTokenizerTest.testSkipCommentc                 C   sB   t jd ¡ dd�}|  | ¡ ¡ |  d| ¡ ¡ |  | ¡ ¡ d S )Nr  F©Úskip_comments)r   r÷  rø  ÚassertFalserÿ  r   r  r   r  r   r   r   ÚtestConsumeComment  s   
ÿz TokenizerTest.testConsumeCommentc                 C   óV   d}t j| ¡ dd�}|  d| ¡ ¡ |  | ¡ ¡ |  d| ¡ ¡ |  | ¡ ¡ d S )Nú # some comment
# another commentFr   r  ú# another comment)r   r÷  rø  r   r  r"  rÿ  r   r  r   r   r   ÚtestConsumeTwoComments  s   z$TokenizerTest.testConsumeTwoCommentsc                 C   óœ   d}t j| ¡ dd�}|  t j|j¡ |  d| ¡ ¡ |  |jd¡ | 	¡  |  t j|j¡ |  d| 
¡ ¡ |  | ¡ ¡ |  d| ¡ ¡ |  | ¡ ¡ d S )Nzsome_number: 4
# some commentFr   Úsome_numberr×  ré   r  )r   r÷  rø  rÓ   rÔ   r  r   rù  r  r  rû  r"  rÿ  r   r  r   r   r   ÚtestConsumeTrailingComment  s   z(TokenizerTest.testConsumeTrailingCommentc                 C   sB   t jd ¡ dd�}|  | ¡ ¡ |  d| ¡ ¡ |  | ¡ ¡ d S )Nr  Fr   ©Fr  )r   r÷  rø  r"  rÿ  r   ÚConsumeCommentOrTrailingCommentr   r  r   r   r   ÚtestConsumeLineComment  s   
ÿÿz$TokenizerTest.testConsumeLineCommentc                 C   r$  )Nr%  Fr   r+  )Fr&  )r   r÷  rø  r   r,  r"  rÿ  r   r  r   r   r   ÚtestConsumeTwoLineComments'  s   ÿÿz(TokenizerTest.testConsumeTwoLineCommentsc                 C   r(  )Nzsome_number: 4  # some commentFr   r)  r×  ré   )Tr  )r   r÷  rø  rÓ   rÔ   r,  r   rù  r  r  rû  r"  rÿ  r   r  r   r   r   Ú"testConsumeAndCheckTrailingComment1  s"   ÿÿÿz0TokenizerTest.testConsumeAndCheckTrailingCommentc                 C   sn   d}t j| ¡ dd�}|  d| ¡ ¡ |  |jd¡ | ¡  |  d| ¡ ¡ |  d| ¡ ¡ |  	| 
¡ ¡ d S )Nz2some_number: 4  # some comment # not a new commentFr   r)  r×  ré   )Tz"# some comment # not a new comment)r   r÷  rø  r   rù  r  r  rû  r,  r   rÿ  r  r   r   r   ÚtestHashinCommentC  s   ÿzTokenizerTest.testHashinCommentc                 C   s.   ddd  d }t j| ¡ dd�}| ¡  d S )Nú"Úai    Fr   )r   r÷  rø  rú  r  r   r   r   ÚtestHugeStringN  s   zTokenizerTest.testHugeStringN)r   r   r   r  r  r  r  r  r  r  r#  r'  r*  r-  r.  r/  r0  r3  r   r   r   r   rÕ  F  s     M 
rÕ  c                   @   ó4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚPrettyPrinterTestc                 C   s<   dd„ }|  ¡ }|j ¡ }d|_|  tj|d|d�d¡ d S )Nc                 S   s
   ~ ~~d S r1   r   )rL   ÚindentrT   r   r   r   r¤   [  s   z9PrettyPrinterTest.testPrettyPrintNoMatch.<locals>.printerrR   T©rT   Úmessage_formatterrU   rV   ©r   rK   r¤   rL   rZ   r   r   r   ÚtestPrettyPrintNoMatchY  s   
ÿýz(PrettyPrinterTest.testPrettyPrintNoMatchc                    s@   ‡ fdd„}ˆ   ¡ }|j ¡ }d|_|  tj|d|d�d¡ d S )Nc                    ó"   ~~| j ˆ jjj krd| j S d S ©NzMy lucky number is %s©r™   rC   ÚNestedMessagerY   ©rò   r6  rT   ©rK   r   r   r¤   i  s   
ÿz9PrettyPrinterTest.testPrettyPrintOneLine.<locals>.printerrR   Tr7  z1repeated_nested_message { My lucky number is 42 }rV   r9  r   r@  r   ÚtestPrettyPrintOneLineg  s   
ÿýz(PrettyPrinterTest.testPrettyPrintOneLinec                    sX   ‡ fdd„}ˆ   ¡ }|j ¡ }d|_|  tj|d|d�d¡ |  tj|d|d�d¡ d S )	Nc                    s6   | j ˆ jjj kr|rdndd|  }d|| jf S d S )Nrd   rc   zMy lucky number is:%s%sr=  )rò   r6  rT   Úline_deliminatorr@  r   r   r¤   x  s   z;PrettyPrinterTest.testPrettyPrintMultiLine.<locals>.printerrR   Tr7  z2repeated_nested_message { My lucky number is: 42 }Fz7repeated_nested_message {
  My lucky number is:
  42
}
rV   r9  r   r@  r   ÚtestPrettyPrintMultiLinev  s    
ÿýÿýz*PrettyPrinterTest.testPrettyPrintMultiLinec                    sH   ‡ fdd„}ˆ   ¡ }|  tj|d|d�d¡ |  tj|d|d�d¡ d S )Nc                    s   ~~| j ˆ jj krdS d S )NúThe is the message!)r™   rC   r?  r@  r   r   r¤   Œ  s   z?PrettyPrinterTest.testPrettyPrintEntireMessage.<locals>.printerFr7  zThe is the message!
TrD  )rC   r3   r   rI   )r   rK   r¤   rL   r   r@  r   ÚtestPrettyPrintEntireMessageŠ  s   ÿýÿýz.PrettyPrinterTest.testPrettyPrintEntireMessagec                    sâ   ‡ fdd„}ˆ   ¡ }d|_|j ¡ }d|_|j ¡ }d|_|j}d|_|  tj|d|d�d	¡ t 	d
¡}tj
ˆ j jjd |j||d� |  d| ¡ ¡ | ¡  t 	d
¡}tjˆ j jjd |j||d� |  d| ¡ ¡ | ¡  d S )Nc                    r;  r<  r=  r?  r@  r   r   r¤   ž  s   
z?PrettyPrinterTest.testPrettyPrintMultipleParts.<locals>.printeré=   rR   éc   r   Tr7  z§optional_int32: 61 optional_nested_message { My lucky number is 1 } repeated_nested_message { My lucky number is 42 } repeated_nested_message { My lucky number is 99 }Frj   )r8  z3optional_nested_message {
  My lucky number is 1
}
z{
  My lucky number is 1
})rC   r  rW   rX   rY   rj   r3   r   rI   r›   rœ   r™   rš   r   r�   rž   r§   )r   rK   r¤   rL   rZ   r£   r   r@  r   ÚtestPrettyPrintMultiplePartsœ  sV   

ÿý
ÿûþ
ÿûþz.PrettyPrinterTest.testPrettyPrintMultiplePartsN)r   r   r   r:  rA  rC  rE  rH  r   r   r   r   r5  V  s    r5  c                   @   r4  )ÚWhitespaceTestc                 C   sN   t  d¡| _|  | jj¡ t ¡ | _d| jjj	_
| jjjd | _| jj| _d S )NFr¢   Úchild)r   r›   r£   Ú
addCleanuprž   r   r‚   rL   rJ  rƒ   rr   r™   rš   r¡   r¢   ©r   r   r   r   ÚsetUpÏ  s   
zWhitespaceTest.setUpc                 C   s   |   t | j¡t d¡¡ d S ©Nz            child {
              payload {
                optional_string: "value"
              }
            }
            )r3   r   rI   rL   r‘   r’   rL  r   r   r   rŽ   ×  s   
þz"WhitespaceTest.testMessageToStringc                 C   s,   t  | j| j¡ |  | j ¡ t d¡¡ d S rN  )r   r}  rL   r£   r3   r�   r‘   r’   rL  r   r   r   ÚtestPrintMessageâ  s
   þzWhitespaceTest.testPrintMessagec                 C   ó0   t  | j| j| j¡ |  | j ¡ t d¡¡ d S rN  )	r   rœ   r¡   r¢   r£   r3   r�   r‘   r’   rL  r   r   r   r¥   î  s
   þzWhitespaceTest.testPrintFieldc                 C   rP  )Nzl            {
              payload {
                optional_string: "value"
              }
            })	r   r§   r¡   r¢   r£   r3   r�   r‘   r’   rL  r   r   r   r¨   ú  s   ÿþz"WhitespaceTest.testPrintFieldValueN)r   r   r   rM  rŽ   rO  r¥   r¨   r   r   r   r   rI  Í  s    rI  Ú__main__)*Ú__doc__r	  r  r5   rg  r‘   rO   Ú	unittest2ÚunittestÚImportErrorÚgoogle.protobufr   r   r   r   r   r   r   r	   Úgoogle.protobuf.internalr‚  r
   r   r   r   r   ÚTestCaser   r   Ú
parametersr:   r²   rº   r  r$  rl  r§  rÕ  r5  rI  r   Úmainr   r   r   r   Ú<module>   sr   !ÿ
  
@
"  
 L   % ]  
v
:ÿ