<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
h                 @   s  d Z dZddlZddlZddlZddlZyddlZW n ek
rP   ddlZY nX 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
j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
jeeG dd deZ e!dkrej"  dS ) z%Test for google.protobuf.text_format.z kenton@google.com (Kenton Varda)    N)_parameterized)any_test_pb2)map_unittest_pb2)unittest_mset_pb2)unittest_pb2)unittest_proto3_arena_pb2)api_implementation)message_set_extensions_pb2)	test_util)descriptor_pool)text_formatc               @   s   e Zd Zdd ZdS )SimpleTextFormatTestsc             C   s$   xt jD ]}| jdt| qW d S )N   )r   Z_QUOTESassertEquallen)selfZquote r   &/usr/lib/python3.6/text_format_test.pytestQuoteMarksAreSingleCharsF   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   s4   t j| }ttkr|j S dd |D S Q R X d S )Nc             S   s   g | ]}|j d qS )zutf-8)decode).0Zgolden_liner   r   r   
<listcomp>Q   s    z-TextFormatBase.ReadGolden.<locals>.<listcomp>)r
   Z
GoldenFilestrbytes	readlines)r   golden_filenamefr   r   r   
ReadGoldenN   s    zTextFormatBase.ReadGoldenc             C   s    | j |}| j|dj| d S )N )r!   ZassertMultiLineEqualjoin)r   textr   Zgolden_linesr   r   r   CompareToGoldenFileS   s    
z"TextFormatBase.CompareToGoldenFilec             C   s   | j || d S )N)r   )r   r$   golden_textr   r   r   CompareToGoldenTextW   s    z"TextFormatBase.CompareToGoldenTextc             C   s>   |j ddj ddj ddj dd}tjdtjjd|}|S )Nze+0ze+ze-0ze-z\.0$r"   )replacerecompile	MULTILINEsub)r   r$   r   r   r   RemoveRedundantZerosZ   s    z#TextFormatBase.RemoveRedundantZerosN)r   r   r   r!   r%   r'   r-   r   r   r   r   r   L   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d%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=S )>TextFormatTestc             C   sx   |j  }|jjd	 |jjd |jjd |jjd |jjd |jjd |jjd | j| jtj	|d d S )
Nl            l    gw/^@gtQFքDg6<z 
	\'"u   üꜟzrepeated_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"
l         )
TestAllTypesrepeated_int64appendrepeated_uint64repeated_doublerepeated_stringr'   r-   r   MessageToString)r   message_modulemessager   r   r   testPrintExotich   s    zTextFormatTest.testPrintExoticc             C   s@   G dd dt j}|j }|jj|d | jtj|d d S )Nc               @   s   e Zd ZdS )zATextFormatTest.testPrintExoticUnicodeSubclass.<locals>.UnicodeSubN)r   r   r   r   r   r   r   
UnicodeSub~   s   r9   u   üꜟz(repeated_string: "\303\274\352\234\237"
)sixZ	text_typer/   r4   r1   r'   r   r5   )r   r6   r9   r7   r   r   r   testPrintExoticUnicodeSubclass|   s    z-TextFormatTest.testPrintExoticUnicodeSubclassc             C   s2   |j  }|jj }d|_| jtj|ddd d S )N*   T)as_one_linez"repeated_nested_message { bb: 42 })r/   repeated_nested_messageaddbbr'   r   r5   )r   r6   r7   msgr   r   r   testPrintNestedMessageAsOneLine   s    
z.TextFormatTest.testPrintNestedMessageAsOneLinec             C   s^   |j  }|jjd |jjd |jjd |jjd |jjd | jtj|ddd d S )Nr      ZGoogleZZurichT)r=   zirepeated_int32: 1 repeated_int32: 1 repeated_int32: 3 repeated_string: "Google" repeated_string: "Zurich")r/   Zrepeated_int32r1   r4   r'   r   r5   )r   r6   r7   r   r   r    testPrintRepeatedFieldsAsOneLine   s    z/TextFormatTest.testPrintRepeatedFieldsAsOneLinec             C   s(   |j  }d|_| jtj|ddd d S )Nz
a
new
lineT)r=   zoptional_string: "a\nnew\nline")r/   optional_stringr'   r   r5   )r   r6   r7   r   r   r   'testPrintNestedNewLineInStringAsOneLine   s
    z6TextFormatTest.testPrintNestedNewLineInStringAsOneLinec             C   s|   |j  }|jjd |jjd |jjd |jjd |jjd |jjd |jjd | j| jtj	|dd	d
 d S )Nl            l    gw/^@gtQFքDg6<z 
	\'"u   üꜟT)r=   zrepeated_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"l         )
r/   r0   r1   r2   r3   r4   r'   r-   r   r5   )r   r6   r7   r   r   r   testPrintExoticAsOneLine   s    
z'TextFormatTest.testPrintExoticAsOneLinec             C   s   |j  }|jjd |jjd |jjd |jjd |jjd |jjd |jjd tj|dd	d
}|j  }tj||}| j	|| | j
|| tj|ddd
}|j  }tj||}| j	|| | j
||d||f  d S )Nl            l    gw/^@gtQFքDg6<z 
	\'"u   üꜟTF)r=   as_utf8z	
%s != %sl         )r/   r0   r1   r2   r3   r4   r   r5   ParseassertIsr   )r   r6   r7   Z	wire_textparsed_messagerr   r   r   testRoundTripExoticAsOneLine   s.    z+TextFormatTest.testRoundTripExoticAsOneLinec             C   s\   |j  }|jjd tj|dd}| j|d |j  }tj|| | j||d||f  d S )Nu   üꜟT)rH   u   repeated_string: "Ã¼ê"
z	
%s != %s)r/   r4   r1   r   r5   r'   rI   r   )r   r6   r7   r$   rK   r   r   r   testPrintRawUtf8String   s    z%TextFormatTest.testPrintRawUtf8Stringc             C   s   |j  }d|j_d|j_|jjjd |jjjd ddddg}tj|d	d
}| j	| j
|dj|  tj|dd	d}| j	| j
|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)r=   rO   zpayload {{ {0} {1} {2} {3} }}g/_e̾i)ZNestedTestAllTypesZpayloadoptional_floatZoptional_doubleZrepeated_floatr1   r3   r   r5   r'   r-   format)r   r6   r7   Zformatted_fieldsZtext_messager   r   r   testPrintFloatFormat   s&    z#TextFormatTest.testPrintFloatFormatc             C   s"   |j  }d|_| jdt| d S )N{   zc: 123
)ZForeignMessagecr   r   )r   r6   r7   r   r   r   testMessageToString   s    z"TextFormatTest.testMessageToStringc             C   s   |j  }|jjd }|j}tjd}tj||| | jd|j  |j	  tjd}tj
|}|j|| | jd|j  |j	  d S )NrP   Fzoptional_float: 0.0
)r/   
DESCRIPTORfields_by_namerP   r   
TextWriterZ
PrintFieldr   getvalueclose_Printer)r   r6   r7   fieldvalueoutprinterr   r   r   testPrintField  s    


zTextFormatTest.testPrintFieldc             C   s   |j  }|jjd }|j}tjd}tj||| | jd|j  |j	  tjd}tj
|}|j|| | jd|j  |j	  d S )NrP   Fz0.0)r/   rV   rW   rP   r   rX   ZPrintFieldValuer   rY   rZ   r[   )r   r6   r7   r\   r]   r^   r_   r   r   r   testPrintFieldValue  s    


z"TextFormatTest.testPrintFieldValuec             C   sT   |j  }tj| tj|}|j  }tj|| | j|| |tkrPtj| | d S )N)	r/   r
   SetAllFieldsr   r5   rI   r   r   ExpectAllFieldsSet)r   r6   r7   
ascii_textrK   r   r   r   testParseAllFields"  s    

z!TextFormatTest.testParseAllFieldsc             C   s   |j  }tj| tj|}|jd}|j  }tj|| | j|| |tkrZtj	| | |j
  tj|| | j|| |tkrtj	| | tjr|j  }d}tj|| | j|jd |j
  tj|| | j|jd d S )Nzutf-8u   optional_string: "café"u   café)r/   r
   rb   r   r5   encoderI   r   r   rc   ClearMerger:   ZPY2rE   )r   r6   r7   rd   rK   Zmsg2r$   r   r   r   testParseAndMergeUtf8-  s,    


z$TextFormatTest.testParseAndMergeUtf8c             C   s   |j  }d}tj|| | 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  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: "Ã¼"
l            r   l    gw/^@gtQFքDr   g6<   z 
	\'"Zfoocorgegraultu   üꜟ   ürC   l         )r/   r   rI   r   r0   r2   r3   r4   )r   r6   r7   r$   r   r   r   testParseExoticH  s    zTextFormatTest.testParseExoticc             C   sv   |j  }d}tj|| | jd|jd  | jd|jd  | jd|jd  | jd|jd  | jd	|jd  d S )
Nzorepeated_int64: 100;
repeated_int64: 200;
repeated_int64: 300,
repeated_string: "one",
repeated_string: "two";
d   r      r   i,  rj   onetwo)r/   r   rI   r   r0   r4   )r   r6   r7   r$   r   r   r   testParseTrailingCommasa  s    z&TextFormatTest.testParseTrailingCommasc             C   sv   |j  }d}tj|| | jd|jd  | jd|jd  | jd|jd  | jd|jd  | jd	|jd  d S )
NzRrepeated_int64: [100, 200];
repeated_int64: 300,
repeated_string: ["one", "two"];
rm   r   rn   r   i,  rj   ro   rp   )r/   r   rI   r   r0   r4   )r   r6   r7   r$   r   r   r   "testParseRepeatedScalarShortFormatp  s    z1TextFormatTest.testParseRepeatedScalarShortFormatc             C   sl   |j  }d}tj|| | jd|jd j | jd|jd j | jd|jd j | jd|jd	 j d S )
Nzyrepeated_nested_message: [{bb: 100}, {bb: 200}],
repeated_nested_message: {bb: 300}
repeated_nested_message [{bb: 400}];
rm   r   rn   r   i,  rj   i  rC   )r/   r   rI   r   r>   r@   )r   r6   r7   r$   r   r   r   #testParseRepeatedMessageShortFormat}  s    z2TextFormatTest.testParseRepeatedMessageShortFormatc             C   s,   |j  }d}tj|| | j|j  | d S )Nr"   )r/   r   rI   r   )r   r6   r7   r$   r   r   r   testParseEmptyText  s    z!TextFormatTest.testParseEmptyTextc          
   C   sX   |j  }d}| jtj}tj|| W d Q R X | j|jj d | j|jj d d S )Nzrepeated_string: "\xc3\xc3"r      )	r/   assertRaisesr   
ParseErrorrI   r   	exceptionZGetLineZ	GetColumn)r   r6   r7   r$   er   r   r   testParseInvalidUtf8  s    z#TextFormatTest.testParseInvalidUtf8c             C   s(   |j  }d}tj| tjdtj|| d S )Nfooz?1:1 : Message type "\w+.TestAllTypes" has no field named "foo".)r/   r:   assertRaisesRegexr   rw   rI   )r   r6   r7   r$   r   r   r   testParseSingleWord  s
    
z"TextFormatTest.testParseSingleWordc             C   s(   |j  }d}tj| tjdtj|| d S )Nzunknown_field: 8
zI1:1 : Message type "\w+.TestAllTypes" has no field named "unknown_field".)r/   r:   r|   r   rw   rI   )r   r6   r7   r$   r   r   r   testParseUnknownField  s
    
z$TextFormatTest.testParseUnknownFieldc             C   s(   |j  }d}tj| tjdtj|| d S )Nzoptional_nested_enum: BARRzG1:23 : Enum type "\w+.TestAllTypes.NestedEnum" has no value named BARR.)r/   r:   r|   r   rw   rI   )r   r6   r7   r$   r   r   r   testParseBadEnumValue  s    
z$TextFormatTest.testParseBadEnumValuec             C   s(   |j  }d}tj| tjdtj|| d S )Nzoptional_int32: borkz#1:17 : Couldn't parse integer: bork)r/   r:   r|   r   rw   rI   )r   r6   r7   r$   r   r   r   testParseBadIntValue  s
    
z#TextFormatTest.testParseBadIntValuec             C   s   |j  }d}tj|| d}| jd|jd  | j|d | d |jd  | j|d | d	 |jd
  | j|| d | | d |jd  | j|| d | | d	 |jd  | j|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   brj   rC      Zx20   )r/   r   rI   r   r4   )r   r6   r7   r$   SLASHr   r   r   testParseStringFieldUnescape  s    z+TextFormatTest.testParseStringFieldUnescapec             C   s6   |j  }d}tj||}| j|| | jd|j d S )Nz%optional_int32: 42 optional_int32: 67C   )r/   r   rh   rJ   r   optional_int32)r   r6   r7   r$   rL   r   r   r   testMergeDuplicateScalars  s
    z(TextFormatTest.testMergeDuplicateScalarsc             C   s:   |j  }d}tj||}| j||k | jd|jj d S )NzCoptional_nested_message { bb: 1 } optional_nested_message { bb: 2 }rj   )r/   r   rh   
assertTruer   optional_nested_messager@   )r   r6   r7   r$   rL   r   r   r   &testMergeDuplicateNestedMessageScalars  s
    z5TextFormatTest.testMergeDuplicateNestedMessageScalarsc             C   s>   |j  }d|_|j  }tjtj|| | jd|jd d S )N   oneof_uint32oneof_field)r/   r   r   rI   r5   r   
WhichOneof)r   r6   mm2r   r   r   testParseOneof  s
    zTextFormatTest.testParseOneofc             C   s8   dj ddg}|j }tj|| | jd|jd d S )N
zoneof_uint32: 11zoneof_string: "foo"Zoneof_stringr   )r#   r/   r   rh   r   r   )r   r6   m_stringr   r   r   r   testMergeMultipleOneof  s    z%TextFormatTest.testMergeMultipleOneofc          
   C   s@   dj ddg}|j }| jtjd tj|| W d Q R X d S )Nr   zoneof_uint32: 11zoneof_string: "foo"z is specified along with field )r#   r/   r|   r   rw   rI   )r   r6   r   r   r   r   r   testParseMultipleOneof  s
    z%TextFormatTest.testParseMultipleOneofN)!r   r   r   r8   r;   rB   rD   rF   rG   rM   rN   rR   rU   r`   ra   re   ri   rl   rq   rr   rs   rt   rz   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r.   e   s<   
!r.   c               @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS ) OnlyWorksWithProto2RightNowTestsc             C   s2   t j }tj| | j| jtj|ddd d S )NT)pointy_bracketsz*text_format_unittest_data_pointy_oneof.txt)r   r/   r
   rb   r%   r-   r   r5   )r   r7   r   r   r   testPrintAllFieldsPointy  s    

z9OnlyWorksWithProto2RightNowTests.testPrintAllFieldsPointyc             C   sR   dj | jd}tj }tj||}| j|| tj }tj| | j	|| d S )Nr   z/text_format_unittest_data_oneof_implemented.txt)
r#   r!   r   r/   r   rI   rJ   r
   rb   r   )r   r&   rK   rL   r7   r   r   r   testParseGolden  s    
z0OnlyWorksWithProto2RightNowTests.testParseGoldenc             C   s.   t j }tj| | j| jtj|d d S )Nz/text_format_unittest_data_oneof_implemented.txt)r   r/   r
   rb   r%   r-   r   r5   )r   r7   r   r   r   testPrintAllFields  s
    
z3OnlyWorksWithProto2RightNowTests.testPrintAllFieldsc             C   sb   t j }d|_d|_d|_d|j_d|j_| j| j	t
j|ddd | j| j	t
j|d	 d S )
NZ115e   o   r   r   T)Zuse_index_orderzWmy_string: "115"
my_int: 101
my_float: 111
optional_nested_message {
  oo: 0
  bb: 1
}
zWmy_int: 101
my_string: "115"
my_float: 111
optional_nested_message {
  bb: 1
  oo: 0
}
)r   ZTestFieldOrderingsZ	my_stringZmy_intZmy_floatr   Zoor@   r'   r-   r   r5   )r   r7   r   r   r   testPrintInIndexOrder  s    
z6OnlyWorksWithProto2RightNowTests.testPrintInIndexOrderc             C   sL   | j d}tj }tj||}| j|| tj }tj| | j|| d S )Nz/text_format_unittest_data_oneof_implemented.txt)	r!   r   r/   r   Z
MergeLinesrJ   r
   rb   r   )r   openedrK   rL   r7   r   r   r   testMergeLinesGolden  s    

z5OnlyWorksWithProto2RightNowTests.testMergeLinesGoldenc             C   sL   | j d}tj }tj||}| j|| tj }tj| | j|| d S )Nz/text_format_unittest_data_oneof_implemented.txt)	r!   r   r/   r   Z
ParseLinesrJ   r
   rb   r   )r   r   rK   rL   r7   r   r   r   testParseLinesGolden'  s    

z5OnlyWorksWithProto2RightNowTests.testParseLinesGoldenc             C   s\   t j }d|jd< d|jd< d|jd< d|jd< d|jd< d|jd	 _| j	t
j|d
 d S )Ni  rS   rj   "   !   123abcr   r   aH  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
  }
}
i8il        l     l        l     l        l        )r   TestMapmap_int32_int32map_int64_int64map_uint32_uint32map_uint64_uint64map_string_stringmap_int32_foreign_messagerT   r'   r   r5   )r   r7   r   r   r   testPrintMap1  s    




z-OnlyWorksWithProto2RightNowTests.testPrintMapc             C   s|   t j }x tjdd D ]}d|j|< qW x$ttjdd D ]}d|j|< q>W djdd tjD }| jtj	|| d S )N      Z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   r   stringZascii_uppercaser   reversedr#   r'   r   r5   )r   r7   r   goldenr   r   r   testMapOrderEnforcementY  s    
z8OnlyWorksWithProto2RightNowTests.testMapOrderEnforcementN)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d  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+S ),Proto2Testsc             C   sv   t j }t jj}t jj}d|jj| _d|jj| _| j	t
j|d tj }tj}d|j| _| j	t
j|d d S )N   r{   zmessage_set {
  [protobuf_unittest.TestMessageSetExtension1] {
    i: 23
  }
  [protobuf_unittest.TestMessageSetExtension2] {
    str: "foo"
  }
}
ZbarzF[google.protobuf.internal.TestMessageSetExtension3] {
  text: "bar"
}
)r   TestMessageSetContainerTestMessageSetExtension1message_set_extensionTestMessageSetExtension2message_set
Extensionsir   r'   r   r5   r	   ZTestMessageSetZmessage_set_extension3r$   )r   r7   ext1ext2Zextr   r   r   testPrintMessageSetv  s    	zProto2Tests.testPrintMessageSetc             C   sj   t jd}tj }tjj}tjj}d|jj| _	d|jj| _
t j||dd | j|j d |j  d S )NFr   r{   T)Zuse_field_numberz?1 {
  1545008 {
    15: 23
  }
  1547769 {
    25: "foo"
  }
}
)r   rX   r   r   r   r   r   r   r   r   r   ZPrintMessager'   rY   rZ   )r   r^   r7   r   r   r   r   r    testPrintMessageSetByFieldNumber  s    
z,Proto2Tests.testPrintMessageSetByFieldNumberc             C   sN   t j }t jj}t jj}d|jj| _d|jj| _| j	t
j|ddd d S )Nr   r{   T)r=   zmessage_set { [protobuf_unittest.TestMessageSetExtension1] { i: 23 } [protobuf_unittest.TestMessageSetExtension2] { str: "foo" } })r   r   r   r   r   r   r   r   r   r'   r   r5   )r   r7   r   r   r   r   r   testPrintMessageSetAsOneLine  s    z(Proto2Tests.testPrintMessageSetAsOneLinec             C   s   t j }d}tj|| | jd|jd  | jd|jd  tj }d}tj|| tjj	}tj
j	}| jd|jj| j | jd|jj| j d S )Nz&repeated_uint64: 1
repeated_uint64: 2
r   r   rj   zmessage_set {
  [protobuf_unittest.TestMessageSetExtension1] {
    i: 23
  }
  [protobuf_unittest.TestMessageSetExtension2] {
    str: "foo"
  }
}
r   r{   )r   r/   r   rI   r   r2   r   r   r   r   r   r   r   r   r   )r   r7   r$   r   r   r   r   r   testParseMessageSet  s    zProto2Tests.testParseMessageSetc             C   s>   t j }d}tj||tj d | jtj|tj d| d S )Nzvalue {
  [type.googleapis.com/google.protobuf.internal.TestAny] {
    [google.protobuf.internal.TestAnyExtension1.extension1] {
      i: 10
    }
  }
}
)r   )test_extend_anyTestAnyr   rh   r   Defaultr'   r5   )r   r7   r$   r   r   r   testExtensionInsideAnyMessage  s    z)Proto2Tests.testExtensionInsideAnyMessagec          	   C   s   t j }d}tj||dd | jd|jd  | jd|jd  tj }d}tj||dd tjj	}tj
j	}| jd|jj| j | jd	|jj| j t j }d
}tj| tjdtj|| d}tj| tjdtj||dd d S )Nz34: 1
repeated_uint64: 2
T)Zallow_field_numberr   r   rj   z?1 {
  1545008 {
    15: 23
  }
  1547769 {
    25: "foo"
  }
}
r   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   r/   r   rI   r   r2   r   r   r   r   r   r   r   r   r   r:   r|   rw   )r   r7   r$   r   r   r   r   r   testParseMessageByFieldNumber  s4    
z)Proto2Tests.testParseMessageByFieldNumberc             C   s.   t j }tj| | j| jtj|d d S )Nz(text_format_unittest_extensions_data.txt)r   TestAllExtensionsr
   SetAllExtensionsr%   r-   r   r5   )r   r7   r   r   r   testPrintAllExtensions   s
    
z"Proto2Tests.testPrintAllExtensionsc             C   s2   t j }tj| | j| jtj|ddd d S )NT)r   z/text_format_unittest_extensions_data_pointy.txt)r   r   r
   r   r%   r-   r   r5   )r   r7   r   r   r   testPrintAllExtensionsPointy  s    

z(Proto2Tests.testPrintAllExtensionsPointyc             C   sF   dj | jd}tj }tj|| tj }tj| | j|| d S )Nr   z(text_format_unittest_extensions_data.txt)	r#   r!   r   r   r   rI   r
   r   r   )r   r&   rK   r7   r   r   r   testParseGoldenExtensions  s    
z%Proto2Tests.testParseGoldenExtensionsc             C   s@   t j }tj| tj|}t j }tj|| | j|| d S )N)r   r   r
   r   r   r5   rI   r   )r   r7   rd   rK   r   r   r   testParseAllExtensions  s    

z"Proto2Tests.testParseAllExtensionsc          	   C   sV  t j }d}tj||dd d}| jtj|| t j }d}tj| tjdtj||dd t j }d}tj| tjdtj||dd t j }d	}tj| tjdtj||dd t j }d
}tj| tjdtj||dd t j }d}tj| tjdtj||dd t j }d}tj||dd t j	j
}t jj
}| jd|jj| j | jd|jj| j d S )Nu  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
}
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".zmessage_set {
  [protobuf_unittest.TestMessageSetExtension1] {
    i: 23
  }
  [protobuf_unittest.TestMessageSetExtension2] {
    str: "foo"
  }
}
r   r{   )r   r   r   rI   r'   r5   r:   r|   rw   r   r   r   r   r   r   r   r   )r   r7   r$   r   Z	malformedr   r   r   r   r    testParseAllowedUnknownExtension"  sr    z,Proto2Tests.testParseAllowedUnknownExtensionc          
   C   sF   t j }d}| jtj}tj|| W d Q R X | jt|jd d S )Nz#optional_nested_message { "bb": 1 }z/1:27 : Expected identifier or number, got "bb".)	r   r/   rv   r   rw   rI   r   r   rx   )r   r7   r$   ry   r   r   r   testParseBadIdentifier  s    z"Proto2Tests.testParseBadIdentifierc             C   sH   t j }d}tj| tjdtj|| t j }tj| 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   r:   r|   r   rw   rI   r/   )r   r7   r$   r   r   r   testParseBadExtension  s    

z!Proto2Tests.testParseBadExtensionc             C   s(   t j }d}tj| tjdtj|| d S )Nzoptional_nested_enum: 100zL1:23 : Enum type "\w+.TestAllTypes.NestedEnum" has no value with number 100.)r   r/   r:   r|   r   rw   rI   )r   r7   r$   r   r   r   testParseNumericUnknownEnum  s    
z'Proto2Tests.testParseNumericUnknownEnumc             C   s0   t j }d}tj|| | jd|jt j  d S )Nza[protobuf_unittest.optional_int32_extension]: 42 [protobuf_unittest.optional_int32_extension]: 67r   )r   r   r   rh   r   r   Zoptional_int32_extension)r   r7   r$   r   r   r   "testMergeDuplicateExtensionScalars  s
    z.Proto2Tests.testMergeDuplicateExtensionScalarsc             C   s(   t j }d}tj| tjdtj|| d S )Nza[protobuf_unittest.optional_int32_extension]: 42 [protobuf_unittest.optional_int32_extension]: 67z1:96 : Message type "protobuf_unittest.TestAllExtensions" should not have multiple "protobuf_unittest.optional_int32_extension" extensions.)r   r   r:   r|   r   rw   rI   )r   r7   r$   r   r   r   "testParseDuplicateExtensionScalars  s
    
z.Proto2Tests.testParseDuplicateExtensionScalarsc             C   s(   t j }d}tj| tjdtj|| d S )NzCoptional_nested_message { bb: 1 } optional_nested_message { bb: 2 }zh1:65 : Message type "protobuf_unittest.TestAllTypes.NestedMessage" should not have multiple "bb" fields.)r   r/   r:   r|   r   rw   rI   )r   r7   r$   r   r   r   &testParseDuplicateNestedMessageScalars  s    
z2Proto2Tests.testParseDuplicateNestedMessageScalarsc             C   s(   t j }d}tj| tjdtj|| d S )Nz%optional_int32: 42 optional_int32: 67zf1:36 : Message type "protobuf_unittest.TestAllTypes" should not have multiple "optional_int32" fields.)r   r/   r:   r|   r   rw   rI   )r   r7   r$   r   r   r   testParseDuplicateScalars  s    
z%Proto2Tests.testParseDuplicateScalarsc             C   sD   t j }d}tj| tjdtj|| d}tj| tjdtj|| d S )NzRepeatedGroup: <z1:16 : Expected ">".zRepeatedGroup: {z1:16 : Expected "}".)r   r/   r:   r|   r   rw   rI   )r   r7   r$   r   r   r   testParseGroupNotClosed  s    z#Proto2Tests.testParseGroupNotClosedc             C   s\   t j }d}tj|| | j|jd |j  t j }d}tj|| | j|jd d S )NzOptionalGroup: {}ZoptionalgroupzOptionalGroup: <>)r   r/   r   rI   r   ZHasFieldrg   )r   r7   r$   r   r   r   testParseEmptyGroup  s    zProto2Tests.testParseEmptyGroupc             C   s   d}t j }tj|| | 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 S )NaH  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
  }
}
i  rS   rj   r   r   r   r   r   r   i8il        l     l        l     l        l        )r   r   r   rI   r   r   r   r   r   r   r   rT   )r   r$   r7   r   r   r   testParseMap  s    zProto2Tests.testParseMapN)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   t  s*   )
	z
		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S )Proto3Testsc             C   s@   t j }d|_tj }|jj| | jtj	|t
j dd d S )Nr   )r   z[any_value {
  [type.googleapis.com/protobuf_unittest.OneString] {
    data: "string"
  }
}
)r   	OneStringdatar   r   	any_valuePackr   r   r5   r   r   )r   packed_messager7   r   r   r   testPrintMessageExpandAny  s    
z%Proto3Tests.testPrintMessageExpandAnyc             C   sR   t j }tj }d|_|jj j| d|_|jj j| | jt	j
|d d S )Nstring0string1zrepeated_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_valuer?   r   r   r   r5   )r   r   r7   r   r   r   !testPrintMessageExpandAnyRepeated(  s    z-Proto3Tests.testPrintMessageExpandAnyRepeatedc             C   sD   t j }d|_tj }|jj| tj }| j	t
j||dd d S )Nr   )r   zdany_value {
  type_url: "type.googleapis.com/protobuf_unittest.OneString"
  value: "\n\006string"
}
)r   r   r   r   r   r   r   r   DescriptorPoolr   r   r5   )r   r   r7   
empty_poolr   r   r   2testPrintMessageExpandAnyDescriptorPoolMissingType<  s    z>Proto3Tests.testPrintMessageExpandAnyDescriptorPoolMissingTypec             C   s<   t j }d|_tj }|jj| | jtj	|ddd d S )Nr   T)r   z[any_value <
  [type.googleapis.com/protobuf_unittest.OneString] <
    data: "string"
  >
>
)
r   r   r   r   r   r   r   r   r   r5   )r   r   r7   r   r   r   'testPrintMessageExpandAnyPointyBracketsI  s    z3Proto3Tests.testPrintMessageExpandAnyPointyBracketsc             C   s<   t j }d|_tj }|jj| | jtj	|ddd d S )Nr   T)r=   zRany_value { [type.googleapis.com/protobuf_unittest.OneString] { data: "string" } })
r   r   r   r   r   r   r   r   r   r5   )r   r   r7   r   r   r   "testPrintMessageExpandAnyAsOneLineW  s    z.Proto3Tests.testPrintMessageExpandAnyAsOneLinec             C   sD   t j }d|_tj }|jj| | jtj	|ddt
j dd d S )Nr   T)r=   r   r   zRany_value < [type.googleapis.com/protobuf_unittest.OneString] < data: "string" > >)r   r   r   r   r   r   r   r   r   r5   r   r   )r   r   r7   r   r   r   0testPrintMessageExpandAnyAsOneLinePointyBracketsd  s    
z<Proto3Tests.testPrintMessageExpandAnyAsOneLinePointyBracketsc             C   s>   t j }t j }d|_tj|}tj|| | jd|j d S )Ni  )r   r/   Zoptional_nested_enumr   r5   rI   r   )r   r7   Zmessage2Ztext_stringr   r   r   testUnknownEnumss  s    
zProto3Tests.testUnknownEnumsc             C   st   t j }d}tj|| tj }|jj| | jd|j	 |j
  tj|| tj }|jj| | jd|j	 d S )Nz[any_value {
  [type.googleapis.com/protobuf_unittest.OneString] {
    data: "string"
  }
}
r   )r   r   r   rh   r   r   r   Unpackr   r   rg   rI   )r   r7   r$   r   r   r   r   testMergeExpandedAny{  s    z Proto3Tests.testMergeExpandedAnyc             C   s`   t j }d}tj|| tj }|jd j| | jd|j	 |jd j| | jd|j	 d S )Nzrepeated_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   r   r   rh   r   r   r   r   r   r   )r   r7   r$   r   r   r   r   testMergeExpandedAnyRepeated  s    
z(Proto3Tests.testMergeExpandedAnyRepeatedc             C   s>   t j }d}tj|| tj }|jj| | jd|j	 d S )Nz[any_value {
  [type.googleapis.com/protobuf_unittest.OneString] <
    data: "string"
  >
}
r   )
r   r   r   rh   r   r   r   r   r   r   )r   r7   r$   r   r   r   r   "testMergeExpandedAnyPointyBrackets  s    z.Proto3Tests.testMergeExpandedAnyPointyBracketsc             C   s4   t j }d}tj|| tj }| j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   rh   r   r   r   r   Ztype_url)r   r7   r$   r   r   r   r   testMergeAlternativeUrl  s    z#Proto3Tests.testMergeAlternativeUrlc             C   sR   t j }d}| jtj}tj }tj|||d W d Q R X | jt	|j
d d S )Nz[any_value {
  [type.googleapis.com/protobuf_unittest.OneString] {
    data: "string"
  }
}
)r   z=Type protobuf_unittest.OneString not found in descriptor pool)r   r   rv   r   rw   r   r   rh   r   r   rx   )r   r7   r$   ry   r   r   r   r   -testMergeExpandedAnyDescriptorPoolMissingType  s    z9Proto3Tests.testMergeExpandedAnyDescriptorPoolMissingTypec             C   s>   d}t j }tj|| tj }|jj| | jd|j	 d S )Nzdany_value {
  type_url: "type.googleapis.com/protobuf_unittest.OneString"
  value: "\n\006string"
}
r   )
r   r   r   rh   r   r   r   r   r   r   )r   r$   r7   r   r   r   r   testMergeUnexpandedAny  s    z"Proto3Tests.testMergeUnexpandedAnyc          
   C   sF   t j }d}| jtj}tj|| W d Q R X | jt|jd d S )NzUany_value {
  [type.googleapis.com/protobuf_unittest.OneString] {
    data: "string"
z3:11 : Expected "}".)	r   r   rv   r   rw   rh   r   r   rx   )r   r7   r$   ry   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     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d Zdd Zdd Zdd ZdS )TokenizerTestc          T   C   s  d}t j|j }|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d3f|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d4f|jdfd|jd5f|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d/fd|jtd0fgR}d1}x|j	 s|| }t
|trN|j}| j|| |j  nNt
|d2 trtj|d2 r| jtj|d1   n| j|d2 |d1   |d27 }qW d S )6Na  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identifier2rS   Zidentifier3r   ZidentifiER_4g     [@ZID5gq=
ףp?ZID6z	aaaa'bbbbZID7zaa"bbZID8{AinfBCTDF}ZID9   ZID10l   q{UZID11ZID12l   c/Y-v ZID13g82?ZID14g      ^@Z
false_boolZ	true_BOOLZ
true_bool1Zfalse_BOOL1Z
False_boolZ	True_boolXYz-infZnanr   r   gq=
ףpͿlq{Ui)r   	Tokenizer
splitlinesConsumeIdentifierZConsumeStringConsumeIntegerConsumeFloatfloatConsumeBoolAtEnd
isinstancer   tokenr   	NextTokenmathZisnanr   )r   r$   	tokenizermethodsr   r   r  r   r   r   testSimpleTokenCases  s    



























 z"TokenizerTest.testSimpleTokenCasesc          
   C   s  d}d}d|d |d f }t j|j }| jd|j  | j|d |j  | j|d |j  | j|j  d}t j|j }| jd|j  | jd|j  | jd|j  | jd|j  | jt j	 |j  W d Q R X | jd	|j
  | j|j  d S )Nr   ?       z-1 %d %dz
-0 0 0 1.2r   TFg333333?l            l    l        l    )r   r  r  r   r  r   r  ZTryConsumeIntegerrv   rw   r	  )r   	int64_max
uint32_maxr$   r  r   r   r   testConsumeAbstractIntegers)  s$    z)TokenizerTest.testConsumeAbstractIntegersc             C   s<  d}d
}d|d |d f }t j|j }| jt jt j| | jt jt j| | jdt j| | jt jt j| | jt jt j| | j|d t j	| | jt jt j	| | j|d t j| | j
|j  d}t j|j }| jdt j| | jdt j| | jdt j| | jdt j| | j
|j  d S )Nr   r  r  z-1 %d %dz	-0 -0 0 0r   l            l    l        l    r  )r   r  r  rv   rw   Z_ConsumeUint32Z_ConsumeUint64r   Z_ConsumeInt32Z_ConsumeInt64r   r  )r   r  r  r$   r  r   r   r   testConsumeIntegersB  s2    




z!TokenizerTest.testConsumeIntegersc             C   s   d}t j|j }| jt j|j d}t j|j }| jt j|j d}t j|j }| jt j|j d}t j|j }| jt j|j d}t j|j }| jt j|j d S )Nz	"string1'zstring1"z
"\xt"z
"\"z
"\x")r   r  r  rv   rw   ZConsumeByteString)r   r$   r  r   r   r   testConsumeByteStringb  s    z#TokenizerTest.testConsumeByteStringc             C   s&   d}t j|j }| jt j|j d S )Nz
not-a-bool)r   r  r  rv   rw   r  )r   r$   r  r   r   r   testConsumeBoolw  s    zTokenizerTest.testConsumeBoolc             C   s0   t jdj }| j|j  | jt j|j d S )Nz# some comment)r   r  r  r   r  rv   rw   ConsumeComment)r   r  r   r   r   testSkipComment|  s    zTokenizerTest.testSkipCommentc             C   sB   t jdj dd}| j|j  | jd|j  | j|j  d S )Nz# some commentF)skip_comments)r   r  r  assertFalser  r   r  r   )r   r  r   r   r   testConsumeComment  s
    
z TokenizerTest.testConsumeCommentc             C   sV   d}t j|j dd}| jd|j  | j|j  | jd|j  | j|j  d S )Nz # some comment
# another commentF)r  z# some commentz# another comment)r   r  r  r   r  r   r  r   )r   r$   r  r   r   r   testConsumeTwoComments  s    z$TokenizerTest.testConsumeTwoCommentsc             C   s   d}t j|j dd}| jt j|j | jd|j  | j|jd |j	  | jt j|j | jd|j
  | j|j  | jd|j  | j|j  d S )Nzsome_number: 4
# some commentF)r  some_numberr   r   z# some comment)r   r  r  rv   rw   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j dd}| j|j  | jd|j  | j|j  d S )N# some commentF)r  )Fr%  )r   r  r  r   r  r   ConsumeCommentOrTrailingCommentr   )r   r  r   r   r   testConsumeLineComment  s    

z$TokenizerTest.testConsumeLineCommentc             C   sV   d}t j|j dd}| jd|j  | j|j  | jd|j  | j|j  d S )Nz # some comment
# another commentF)r  # some comment# another comment)Fr(  )Fr)  )r   r  r  r   r&  r   r  r   )r   r$   r  r   r   r   testConsumeTwoLineComments  s    

z(TokenizerTest.testConsumeTwoLineCommentsc             C   s   d}t j|j dd}| jt j|j | jd|j  | j|jd |j	  | jt j|j | jd|j
  | j|j  | jd	|j  | j|j  d S )
Nzsome_number: 4  # some commentF)r  r#  r   r   T# some comment)Tr+  )r   r  r  rv   rw   r&  r   r  r  r  r  r   r  r   )r   r$   r  r   r   r   "testConsumeAndCheckTrailingComment  s    
z0TokenizerTest.testConsumeAndCheckTrailingCommentc             C   sn   d}t j|j dd}| jd|j  | j|jd |j  | jd|j  | jd	|j  | j	|j
  d S )
Nz2some_number: 4  # some comment # not a new commentF)r  r#  r   r   T"# some comment # not a new comment)Tr-  )r   r  r  r   r  r  r  r  r&  r   r  )r   r$   r  r   r   r   testHashinComment  s    
zTokenizerTest.testHashinCommentN)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  }|jj }d|_| jtj|d|dd d S )Nc             S   s
   ~ ~~d S )Nr   )r7   indentr=   r   r   r   r_     s    z9PrettyPrinterTest.testPrettyPrintNoMatch.<locals>.printerr<   T)r=   message_formatterz"repeated_nested_message { bb: 42 })r/   r>   r?   r@   r'   r   r5   )r   r6   r_   r7   rA   r   r   r   testPrettyPrintNoMatch  s    

z(PrettyPrinterTest.testPrettyPrintNoMatchc                s@    fdd} j  }|jj }d|_| j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)rV   r/   NestedMessager@   )r   r0  r=   )r6   r   r   r_     s    z9PrettyPrinterTest.testPrettyPrintOneLine.<locals>.printerr<   T)r=   r1  z1repeated_nested_message { My lucky number is 42 })r/   r>   r?   r@   r'   r   r5   )r   r6   r_   r7   rA   r   )r6   r   testPrettyPrintOneLine  s    

z(PrettyPrinterTest.testPrettyPrintOneLinec                sX    fdd} j  }|jj }d|_| jtj|d|dd | j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 )N r   zMy lucky number is:%s%s)rV   r/   r3  r@   )r   r0  r=   Zline_deliminator)r6   r   r   r_     s    z;PrettyPrinterTest.testPrettyPrintMultiLine.<locals>.printerr<   T)r=   r1  z2repeated_nested_message { My lucky number is: 42 }Fz7repeated_nested_message {
  My lucky number is:
  42
}
)r/   r>   r?   r@   r'   r   r5   )r   r6   r_   r7   rA   r   )r6   r   testPrettyPrintMultiLine  s    


z*PrettyPrinterTest.testPrettyPrintMultiLinec                sH    fdd} j  }| jtj|d|dd | jtj|d|dd d S )Nc                s   ~~| j  jj krdS d S )NzThe is the message!)rV   r/   )r   r0  r=   )r6   r   r   r_     s    z?PrettyPrinterTest.testPrettyPrintEntireMessage.<locals>.printerF)r=   r1  zThe is the message!
TzThe is the message!)r/   r'   r   r5   )r   r6   r_   r7   r   )r6   r   testPrettyPrintEntireMessage  s    

z.PrettyPrinterTest.testPrettyPrintEntireMessagec                sb    fdd} j  }d|_|jj }d|_|jj }d|_|j}d|_| j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)rV   r/   r3  r@   )r   r0  r=   )r6   r   r   r_     s    
z?PrettyPrinterTest.testPrettyPrintMultipleParts.<locals>.printer=   r<   c   r   T)r=   r1  zoptional_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 })	r/   r   r>   r?   r@   r   r'   r   r5   )r   r6   r_   r7   rA   r   )r6   r   testPrettyPrintMultipleParts  s    


z.PrettyPrinterTest.testPrettyPrintMultiplePartsN)r   r   r   r2  r4  r6  r7  r:  r   r   r   r   r/    s
   r/  __main__)#__doc__
__author__r  r)   r:   r   Z	unittest2ZunittestImportErrorZgoogle.protobuf.internalr   Zgoogle.protobufr   r   r   r   r   r   r   r	   r
   r   r   ZTestCaser   r   Z
Parametersr.   r   r   r   r   r/  r   mainr   r   r   r   <module>!   sT          ' C w]
