U
    4Je€ ã                   @   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ddlmZ ddlm	Z	 ddlm
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlm
Z ddlmZ ddlmZ ddlmZ ddlmZ d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'G d+d,„ d,ejƒZ(e)d-kr(e *¡  dS ).z%Test for google.protobuf.text_format.é    N)Úany_pb2)Ú
struct_pb2)Úany_test_pb2)Úmap_unittest_pb2)Úunittest_custom_options_pb2)Úunittest_mset_pb2)Úunittest_pb2)Úunittest_proto3_arena_pb2)Údescriptor_pb2)Úapi_implementation)Úmessage_set_extensions_pb2)Útest_proto3_optional_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   Z_QUOTESÚassertEqualÚlen)ÚselfÚquote© r   úM/tmp/pip-unpacked-wheel-0oacnh65/google/protobuf/internal/text_format_test.pyÚtestQuoteMarksAreSingleCharsE   s    
z2SimpleTextFormatTests.testQuoteMarksAreSingleCharsN)Ú__name__Ú
__module__Ú__qualname__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	S )
ÚTextFormatBasec              
   C   s@   t  |¡,}ttkr| ¡ ndd„ |D ƒW  5 Q R £ S Q R X d S )Nc                 S   s   g | ]}|  d ¡‘qS )úutf-8)Údecode)Ú.0Zgolden_liner   r   r   Ú
<listcomp>P   s     z-TextFormatBase.ReadGolden.<locals>.<listcomp>)r   Z
GoldenFileÚstrÚbytesÚ	readlines)r   Úgolden_filenameÚfr   r   r   Ú
ReadGoldenM   s    ÿzTextFormatBase.ReadGoldenc                 C   s    |   |¡}|  |d |¡¡ d S ©NÚ )r)   ZassertMultiLineEqualÚjoin)r   Útextr'   Zgolden_linesr   r   r   ÚCompareToGoldenFileR   s    
z"TextFormatBase.CompareToGoldenFilec                 C   s   |   ||¡ d S ©N)r   )r   r-   Úgolden_textr   r   r   ÚCompareToGoldenTextV   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   ÚRemoveRedundantZerosY   s     ÿ ÿz#TextFormatBase.RemoveRedundantZerosN)r   r   r   r)   r.   r1   r7   r   r   r   r   r   K   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#d$„ Ze e ¡ d%kd&¡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_stringr1   r7   r   ÚMessageToString©r   Úmessage_moduleÚmessager   r   r   ÚtestPrintExoticg   s    þz.TextFormatMessageToStringTests.testPrintExoticc                 C   sT  |  ¡ }|j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d	¡ |j d
¡ |j d¡ |j d¡ |j d¡ |j tdƒ¡ |j tdƒ¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d¡ |j d ¡ |j d!¡ |j d"¡ |j d#¡ |j d$¡ |j d%¡ |j d&¡ |  |  t |¡¡d'¡ d S )(Nç        gš™™™™™é?g      ð?ç333333ó?g®Gáz®ó?gX9´Èv¾ó?g—nƒÀó?ç82üÁÀó?g   ÀZBg   ØéBg   ¨+üBg   ŽþBg   @×þBÚNaNÚinfg‡ˆ›SÉÀó?g][*ÊÀó?gÞƒBÊÀó?g™Ÿ©DÊÀó?g ºÙDÊÀó?g¨ÙÝDÊÀó?gž1ÞDÊÀó?g¨8ÞDÊÀó?g/9ÞDÊÀó?gc·åùòµTg,%@v~¶TgœÖ‚I0‘¶TgŠ®Š‡“¶Tg’IÈsÏ“¶TghÁ‚××“¶Tgà&÷ÌØ“¶Tg?”èØ“¶TgCœëØ“¶Tgž—?ëØ“¶TgNDëØ“¶Tg²DëØ“¶Tg¨ºDëØ“¶TgB»DëØ“¶TaÝ  repeated_float: 0
repeated_float: 0.8
repeated_float: 1
repeated_float: 1.2
repeated_float: 1.23
repeated_float: 1.234
repeated_float: 1.2345
repeated_float: 1.23456
repeated_float: 12000000000
repeated_float: 12300000000
repeated_float: 12340000000
repeated_float: 12345000000
repeated_float: 12345600000
repeated_float: nan
repeated_float: inf
repeated_double: 0
repeated_double: 0.8
repeated_double: 1
repeated_double: 1.2
repeated_double: 1.23
repeated_double: 1.234
repeated_double: 1.2345
repeated_double: 1.23456
repeated_double: 1.234567
repeated_double: 1.2345678
repeated_double: 1.23456789
repeated_double: 1.234567898
repeated_double: 1.2345678987
repeated_double: 1.23456789876
repeated_double: 1.234567898765
repeated_double: 1.2345678987654
repeated_double: 1.23456789876543
repeated_double: 1.2e+100
repeated_double: 1.23e+100
repeated_double: 1.234e+100
repeated_double: 1.2345e+100
repeated_double: 1.23456e+100
repeated_double: 1.234567e+100
repeated_double: 1.2345678e+100
repeated_double: 1.23456789e+100
repeated_double: 1.234567898e+100
repeated_double: 1.2345678987e+100
repeated_double: 1.23456789876e+100
repeated_double: 1.234567898765e+100
repeated_double: 1.2345678987654e+100
repeated_double: 1.23456789876543e+100
)	rA   Úrepeated_floatrC   ÚfloatrE   r1   r7   r   rG   rH   r   r   r   ÚtestPrintFloatPrecision{   sf    þz6TextFormatMessageToStringTests.testPrintFloatPrecisionc                 C   s>   G dd„ dt ƒ}| ¡ }|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   rT   r?   z(repeated_string: "\303\274\352\234\237"
)r$   rA   rF   rC   r1   r   rG   )r   rI   rT   rJ   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 }©rA   Úrepeated_nested_messageÚaddÚbbr1   r   rG   )r   rI   rJ   Ú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   é   ÚGoogleZZurichTrW   zirepeated_int32: 1 repeated_int32: 1 repeated_int32: 3 repeated_string: "Google" repeated_string: "Zurich")rA   Úrepeated_int32rC   rF   r1   r   rG   rH   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 ¡ }||_
qbd}|r¨| dd¡}t d	d|¡}t d
d|¡}tj|d|d}|  ||¡ |  ¡ }t ||¡ |  ||¡ d S )Nr   ra   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_primitivesrX   )rA   rb   rC   rF   Zrepeated_foreign_enumr   ZFOREIGN_FOOZFOREIGN_BARZFOREIGN_BAZÚoptional_nested_messager]   r[   r\   r2   r3   r6   r   rG   r1   ÚParser   )	r   rI   rX   rJ   Úir^   Zexpected_asciiZactual_asciiÚparsed_messager   r   r   Ú$VerifyPrintShortFormatRepeatedFieldsþ   s4    
ÿ þzCTextFormatMessageToStringTests.VerifyPrintShortFormatRepeatedFieldsc                 C   s   |   |d¡ |   |d¡ d S )NFT)rm   )r   rI   r   r   r   Ú"testPrintShortFormatRepeatedFields  s    zATextFormatMessageToStringTests.testPrintShortFormatRepeatedFieldsc                 C   s(   |  ¡ }d|_|  tj|ddd¡ d S )Nz
a
new
lineTrW   zoptional_string: "a\nnew\nline")rA   Úoptional_stringr1   r   rG   rH   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 )Nr9   r:   r;   r<   r=   r>   r?   TrW   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"r@   rH   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 )Nr9   r:   r;   r<   r=   r>   r?   TF)rX   Úas_utf8z	
%s != %s)rA   rB   rC   rD   rE   rF   r   rG   rj   ÚassertIsr   )r   rI   rJ   Z	wire_textrl   Úrr   r   r   ÚtestRoundTripExoticAsOneLine?  s4    þþ
ÿz;TextFormatMessageToStringTests.testRoundTripExoticAsOneLinec              
   C   st   |  ¡ }|j d¡ tj|dd}d}|}|  ||¡ |  ¡ }t ||¡ |  ||d|||jd |jd f ¡ d S )Nõ   Ã¼	êœŸT©rr   u   repeated_string: "Ã¼\têœŸ"
ú
%s != %s  (%s != %s)r   )rA   rF   rC   r   rG   r1   rj   r   )r   rI   rJ   r-   Úgolden_unicoder0   rl   r   r   r   ÚtestPrintRawUtf8String\  s"      ÿÿÿz5TextFormatMessageToStringTests.testPrintRawUtf8Stringc                 C   s”  |  ¡ }d|j_d|j_|jj d¡ |jj d¡ ddddg}tj|d	d
}|  	|  
|¡dj|Ž ¡ tj|dd	d}|  	|  
|¡dj|Ž ¡ d|j_ddddg}tj|dd	d}|  	|  
|¡dj|Ž ¡ ddddg}tj|dd
}|  	|  
|¡dj|Ž ¡ d|j_d|j_ddddg}t |¡}|  	|  
|¡dj|Ž ¡ | ¡  d|j_|  t |¡d¡ d|j_|  t |¡d¡ d|j_|  t |¡d¡ 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)rX   r{   zpayload {{ {0} {1} {2} {3} }}rM   zoptional_float: 1.2z.7g)r{   Zdouble_formatzoptional_double: -3.456789e-6g»TÖBÊÀó?zoptional_float: 1.2345679zoptional_double: 1.2345678912gô¬™™™™ñ?z"payload {
  optional_float: 1.1
}
gÉž…Du8z-payload {
  optional_float: 1.00000075e-36
}
gŒ©óàVðDz+payload {
  optional_float: 1.234568e+24
}
)ÚNestedTestAllTypesÚpayloadÚoptional_floatÚoptional_doublerQ   rC   rE   r   rG   r1   r7   ÚformatÚClearr   )r   rI   rJ   Zformatted_fieldsZtext_messager   r   r   ÚtestPrintFloatFormatk  sž     þÿþþþ þÿÿþ þÿþ þ
ÿþÿÿÿz3TextFormatMessageToStringTests.testPrintFloatFormatc                 C   s"   |  ¡ }d|_|  dt|ƒ¡ d S )Né{   zc: 123
)ÚForeignMessageÚcr   r$   rH   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    Trw   u   optional_string: "Ã short desÃ§ription and a ðŸŒ."
optional_bytes: "\303\201 short des\303\247ription and a \360\237\215\214."
)	ÚencoderA   ro   Úoptional_bytesr   rG   ÚtextwrapÚdedentr1   ©r   rI   ry   Úgolden_bytesrJ   r-   Zgolden_messager   r   r   ÚtestMessageToStringUnicode¹  s    
ÿz9TextFormatMessageToStringTests.testMessageToStringUnicodec                 C   sD   d}|  d¡}| ¡ }||_||_tj|dd}d}|  ||¡ d S )Nr‡   r    Frw   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ˆ   rA   ro   r‰   r   rG   r1   rŒ   r   r   r   ÚtestMessageToStringASCIIÇ  s    
ÿz7TextFormatMessageToStringTests.testMessageToStringASCIIc                 C   s†   |  ¡ }|jjd }|j}t d¡}t |||¡ |  d| ¡ ¡ | 	¡  t d¡}t 
|¡}| ||¡ |  d| ¡ ¡ | 	¡  d S )Nr~   Fzoptional_float: 0.0
)rA   Ú
DESCRIPTORÚfields_by_namer~   r   Ú
TextWriterÚ
PrintFieldr   ÚgetvalueÚcloseÚ_Printer©r   rI   rJ   ÚfieldÚvalueÚoutÚprinterr   r   r   ÚtestPrintField×  s    


z-TextFormatMessageToStringTests.testPrintFieldc                 C   s†   |  ¡ }|jjd }|j}t d¡}t |||¡ |  d| ¡ ¡ | 	¡  t d¡}t 
|¡}| ||¡ |  d| ¡ ¡ | 	¡  d S )Nr~   Fz0.0)rA   r   r‘   r~   r   r’   ÚPrintFieldValuer   r”   r•   r–   r—   r   r   r   ÚtestPrintFieldValueæ  s    


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
}
field {
  name: "map_field"
  number: 3
  label: LABEL_REPEATED
  type: TYPE_MESSAGE
  type_name: ".protobuf_unittest.TestMessageWithCustomOptions.MapFieldEntry"
  options {
    [protobuf_unittest.field_opt1]: 12345
  }
}
nested_type {
  name: "MapFieldEntry"
  field {
    name: "key"
    number: 1
    label: LABEL_OPTIONAL
    type: TYPE_STRING
  }
  field {
    name: "value"
    number: 2
    label: LABEL_OPTIONAL
    type: TYPE_STRING
  }
  options {
    map_entry: true
  }
}
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   ZTestMessageWithCustomOptionsr   r
   ZDescriptorProtoZCopyToProtor   r   rG   rj   )r   rI   Zmessage_descriptorZmessage_protoZexpected_textZparsed_protor   r   r   ÚtestCustomOptionsõ  s    
ÿKÿz0TextFormatMessageToStringTests.testCustomOptionsZupbzeupb API doesn't support old UnknownField API. The TextFormat library needs to convert to the new API.c                 C   s’   |  ¡ }d|_d|_d|_d|_d|j_| ¡ }|  ¡ }d|_||_| ¡ }| ¡ }| 	|¡ |  
dtj|ddd	¡ |  
d
tj|ddd¡ d S )Née   ç     €Y@Úhelloó   103éi   zu  1: 101
  15 {
    1: 101
    12: 4636878028842991616
    14: "hello"
    15: "103"
    18 {
      1: 105
    }
  }
é   T©ÚindentÚprint_unknown_fieldszP1: 101 15 { 1: 101 12: 4636878028842991616 14: "hello" 15: "103" 18 { 1: 105 } }©r¨   rX   )rA   Úoptional_int32r   ro   r‰   ri   r]   ÚSerializeToStringÚTestEmptyMessageÚParseFromStringr   r   rG   )r   rI   Ú	inner_msgZ
inner_dataZouter_messageÚall_dataÚempty_messager   r   r   Ú,testPrintUnknownFieldsEmbeddedMessageInBytesK  s2    

þöþøzKTextFormatMessageToStringTests.testPrintUnknownFieldsEmbeddedMessageInBytesN)r   r   r   rK   rS   rU   r_   rc   rm   rn   rp   rq   ru   rz   r‚   r†   rŽ   r   rœ   rž   rŸ   ÚunittestZskipIfr   ÚTyper±   r   r   r   r   r8   d   s.   d!IV
þr8   c                   @   s$   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   ÚMessageToBytesrH   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 )Nrv   Trw   s   repeated_string: "Ã¼\têœŸ"
rx   r   ©rA   rF   rC   r   rµ   r1   rj   r   )r   rI   rJ   Z	utf8_textr   rl   r   r   r   ÚtestRawUtf8RoundTrip€  s       ÿÿÿz6TextFormatMessageToTextBytesTests.testRawUtf8RoundTripc              
   C   sl   |  ¡ }|j d¡ t |¡}d}|  ||¡ |  ¡ }t ||¡ |  ||d|||jd |jd f ¡ d S )Nrv   s*   repeated_string: "\303\274\t\352\234\237"
rx   r   r·   )r   rI   rJ   Ú
ascii_textr   rl   r   r   r   ÚtestEscapedUtf8ASCIIRoundTrip  s     
  ÿÿÿz?TextFormatMessageToTextBytesTests.testEscapedUtf8ASCIIRoundTripN)r   r   r   r¶   r¸   rº   r   r   r   r   r´   x  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!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d0d1„ Zd2d3„ Z d4d5„ Z!d6d7„ Z"d8S )9ÚTextFormatParserTestsc                 C   sT   |  ¡ }t |¡ t |¡}|  ¡ }t ||¡ |  ||¡ |tkrPt | |¡ d S r/   )	rA   r   ÚSetAllFieldsr   rG   rj   r   r   ÚExpectAllFieldsSet)r   rI   rJ   r¹   rl   r   r   r   ÚtestParseAllFieldsž  s    

z(TextFormatParserTests.testParseAllFieldsc                 C   sè   |  ¡ }t |¡ t |¡}| d¡}|  ¡ }t ||¡ |  ||¡ |tkrZt 	| |¡ | 
¡  t ||¡ |  ||¡ |tkrŽt 	| |¡ |  ¡ }d}t ||¡ |  |jd¡ | 
¡  |  |jd¡ t ||¡ |  |jd¡ d S )Nr    u   optional_string: "cafÃ©"u   cafÃ©r+   )rA   r   r¼   r   rG   rˆ   rj   r   r   r½   r   ÚMergero   )r   rI   rJ   r¹   rl   Úmsg2r-   r   r   r   ÚtestParseAndMergeUtf8©  s,    


z+TextFormatParserTests.testParseAndMergeUtf8c                 C   sD   |  ¡ }d}t ||¡ |  |jd tdƒ¡ |  |jd d¡ d S )Nz<repeated_float: 3.4028235e+39
repeated_float: 1.4028235e-39
r   rP   r   g¸ˆš Þ7)rA   r   rj   r   rQ   rR   ZassertAlmostEqual©r   rI   rJ   r-   r   r   r   ÚtestParseDoubleToFloatÄ  s
    z,TextFormatParserTests.testParseDoubleToFloatc                 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: "ÃƒÂ¼"
r9   r   r:   r;   r<   r   r=   r¥   r>   Zfoocorgegraultr?   õ   Ã¼r`   )rA   r   rj   r   rB   rD   rE   rF   rÂ   r   r   r   ÚtestParseExoticÌ  s    z%TextFormatParserTests.testParseExoticc                 C   sv   |  ¡ }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©rA   r   rj   r   rB   rF   rÂ   r   r   r   ÚtestParseTrailingCommaså  s    z-TextFormatParserTests.testParseTrailingCommasc                 C   sv   |  ¡ }d}t ||¡ |  d|jd ¡ |  d|jd ¡ |  d|jd ¡ |  d|jd ¡ |  d	|jd ¡ d S )
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`   )rA   r   rj   r   r[   r]   rÂ   r   r   r   Ú#testParseRepeatedMessageShortFormat  s    z9TextFormatParserTests.testParseRepeatedMessageShortFormatc                 C   s,   |  ¡ }d}t ||¡ |  |  ¡ |¡ d S r*   )rA   r   rj   r   rÂ   r   r   r   ÚtestParseEmptyText  s    z(TextFormatParserTests.testParseEmptyTextc              	   C   sX   |  ¡ }d}|  tj¡}t ||¡ W 5 Q R X |  |j ¡ d¡ |  |j ¡ d¡ d S )Nzrepeated_string: "\xc3\xc3"r   é   )	rA   ÚassertRaisesr   Ú
ParseErrorrj   r   Ú	exceptionZGetLineZ	GetColumn)r   rI   rJ   r-   Úer   r   r   ÚtestParseInvalidUtf8  s    z*TextFormatParserTests.testParseInvalidUtf8c                 C   s&   |  ¡ }d}|  tjdtj||¡ d S )NÚfooz?1:1 : Message type "\w+.TestAllTypes" has no field named "foo".©rA   ÚassertRaisesRegexr   rÒ   rj   rÂ   r   r   r   ÚtestParseSingleWord  s      ýz)TextFormatParserTests.testParseSingleWordc                 C   sX   |  ¡ }d}|  tjdtj||¡ d}tj||dd |  |jjd¡ |  |jd¡ d S )Nzunknown_field: 8
zI1:1 : Message type "\w+.TestAllTypes" has no field named "unknown_field".zGoptional_int32: 123
unknown_field: 8
optional_nested_message { bb: 45 }T)Zallow_unknown_fieldé-   rƒ   )	rA   rØ   r   rÒ   rj   r   ri   r]   rª   rÂ   r   r   r   ÚtestParseUnknownField$  s      ýz+TextFormatParserTests.testParseUnknownFieldc                 C   s&   |  ¡ }d}|  tjdtj||¡ d S )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   ÚtestParseBadEnumValue2  s     üz+TextFormatParserTests.testParseBadEnumValuec                 C   s&   |  ¡ }d}|  tjdtj||¡ d S )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   ZxfZx62r   úÚbr¥   r`   é   Zx20é   )rA   r   rj   r   rF   )r   rI   rJ   r-   ÚSLASHr   r   r   ÚtestParseStringFieldUnescapeC  s    ÿÿz2TextFormatParserTests.testParseStringFieldUnescapec                 C   s>   |  ¡ }d|_|  ¡ }t t |¡|¡ |  d| d¡¡ d S )Né   Úoneof_uint32Úoneof_field)rA   ræ   r   rj   rG   r   Ú
WhichOneof)r   rI   ÚmÚm2r   r   r   ÚtestParseOneofX  s
    z$TextFormatParserTests.testParseOneofc              	   C   s@   d  ddg¡}| ¡ }|  tjd¡ t ||¡ W 5 Q R X d S )Nrf   úoneof_uint32: 11úoneof_string: "foo"z is specified along with field )r,   rA   rØ   r   rÒ   rj   ©r   rI   Z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   sv   |  ¡ }t | j|¡ |  |j| j¡ |  |j| j¡ |  |j	d | j¡ |  |j	d | j
¡ |  |jd | j¡ d S ©Nr   r   )rA   r   rj   Ú_UNICODE_SAMPLEr   r‰   Ú_GOLDEN_BYTESro   Ú_GOLDEN_UNICODEÚrepeated_bytesÚ_GOLDEN_BYTES_1rF   Ú_GOLDEN_STR_0©r   rI   ré   r   r   r   ÚtestParseUnicodex  s    z&TextFormatParserTests.testParseUnicodec                 C   sv   |  ¡ }t | j|¡ |  |j| j¡ |  |j| j¡ |  |j	d | j¡ |  |j	d | j
¡ |  |jd | j¡ d S rð   )rA   r   rj   Ú_BYTES_SAMPLEr   r‰   rò   ro   ró   rô   rõ   rF   rö   r÷   r   r   r   ÚtestParseBytes„  s    z$TextFormatParserTests.testParseBytesc                 C   sX   |  ¡ }t | j¡}t ||¡ |  |j| j¡ |  |j	| j
¡ |  |jd | j¡ d S ©Nr   )rA   ÚioÚBytesIOrù   r   Ú
ParseLinesr   r‰   rò   ro   ró   rô   ©r   rI   ré   r(   r   r   r   ÚtestFromBytesFile  s    z'TextFormatParserTests.testFromBytesFilec                 C   sX   |  ¡ }t | j¡}t ||¡ |  |j| j¡ |  |j	| j
¡ |  |jd | j¡ d S rû   )rA   rü   ÚStringIOrñ   r   rþ   r   r‰   rò   ro   ró   rô   rÿ   r   r   r   ÚtestFromUnicodeFile˜  s    z)TextFormatParserTests.testFromUnicodeFilec                 C   sT   |  ¡ }t | j d¡|¡ |  |j| j¡ |  |j| j	¡ |  |j
d | j¡ d S )Nó   
r   )rA   r   rþ   rù   Úsplitr   r‰   rò   ro   ró   rô   r÷   r   r   r   ÚtestFromBytesLines   s
    z(TextFormatParserTests.testFromBytesLinesc                 C   sT   |  ¡ }t | j d¡|¡ |  |j| j¡ |  |j| j	¡ |  |j
d | j¡ d S )Nrf   r   )rA   r   rþ   rñ   r  r   r‰   rò   ro   ró   rô   r÷   r   r   r   ÚtestFromUnicodeLines§  s
    z*TextFormatParserTests.testFromUnicodeLinesc                 C   s&   |  ¡ }d}|  tjdtj||¡ d S )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   s&   |  ¡ }d}|  tjdtj||¡ d S )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.testParseDuplicateScalarsc                 C   s*   |j dd}d}|  tjdtj||¡ d S )NrV   ©rª   úoptional_int32: 67zQMessage type "\w+.TestAllTypes" should not have multiple "optional_int32" fields.r×   rÂ   r   r   r   Ú testParseExistingScalarInMessageÁ  s      ýz6TextFormatParserTests.testParseExistingScalarInMessageN)#r   r   r   r¾   rÁ   rÃ   rÅ   rÌ   rÍ   rÎ   rÏ   rÕ   rÙ   rÛ   rÜ   rÝ   rä   rë   rï   rñ   rˆ   rù   ró   rò   rõ   rö   rø   rú   r   r  r  r  r  r
  r  r   r   r   r   r»   ›  s>   	


	r»   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTextFormatMergeTestsc                 C   s6   |  ¡ }d}t ||¡}|  ||¡ |  d|j¡ d S )Nr	  éC   ©rA   r   r¿   rs   r   rª   ©r   rI   rJ   r-   rt   r   r   r   ÚtestMergeDuplicateScalarsInTextÍ  s
    z4TextFormatMergeTests.testMergeDuplicateScalarsInTextc                 C   s:   |  ¡ }d}t ||¡}|  ||k¡ |  d|jj¡ d S )Nr  r¥   )rA   r   r¿   Ú
assertTruer   ri   r]   r  r   r   r   Ú&testMergeDuplicateNestedMessageScalarsÔ  s
    z;TextFormatMergeTests.testMergeDuplicateNestedMessageScalarsc                 C   s:   |j dd}d}t ||¡}|  ||¡ |  d|j¡ d S )NrV   r  r  r  r  r  r   r   r   ÚtestReplaceScalarInMessageÜ  s
    z/TextFormatMergeTests.testReplaceScalarInMessagec                 C   sP   |j dtƒ d}|  | d¡¡ d}t ||¡}|  ||¡ |  d|jj	¡ d S )NrV   )rª   ri   ri   z optional_nested_message{ bb: 3 }r`   )
rA   Údictr  ÚHasFieldr   r¿   rs   r   ri   r]   r  r   r   r   ÚtestReplaceMessageInMessageã  s     ÿz0TextFormatMergeTests.testReplaceMessageInMessagec                 C   s8   d  ddg¡}| ¡ }t ||¡ |  d| d¡¡ d S )Nrf   rì   rí   Zoneof_stringrç   )r,   rA   r   r¿   r   rè   rî   r   r   r   ÚtestMergeMultipleOneofì  s    z+TextFormatMergeTests.testMergeMultipleOneofN)r   r   r   r  r  r  r  r  r   r   r   r   r  Ê  s
   	r  c                   @   sd   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S )Ú OnlyWorksWithProto2RightNowTestsc                 C   s2   t  ¡ }t |¡ |  |  tj|dd¡d¡ d S )NT©Úpointy_bracketsz*text_format_unittest_data_pointy_oneof.txt©r   rA   r   r¼   r.   r7   r   rG   ©r   rJ   r   r   r   ÚtestPrintAllFieldsPointyø  s    
 ÿýz9OnlyWorksWithProto2RightNowTests.testPrintAllFieldsPointyc                 C   sR   d  |  d¡¡}t ¡ }t ||¡}|  ||¡ t ¡ }t |¡ |  	||¡ d S )Nrf   ú/text_format_unittest_data_oneof_implemented.txt)
r,   r)   r   rA   r   rj   rs   r   r¼   r   )r   r0   rl   rt   rJ   r   r   r   ÚtestParseGolden   s    ÿ
z0OnlyWorksWithProto2RightNowTests.testParseGoldenc                 C   s.   t  ¡ }t |¡ |  |  t |¡¡d¡ d S ©Nr   r  r  r   r   r   ÚtestPrintAllFields  s    
þz3OnlyWorksWithProto2RightNowTests.testPrintAllFieldsc                 C   s~   t  ¡ }d|_d|_d|_d|_d|j_d|j_	| 
¡ }t  ¡ }| |¡ |  dtj|dd	d
¡ |  dtj|d	d	d¡ d S )Nr    r¡   r¢   r£   éh   r¤   zj  1: 101
  12: 4636878028842991616
  14: "hello"
  15: "103"
  16 {
    17: 104
  }
  18 {
    1: 105
  }
r¥   Tr¦   zQ1: 101 12: 4636878028842991616 14: "hello" 15: "103" 16 { 17: 104 } 18 { 1: 105 }r©   )r   rA   rª   r   ro   r‰   ÚoptionalgroupÚari   r]   r«   r¬   r­   r   r   rG   )r   rJ   r¯   r°   r   r   r   ÚtestPrintUnknownFields  s,    

þöþúz7OnlyWorksWithProto2RightNowTests.testPrintUnknownFieldsc                 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$   r    éo   r   r   Zext_str0Zext_str2Zext_str1Zext_str3T)Z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   ZTestFieldOrderingsZ	my_stringZmy_intZmy_floatri   Zoor]   Ú
ExtensionsZmy_extension_stringZTestExtensionOrderings2Ztest_ext_orderings2ZTestExtensionOrderings1Ztest_ext_orderings1ZTestExtensionOrderings3Ztest_ext_orderings3r1   r7   r   rG   r  r   r   r   ÚtestPrintInIndexOrder4  s2    ÿÿþÿÿýþz6OnlyWorksWithProto2RightNowTests.testPrintInIndexOrderc                 C   sL   |   d¡}t ¡ }t ||¡}|  ||¡ t ¡ }t |¡ |  ||¡ d S r"  )	r)   r   rA   r   Z
MergeLinesrs   r   r¼   r   ©r   Zopenedrl   rt   rJ   r   r   r   ÚtestMergeLinesGoldenu  s    

z5OnlyWorksWithProto2RightNowTests.testMergeLinesGoldenc                 C   sL   |   d¡}t ¡ }t ||¡}|  ||¡ t ¡ }t |¡ |  ||¡ d S r"  )	r)   r   rA   r   rþ   rs   r   r¼   r   r+  r   r   r   ÚtestParseLinesGolden  s    

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â   r(  á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…   r1   r   rG   r  r   r   r   ÚtestPrintMap‰  s    




 ÿz-OnlyWorksWithProto2RightNowTests.testPrintMapc                 C   s.   t  ¡ }d}t ||¡ |  t |¡d¡ d S )NaM  map_uint64_uint64 {
  key: 123
  value: 17179869184
}
map_string_string {
  key: "abc"
  value: "first"
}
map_int32_foreign_message {
  key: 111
  value {
    c: 5
  }
}
map_uint64_uint64 {
  key: 123
  value: 321
}
map_string_string {
  key: "abc"
  value: "second"
}
map_int32_foreign_message {
  key: 111
  value {
    d: 5
  }
}
z£map_uint64_uint64 {
  key: 123
  value: 321
}
map_string_string {
  key: "abc"
  value: "second"
}
map_int32_foreign_message {
  key: 111
  value {
    d: 5
  }
}
)r   r8  r   rj   r1   rG   ©r   rJ   r-   r   r   r   ÚtestDuplicateMapKey±  s    ÿ ÿz4OnlyWorksWithProto2RightNowTests.testDuplicateMapKeyc                 C   sB   t  ¡ }|jd }d|_|  t|ƒd¡ d|_|  t|ƒd¡ d S )Nr(  r   z@map_int32_foreign_message {
  key: 111
  value {
    c: 1
  }
}
r¥   z@map_int32_foreign_message {
  key: 111
  value {
    c: 2
  }
}
)r   r8  r>  r…   r   r$   )r   rJ   r®   r   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|< q8d 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   r8  ÚstringÚascii_uppercaser=  Úreversedr,   r1   r   rG   )r   rJ   rF  Úgoldenr   r   r   ÚtestMapOrderEnforcementø  s    
ÿz8OnlyWorksWithProto2RightNowTests.testMapOrderEnforcementN)r   r   r   r  r!  r#  r'  r*  r,  r-  r?  rA  rB  rL  r   r   r   r   r  ö  s   "A

(1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)  rk   r$   r1   r   rG   r   ZTestMessageSetZmessage_set_extension3r-   )r   rJ   Ú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 )NFrN  rÖ   T)Zuse_field_numberú?1 {
  1545008 {
    15: 23
  }
  1547769 {
    25: "foo"
  }
}
)r   r’   r   rQ  rR  rS  rT  rU  r)  rk   r$   ÚPrintMessager1   r”   r•   )r   rš   rJ   rV  rW  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 )NrN  rÖ   TrW   z‚message_set { [protobuf_unittest.TestMessageSetExtension1] { i: 23 } [protobuf_unittest.TestMessageSetExtension2] { str: "foo" } })r   rQ  rR  rS  rT  rU  r)  rk   r$   r1   r   rG   )r   rJ   rV  rW  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¥   rO  rN  rÖ   )r   rA   r   rj   r   rD   r   rQ  rR  rS  rT  rU  r)  rk   r$   ©r   rJ   r-   rV  rW  r   r   r   ÚtestParseMessageSetQ  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   ÚDefaultr1   rG   r@  r   r   r   ÚtestExtensionInsideAnyMessageg  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jdtj||¡ d}| jtjdtj||dd d S )Nz34: 1
repeated_uint64: 2
T)Zallow_field_numberr   r   r¥   rZ  rN  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   rA   r   rj   r   rD   r   rQ  rR  rS  rT  rU  r)  rk   r$   rØ   rÒ   r^  r   r   r   ÚtestParseMessageByFieldNumberv  s<      ýùz)Proto2Tests.testParseMessageByFieldNumberc                 C   s.   t  ¡ }t |¡ |  |  t |¡¡d¡ d S )Nú(text_format_unittest_extensions_data.txt©r   ÚTestAllExtensionsr   ÚSetAllExtensionsr.   r7   r   rG   r  r   r   r   ÚtestPrintAllExtensionsŸ  s    
þz"Proto2Tests.testPrintAllExtensionsc                 C   s2   t  ¡ }t |¡ |  |  tj|dd¡d¡ d S )NTr  z/text_format_unittest_extensions_data_pointy.txtrf  r  r   r   r   ÚtestPrintAllExtensionsPointy¦  s    
 ÿýz(Proto2Tests.testPrintAllExtensionsPointyc                 C   sF   d  |  d¡¡}t ¡ }t ||¡ t ¡ }t |¡ |  ||¡ d S )Nrf   re  )	r,   r)   r   rg  r   rj   r   rh  r   )r   r0   rl   rJ   r   r   r   ÚtestParseGoldenExtensions®  s    ÿ
z%Proto2Tests.testParseGoldenExtensionsc                 C   s@   t  ¡ }t |¡ t |¡}t  ¡ }t ||¡ |  ||¡ d S r/   )r   rg  r   rh  r   rG   rj   r   )r   rJ   r¹   rl   r   r   r   ÚtestParseAllExtensions¸  s    

z"Proto2Tests.testParseAllExtensionsc                 C   sL  t  ¡ }d}tj||dd d}|  t |¡|¡ t  ¡ }d}| jtjdtj||dd t  ¡ }d}| jtjdtj||dd t  ¡ }d	}| jtjdtj||dd t  ¡ }d
}| jtjdtj||dd t  ¡ }d}| 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 )Nu˜  message_set {
  [unknown_extension] {
    i: 23
    repeated_i: []
    bin: "Ã "
    [nested_unknown_ext]: {
      i: 23
      repeated_i: [1, 2]
      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"
        repeated_test: ["test_string1", "test_string2"]
        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)Z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".rO  rN  rÖ   )r   rQ  r   rj   r1   rG   rØ   rÒ   rR  rS  rT  r   rU  r)  rk   r$   )r   rJ   r-   rK  Z	malformedrV  rW  r   r   r   Ú testParseAllowedUnknownExtensionÁ  s|    !úúúú	øz,Proto2Tests.testParseAllowedUnknownExtensionc              	   C   sF   t  ¡ }d}|  tj¡}t ||¡ W 5 Q R X |  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   rA   rÑ   r   rÒ   rj   r   r$   rÓ   ©r   rJ   r-   rÔ   r   r   r   ÚtestParseBadIdentifierA  s    ÿz"Proto2Tests.testParseBadIdentifierc                 C   sD   t  ¡ }d}|  tjdtj||¡ 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   rg  rØ   r   rÒ   rj   rA   r@  r   r   r   ÚtestParseBadExtensionJ  s"      ý  ýz!Proto2Tests.testParseBadExtensionc                 C   s&   t  ¡ }d}|  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   rA   rØ   r   rÒ   rj   r@  r   r   r   ÚtestParseNumericUnknownEnumW  s      ü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   rg  r   r¿   r   r)  Zoptional_int32_extensionr@  r   r   r   Ú"testMergeDuplicateExtensionScalars`  s    
ÿz.Proto2Tests.testMergeDuplicateExtensionScalarsc                 C   s&   t  ¡ }d}|  tjdtj||¡ d S )Nrs  z‹1:96 : Message type "protobuf_unittest.TestAllExtensions" should not have multiple "protobuf_unittest.optional_int32_extension" extensions.©r   rg  rØ   r   rÒ   rj   r@  r   r   r   Ú"testParseDuplicateExtensionScalarsh  s      ûz.Proto2Tests.testParseDuplicateExtensionScalarsc                 C   s&   t  ¡ }d}|  tjdtj||¡ d S )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.ru  r@  r   r   r   Ú#testParseDuplicateExtensionMessagess  s      ûz/Proto2Tests.testParseDuplicateExtensionMessagesc                 C   s@   t  ¡ }d}|  tjdtj||¡ d}|  tjdtj||¡ d S )NzRepeatedGroup: <z1:16 : Expected ">".zRepeatedGroup: {z1:16 : Expected "}".rq  r@  r   r   r   ÚtestParseGroupNotClosed~  s    
  ÿ
  ÿz#Proto2Tests.testParseGroupNotClosedc                 C   s\   t  ¡ }d}t ||¡ |  | d¡¡ | ¡  t  ¡ }d}t ||¡ |  | d¡¡ d S )NzOptionalGroup: {}r%  zOptionalGroup: <>)r   rA   r   rj   r  r  r   r@  r   r   r   ÚtestParseEmptyGroup‡  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 )Nr7  r.  r/  r0  r1  r2  rƒ   r3  r4  r5  r6  râ   r(  )r   r8  r   rj   r   r9  r:  r;  r<  r=  r>  r…   )r   r-   rJ   r   r   r   ÚtestParseMap–  s    zProto2Tests.testParseMapN)r   r   r   rY  r\  r]  r_  rc  rd  ri  rj  rk  rl  rm  ro  rp  rr  rt  rv  rw  rx  ry  rz  r   r   r   r   rM    s*   )
	 			rM  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%S )&ÚProto3Testsc                 C   s@   t  ¡ }d|_t ¡ }|j |¡ |  tj	|t
 ¡ dd¡ d S )NrH  r   ú[any_value {
  [type.googleapis.com/protobuf_unittest.OneString] {
    data: "string"
  }
}
©r   Ú	OneStringÚdatar   ra  Ú	any_valueÚPackr   r   rG   r   rb  ©r   Úpacked_messagerJ   r   r   r   ÚtestPrintMessageExpandAny¾  s    ÿýz%Proto3Tests.testPrintMessageExpandAnyc                 C   sD   t  ¡ }t ¡ }| |¡ t |¡}t |t ¡ ¡}|  ||¡ d S r/   )	r   r~  r   ÚAnyr  r   rG   rj   r   )r   Z
packed_msgr^   r-   Z	other_msgr   r   r   ÚtestTopAnyMessageÌ  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   ra  r  Úrepeated_any_valuer\   r  r   r   rG   r‚  r   r   r   Ú!testPrintMessageExpandAnyRepeatedÔ  s    þz-Proto3Tests.testPrintMessageExpandAnyRepeatedc                 C   sD   t  ¡ }d|_t ¡ }|j |¡ t ¡ }|  	t
j||dd¡ d S )NrH  r   údany_value {
  type_url: "type.googleapis.com/protobuf_unittest.OneString"
  value: "\n\006string"
}
)r   r~  r  r   ra  r€  r  r   ÚDescriptorPoolr   r   rG   )r   rƒ  rJ   Ú
empty_poolr   r   r   Ú2testPrintMessageExpandAnyDescriptorPoolMissingTypeè  s    þz>Proto3Tests.testPrintMessageExpandAnyDescriptorPoolMissingTypec                 C   s<   t  ¡ }d|_t ¡ }|j |¡ |  tj	|ddd¡ d S )NrH  Tr  z[any_value <
  [type.googleapis.com/protobuf_unittest.OneString] <
    data: "string"
  >
>
©
r   r~  r  r   ra  r€  r  r   r   rG   r‚  r   r   r   Ú'testPrintMessageExpandAnyPointyBracketsõ  s    ÿýz3Proto3Tests.testPrintMessageExpandAnyPointyBracketsc                 C   s<   t  ¡ }d|_t ¡ }|j |¡ |  tj	|ddd¡ d S )NrH  TrW   zRany_value { [type.googleapis.com/protobuf_unittest.OneString] { data: "string" } }r  r‚  r   r   r   Ú"testPrintMessageExpandAnyAsOneLine  s    ÿýz.Proto3Tests.testPrintMessageExpandAnyAsOneLinec                 C   sD   t  ¡ }d|_t ¡ }|j |¡ |  tj	|ddt
 ¡ dd¡ d S )NrH  T)rX   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 )NrH  zPany_value {
  type_url: "protobuf_unittest.OneString"
  value: "\n\006string"
}
)r   r~  r  r   ra  r€  r  ZTypeNameÚtype_urlr   rG   r   rj   )r   rƒ  rJ   r-   rl   r   r   r   Ú"testPrintAndParseMessageInvalidAny  s    
 ÿz.Proto3Tests.testPrintAndParseMessageInvalidAnyc                 C   s>   t  ¡ }t  ¡ }d|_t |¡}t ||¡ |  d|j¡ d S )Niç  )r	   rA   Zoptional_nested_enumr   rG   rj   r   )r   rJ   Zmessage2Ztext_stringr   r   r   ÚtestUnknownEnums1  s    
zProto3Tests.testUnknownEnumsc                 C   st   t  ¡ }d}t ||¡ t ¡ }|j |¡ |  d|j	¡ | 
¡  t ||¡ t ¡ }|j |¡ |  d|j	¡ d S )Nr|  rH  )r   ra  r   r¿   r   r~  r€  ÚUnpackr   r  r   rj   ©r   rJ   r-   rƒ  r   r   r   ÚtestMergeExpandedAny9  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   ra  r   r¿   r   r~  rŠ  r—  r   r  r˜  r   r   r   ÚtestMergeExpandedAnyRepeatedJ  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"
  >
}
rH  ©
r   ra  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   ra  r   r¿   r   r~  r   r€  r”  r˜  r   r   r   ÚtestMergeAlternativeUrli  s    ÿz#Proto3Tests.testMergeAlternativeUrlc              	   C   sR   t  ¡ }d}|  tj¡}t ¡ }tj|||d W 5 Q R X |  t	|j
ƒd¡ d S )Nr|  r   z=Type protobuf_unittest.OneString not found in descriptor pool)r   ra  rÑ   r   rÒ   r   r  r¿   r   r$   rÓ   )r   rJ   r-   rÔ   rŽ  r   r   r   Ú-testMergeExpandedAnyDescriptorPoolMissingTypeu  s    þz9Proto3Tests.testMergeExpandedAnyDescriptorPoolMissingTypec                 C   s>   d}t  ¡ }t ||¡ t ¡ }|j |¡ |  d|j	¡ d S )NrŒ  rH  r›  )r   r-   rJ   rƒ  r   r   r   ÚtestMergeUnexpandedAnyƒ  s    z"Proto3Tests.testMergeUnexpandedAnyc              	   C   sF   t  ¡ }d}|  tj¡}t ||¡ W 5 Q R X |  t|jƒd¡ d S )NzUany_value {
  [type.googleapis.com/protobuf_unittest.OneString] {
    data: "string"
z3:11 : Expected "}".)	r   ra  rÑ   r   rÒ   r¿   r   r$   rÓ   rn  r   r   r   ÚtestMergeMissingAnyEndTokenŽ  s
    z'Proto3Tests.testMergeMissingAnyEndTokenc                 C   sF   t  ¡ }| t ¡ ¡ tj|d}d}t |t ¡ ¡}|  	||¡ d S )N)r€  zCany_value {
  [type.googleapis.com/google.protobuf.ListValue] {}
}
)
r   r…  r  r   Z	ListValuer   ra  r   rj   r   )r   Zany_msgr^   r-   Z
parsed_msgr   r   r   ÚtestParseExpandedAnyListValue—  s    z)Proto3Tests.testParseExpandedAnyListValuec                 C   st   t  ¡ }|  t |¡d¡ d|_d|_d|_d|j_	d}|  t |¡|¡ t  ¡ }t 
||¡ |  t |¡|¡ d S )Nr+   r   rL   z^optional_int32: 0
optional_float: 0.0
optional_string: ""
optional_nested_message {
  bb: 0
}
)r   ZTestProto3Optionalr   r   rG   rª   r~   ro   ri   r]   rj   )r   r^   r-   rÀ   r   r   r   ÚtestProto3Optional¡  s    zProto3Tests.testProto3OptionalN)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                   @   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              T   C   sª  d}t  | ¡ ¡}|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gR}d2}| 	¡ s¦|| }t
|tƒrL|j}|  ||¡ | ¡  nNt
|d3 tƒr„t |d3 ¡r„|  t |d2 ƒ ¡¡ n|  |d3 |d2 ƒ ¡ |d37 }q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:nANZidentifier1ú:rˆ  Zidentifier2rƒ   Zidentifier3rH  ZidentifiER_4g     €[@ZID5gq=
×£pÍ¿ZID6z	aaaa'bbbbZID7zaa"bbZID8Ú{ÚArP   ÚBÚCTÚDFÚ}ZID9é   ZID10lüÿÿÿÇqÀÞ{UZID11iêÿÿÿZID12l   Žc/Y-·v ZID13rN   ZID14g      ^@Z
false_boolZ	true_BOOLZ
true_bool1Zfalse_BOOL1Z
False_boolZ	True_boolÚXÚYz-infÚZÚnanr   r   )r   Ú	TokenizerÚ
splitlinesÚConsumeIdentifierÚConsumeStringÚConsumeIntegerÚConsumeFloatrR   ÚConsumeBoolÚAtEndÚ
isinstancer$   Útokenr   Ú	NextTokenÚmathÚisnanr  )r   r-   Ú	tokenizerÚmethodsrk   ré   r¹  r   r   r   ÚtestSimpleTokenCases¶  s¾    
                            Ì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 5 Q R X |  d
| 
¡ ¡ |  | ¡ ¡ d S )Nì   ÿÿÿÿ ì   ÿÿ ú-1 %d %dr   éÿÿÿÿz
-0 0 0 1.2r   TFrM   )r   r°  r±  r   r´  r  r·  ZTryConsumeIntegerrÑ   rÒ   rµ  ©r   Z	int64_maxZ
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Ò   Z_ConsumeUint32Z_ConsumeUint64r   Z_ConsumeInt32Z_ConsumeInt64r  r·  rÄ  r   r   r   ÚtestConsumeIntegers  sF     ÿ ÿ ÿ ÿ ÿz!TokenizerTest.testConsumeIntegersc              	   C   sô   d}t  | ¡ ¡}|  d| ¡ ¡ |  d| ¡ ¡ |  d| ¡ ¡ |  d| ¡ ¡ |  d| ¡ ¡ |  d| ¡ ¡ |  d| ¡ ¡ |  t j¡ | ¡  W 5 Q R X | ¡  |  t j¡ | ¡  W 5 Q R X | ¡  |  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åÿÿÿr   N)
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Ò   ZConsumeByteStringrÈ  r   r   r   ÚtestConsumeByteStringP  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   ÚtestConsumeBoole  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   ÚtestSkipCommentj  s    zTokenizerTest.testSkipCommentc                 C   sB   t jd ¡ dd}|  | ¡ ¡ |  d| ¡ ¡ |  | ¡ ¡ d S )NrÌ  F©Zskip_comments)r   r°  r±  ÚassertFalser·  r   rÍ  r  rÎ  r   r   r   ÚtestConsumeCommento  s    
ÿz TokenizerTest.testConsumeCommentc                 C   sV   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   ÚtestConsumeTwoCommentsv  s    z$TokenizerTest.testConsumeTwoCommentsc                 C   sœ   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   sV   d}t j| ¡ dd}|  d| ¡ ¡ |  | ¡ ¡ |  d| ¡ ¡ |  | ¡ ¡ d S )NrÓ  FrÐ  rØ  )FrÔ  )r   r°  r±  r   rÙ  rÑ  r·  r  rÈ  r   r   r   ÚtestConsumeTwoLineComments•  s    ÿÿz(TokenizerTest.testConsumeTwoLineCommentsc                 C   sœ   d}t j| ¡ dd}|  t j|j¡ |  d| ¡ ¡ |  |jd¡ | 	¡  |  t j|j¡ |  d| 
¡ ¡ |  | ¡ ¡ |  d| ¡ ¡ |  | ¡ ¡ d S )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   Ú"testConsumeAndCheckTrailingCommentŸ  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   ÚtestHashinComment±  s    ÿzTokenizerTest.testHashinCommentc                 C   s.   ddd  d }t j| ¡ dd}| ¡  d S )Nú"r&  i    FrÐ  )r   r°  r±  r³  rÈ  r   r   r   ÚtestHugeString¼  s    zTokenizerTest.testHugeStringN)r   r   r   r¿  rÅ  rÆ  rÉ  rÊ  rË  rÏ  rÒ  rÕ  r×  rÚ  rÛ  rÜ  rÝ  rß  r   r   r   r   r£  ´  s   M 
r£  c                   @   s4   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 r/   r   )rJ   r§   rX   r   r   r   r›   É  s    z9PrettyPrinterTest.testPrettyPrintNoMatch.<locals>.printerrV   T©rX   Úmessage_formatterrY   rZ   ©r   rI   r›   rJ   r^   r   r   r   ÚtestPrettyPrintNoMatchÇ  s    
  ÿýz(PrettyPrinterTest.testPrettyPrintNoMatchc                    s@   ‡ fdd„}ˆ   ¡ }|j ¡ }d|_|  tj|d|dd¡ d S )Nc                    s"   ~~| j ˆ jjj krd| j S d S ©NzMy lucky number is %s©r   rA   ZNestedMessager]   ©ré   r§   rX   ©rI   r   r   r›   ×  s    z9PrettyPrinterTest.testPrettyPrintOneLine.<locals>.printerrV   Trá  z1repeated_nested_message { My lucky number is 42 }rZ   rã  r   rè  r   ÚtestPrettyPrintOneLineÕ  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r2|rdndd|  }d|| jf S d S )Nrg   rf   zMy lucky number is:%s%sræ  )ré   r§   rX   Zline_deliminatorrè  r   r   r›   æ  s    z;PrettyPrinterTest.testPrettyPrintMultiLine.<locals>.printerrV   Trá  z2repeated_nested_message { My lucky number is: 42 }Fz7repeated_nested_message {
  My lucky number is:
  42
}
rZ   rã  r   rè  r   ÚtestPrettyPrintMultiLineä  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   rA   rç  rè  r   r   r›   ú  s    z?PrettyPrinterTest.testPrettyPrintEntireMessage.<locals>.printerFrá  zThe is the message!
Trë  )rA   r1   r   rG   )r   rI   r›   rJ   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                    s"   ~~| j ˆ jjj krd| j S d S rå  ræ  rç  rè  r   r   r›   	  s    
z?PrettyPrinterTest.testPrettyPrintMultipleParts.<locals>.printeré=   rV   éc   r   Trá  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 }Fri   )râ  z3optional_nested_message {
  My lucky number is 1
}
z{
  My lucky number is 1
})rA   rª   r[   r\   r]   ri   r1   r   rG   r’   r“   r   r‘   r   r”   r•   r   )r   rI   r›   rJ   r^   rš   r   rè  r   ÚtestPrettyPrintMultipleParts
	  sZ    

  ÿý
ÿûþ
ÿûþz.PrettyPrinterTest.testPrettyPrintMultiplePartsN)r   r   r   rä  ré  rê  rì  rï  r   r   r   r   rà  Ä  s
   rà  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú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š   Z
addCleanupr•   r   r|   rJ   rñ  r}   ro   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"
              }
            }
            )r1   r   rG   rJ   rŠ   r‹   rò  r   r   r   r†   E	  s    
þz"WhitespaceTest.testMessageToStringc                 C   s,   t  | j| j¡ |  | j ¡ t d¡¡ d S rô  )r   r[  rJ   rš   r1   r”   rŠ   r‹   rò  r   r   r   ÚtestPrintMessageP	  s
    þzWhitespaceTest.testPrintMessagec                 C   s0   t  | j| j| j¡ |  | j ¡ t d¡¡ d S rô  )	r   r“   r˜   r™   rš   r1   r”   rŠ   r‹   rò  r   r   r   rœ   \	  s
    þzWhitespaceTest.testPrintFieldc                 C   s0   t  | j| j| j¡ |  | j ¡ t d¡¡ d S )Nzl            {
              payload {
                optional_string: "value"
              }
            })	r   r   r˜   r™   rš   r1   r”   rŠ   r‹   rò  r   r   r   rž   h	  s      ÿþz"WhitespaceTest.testPrintFieldValueN)r   r   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S )Ú OptionalColonMessageToStringTestc                 C   sD   t  ¡ }d|_t ¡ }|j |¡ tj|dd}d}|  	||¡ d S )NrH  T)Úforce_colonz]any_value: {
  [type.googleapis.com/protobuf_unittest.OneString]: {
    data: "string"
  }
}
)
r   r~  r  r   ra  r€  r  r   rG   r   )r   rƒ  rJ   ÚoutputÚexpectedr   r   r   ÚtestForcePrintOptionalColonw	  s    þz<OptionalColonMessageToStringTest.testForcePrintOptionalColonc                 C   s4   t  ¡ }|j d¡ tj|ddd}|  d|¡ d S )Nr   T)rh   r÷  zrepeated_int32: [1]
)r   rA   rb   rC   r   rG   r   )r   rJ   rø  r   r   r   rn   †	  s      ÿzCOptionalColonMessageToStringTest.testPrintShortFormatRepeatedFieldsN)r   r   r   rú  rn   r   r   r   r   rö  u	  s   rö  Ú__main__)+Ú__doc__rü   r»  r3   rH  rŠ   r²   Zgoogle.protobufr   r   r   r   r   r   r   r	   r
   Zgoogle.protobuf.internalr`  r   r   r   r   r   r   r   ZTestCaser   r   Ú
parametersr8   r´   r»   r  r  rM  r{  r£  rà  rð  rö  r   Úmainr   r   r   r   Ú<module>    sr   
    
"
  0
+     , y  
v:
