3 SÉLj¶þã @s˜dZdZddlZddlZddlZddlZy ddlZWnek rPddlZYnXddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZdd l mZddl m Zdd l mZdd l mZdd l mZddl mZGdd„dejƒZGdd„dejƒZe jeeƒGdd„deƒƒZGdd„deƒZGdd„deƒZGdd„dejƒZGdd„dejƒZe jeeƒGdd„deƒƒZ e!dk�r”ej"ƒdS) 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@seZdZdd„ZdS)ÚSimpleTextFormatTestscCs$xtjD]}|jdt|ƒƒqWdS)Né)r Z_QUOTESÚ assertEqualÚlen)ÚselfZquote©rú&/usr/lib/python3.6/text_format_test.pyÚtestQuoteMarksAreSingleCharsFs z2SimpleTextFormatTests.testQuoteMarksAreSingleCharsN)Ú__name__Ú __module__Ú __qualname__rrrrrr @sr c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚTextFormatBasec Cs4tj|ƒ� }ttkr|jƒSdd„|DƒSQRXdS)NcSsg|]}|jdƒ‘qS)zutf-8)Údecode)Ú.0Z golden_linerrrú Qsz-TextFormatBase.ReadGolden..)r Z GoldenFileÚstrÚbytesÚ readlines)rÚgolden_filenameÚfrrrÚ ReadGoldenNs zTextFormatBase.ReadGoldencCs |j|ƒ}|j|dj|ƒƒdS)NÚ)r!ZassertMultiLineEqualÚjoin)rÚtextrZ golden_linesrrrÚCompareToGoldenFileSs z"TextFormatBase.CompareToGoldenFilecCs|j||ƒdS)N)r)rr$Ú golden_textrrrÚCompareToGoldenTextWsz"TextFormatBase.CompareToGoldenTextcCs>|jddƒjddƒjddƒjddƒ}tjdtjƒjd|ƒ}|S)Nze+0ze+ze-0ze-z\.0$r")ÚreplaceÚreÚcompileÚ MULTILINEÚsub)rr$rrrÚRemoveRedundantZerosZsz#TextFormatBase.RemoveRedundantZerosN)rrrr!r%r'r-rrrrrLsrc@süeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Z d=S)>ÚTextFormatTestcCsx|jƒ}|jjd ƒ|jjdƒ|jjdƒ|jjdƒ|jjdƒ|jjdƒ|jjdƒ|j|jtj |ƒƒdƒdS) Nllÿÿÿÿgw¾Ÿ/Ý^@gÆtþQFÖ„DgŽ‹‚°6.UnicodeSubN)rrrrrrrÚ UnicodeSub~sr9uüꜟz(repeated_string: "\303\274\352\234\237" )ÚsixZ text_typer/r4r1r'r r5)rr6r9r7rrrÚtestPrintExoticUnicodeSubclass|s z-TextFormatTest.testPrintExoticUnicodeSubclasscCs2|jƒ}|jjƒ}d|_|jtj|dd�dƒdS)Né*T)Ú as_one_linez"repeated_nested_message { bb: 42 })r/Úrepeated_nested_messageÚaddÚbbr'r r5)rr6r7ÚmsgrrrÚtestPrintNestedMessageAsOneLine‡s   z.TextFormatTest.testPrintNestedMessageAsOneLinecCs^|jƒ}|jjdƒ|jjdƒ|jjdƒ|jjdƒ|jjdƒ|jtj|dd�dƒdS)NréZGoogleZZurichT)r=zirepeated_int32: 1 repeated_int32: 1 repeated_int32: 3 repeated_string: "Google" repeated_string: "Zurich")r/Zrepeated_int32r1r4r'r r5)rr6r7rrrÚ testPrintRepeatedFieldsAsOneLine�s      z/TextFormatTest.testPrintRepeatedFieldsAsOneLinecCs(|jƒ}d|_|jtj|dd�dƒdS)Nz a new lineT)r=zoptional_string: "a\nnew\nline")r/Úoptional_stringr'r r5)rr6r7rrrÚ'testPrintNestedNewLineInStringAsOneLine›s  z6TextFormatTest.testPrintNestedNewLineInStringAsOneLinecCs||jƒ}|jjd ƒ|jjdƒ|jjdƒ|jjdƒ|jjdƒ|jjdƒ|jjdƒ|j|jtj |dd �ƒd ƒdS) Nllÿÿÿÿgw¾Ÿ/Ý^@gÆtþQFÖ„DgŽ‹‚°6i gâ¹­ã®?zoptional_float: 1.25z%optional_double: -3.45678901234568e-6zrepeated_float: -5642zrepeated_double: 7.89e-5z.15g)Ú float_formatz&payload {{ {0} {1} {2} {3} }} T)r=rOzpayload {{ {0} {1} {2} {3} }}g÷/_Ûeÿ̾iöéÿÿ) ZNestedTestAllTypesZpayloadÚoptional_floatZoptional_doubleZrepeated_floatr1r3r r5r'r-Úformat)rr6r7Zformatted_fieldsZ text_messagerrrÚtestPrintFloatFormatÞs&z#TextFormatTest.testPrintFloatFormatcCs"|jƒ}d|_|jdt|ƒƒdS)Né{zc: 123 )ZForeignMessageÚcrr)rr6r7rrrÚtestMessageToStringÿsz"TextFormatTest.testMessageToStringcCs†|jƒ}|jjd}|j}tjdƒ}tj|||ƒ|jd|jƒƒ|j ƒtjdƒ}tj |ƒ}|j||ƒ|jd|jƒƒ|j ƒdS)NrPFzoptional_float: 0.0 ) r/Ú DESCRIPTORÚfields_by_namerPr Ú TextWriterZ PrintFieldrÚgetvalueÚcloseÚ_Printer)rr6r7ÚfieldÚvalueÚoutÚprinterrrrÚtestPrintFields     zTextFormatTest.testPrintFieldcCs†|jƒ}|jjd}|j}tjdƒ}tj|||ƒ|jd|jƒƒ|j ƒtjdƒ}tj |ƒ}|j||ƒ|jd|jƒƒ|j ƒdS)NrPFz0.0) r/rVrWrPr rXZPrintFieldValuerrYrZr[)rr6r7r\r]r^r_rrrÚtestPrintFieldValues     z"TextFormatTest.testPrintFieldValuecCsT|jƒ}tj|ƒtj|ƒ}|jƒ}tj||ƒ|j||ƒ|tkrPtj||ƒdS)N) r/r Ú SetAllFieldsr r5rIrrÚExpectAllFieldsSet)rr6r7Ú ascii_textrKrrrÚtestParseAllFields"s    z!TextFormatTest.testParseAllFieldscCsà|jƒ}tj|ƒtj|ƒ}|jdƒ}|jƒ}tj||ƒ|j||ƒ|tkrZtj ||ƒ|j ƒtj ||ƒ|j||ƒ|tkrŽtj ||ƒt j rÜ|jƒ}d}tj ||ƒ|j|jdƒ|j ƒtj||ƒ|j|jdƒdS)Nzutf-8uoptional_string: "café"ucafé)r/r rbr r5ÚencoderIrrrcÚClearÚMerger:ZPY2rE)rr6r7rdrKZmsg2r$rrrÚtestParseAndMergeUtf8-s,           z$TextFormatTest.testParseAndMergeUtf8cCs¾|jƒ}d}tj||ƒ|jd|jdƒ|jd|jdƒ|jd|jdƒ|jd|jdƒ|jd|jd ƒ|jd |jdƒ|jd |jdƒ|jd |jd ƒ|jd |jdƒdS)NuUrepeated_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: "ü" lrlÿÿÿÿgw¾Ÿ/Ý^@gÆtþQFÖ„DrgŽ‹‚°6<éz  \'"ZfoocorgegraultuüꜟõürClûÿÿÿ)r/r rIrr0r2r3r4)rr6r7r$rrrÚtestParseExoticHs zTextFormatTest.testParseExoticcCsv|jƒ}d}tj||ƒ|jd|jdƒ|jd|jdƒ|jd|jdƒ|jd|jdƒ|jd |jdƒdS) Nzorepeated_int64: 100; repeated_int64: 200; repeated_int64: 300, repeated_string: "one", repeated_string: "two"; édréÈri,rjÚoneÚtwo)r/r rIrr0r4)rr6r7r$rrrÚtestParseTrailingCommasas z&TextFormatTest.testParseTrailingCommascCsv|jƒ}d}tj||ƒ|jd|jdƒ|jd|jdƒ|jd|jdƒ|jd|jdƒ|jd |jdƒdS) NzRrepeated_int64: [100, 200]; repeated_int64: 300, repeated_string: ["one", "two"]; rmrrnri,rjrorp)r/r rIrr0r4)rr6r7r$rrrÚ"testParseRepeatedScalarShortFormatps z1TextFormatTest.testParseRepeatedScalarShortFormatcCsl|jƒ}d}tj||ƒ|jd|jdjƒ|jd|jdjƒ|jd|jdjƒ|jd|jd jƒdS) Nzyrepeated_nested_message: [{bb: 100}, {bb: 200}], repeated_nested_message: {bb: 300} repeated_nested_message [{bb: 400}]; rmrrnri,rji�rC)r/r rIrr>r@)rr6r7r$rrrÚ#testParseRepeatedMessageShortFormat}s z2TextFormatTest.testParseRepeatedMessageShortFormatcCs,|jƒ}d}tj||ƒ|j|jƒ|ƒdS)Nr")r/r rIr)rr6r7r$rrrÚtestParseEmptyText‰s z!TextFormatTest.testParseEmptyTextc CsX|jƒ}d}|jtjƒ�}tj||ƒWdQRX|j|jjƒdƒ|j|jjƒdƒdS)Nzrepeated_string: "\xc3\xc3"ré) r/Ú assertRaisesr Ú ParseErrorrIrÚ exceptionZGetLineZ GetColumn)rr6r7r$ÚerrrÚtestParseInvalidUtf8�s z#TextFormatTest.testParseInvalidUtf8cCs(|jƒ}d}tj|tjdtj||ƒdS)NÚfooz?1:1 : Message type "\w+.TestAllTypes" has no field named "foo".)r/r:ÚassertRaisesRegexr rwrI)rr6r7r$rrrÚtestParseSingleWord—s  z"TextFormatTest.testParseSingleWordcCs(|jƒ}d}tj|tjdtj||ƒdS)Nzunknown_field: 8 zI1:1 : Message type "\w+.TestAllTypes" has no field named "unknown_field".)r/r:r|r rwrI)rr6r7r$rrrÚtestParseUnknownFieldžs  z$TextFormatTest.testParseUnknownFieldcCs(|jƒ}d}tj|tjdtj||ƒdS)Nzoptional_nested_enum: BARRzG1:23 : Enum type "\w+.TestAllTypes.NestedEnum" has no value named BARR.)r/r:r|r rwrI)rr6r7r$rrrÚtestParseBadEnumValue¥s  z$TextFormatTest.testParseBadEnumValuecCs(|jƒ}d}tj|tjdtj||ƒdS)Nzoptional_int32: borkz#1:17 : Couldn't parse integer: bork)r/r:r|r rwrI)rr6r7r$rrrÚtestParseBadIntValue­s  z#TextFormatTest.testParseBadIntValuecCsÐ|jƒ}d}tj||ƒd}|jd|jdƒ|j|d|d|jdƒ|j|d|d |jd ƒ|j||d||d|jd ƒ|j||d||d |jd ƒ|j|d |jdƒdS)Narepeated_string: "\xf\x62" repeated_string: "\\xf\\x62" repeated_string: "\\\xf\\\x62" repeated_string: "\\\\xf\\\\x62" repeated_string: "\\\\\xf\\\\\x62" repeated_string: "\x5cx20"ú\zbrZxfZx62rúÚbrjrCéZx20é)r/r rIrr4)rr6r7r$ÚSLASHrrrÚtestParseStringFieldUnescape´s   z+TextFormatTest.testParseStringFieldUnescapecCs6|jƒ}d}tj||ƒ}|j||ƒ|jd|jƒdS)Nz%optional_int32: 42 optional_int32: 67éC)r/r rhrJrÚoptional_int32)rr6r7r$rLrrrÚtestMergeDuplicateScalarsÉs   z(TextFormatTest.testMergeDuplicateScalarscCs:|jƒ}d}tj||ƒ}|j||kƒ|jd|jjƒdS)NzCoptional_nested_message { bb: 1 } optional_nested_message { bb: 2 }rj)r/r rhÚ assertTruerÚoptional_nested_messager@)rr6r7r$rLrrrÚ&testMergeDuplicateNestedMessageScalarsÐs  z5TextFormatTest.testMergeDuplicateNestedMessageScalarscCs>|jƒ}d|_|jƒ}tjtj|ƒ|ƒ|jd|jdƒƒdS)Né Ú oneof_uint32Ú oneof_field)r/r�r rIr5rÚ WhichOneof)rr6ÚmÚm2rrrÚtestParseOneofØs zTextFormatTest.testParseOneofcCs8djddgƒ}|jƒ}tj||ƒ|jd|jdƒƒdS)NÚ zoneof_uint32: 11zoneof_string: "foo"Z oneof_stringr�)r#r/r rhrr‘)rr6Úm_stringr“rrrÚtestMergeMultipleOneofßs z%TextFormatTest.testMergeMultipleOneofc Cs@djddgƒ}|jƒ}|jtjdƒ�tj||ƒWdQRXdS)Nr•zoneof_uint32: 11zoneof_string: "foo"z is specified along with field )r#r/ZassertRaisesRegexpr rwrI)rr6r–r“rrrÚtestParseMultipleOneofås z%TextFormatTest.testParseMultipleOneofN)!rrrr8r;rBrDrFrGrMrNrRrUr`rarerirlrqrrrsrtrzr}r~rr€r‡rŠr�r”r—r˜rrrrr.es<   !   r.c@sLeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dS)Ú OnlyWorksWithProto2RightNowTestscCs2tjƒ}tj|ƒ|j|jtj|dd�ƒdƒdS)NT)Úpointy_bracketsz*text_format_unittest_data_pointy_oneof.txt)rr/r rbr%r-r r5)rr7rrrÚtestPrintAllFieldsPointyòs   z9OnlyWorksWithProto2RightNowTests.testPrintAllFieldsPointycCsRdj|jdƒƒ}tjƒ}tj||ƒ}|j||ƒtjƒ}tj|ƒ|j ||ƒdS)Nr•z/text_format_unittest_data_oneof_implemented.txt) r#r!rr/r rIrJr rbr)rr&rKrLr7rrrÚtestParseGoldenús   z0OnlyWorksWithProto2RightNowTests.testParseGoldencCs.tjƒ}tj|ƒ|j|jtj|ƒƒdƒdS)Nz/text_format_unittest_data_oneof_implemented.txt)rr/r rbr%r-r r5)rr7rrrÚtestPrintAllFieldss  z3OnlyWorksWithProto2RightNowTests.testPrintAllFieldscCsbtjƒ}d|_d|_d|_d|j_d|j_|j|j t j |dd�ƒdƒ|j|j t j |ƒƒd ƒdS) NZ115éeéorrT)Zuse_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 } ) rZTestFieldOrderingsZ my_stringZmy_intZmy_floatrŒZoor@r'r-r r5)rr7rrrÚtestPrintInIndexOrder s z6OnlyWorksWithProto2RightNowTests.testPrintInIndexOrdercCsL|jdƒ}tjƒ}tj||ƒ}|j||ƒtjƒ}tj|ƒ|j||ƒdS)Nz/text_format_unittest_data_oneof_implemented.txt) r!rr/r Z MergeLinesrJr rbr)rÚopenedrKrLr7rrrÚtestMergeLinesGoldens    z5OnlyWorksWithProto2RightNowTests.testMergeLinesGoldencCsL|jdƒ}tjƒ}tj||ƒ}|j||ƒtjƒ}tj|ƒ|j||ƒdS)Nz/text_format_unittest_data_oneof_implemented.txt) r!rr/r Z ParseLinesrJr rbr)rr¡rKrLr7rrrÚtestParseLinesGolden's    z5OnlyWorksWithProto2RightNowTests.testParseLinesGoldencCs\tjƒ}d |jd <d|jd<d|jd<d|jd<d|jd<d|jd _|j t j |ƒd ƒdS)NiÈrSrjé"é!Ú123Úabcr…rŸaHmap_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 } } i8þÿÿi…ÿÿÿllýÿÿÿllýÿÿÿll) rÚTestMapÚmap_int32_int32Úmap_int64_int64Úmap_uint32_uint32Úmap_uint64_uint64Úmap_string_stringÚmap_int32_foreign_messagerTr'r r5)rr7rrrÚ testPrintMap1s      z-OnlyWorksWithProto2RightNowTests.testPrintMapcCs|tjƒ}x tjdd…D]}d|j|<qWx$ttjdd…ƒD]}d|j|<q>Wdjdd„tjDƒƒ}|jtj |ƒ|ƒdS)Né éZdummyrr"css|]}d|fVqdS)z3map_string_string { key: "%c" value: "dummy" } Nr)rÚletterrrrú _szKOnlyWorksWithProto2RightNowTests.testMapOrderEnforcement..) rr¨ÚstringZascii_uppercaser­Úreversedr#r'r r5)rr7r²ÚgoldenrrrÚtestMapOrderEnforcementYs  z8OnlyWorksWithProto2RightNowTests.testMapOrderEnforcementN) rrrr›rœr�r r¢r£r¯r·rrrrr™ðs   (r™c@s´eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+S),Ú Proto2TestscCsvtjƒ}tjj}tjj}d|jj|_d|jj|_|j t j |ƒdƒt j ƒ}t j}d|j|_|j t j |ƒdƒdS)Nér{z“message_set { [protobuf_unittest.TestMessageSetExtension1] { i: 23 } [protobuf_unittest.TestMessageSetExtension2] { str: "foo" } } ZbarzF[google.protobuf.internal.TestMessageSetExtension3] { text: "bar" } )rÚTestMessageSetContainerÚTestMessageSetExtension1Úmessage_set_extensionÚTestMessageSetExtension2Ú message_setÚ ExtensionsÚirr'r r5r ZTestMessageSetZmessage_set_extension3r$)rr7Úext1Úext2ZextrrrÚtestPrintMessageSetvs  zProto2Tests.testPrintMessageSetcCsjtjdƒ}tjƒ}tjj}tjj}d|jj|_ d|jj|_ tj ||dd�|j |j ƒdƒ|jƒdS)NFr¹r{T)Zuse_field_numberz?1 { 1545008 { 15: 23 } 1547769 { 25: "foo" } } )r rXrrºr»r¼r½r¾r¿rÀrZ PrintMessager'rYrZ)rr^r7rÁrÂrrrÚ testPrintMessageSetByFieldNumber�s z,Proto2Tests.testPrintMessageSetByFieldNumbercCsNtjƒ}tjj}tjj}d|jj|_d|jj|_|j t j |dd�dƒdS)Nr¹r{T)r=z‚message_set { [protobuf_unittest.TestMessageSetExtension1] { i: 23 } [protobuf_unittest.TestMessageSetExtension2] { str: "foo" } }) rrºr»r¼r½r¾r¿rÀrr'r r5)rr7rÁrÂrrrÚtestPrintMessageSetAsOneLine¡s z(Proto2Tests.testPrintMessageSetAsOneLinecCs”tjƒ}d}tj||ƒ|jd|jdƒ|jd|jdƒtjƒ}d}tj||ƒtjj }tj j }|jd|j j |j ƒ|jd|j j |jƒdS)Nz&repeated_uint64: 1 repeated_uint64: 2 rrrjz“message_set { [protobuf_unittest.TestMessageSetExtension1] { i: 23 } [protobuf_unittest.TestMessageSetExtension2] { str: "foo" } } r¹r{)rr/r rIrr2rrºr»r¼r½r¾r¿rÀr)rr7r$rÁrÂrrrÚtestParseMessageSet²s  zProto2Tests.testParseMessageSetcCs>tjƒ}d}tj||tjƒd�|jtj|tjƒd�|ƒdS)Nz™value { [type.googleapis.com/google.protobuf.internal.TestAny] { [google.protobuf.internal.TestAnyExtension1.extension1] { i: 10 } } } )r )Útest_extend_anyÚTestAnyr rhr ÚDefaultr'r5)rr7r$rrrÚtestExtensionInsideAnyMessageÈs z)Proto2Tests.testExtensionInsideAnyMessagec Csàtjƒ}d}tj||dd�|jd|jdƒ|jd|jdƒtjƒ}d}tj||dd�tjj }tj j }|jd|j j |j ƒ|jd |j j |jƒtjƒ}d }tj|tjd tj||ƒd }tj|tjd tj||dd�dS)Nz34: 1 repeated_uint64: 2 T)Zallow_field_numberrrrjz?1 { 1545008 { 15: 23 } 1547769 { 25: "foo" } } r¹r{z34:1 z>1:1 : Message type "\w+.TestAllTypes" has no field named "34".z1234:1 z@1:1 : Message type "\w+.TestAllTypes" has no field named "1234".)rr/r rIrr2rrºr»r¼r½r¾r¿rÀrr:r|rw)rr7r$rÁrÂrrrÚtestParseMessageByFieldNumber×s4  z)Proto2Tests.testParseMessageByFieldNumbercCs.tjƒ}tj|ƒ|j|jtj|ƒƒdƒdS)Nz(text_format_unittest_extensions_data.txt)rÚTestAllExtensionsr ÚSetAllExtensionsr%r-r r5)rr7rrrÚtestPrintAllExtensionss  z"Proto2Tests.testPrintAllExtensionscCs2tjƒ}tj|ƒ|j|jtj|dd�ƒdƒdS)NT)ršz/text_format_unittest_extensions_data_pointy.txt)rrÌr rÍr%r-r r5)rr7rrrÚtestPrintAllExtensionsPointys   z(Proto2Tests.testPrintAllExtensionsPointycCsFdj|jdƒƒ}tjƒ}tj||ƒtjƒ}tj|ƒ|j||ƒdS)Nr•z(text_format_unittest_extensions_data.txt) r#r!rrÌr rIr rÍr)rr&rKr7rrrÚtestParseGoldenExtensionss  z%Proto2Tests.testParseGoldenExtensionscCs@tjƒ}tj|ƒtj|ƒ}tjƒ}tj||ƒ|j||ƒdS)N)rrÌr rÍr r5rIr)rr7rdrKrrrÚtestParseAllExtensionss    z"Proto2Tests.testParseAllExtensionsc CsVtjƒ}d}tj||dd�d}|jtj|ƒ|ƒtjƒ}d}tj|tjdtj||dd�tjƒ}d}tj|tjdtj||dd�tjƒ}d }tj|tjdtj||dd�tjƒ}d }tj|tjd tj||dd�tjƒ}d }tj|tjd tj||dd�tjƒ}d}tj||dd�tj j }tj j }|j d|j j|jƒ|j d|j j|jƒdS)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)Zallow_unknown_extensionzmessage_set { } z3message_set { [unknown_extension] { i: } } zInvalid field value: }zGmessage_set { [unknown_extension] { str: "malformed string } } zInvalid field value: "zSmessage_set { [unknown_extension] { str: "malformed multiline string } } z7message_set { [malformed_extension] < i: -5 } z5:1 : Expected ">".z)message_set { unknown_field: true } zb2:3 : Message type "proto2_wireformat_unittest.TestMessageSet" has no field named "unknown_field".z“message_set { [protobuf_unittest.TestMessageSetExtension1] { i: 23 } [protobuf_unittest.TestMessageSetExtension2] { str: "foo" } } r¹r{)rrºr rIr'r5r:r|rwr»r¼r½rr¾r¿rÀr)rr7r$r¶Z malformedrÁrÂrrrÚ testParseAllowedUnknownExtension"srz,Proto2Tests.testParseAllowedUnknownExtensionc CsFtjƒ}d}|jtjƒ�}tj||ƒWdQRX|jt|jƒdƒdS)Nz#optional_nested_message { "bb": 1 }z/1:27 : Expected identifier or number, got "bb".) rr/rvr rwrIrrrx)rr7r$ryrrrÚtestParseBadIdentifierœs  z"Proto2Tests.testParseBadIdentifiercCsHtjƒ}d}tj|tjdtj||ƒtjƒ}tj|tjdtj||ƒdS)Nz[unknown_extension]: 8 z31:2 : Extension "unknown_extension" not registered.zM1:2 : Message type "protobuf_unittest.TestAllTypes" does not have extensions.)rrÌr:r|r rwrIr/)rr7r$rrrÚtestParseBadExtension¤s   z!Proto2Tests.testParseBadExtensioncCs(tjƒ}d}tj|tjdtj||ƒdS)Nzoptional_nested_enum: 100zL1:23 : Enum type "\w+.TestAllTypes.NestedEnum" has no value with number 100.)rr/r:r|r rwrI)rr7r$rrrÚtestParseNumericUnknownEnum¯s  z'Proto2Tests.testParseNumericUnknownEnumcCs0tjƒ}d}tj||ƒ|jd|jtjƒdS)Nza[protobuf_unittest.optional_int32_extension]: 42 [protobuf_unittest.optional_int32_extension]: 67rˆ)rrÌr rhrr¿Zoptional_int32_extension)rr7r$rrrÚ"testMergeDuplicateExtensionScalars·s  z.Proto2Tests.testMergeDuplicateExtensionScalarscCs(tjƒ}d}tj|tjdtj||ƒdS)Nza[protobuf_unittest.optional_int32_extension]: 42 [protobuf_unittest.optional_int32_extension]: 67z‹1:96 : Message type "protobuf_unittest.TestAllExtensions" should not have multiple "protobuf_unittest.optional_int32_extension" extensions.)rrÌr:r|r rwrI)rr7r$rrrÚ"testParseDuplicateExtensionScalars¿s  z.Proto2Tests.testParseDuplicateExtensionScalarscCs(tjƒ}d}tj|tjdtj||ƒdS)NzCoptional_nested_message { bb: 1 } optional_nested_message { bb: 2 }zh1:65 : Message type "protobuf_unittest.TestAllTypes.NestedMessage" should not have multiple "bb" fields.)rr/r:r|r rwrI)rr7r$rrrÚ&testParseDuplicateNestedMessageScalarsÉs  z2Proto2Tests.testParseDuplicateNestedMessageScalarscCs(tjƒ}d}tj|tjdtj||ƒdS)Nz%optional_int32: 42 optional_int32: 67zf1:36 : Message type "protobuf_unittest.TestAllTypes" should not have multiple "optional_int32" fields.)rr/r:r|r rwrI)rr7r$rrrÚtestParseDuplicateScalarsÒs  z%Proto2Tests.testParseDuplicateScalarscCsDtjƒ}d}tj|tjdtj||ƒd}tj|tjdtj||ƒdS)NzRepeatedGroup: ".zRepeatedGroup: {z1:16 : Expected "}".)rr/r:r|r rwrI)rr7r$rrrÚtestParseGroupNotClosedÚs   z#Proto2Tests.testParseGroupNotClosedcCs\tjƒ}d}tj||ƒ|j|jdƒƒ|jƒtjƒ}d}tj||ƒ|j|jdƒƒdS)NzOptionalGroup: {}Z optionalgroupzOptionalGroup: <>)rr/r rIr‹ZHasFieldrg)rr7r$rrrÚtestParseEmptyGroupãs  zProto2Tests.testParseEmptyGroupcCsŠd}tjƒ}tj||ƒ|jd |jd ƒ|jd|jdƒ|jd|jdƒ|jd|jdƒ|jd|j dƒ|jd |j d j ƒdS)NaHmap_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ÈrSrjr¤r¥r¦r§r…rŸi8þÿÿi…ÿÿÿllýÿÿÿllýÿÿÿll) rr¨r rIrr©rªr«r¬r­r®rT)rr$r7rrrÚ testParseMapòs zProto2Tests.testParseMapN)rrrrÃrÄrÅrÆrÊrËrÎrÏrÐrÑrÒrÓrÔrÕrÖr×rØrÙrÚrÛrÜrrrrr¸ts*)  z    r¸c@s|eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„ZdS)Ú Proto3TestscCs@tjƒ}d|_tjƒ}|jj|ƒ|jtj |t j ƒd�dƒdS)Nr´)r z[any_value { [type.googleapis.com/protobuf_unittest.OneString] { data: "string" } } ) rÚ OneStringÚdatarrÈÚ any_valueÚPackrr r5r rÉ)rÚpacked_messager7rrrÚtestPrintMessageExpandAnys  z%Proto3Tests.testPrintMessageExpandAnycCsRtjƒ}tjƒ}d|_|jjƒj|ƒd|_|jjƒj|ƒ|jt j |ƒdƒdS)NÚstring0Ústring1zÊrepeated_any_value { [type.googleapis.com/protobuf_unittest.OneString] { data: "string0" } } repeated_any_value { [type.googleapis.com/protobuf_unittest.OneString] { data: "string1" } } ) rrÞrrÈrßÚrepeated_any_valuer?rárr r5)rrâr7rrrÚ!testPrintMessageExpandAnyRepeated(sz-Proto3Tests.testPrintMessageExpandAnyRepeatedcCsDtjƒ}d|_tjƒ}|jj|ƒtjƒ}|j t j ||d�dƒdS)Nr´)r zdany_value { type_url: "type.googleapis.com/protobuf_unittest.OneString" value: "\n\006string" } ) rrÞrßrrÈràrár ÚDescriptorPoolrr r5)rrâr7Ú empty_poolrrrÚ2testPrintMessageExpandAnyDescriptorPoolMissingType<s  z>Proto3Tests.testPrintMessageExpandAnyDescriptorPoolMissingTypecCs<tjƒ}d|_tjƒ}|jj|ƒ|jtj |dd�dƒdS)Nr´T)ršz[any_value < [type.googleapis.com/protobuf_unittest.OneString] < data: "string" > > ) rrÞrßrrÈràrárr r5)rrâr7rrrÚ'testPrintMessageExpandAnyPointyBracketsIs z3Proto3Tests.testPrintMessageExpandAnyPointyBracketscCs<tjƒ}d|_tjƒ}|jj|ƒ|jtj |dd�dƒdS)Nr´T)r=zRany_value { [type.googleapis.com/protobuf_unittest.OneString] { data: "string" } }) rrÞrßrrÈràrárr r5)rrâr7rrrÚ"testPrintMessageExpandAnyAsOneLineWs z.Proto3Tests.testPrintMessageExpandAnyAsOneLinecCsDtjƒ}d|_tjƒ}|jj|ƒ|jtj |ddt j ƒd�dƒdS)Nr´T)r=ršr zRany_value < [type.googleapis.com/protobuf_unittest.OneString] < data: "string" > >) rrÞrßrrÈràrárr r5r rÉ)rrâr7rrrÚ0testPrintMessageExpandAnyAsOneLinePointyBracketsds  ztjƒ}tjƒ}d|_tj|ƒ}tj||ƒ|jd|jƒdS)Niç)rr/Zoptional_nested_enumr r5rIr)rr7Zmessage2Z text_stringrrrÚtestUnknownEnumsss   zProto3Tests.testUnknownEnumscCsttjƒ}d}tj||ƒtjƒ}|jj|ƒ|jd|j ƒ|j ƒtj ||ƒtjƒ}|jj|ƒ|jd|j ƒdS)Nz[any_value { [type.googleapis.com/protobuf_unittest.OneString] { data: "string" } } r´) rrÈr rhrrÞràÚUnpackrrßrgrI)rr7r$rârrrÚtestMergeExpandedAny{s    z Proto3Tests.testMergeExpandedAnycCs`tjƒ}d}tj||ƒtjƒ}|jdj|ƒ|jd|j ƒ|jdj|ƒ|jd|j ƒdS)NzÊrepeated_any_value { [type.googleapis.com/protobuf_unittest.OneString] { data: "string0" } } repeated_any_value { [type.googleapis.com/protobuf_unittest.OneString] { data: "string1" } } rrärrå) rrÈr rhrrÞrærïrrß)rr7r$rârrrÚtestMergeExpandedAnyRepeatedŒs z(Proto3Tests.testMergeExpandedAnyRepeatedcCs>tjƒ}d}tj||ƒtjƒ}|jj|ƒ|jd|j ƒdS)Nz[any_value { [type.googleapis.com/protobuf_unittest.OneString] < data: "string" > } r´) rrÈr rhrrÞràrïrrß)rr7r$rârrrÚ"testMergeExpandedAnyPointyBracketsŸs   z.Proto3Tests.testMergeExpandedAnyPointyBracketscCs4tjƒ}d}tj||ƒtjƒ}|jd|jjƒdS)NzYany_value { [type.otherapi.com/protobuf_unittest.OneString] { data: "string" } } z-type.otherapi.com/protobuf_unittest.OneString) rrÈr rhrrÞrràZtype_url)rr7r$rârrrÚtestMergeAlternativeUrl«s  z#Proto3Tests.testMergeAlternativeUrlc CsRtjƒ}d}|jtjƒ�}tjƒ}tj|||d�WdQRX|jt |j ƒdƒdS)Nz[any_value { [type.googleapis.com/protobuf_unittest.OneString] { data: "string" } } )r z=Type protobuf_unittest.OneString not found in descriptor pool) rrÈrvr rwr rèrhrrrx)rr7r$ryrérrrÚ-testMergeExpandedAnyDescriptorPoolMissingType·sz9Proto3Tests.testMergeExpandedAnyDescriptorPoolMissingTypecCs>d}tjƒ}tj||ƒtjƒ}|jj|ƒ|jd|j ƒdS)Nzdany_value { type_url: "type.googleapis.com/protobuf_unittest.OneString" value: "\n\006string" } r´) rrÈr rhrrÞràrïrrß)rr$r7rârrrÚtestMergeUnexpandedAnyÅs   z"Proto3Tests.testMergeUnexpandedAnyc CsFtjƒ}d}|jtjƒ�}tj||ƒWdQRX|jt|jƒdƒdS)NzUany_value { [type.googleapis.com/protobuf_unittest.OneString] { data: "string" z3:11 : Expected "}".) rrÈrvr rwrhrrrx)rr7r$ryrrrÚtestMergeMissingAnyEndTokenÐs z'Proto3Tests.testMergeMissingAnyEndTokenN)rrrrãrçrêrërìrírîrðrñròrórôrõrörrrrrÝs     rÝc@steZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„ZdS)Ú TokenizerTestcTCs®d}tj|jƒƒ}|jdfd|jdf|jdfd|jdf|jdfd|jdf|jd fd|jd f|jd fd|jd3f|jd fd|jdf|jdfd|jdf|jdfdd|jdfd|jtdƒf|jdfd|jtdƒ f|jdfd|jdf|jdfd|jdfd|jdfd|jdf|jdfd|jd4f|jdfd|jd5f|jd fd|jd!f|jd"fd|jd#f|jd$fd|jd%f|jd&fd|jdf|jd'fd|jdf|jd(fd|jdf|jd)fd|jdf|jd*fd|jdf|jd+fd|jdf|jd,fd|jtdƒf|jd-fd|jtd.ƒf|jd/fd|jtd0ƒfgR}d1}x–|j ƒ�s¨||}t |t ƒ�rN|j }|j ||ƒ|jƒnNt |d2tƒ�r†tj|d2ƒ�r†|jtj|d1ƒƒƒn|j |d2|d1ƒƒ|d27}�qWdS)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 identifier2rSZ identifier3r´Z identifiER_4g€[@ZID5gq= ×£pÍ?ZID6z aaaa'bbbbZID7zaa"bbZID8ú{ÚAÚinfÚBÚCTÚDFú}ZID9éZID10lÇqÀÞ{U ZID11ZID12lŽc/Y-·vZID13g82�üÁÀó?ZID14g^@Z false_boolZ true_BOOLZ true_bool1Z false_BOOL1Z False_boolZ True_boolÚXÚYz-infÚZÚnanrrgq= ×£pÍ¿lüÿÿÿÇqÀÞ{U iêÿÿÿ)r Ú TokenizerÚ splitlinesÚConsumeIdentifierZ ConsumeStringÚConsumeIntegerÚ ConsumeFloatÚfloatÚ ConsumeBoolÚAtEndÚ isinstancerÚtokenrÚ NextTokenÚmathZisnanr‹)rr$Ú tokenizerÚmethodsrÀr’rrrrÚtestSimpleTokenCasesÜs„                                    z"TokenizerTest.testSimpleTokenCasesc Csd }d }d|d|df}tj|jƒƒ}|jd|jƒƒ|j|d|jƒƒ|j|d|jƒƒ|j|jƒƒd}tj|jƒƒ}|jd|jƒƒ|jd|jƒƒ|jd|jƒƒ|jd|jƒƒ|jtj ƒ�|jƒWdQRX|jd |j ƒƒ|j|jƒƒdS)Nré?é z-1 %d %dz -0 0 0 1.2rTFg333333ó?llÿÿÿÿllÿÿéÿÿÿÿ) r rrrrr‹r ZTryConsumeIntegerrvrwr )rÚ int64_maxÚ uint32_maxr$rrrrÚtestConsumeAbstractIntegers)s$z)TokenizerTest.testConsumeAbstractIntegerscCs<d}d }d|d|df}tj|jƒƒ}|jtjtj|ƒ|jtjtj|ƒ|jd tj|ƒƒ|jtjtj|ƒ|jtjtj|ƒ|j|dtj |ƒƒ|jtjtj |ƒ|j|dtj|ƒƒ|j |j ƒƒd}tj|jƒƒ}|jdtj|ƒƒ|jdtj|ƒƒ|jdtj|ƒƒ|jdtj|ƒƒ|j |j ƒƒdS) Nrrrz-1 %d %dz -0 -0 0 0rllÿÿÿÿllÿÿr) r rrrvrwZ_ConsumeUint32Z_ConsumeUint64rZ _ConsumeInt32Z _ConsumeInt64r‹r )rrrr$rrrrÚtestConsumeIntegersBs2     z!TokenizerTest.testConsumeIntegerscCs®d}tj|jƒƒ}|jtj|jƒd}tj|jƒƒ}|jtj|jƒd}tj|jƒƒ}|jtj|jƒd}tj|jƒƒ}|jtj|jƒd}tj|jƒƒ}|jtj|jƒdS)Nz "string1'zstring1"z "\xt"z "\"z "\x")r rrrvrwZConsumeByteString)rr$rrrrÚtestConsumeByteStringbsz#TokenizerTest.testConsumeByteStringcCs&d}tj|jƒƒ}|jtj|jƒdS)Nz not-a-bool)r rrrvrwr )rr$rrrrÚtestConsumeBoolwszTokenizerTest.testConsumeBoolcCs0tjdjƒƒ}|j|jƒƒ|jtj|jƒdS)Nz# some comment)r rrr‹r rvrwÚConsumeComment)rrrrrÚtestSkipComment|szTokenizerTest.testSkipCommentcCsBtjdjƒdd�}|j|jƒƒ|jd|jƒƒ|j|jƒƒdS)Nz# some commentF)Ú skip_comments)r rrÚ assertFalser rrr‹)rrrrrÚtestConsumeComment�s  z TokenizerTest.testConsumeCommentcCsVd}tj|jƒdd�}|jd|jƒƒ|j|jƒƒ|jd|jƒƒ|j|jƒƒdS)Nz # some comment # another commentF)rz# some commentz# another comment)r rrrrr r r‹)rr$rrrrÚtestConsumeTwoCommentsˆs z$TokenizerTest.testConsumeTwoCommentscCsœd}tj|jƒdd�}|jtj|jƒ|jd|jƒƒ|j|jdƒ|j ƒ|jtj|jƒ|jd|j ƒƒ|j |j ƒƒ|jd|jƒƒ|j |j ƒƒdS)Nzsome_number: 4 # some commentF)rÚ some_numberrør„z# some comment)r rrrvrwrrrrrrr r r‹)rr$rrrrÚtestConsumeTrailingComment�sz(TokenizerTest.testConsumeTrailingCommentcCsBtjdjƒdd�}|j|jƒƒ|jd|jƒƒ|j|jƒƒdS)Nú# some commentF)r)Fr%)r rrr r rÚConsumeCommentOrTrailingCommentr‹)rrrrrÚtestConsumeLineCommentŸs   z$TokenizerTest.testConsumeLineCommentcCsVd}tj|jƒdd�}|jd|jƒƒ|j|jƒƒ|jd|jƒƒ|j|jƒƒdS)Nz # some comment # another commentF)rú# some commentú# another comment)Fr()Fr))r rrrr&r r r‹)rr$rrrrÚtestConsumeTwoLineComments§s  z(TokenizerTest.testConsumeTwoLineCommentscCsœd}tj|jƒdd�}|jtj|jƒ|jd|jƒƒ|j|jdƒ|j ƒ|jtj|jƒ|jd|j ƒƒ|j |j ƒƒ|jd |jƒƒ|j |j ƒƒdS) Nzsome_number: 4 # some commentF)rr#rør„Tú# some comment)Tr+)r rrrvrwr&rrrrrr r r‹)rr$rrrrÚ"testConsumeAndCheckTrailingComment±s z0TokenizerTest.testConsumeAndCheckTrailingCommentcCsnd}tj|jƒdd�}|jd|jƒƒ|j|jdƒ|jƒ|jd|jƒƒ|jd |jƒƒ|j |j ƒƒdS) Nz2some_number: 4 # some comment # not a new commentF)rr#rør„Tú"# some comment # not a new comment)Tr-) r rrrrrrrr&r‹r )rr$rrrrÚtestHashinCommentÃs zTokenizerTest.testHashinCommentN)rrrrrrrrrr!r"r$r'r*r,r.rrrrr÷ÚsM  r÷c@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚPrettyPrinterTestcCs<dd„}|jƒ}|jjƒ}d|_|jtj|d|d�dƒdS)NcSs ~~~dS)Nr)r7Úindentr=rrrr_Õsz9PrettyPrinterTest.testPrettyPrintNoMatch..printerr<T)r=Úmessage_formatterz"repeated_nested_message { bb: 42 })r/r>r?r@r'r r5)rr6r_r7rArrrÚtestPrettyPrintNoMatchÓs  z(PrettyPrinterTest.testPrettyPrintNoMatchcs@‡fdd„}ˆjƒ}|jjƒ}d|_|jtj|d|d�dƒdS)Ncs"~~|jˆjjjkrd|jSdS)NzMy lucky number is %s)rVr/Ú NestedMessager@)r’r0r=)r6rrr_ãsz9PrettyPrinterTest.testPrettyPrintOneLine..printerr<T)r=r1z1repeated_nested_message { My lucky number is 42 })r/r>r?r@r'r r5)rr6r_r7rAr)r6rÚtestPrettyPrintOneLineás   z(PrettyPrinterTest.testPrettyPrintOneLinecsX‡fdd„}ˆjƒ}|jjƒ}d|_|jtj|d|d�dƒ|jtj|d|d�dƒdS) Ncs6|jˆjjjkr2|rdndd|}d||jfSdS)Nú r•zMy lucky number is:%s%s)rVr/r3r@)r’r0r=Zline_deliminator)r6rrr_òsz;PrettyPrinterTest.testPrettyPrintMultiLine..printerr<T)r=r1z2repeated_nested_message { My lucky number is: 42 }Fz7repeated_nested_message { My lucky number is: 42 } )r/r>r?r@r'r r5)rr6r_r7rAr)r6rÚtestPrettyPrintMultiLineðs    z*PrettyPrinterTest.testPrettyPrintMultiLinecsH‡fdd„}ˆjƒ}|jtj|d|d�dƒ|jtj|d|d�dƒdS)Ncs~~|jˆjjkrdSdS)NzThe is the message!)rVr/)r’r0r=)r6rrr_sz?PrettyPrinterTest.testPrettyPrintEntireMessage..printerF)r=r1zThe is the message! TzThe is the message!)r/r'r r5)rr6r_r7r)r6rÚtestPrettyPrintEntireMessages   z.PrettyPrinterTest.testPrettyPrintEntireMessagecsb‡fdd„}ˆjƒ}d|_|jjƒ}d|_|jjƒ}d|_|j}d|_|jtj|d|d�d ƒdS) Ncs"~~|jˆjjjkrd|jSdS)NzMy lucky number is %s)rVr/r3r@)r’r0r=)r6rrr_s z?PrettyPrinterTest.testPrettyPrintMultipleParts..printeré=r<écrT)r=r1z§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 }) r/r‰r>r?r@rŒr'r r5)rr6r_r7rAr)r6rÚtestPrettyPrintMultiplePartss    z.PrettyPrinterTest.testPrettyPrintMultiplePartsN)rrrr2r4r6r7r:rrrrr/Ðs r/Ú__main__)#Ú__doc__Ú __author__rr)r:r´Z unittest2ZunittestÚ ImportErrorZgoogle.protobuf.internalrZgoogle.protobufrrrrrrrÇr r r r ZTestCaser rZ Parametersr.r™r¸rÝr÷r/rÚmainrrrrÚ!sT               'Cw]