34 """Test for google.protobuf.text_format."""
46 import unittest2
as unittest
75 for quote
in text_format._QUOTES:
76 self.assertEqual(1,
len(quote))
83 with test_util.GoldenFile(golden_filename)
as f:
84 return (f.readlines()
if str
is bytes
else
85 [golden_line.decode(
'utf-8')
for golden_line
in f])
88 golden_lines = self.
ReadGolden(golden_filename)
89 self.assertMultiLineEqual(text,
''.join(golden_lines))
92 self.assertEqual(text, golden_text)
97 text = text.replace(
'e+0',
'e+').replace(
'e+0',
'e+') \
98 .replace(
'e-0',
'e-').replace(
'e-0',
'e-')
101 text = re.compile(
r'\.0$', re.MULTILINE).sub(
'', text)
105 @_parameterized.parameters(unittest_pb2, unittest_proto3_arena_pb2)
109 message = message_module.TestAllTypes()
110 message.repeated_int64.append(-9223372036854775808)
111 message.repeated_uint64.append(18446744073709551615)
112 message.repeated_double.append(123.456)
113 message.repeated_double.append(1.23e22)
114 message.repeated_double.append(1.23e-18)
115 message.repeated_string.append(
'\000\001\a\b\f\n\r\t\v\\\'"')
116 message.repeated_string.append(
u'\u00fc\ua71f')
119 'repeated_int64: -9223372036854775808\n'
120 'repeated_uint64: 18446744073709551615\n'
121 'repeated_double: 123.456\n'
122 'repeated_double: 1.23e+22\n'
123 'repeated_double: 1.23e-18\n'
125 ' "\\000\\001\\007\\010\\014\\n\\r\\t\\013\\\\\\\'\\""\n'
126 'repeated_string: "\\303\\274\\352\\234\\237"\n')
130 class UnicodeSub(six.text_type):
133 message = message_module.TestAllTypes()
134 message.repeated_string.append(UnicodeSub(
u'\u00fc\ua71f'))
135 self.CompareToGoldenText(
136 text_format.MessageToString(message),
137 'repeated_string: "\\303\\274\\352\\234\\237"\n')
140 message = message_module.TestAllTypes()
141 msg = message.repeated_nested_message.add()
144 text_format.MessageToString(message, as_one_line=
True),
145 'repeated_nested_message { bb: 42 }')
148 message = message_module.TestAllTypes()
149 message.repeated_int32.append(1)
150 message.repeated_int32.append(1)
151 message.repeated_int32.append(3)
152 message.repeated_string.append(
'Google')
153 message.repeated_string.append(
'Zurich')
155 text_format.MessageToString(message, as_one_line=
True),
156 'repeated_int32: 1 repeated_int32: 1 repeated_int32: 3 '
157 'repeated_string: "Google" repeated_string: "Zurich"')
160 message = message_module.TestAllTypes()
161 message.repeated_int32.append(1)
162 message.repeated_string.append(
'Google')
163 message.repeated_string.append(
'Hello,World')
164 message.repeated_foreign_enum.append(unittest_pb2.FOREIGN_FOO)
165 message.repeated_foreign_enum.append(unittest_pb2.FOREIGN_BAR)
166 message.repeated_foreign_enum.append(unittest_pb2.FOREIGN_BAZ)
167 message.optional_nested_message.bb = 3
169 msg = message.repeated_nested_message.add()
172 'optional_nested_message {\n bb: 3\n}\n'
173 'repeated_int32: [1]\n'
174 'repeated_string: "Google"\n'
175 'repeated_string: "Hello,World"\n'
176 'repeated_nested_message {\n bb: 21\n}\n'
177 'repeated_nested_message {\n bb: 32\n}\n'
178 'repeated_foreign_enum: [FOREIGN_FOO, FOREIGN_BAR, FOREIGN_BAZ]\n')
180 expected_ascii = expected_ascii.replace(
'\n',
' ')
181 expected_ascii = re.sub(
r'\s+',
' ', expected_ascii)
182 expected_ascii = re.sub(
r'\s$',
'', expected_ascii)
184 actual_ascii = text_format.MessageToString(
185 message, use_short_repeated_primitives=
True,
186 as_one_line=as_one_line)
188 parsed_message = message_module.TestAllTypes()
189 text_format.Parse(actual_ascii, parsed_message)
190 self.assertEqual(parsed_message, message)
197 message = message_module.TestAllTypes()
198 message.optional_string =
'a\nnew\nline'
200 text_format.MessageToString(message, as_one_line=
True),
201 'optional_string: "a\\nnew\\nline"')
204 message = message_module.TestAllTypes()
205 message.repeated_int64.append(-9223372036854775808)
206 message.repeated_uint64.append(18446744073709551615)
207 message.repeated_double.append(123.456)
208 message.repeated_double.append(1.23e22)
209 message.repeated_double.append(1.23e-18)
210 message.repeated_string.append(
'\000\001\a\b\f\n\r\t\v\\\'"')
211 message.repeated_string.append(
u'\u00fc\ua71f')
214 message, as_one_line=
True)),
215 'repeated_int64: -9223372036854775808'
216 ' repeated_uint64: 18446744073709551615'
217 ' repeated_double: 123.456'
218 ' repeated_double: 1.23e+22'
219 ' repeated_double: 1.23e-18'
221 '"\\000\\001\\007\\010\\014\\n\\r\\t\\013\\\\\\\'\\""'
222 ' repeated_string: "\\303\\274\\352\\234\\237"')
225 message = message_module.TestAllTypes()
226 message.repeated_int64.append(-9223372036854775808)
227 message.repeated_uint64.append(18446744073709551615)
228 message.repeated_double.append(123.456)
229 message.repeated_double.append(1.23e22)
230 message.repeated_double.append(1.23e-18)
231 message.repeated_string.append(
'\000\001\a\b\f\n\r\t\v\\\'"')
232 message.repeated_string.append(
u'\u00fc\ua71f')
235 wire_text = text_format.MessageToString(message,
238 parsed_message = message_module.TestAllTypes()
239 r = text_format.Parse(wire_text, parsed_message)
240 self.assertIs(r, parsed_message)
241 self.assertEqual(message, parsed_message)
244 wire_text = text_format.MessageToString(message,
247 parsed_message = message_module.TestAllTypes()
248 r = text_format.Parse(wire_text, parsed_message)
249 self.assertIs(r, parsed_message)
250 self.assertEqual(message, parsed_message,
251 '\n%s != %s' % (message, parsed_message))
254 message = message_module.TestAllTypes()
255 message.repeated_string.append(
u'\u00fc\t\ua71f')
256 text = text_format.MessageToString(message, as_utf8=
True)
257 golden_unicode =
u'repeated_string: "\u00fc\\t\ua71f"\n'
258 golden_text = golden_unicode
if six.PY3
else golden_unicode.encode(
'utf-8')
261 parsed_message = message_module.TestAllTypes()
262 text_format.Parse(text, parsed_message)
264 message, parsed_message,
'\n%s != %s (%s != %s)' %
265 (message, parsed_message, message.repeated_string[0],
266 parsed_message.repeated_string[0]))
270 message = message_module.NestedTestAllTypes()
271 message.payload.optional_float = 1.25
273 message.payload.optional_double = -.000003456789012345678
275 message.payload.repeated_float.append(-5642)
277 message.payload.repeated_double.append(.000078900)
278 formatted_fields = [
'optional_float: 1.25',
279 'optional_double: -3.45678901234568e-6',
280 'repeated_float: -5642',
'repeated_double: 7.89e-5']
281 text_message = text_format.MessageToString(message, float_format=
'.15g')
284 'payload {{\n {0}\n {1}\n {2}\n {3}\n}}\n'.format(
287 text_message = text_format.MessageToString(message,
292 'payload {{ {0} {1} {2} {3} }}'.format(*formatted_fields))
298 message.payload.optional_float = 1.2000000476837158
299 formatted_fields = [
'optional_float: 1.2',
300 'optional_double: -3.45678901234568e-6',
301 'repeated_float: -5642',
'repeated_double: 7.89e-5']
302 text_message = text_format.MessageToString(message, float_format=
'.7g',
303 double_format=
'.15g')
306 'payload {{\n {0}\n {1}\n {2}\n {3}\n}}\n'.format(
310 formatted_fields = [
'optional_float: 1.2',
311 'optional_double: -3.456789e-6',
312 'repeated_float: -5642',
'repeated_double: 7.89e-5']
313 text_message = text_format.MessageToString(message, float_format=
'.7g')
316 'payload {{\n {0}\n {1}\n {2}\n {3}\n}}\n'.format(
320 message.payload.optional_float = 1.2345678912
321 message.payload.optional_double = 1.2345678912
322 formatted_fields = [
'optional_float: 1.2345679',
323 'optional_double: 1.2345678912',
324 'repeated_float: -5642',
'repeated_double: 7.89e-5']
325 text_message = text_format.MessageToString(message)
328 'payload {{\n {0}\n {1}\n {2}\n {3}\n}}\n'.format(
332 message = message_module.ForeignMessage()
334 self.assertEqual(
'c: 123\n',
str(message))
337 golden_unicode =
u'Á short desçription and a 🍌.'
338 golden_bytes = golden_unicode.encode(
'utf-8')
339 message = message_module.TestAllTypes()
340 message.optional_string = golden_unicode
341 message.optional_bytes = golden_bytes
342 text = text_format.MessageToString(message, as_utf8=
True)
343 golden_message = textwrap.dedent(
344 'optional_string: "Á short desçription and a 🍌."\n'
346 r'"\303\201 short des\303\247ription and a \360\237\215\214."'
351 golden_unicode =
u'Á short desçription and a 🍌.'
352 golden_bytes = golden_unicode.encode(
'utf-8')
353 message = message_module.TestAllTypes()
354 message.optional_string = golden_unicode
355 message.optional_bytes = golden_bytes
356 text = text_format.MessageToString(message, as_utf8=
False)
359 r'"\303\201 short des\303\247ription and a \360\237\215\214."'
362 r'"\303\201 short des\303\247ription and a \360\237\215\214."'
367 message = message_module.TestAllTypes()
368 field = message.DESCRIPTOR.fields_by_name[
'optional_float']
369 value = message.optional_float
371 text_format.PrintField(field, value, out)
372 self.assertEqual(
'optional_float: 0.0\n', out.getvalue())
377 printer.PrintField(field, value)
378 self.assertEqual(
'optional_float: 0.0\n', out.getvalue())
382 message = message_module.TestAllTypes()
383 field = message.DESCRIPTOR.fields_by_name[
'optional_float']
384 value = message.optional_float
386 text_format.PrintFieldValue(field, value, out)
387 self.assertEqual(
'0.0', out.getvalue())
392 printer.PrintFieldValue(field, value)
393 self.assertEqual(
'0.0', out.getvalue())
397 message_descriptor = (unittest_custom_options_pb2.
398 TestMessageWithCustomOptions.DESCRIPTOR)
399 message_proto = descriptor_pb2.DescriptorProto()
400 message_descriptor.CopyToProto(message_proto)
402 'name: "TestMessageWithCustomOptions"\n'
406 ' label: LABEL_OPTIONAL\n'
407 ' type: TYPE_STRING\n'
410 ' [protobuf_unittest.field_opt1]: 8765432109\n'
414 ' name: "oneof_field"\n'
416 ' label: LABEL_OPTIONAL\n'
417 ' type: TYPE_INT32\n'
423 ' name: "ANENUM_VAL1"\n'
427 ' name: "ANENUM_VAL2"\n'
430 ' [protobuf_unittest.enum_value_opt1]: 123\n'
434 ' [protobuf_unittest.enum_opt1]: -789\n'
438 ' message_set_wire_format: false\n'
439 ' [protobuf_unittest.message_opt1]: -56\n'
444 ' [protobuf_unittest.oneof_opt1]: -99\n'
447 self.assertEqual(expected_text,
448 text_format.MessageToString(message_proto))
449 parsed_proto = descriptor_pb2.DescriptorProto()
450 text_format.Parse(expected_text, parsed_proto)
451 self.assertEqual(message_proto, parsed_proto)
454 @_parameterized.parameters(unittest_pb2, unittest_proto3_arena_pb2)
458 message = message_module.ForeignMessage()
460 self.assertEqual(b
'c: 123\n', text_format.MessageToBytes(message))
463 message = message_module.TestAllTypes()
464 message.repeated_string.append(
u'\u00fc\t\ua71f')
465 utf8_text = text_format.MessageToBytes(message, as_utf8=
True)
466 golden_bytes = b
'repeated_string: "\xc3\xbc\\t\xea\x9c\x9f"\n'
468 parsed_message = message_module.TestAllTypes()
469 text_format.Parse(utf8_text, parsed_message)
471 message, parsed_message,
'\n%s != %s (%s != %s)' %
472 (message, parsed_message, message.repeated_string[0],
473 parsed_message.repeated_string[0]))
476 message = message_module.TestAllTypes()
477 message.repeated_string.append(
u'\u00fc\t\ua71f')
478 ascii_text = text_format.MessageToBytes(message)
479 golden_bytes = b
'repeated_string: "\\303\\274\\t\\352\\234\\237"\n'
481 parsed_message = message_module.TestAllTypes()
482 text_format.Parse(ascii_text, parsed_message)
484 message, parsed_message,
'\n%s != %s (%s != %s)' %
485 (message, parsed_message, message.repeated_string[0],
486 parsed_message.repeated_string[0]))
489 @_parameterized.parameters(unittest_pb2, unittest_proto3_arena_pb2)
493 message = message_module.TestAllTypes()
494 test_util.SetAllFields(message)
495 ascii_text = text_format.MessageToString(message)
497 parsed_message = message_module.TestAllTypes()
498 text_format.Parse(ascii_text, parsed_message)
499 self.assertEqual(message, parsed_message)
500 if message_module
is unittest_pb2:
501 test_util.ExpectAllFieldsSet(self, message)
504 message = message_module.TestAllTypes()
505 test_util.SetAllFields(message)
506 ascii_text = text_format.MessageToString(message)
507 ascii_text = ascii_text.encode(
'utf-8')
509 parsed_message = message_module.TestAllTypes()
510 text_format.Parse(ascii_text, parsed_message)
511 self.assertEqual(message, parsed_message)
512 if message_module
is unittest_pb2:
513 test_util.ExpectAllFieldsSet(self, message)
515 parsed_message.Clear()
516 text_format.Merge(ascii_text, parsed_message)
517 self.assertEqual(message, parsed_message)
518 if message_module
is unittest_pb2:
519 test_util.ExpectAllFieldsSet(self, message)
521 msg2 = message_module.TestAllTypes()
522 text = (
u'optional_string: "café"')
523 text_format.Merge(text, msg2)
524 self.assertEqual(msg2.optional_string,
u'café')
526 self.assertEqual(msg2.optional_string,
u'')
527 text_format.Parse(text, msg2)
528 self.assertEqual(msg2.optional_string,
u'café')
531 message = message_module.TestAllTypes()
532 text = (
'repeated_float: 3.4028235e+39\n'
533 'repeated_float: 1.4028235e-39\n')
534 text_format.Parse(text, message)
535 self.assertEqual(message.repeated_float[0], float(
'inf'))
536 self.assertAlmostEqual(message.repeated_float[1], 1.4028235e-39)
539 message = message_module.TestAllTypes()
540 text = (
'repeated_int64: -9223372036854775808\n'
541 'repeated_uint64: 18446744073709551615\n'
542 'repeated_double: 123.456\n'
543 'repeated_double: 1.23e+22\n'
544 'repeated_double: 1.23e-18\n'
545 'repeated_string: \n'
546 '"\\000\\001\\007\\010\\014\\n\\r\\t\\013\\\\\\\'\\""\n'
547 'repeated_string: "foo" \'corge\' "grault"\n'
548 'repeated_string: "\\303\\274\\352\\234\\237"\n'
549 'repeated_string: "\\xc3\\xbc"\n'
550 'repeated_string: "\xc3\xbc"\n')
551 text_format.Parse(text, message)
553 self.assertEqual(-9223372036854775808, message.repeated_int64[0])
554 self.assertEqual(18446744073709551615, message.repeated_uint64[0])
555 self.assertEqual(123.456, message.repeated_double[0])
556 self.assertEqual(1.23e22, message.repeated_double[1])
557 self.assertEqual(1.23e-18, message.repeated_double[2])
558 self.assertEqual(
'\000\001\a\b\f\n\r\t\v\\\'"', message.repeated_string[0])
559 self.assertEqual(
'foocorgegrault', message.repeated_string[1])
560 self.assertEqual(
u'\u00fc\ua71f', message.repeated_string[2])
561 self.assertEqual(
u'\u00fc', message.repeated_string[3])
564 message = message_module.TestAllTypes()
565 text = (
'repeated_int64: 100;\n'
566 'repeated_int64: 200;\n'
567 'repeated_int64: 300,\n'
568 'repeated_string: "one",\n'
569 'repeated_string: "two";\n')
570 text_format.Parse(text, message)
572 self.assertEqual(100, message.repeated_int64[0])
573 self.assertEqual(200, message.repeated_int64[1])
574 self.assertEqual(300, message.repeated_int64[2])
575 self.assertEqual(
u'one', message.repeated_string[0])
576 self.assertEqual(
u'two', message.repeated_string[1])
579 message = message_module.TestAllTypes()
580 text = (
'repeated_int64: [100, 200];\n'
581 'repeated_int64: []\n'
582 'repeated_int64: 300,\n'
583 'repeated_string: ["one", "two"];\n')
584 text_format.Parse(text, message)
586 self.assertEqual(100, message.repeated_int64[0])
587 self.assertEqual(200, message.repeated_int64[1])
588 self.assertEqual(300, message.repeated_int64[2])
589 self.assertEqual(
u'one', message.repeated_string[0])
590 self.assertEqual(
u'two', message.repeated_string[1])
593 message = message_module.TestAllTypes()
594 text = (
'repeated_nested_message: [{bb: 100}, {bb: 200}],\n'
595 'repeated_nested_message: {bb: 300}\n'
596 'repeated_nested_message [{bb: 400}];\n')
597 text_format.Parse(text, message)
599 self.assertEqual(100, message.repeated_nested_message[0].bb)
600 self.assertEqual(200, message.repeated_nested_message[1].bb)
601 self.assertEqual(300, message.repeated_nested_message[2].bb)
602 self.assertEqual(400, message.repeated_nested_message[3].bb)
605 message = message_module.TestAllTypes()
607 text_format.Parse(text, message)
608 self.assertEqual(message_module.TestAllTypes(), message)
611 message = message_module.TestAllTypes()
612 text =
'repeated_string: "\\xc3\\xc3"'
614 text_format.Parse(text, message)
615 self.assertEqual(e.exception.GetLine(), 1)
616 self.assertEqual(e.exception.GetColumn(), 28)
619 message = message_module.TestAllTypes()
622 r'1:1 : Message type "\w+.TestAllTypes" has no field named '
623 r'"foo".'), text_format.Parse, text, message)
626 message = message_module.TestAllTypes()
627 text =
'unknown_field: 8\n'
629 r'1:1 : Message type "\w+.TestAllTypes" has no field named '
630 r'"unknown_field".'), text_format.Parse, text, message)
631 text = (
'optional_int32: 123\n'
633 'optional_nested_message { bb: 45 }')
634 text_format.Parse(text, message, allow_unknown_field=
True)
635 self.assertEqual(message.optional_nested_message.bb, 45)
636 self.assertEqual(message.optional_int32, 123)
639 message = message_module.TestAllTypes()
640 text =
'optional_nested_enum: BARR'
642 (
r'1:23 : \'optional_nested_enum: BARR\': '
643 r'Enum type "\w+.TestAllTypes.NestedEnum" '
644 r'has no value named BARR.'), text_format.Parse,
648 message = message_module.TestAllTypes()
649 text =
'optional_int32: bork'
651 (
'1:17 : \'optional_int32: bork\': '
652 'Couldn\'t parse integer: bork'),
653 text_format.Parse, text, message)
656 message = message_module.TestAllTypes()
657 text =
r'''repeated_string: "\xf\x62"
658 repeated_string: "\\xf\\x62"
659 repeated_string: "\\\xf\\\x62"
660 repeated_string: "\\\\xf\\\\x62"
661 repeated_string: "\\\\\xf\\\\\x62"
662 repeated_string: "\x5cx20"'''
664 text_format.Parse(text, message)
667 self.assertEqual(
'\x0fb', message.repeated_string[0])
668 self.assertEqual(SLASH +
'xf' + SLASH +
'x62', message.repeated_string[1])
669 self.assertEqual(SLASH +
'\x0f' + SLASH +
'b', message.repeated_string[2])
670 self.assertEqual(SLASH + SLASH +
'xf' + SLASH + SLASH +
'x62',
671 message.repeated_string[3])
672 self.assertEqual(SLASH + SLASH +
'\x0f' + SLASH + SLASH +
'b',
673 message.repeated_string[4])
674 self.assertEqual(SLASH +
'x20', message.repeated_string[5])
677 m = message_module.TestAllTypes()
679 m2 = message_module.TestAllTypes()
680 text_format.Parse(text_format.MessageToString(m), m2)
681 self.assertEqual(
'oneof_uint32', m2.WhichOneof(
'oneof_field'))
684 m_string =
'\n'.join([
'oneof_uint32: 11',
'oneof_string: "foo"'])
685 m2 = message_module.TestAllTypes()
687 ' is specified along with field '):
688 text_format.Parse(m_string, m2)
695 _UNICODE_SAMPLE =
u"""
696 optional_bytes: 'Á short desçription'
697 optional_string: 'Á short desçription'
698 repeated_bytes: '\\303\\201 short des\\303\\247ription'
699 repeated_bytes: '\\x12\\x34\\x56\\x78\\x90\\xab\\xcd\\xef'
700 repeated_string: '\\xd0\\x9f\\xd1\\x80\\xd0\\xb8\\xd0\\xb2\\xd0\\xb5\\xd1\\x82'
702 _BYTES_SAMPLE = _UNICODE_SAMPLE.encode(
'utf-8')
703 _GOLDEN_UNICODE =
u'Á short desçription'
704 _GOLDEN_BYTES = _GOLDEN_UNICODE.encode(
'utf-8')
705 _GOLDEN_BYTES_1 = b
'\x12\x34\x56\x78\x90\xab\xcd\xef'
706 _GOLDEN_STR_0 =
u'Привет'
709 m = message_module.TestAllTypes()
721 m = message_module.TestAllTypes()
733 m = message_module.TestAllTypes()
735 text_format.ParseLines(f, m)
741 m = message_module.TestAllTypes()
743 text_format.ParseLines(f, m)
749 m = message_module.TestAllTypes()
756 m = message_module.TestAllTypes()
763 message = message_module.TestAllTypes()
764 text = (
'optional_nested_message { bb: 1 } '
765 'optional_nested_message { bb: 2 }')
767 r'1:59 : Message type "\w+.TestAllTypes" '
768 r'should not have multiple "optional_nested_message" fields.'),
769 text_format.Parse, text,
773 message = message_module.TestAllTypes()
774 text = (
'optional_int32: 42 ' 'optional_int32: 67')
776 r'1:36 : Message type "\w+.TestAllTypes" should not '
777 r'have multiple "optional_int32" fields.'), text_format.Parse, text,
781 @_parameterized.parameters(unittest_pb2, unittest_proto3_arena_pb2)
785 message = message_module.TestAllTypes()
786 text = (
'optional_int32: 42 ' 'optional_int32: 67')
787 r = text_format.Merge(text, message)
788 self.assertIs(r, message)
789 self.assertEqual(67, message.optional_int32)
792 message = message_module.TestAllTypes()
793 text = (
'optional_nested_message { bb: 1 } '
794 'optional_nested_message { bb: 2 }')
795 r = text_format.Merge(text, message)
796 self.assertTrue(r
is message)
797 self.assertEqual(2, message.optional_nested_message.bb)
800 m_string =
'\n'.join([
'oneof_uint32: 11',
'oneof_string: "foo"'])
801 m2 = message_module.TestAllTypes()
802 text_format.Merge(m_string, m2)
803 self.assertEqual(
'oneof_string', m2.WhichOneof(
'oneof_field'))
812 message = unittest_pb2.TestAllTypes()
813 test_util.SetAllFields(message)
816 message, pointy_brackets=
True)),
817 'text_format_unittest_data_pointy_oneof.txt')
821 'text_format_unittest_data_oneof_implemented.txt'))
822 parsed_message = unittest_pb2.TestAllTypes()
823 r = text_format.Parse(golden_text, parsed_message)
824 self.assertIs(r, parsed_message)
826 message = unittest_pb2.TestAllTypes()
827 test_util.SetAllFields(message)
828 self.assertEqual(message, parsed_message)
831 message = unittest_pb2.TestAllTypes()
832 test_util.SetAllFields(message)
835 'text_format_unittest_data_oneof_implemented.txt')
838 message = unittest_pb2.TestAllTypes()
839 message.optional_int32 = 101
840 message.optional_double = 102.0
841 message.optional_string =
u'hello'
842 message.optional_bytes = b
'103'
843 message.optionalgroup.a = 104
844 message.optional_nested_message.bb = 105
845 all_data = message.SerializeToString()
846 empty_message = unittest_pb2.TestEmptyMessage()
847 empty_message.ParseFromString(all_data)
848 self.assertEqual(
'1: 101\n'
849 '12: 4636878028842991616\n'
858 text_format.MessageToString(empty_message,
859 print_unknown_fields=
True))
860 self.assertEqual(
'1: 101 '
861 '12: 4636878028842991616 '
866 text_format.MessageToString(empty_message,
867 print_unknown_fields=
True,
871 message = unittest_pb2.TestFieldOrderings()
873 message.my_string =
'str'
875 message.my_float = 111
876 message.optional_nested_message.oo = 0
877 message.optional_nested_message.bb = 1
878 message.Extensions[unittest_pb2.my_extension_string] =
'ext_str0'
881 message.Extensions[unittest_pb2.TestExtensionOrderings2.
882 test_ext_orderings2].my_string =
'ext_str2'
884 message.Extensions[unittest_pb2.TestExtensionOrderings1.
885 test_ext_orderings1].my_string =
'ext_str1'
888 unittest_pb2.TestExtensionOrderings2.TestExtensionOrderings3.
889 test_ext_orderings3].my_string =
'ext_str3'
894 text_format.MessageToString(message, use_index_order=
True)),
898 'optional_nested_message {\n'
902 '[protobuf_unittest.TestExtensionOrderings2.test_ext_orderings2] {\n'
903 ' my_string: "ext_str2"\n'
905 '[protobuf_unittest.TestExtensionOrderings1.test_ext_orderings1] {\n'
906 ' my_string: "ext_str1"\n'
908 '[protobuf_unittest.TestExtensionOrderings2.TestExtensionOrderings3'
909 '.test_ext_orderings3] {\n'
910 ' my_string: "ext_str3"\n'
912 '[protobuf_unittest.my_extension_string]: "ext_str0"\n')
918 '[protobuf_unittest.TestExtensionOrderings2.test_ext_orderings2] {\n'
919 ' my_string: "ext_str2"\n'
921 '[protobuf_unittest.TestExtensionOrderings1.test_ext_orderings1] {\n'
922 ' my_string: "ext_str1"\n'
924 '[protobuf_unittest.TestExtensionOrderings2.TestExtensionOrderings3'
925 '.test_ext_orderings3] {\n'
926 ' my_string: "ext_str3"\n'
928 '[protobuf_unittest.my_extension_string]: "ext_str0"\n'
930 'optional_nested_message {\n'
936 opened = self.
ReadGolden(
'text_format_unittest_data_oneof_implemented.txt')
937 parsed_message = unittest_pb2.TestAllTypes()
938 r = text_format.MergeLines(opened, parsed_message)
939 self.assertIs(r, parsed_message)
941 message = unittest_pb2.TestAllTypes()
942 test_util.SetAllFields(message)
943 self.assertEqual(message, parsed_message)
946 opened = self.
ReadGolden(
'text_format_unittest_data_oneof_implemented.txt')
947 parsed_message = unittest_pb2.TestAllTypes()
948 r = text_format.ParseLines(opened, parsed_message)
949 self.assertIs(r, parsed_message)
951 message = unittest_pb2.TestAllTypes()
952 test_util.SetAllFields(message)
953 self.assertEqual(message, parsed_message)
956 message = map_unittest_pb2.TestMap()
958 message.map_int32_int32[-123] = -456
959 message.map_int64_int64[-2**33] = -2**34
960 message.map_uint32_uint32[123] = 456
961 message.map_uint64_uint64[2**33] = 2**34
962 message.map_string_string[
'abc'] =
'123'
963 message.map_int32_foreign_message[111].c = 5
968 text_format.MessageToString(message),
'map_int32_int32 {\n'
972 'map_int64_int64 {\n'
973 ' key: -8589934592\n'
974 ' value: -17179869184\n'
976 'map_uint32_uint32 {\n'
980 'map_uint64_uint64 {\n'
982 ' value: 17179869184\n'
984 'map_string_string {\n'
988 'map_int32_foreign_message {\n'
997 message = map_unittest_pb2.TestMap()
998 inner_msg = message.map_int32_foreign_message[111]
1002 'map_int32_foreign_message {\n'
1011 'map_int32_foreign_message {\n'
1019 message = map_unittest_pb2.TestMap()
1020 for letter
in string.ascii_uppercase[13:26]:
1021 message.map_string_string[letter] =
'dummy'
1022 for letter
in reversed(string.ascii_uppercase[0:13]):
1023 message.map_string_string[letter] =
'dummy'
1024 golden =
''.join((
'map_string_string {\n key: "%c"\n value: "dummy"\n}\n'
1025 % (letter,)
for letter
in string.ascii_uppercase))
1048 message = unittest_mset_pb2.TestMessageSetContainer()
1049 ext1 = unittest_mset_pb2.TestMessageSetExtension1.message_set_extension
1050 ext2 = unittest_mset_pb2.TestMessageSetExtension2.message_set_extension
1051 message.message_set.Extensions[ext1].i = 23
1052 message.message_set.Extensions[ext2].str =
'foo'
1054 text_format.MessageToString(message),
'message_set {\n'
1055 ' [protobuf_unittest.TestMessageSetExtension1] {\n'
1058 ' [protobuf_unittest.TestMessageSetExtension2] {\n'
1063 message = message_set_extensions_pb2.TestMessageSet()
1064 ext = message_set_extensions_pb2.message_set_extension3
1065 message.Extensions[ext].text =
'bar'
1067 text_format.MessageToString(message),
1068 '[google.protobuf.internal.TestMessageSetExtension3] {\n'
1074 message = unittest_mset_pb2.TestMessageSetContainer()
1075 ext1 = unittest_mset_pb2.TestMessageSetExtension1.message_set_extension
1076 ext2 = unittest_mset_pb2.TestMessageSetExtension2.message_set_extension
1077 message.message_set.Extensions[ext1].i = 23
1078 message.message_set.Extensions[ext2].str =
'foo'
1079 text_format.PrintMessage(message, out, use_field_number=
True)
1091 message = unittest_mset_pb2.TestMessageSetContainer()
1092 ext1 = unittest_mset_pb2.TestMessageSetExtension1.message_set_extension
1093 ext2 = unittest_mset_pb2.TestMessageSetExtension2.message_set_extension
1094 message.message_set.Extensions[ext1].i = 23
1095 message.message_set.Extensions[ext2].str =
'foo'
1097 text_format.MessageToString(message, as_one_line=
True),
1099 ' [protobuf_unittest.TestMessageSetExtension1] {'
1102 ' [protobuf_unittest.TestMessageSetExtension2] {'
1108 message = unittest_pb2.TestAllTypes()
1109 text = (
'repeated_uint64: 1\n' 'repeated_uint64: 2\n')
1110 text_format.Parse(text, message)
1111 self.assertEqual(1, message.repeated_uint64[0])
1112 self.assertEqual(2, message.repeated_uint64[1])
1114 message = unittest_mset_pb2.TestMessageSetContainer()
1115 text = (
'message_set {\n'
1116 ' [protobuf_unittest.TestMessageSetExtension1] {\n'
1119 ' [protobuf_unittest.TestMessageSetExtension2] {\n'
1123 text_format.Parse(text, message)
1124 ext1 = unittest_mset_pb2.TestMessageSetExtension1.message_set_extension
1125 ext2 = unittest_mset_pb2.TestMessageSetExtension2.message_set_extension
1126 self.assertEqual(23, message.message_set.Extensions[ext1].i)
1127 self.assertEqual(
'foo', message.message_set.Extensions[ext2].str)
1130 message = test_extend_any.TestAny()
1132 ' [type.googleapis.com/google.protobuf.internal.TestAny] {\n'
1133 ' [google.protobuf.internal.TestAnyExtension1.extension1] {\n'
1138 text_format.Merge(text, message, descriptor_pool=descriptor_pool.Default())
1140 text_format.MessageToString(
1141 message, descriptor_pool=descriptor_pool.Default()),
1145 message = unittest_pb2.TestAllTypes()
1146 text = (
'34: 1\n' 'repeated_uint64: 2\n')
1147 text_format.Parse(text, message, allow_field_number=
True)
1148 self.assertEqual(1, message.repeated_uint64[0])
1149 self.assertEqual(2, message.repeated_uint64[1])
1151 message = unittest_mset_pb2.TestMessageSetContainer()
1160 text_format.Parse(text, message, allow_field_number=
True)
1161 ext1 = unittest_mset_pb2.TestMessageSetExtension1.message_set_extension
1162 ext2 = unittest_mset_pb2.TestMessageSetExtension2.message_set_extension
1163 self.assertEqual(23, message.message_set.Extensions[ext1].i)
1164 self.assertEqual(
'foo', message.message_set.Extensions[ext2].str)
1167 message = unittest_pb2.TestAllTypes()
1170 r'1:1 : Message type "\w+.TestAllTypes" has no field named '
1171 r'"34".'), text_format.Parse, text, message)
1175 six.assertRaisesRegex(
1178 (
r'1:1 : Message type "\w+.TestAllTypes" has no field named '
1183 allow_field_number=
True)
1186 message = unittest_pb2.TestAllExtensions()
1187 test_util.SetAllExtensions(message)
1190 'text_format_unittest_extensions_data.txt')
1193 message = unittest_pb2.TestAllExtensions()
1194 test_util.SetAllExtensions(message)
1197 message, pointy_brackets=
True)),
1198 'text_format_unittest_extensions_data_pointy.txt')
1202 'text_format_unittest_extensions_data.txt'))
1203 parsed_message = unittest_pb2.TestAllExtensions()
1204 text_format.Parse(golden_text, parsed_message)
1206 message = unittest_pb2.TestAllExtensions()
1207 test_util.SetAllExtensions(message)
1208 self.assertEqual(message, parsed_message)
1211 message = unittest_pb2.TestAllExtensions()
1212 test_util.SetAllExtensions(message)
1213 ascii_text = text_format.MessageToString(message)
1215 parsed_message = unittest_pb2.TestAllExtensions()
1216 text_format.Parse(ascii_text, parsed_message)
1217 self.assertEqual(message, parsed_message)
1221 message = unittest_mset_pb2.TestMessageSetContainer()
1222 text = (
'message_set {\n'
1223 ' [unknown_extension] {\n'
1226 ' [nested_unknown_ext]: {\n'
1229 ' test: "test_string"\n'
1230 ' floaty_float: -0.315\n'
1232 ' multiline_str: "abc"\n'
1235 ' [nested_unknown_ext.ext]: <\n'
1239 ' test: "test_string"\n'
1240 ' floaty_float: -0.315\n'
1242 ' long_string: "test" "test2" \n'
1246 ' [unknown_extension]: 5\n'
1247 ' [unknown_extension_with_number_field] {\n'
1248 ' 1: "some_field"\n'
1252 text_format.Parse(text, message, allow_unknown_extension=
True)
1253 golden =
'message_set {\n}\n'
1257 message = unittest_mset_pb2.TestMessageSetContainer()
1258 malformed = (
'message_set {\n'
1259 ' [unknown_extension] {\n'
1263 six.assertRaisesRegex(self,
1265 'Invalid field value: }',
1269 allow_unknown_extension=
True)
1271 message = unittest_mset_pb2.TestMessageSetContainer()
1272 malformed = (
'message_set {\n'
1273 ' [unknown_extension] {\n'
1274 ' str: "malformed string\n'
1277 six.assertRaisesRegex(self,
1279 'Invalid field value: "',
1283 allow_unknown_extension=
True)
1285 message = unittest_mset_pb2.TestMessageSetContainer()
1286 malformed = (
'message_set {\n'
1287 ' [unknown_extension] {\n'
1288 ' str: "malformed\n multiline\n string\n'
1291 six.assertRaisesRegex(self,
1293 'Invalid field value: "',
1297 allow_unknown_extension=
True)
1299 message = unittest_mset_pb2.TestMessageSetContainer()
1300 malformed = (
'message_set {\n'
1301 ' [malformed_extension] <\n'
1305 six.assertRaisesRegex(self,
1307 '5:1 : \'}\': Expected ">".',
1311 allow_unknown_extension=
True)
1314 message = unittest_mset_pb2.TestMessageSetContainer()
1315 malformed = (
'message_set {\n'
1316 ' unknown_field: true\n'
1318 six.assertRaisesRegex(self,
1320 (
'2:3 : Message type '
1321 '"proto2_wireformat_unittest.TestMessageSet" has no'
1322 ' field named "unknown_field".'),
1326 allow_unknown_extension=
True)
1329 message = unittest_mset_pb2.TestMessageSetContainer()
1330 text = (
'message_set {\n'
1331 ' [protobuf_unittest.TestMessageSetExtension1] {\n'
1334 ' [protobuf_unittest.TestMessageSetExtension2] {\n'
1338 text_format.Parse(text, message, allow_unknown_extension=
True)
1339 ext1 = unittest_mset_pb2.TestMessageSetExtension1.message_set_extension
1340 ext2 = unittest_mset_pb2.TestMessageSetExtension2.message_set_extension
1341 self.assertEqual(23, message.message_set.Extensions[ext1].i)
1342 self.assertEqual(
'foo', message.message_set.Extensions[ext2].str)
1345 message = unittest_pb2.TestAllTypes()
1346 text = (
'optional_nested_message { "bb": 1 }')
1348 text_format.Parse(text, message)
1349 self.assertEqual(
str(e.exception),
1350 '1:27 : \'optional_nested_message { "bb": 1 }\': '
1351 'Expected identifier or number, got "bb".')
1354 message = unittest_pb2.TestAllExtensions()
1355 text =
'[unknown_extension]: 8\n'
1357 '1:2 : Extension "unknown_extension" not registered.',
1358 text_format.Parse, text, message)
1359 message = unittest_pb2.TestAllTypes()
1361 '1:2 : Message type "protobuf_unittest.TestAllTypes" does not have '
1362 'extensions.'), text_format.Parse, text, message)
1365 message = unittest_pb2.TestAllTypes()
1366 text =
'optional_nested_enum: 100'
1368 (
r'1:23 : \'optional_nested_enum: 100\': '
1369 r'Enum type "\w+.TestAllTypes.NestedEnum" '
1370 r'has no value with number 100.'), text_format.Parse,
1374 message = unittest_pb2.TestAllExtensions()
1375 text = (
'[protobuf_unittest.optional_int32_extension]: 42 '
1376 '[protobuf_unittest.optional_int32_extension]: 67')
1377 text_format.Merge(text, message)
1378 self.assertEqual(67,
1379 message.Extensions[unittest_pb2.optional_int32_extension])
1382 message = unittest_pb2.TestAllExtensions()
1383 text = (
'[protobuf_unittest.optional_int32_extension]: 42 '
1384 '[protobuf_unittest.optional_int32_extension]: 67')
1386 '1:96 : Message type "protobuf_unittest.TestAllExtensions" '
1387 'should not have multiple '
1388 '"protobuf_unittest.optional_int32_extension" extensions.'),
1389 text_format.Parse, text, message)
1392 message = unittest_pb2.TestAllExtensions()
1393 text = (
'[protobuf_unittest.optional_nested_message_extension]: {} '
1394 '[protobuf_unittest.optional_nested_message_extension]: {}')
1396 '1:114 : Message type "protobuf_unittest.TestAllExtensions" '
1397 'should not have multiple '
1398 '"protobuf_unittest.optional_nested_message_extension" extensions.'),
1399 text_format.Parse, text, message)
1402 message = unittest_pb2.TestAllTypes()
1403 text =
'RepeatedGroup: <'
1405 text_format.Parse, text, message)
1406 text =
'RepeatedGroup: {'
1408 text_format.Parse, text, message)
1411 message = unittest_pb2.TestAllTypes()
1412 text =
'OptionalGroup: {}'
1413 text_format.Parse(text, message)
1414 self.assertTrue(message.HasField(
'optionalgroup'))
1418 message = unittest_pb2.TestAllTypes()
1419 text =
'OptionalGroup: <>'
1420 text_format.Parse(text, message)
1421 self.assertTrue(message.HasField(
'optionalgroup'))
1426 text = (
'map_int32_int32 {\n'
1430 'map_int64_int64 {\n'
1431 ' key: -8589934592\n'
1432 ' value: -17179869184\n'
1434 'map_uint32_uint32 {\n'
1438 'map_uint64_uint64 {\n'
1439 ' key: 8589934592\n'
1440 ' value: 17179869184\n'
1442 'map_string_string {\n'
1446 'map_int32_foreign_message {\n'
1452 message = map_unittest_pb2.TestMap()
1453 text_format.Parse(text, message)
1455 self.assertEqual(-456, message.map_int32_int32[-123])
1456 self.assertEqual(-2**34, message.map_int64_int64[-2**33])
1457 self.assertEqual(456, message.map_uint32_uint32[123])
1458 self.assertEqual(2**34, message.map_uint64_uint64[2**33])
1459 self.assertEqual(
'123', message.map_string_string[
'abc'])
1460 self.assertEqual(5, message.map_int32_foreign_message[111].c)
1466 packed_message = unittest_pb2.OneString()
1467 packed_message.data =
'string'
1468 message = any_test_pb2.TestAny()
1469 message.any_value.Pack(packed_message)
1471 text_format.MessageToString(message,
1472 descriptor_pool=descriptor_pool.Default()),
1474 ' [type.googleapis.com/protobuf_unittest.OneString] {\n'
1480 packed_msg = unittest_pb2.OneString()
1482 msg.Pack(packed_msg)
1483 text = text_format.MessageToString(msg)
1484 other_msg = text_format.Parse(text, any_pb2.Any())
1485 self.assertEqual(msg, other_msg)
1488 packed_message = unittest_pb2.OneString()
1489 message = any_test_pb2.TestAny()
1490 packed_message.data =
'string0'
1491 message.repeated_any_value.add().Pack(packed_message)
1492 packed_message.data =
'string1'
1493 message.repeated_any_value.add().Pack(packed_message)
1495 text_format.MessageToString(message),
1496 'repeated_any_value {\n'
1497 ' [type.googleapis.com/protobuf_unittest.OneString] {\n'
1498 ' data: "string0"\n'
1501 'repeated_any_value {\n'
1502 ' [type.googleapis.com/protobuf_unittest.OneString] {\n'
1503 ' data: "string1"\n'
1508 packed_message = unittest_pb2.OneString()
1509 packed_message.data =
'string'
1510 message = any_test_pb2.TestAny()
1511 message.any_value.Pack(packed_message)
1514 text_format.MessageToString(message, descriptor_pool=empty_pool),
1516 ' type_url: "type.googleapis.com/protobuf_unittest.OneString"\n'
1517 ' value: "\\n\\006string"\n'
1521 packed_message = unittest_pb2.OneString()
1522 packed_message.data =
'string'
1523 message = any_test_pb2.TestAny()
1524 message.any_value.Pack(packed_message)
1526 text_format.MessageToString(message,
1527 pointy_brackets=
True),
1529 ' [type.googleapis.com/protobuf_unittest.OneString] <\n'
1535 packed_message = unittest_pb2.OneString()
1536 packed_message.data =
'string'
1537 message = any_test_pb2.TestAny()
1538 message.any_value.Pack(packed_message)
1540 text_format.MessageToString(message,
1543 ' [type.googleapis.com/protobuf_unittest.OneString]'
1544 ' { data: "string" } '
1548 packed_message = unittest_pb2.OneString()
1549 packed_message.data =
'string'
1550 message = any_test_pb2.TestAny()
1551 message.any_value.Pack(packed_message)
1553 text_format.MessageToString(message,
1555 pointy_brackets=
True,
1556 descriptor_pool=descriptor_pool.Default()),
1558 ' [type.googleapis.com/protobuf_unittest.OneString]'
1559 ' < data: "string" > '
1563 packed_message = unittest_pb2.OneString()
1564 packed_message.data =
'string'
1565 message = any_test_pb2.TestAny()
1566 message.any_value.Pack(packed_message)
1568 message.any_value.type_url = message.any_value.TypeName()
1569 text = text_format.MessageToString(message)
1571 text,
'any_value {\n'
1572 ' type_url: "protobuf_unittest.OneString"\n'
1573 ' value: "\\n\\006string"\n'
1576 parsed_message = any_test_pb2.TestAny()
1577 text_format.Parse(text, parsed_message)
1578 self.assertEqual(message, parsed_message)
1581 message = unittest_proto3_arena_pb2.TestAllTypes()
1582 message2 = unittest_proto3_arena_pb2.TestAllTypes()
1583 message.optional_nested_enum = 999
1584 text_string = text_format.MessageToString(message)
1585 text_format.Parse(text_string, message2)
1586 self.assertEqual(999, message2.optional_nested_enum)
1589 message = any_test_pb2.TestAny()
1590 text = (
'any_value {\n'
1591 ' [type.googleapis.com/protobuf_unittest.OneString] {\n'
1595 text_format.Merge(text, message)
1596 packed_message = unittest_pb2.OneString()
1597 message.any_value.Unpack(packed_message)
1598 self.assertEqual(
'string', packed_message.data)
1600 text_format.Parse(text, message)
1601 packed_message = unittest_pb2.OneString()
1602 message.any_value.Unpack(packed_message)
1603 self.assertEqual(
'string', packed_message.data)
1606 message = any_test_pb2.TestAny()
1607 text = (
'repeated_any_value {\n'
1608 ' [type.googleapis.com/protobuf_unittest.OneString] {\n'
1609 ' data: "string0"\n'
1612 'repeated_any_value {\n'
1613 ' [type.googleapis.com/protobuf_unittest.OneString] {\n'
1614 ' data: "string1"\n'
1617 text_format.Merge(text, message)
1618 packed_message = unittest_pb2.OneString()
1619 message.repeated_any_value[0].Unpack(packed_message)
1620 self.assertEqual(
'string0', packed_message.data)
1621 message.repeated_any_value[1].Unpack(packed_message)
1622 self.assertEqual(
'string1', packed_message.data)
1625 message = any_test_pb2.TestAny()
1626 text = (
'any_value {\n'
1627 ' [type.googleapis.com/protobuf_unittest.OneString] <\n'
1631 text_format.Merge(text, message)
1632 packed_message = unittest_pb2.OneString()
1633 message.any_value.Unpack(packed_message)
1634 self.assertEqual(
'string', packed_message.data)
1637 message = any_test_pb2.TestAny()
1638 text = (
'any_value {\n'
1639 ' [type.otherapi.com/protobuf_unittest.OneString] {\n'
1643 text_format.Merge(text, message)
1644 packed_message = unittest_pb2.OneString()
1645 self.assertEqual(
'type.otherapi.com/protobuf_unittest.OneString',
1646 message.any_value.type_url)
1649 message = any_test_pb2.TestAny()
1650 text = (
'any_value {\n'
1651 ' [type.googleapis.com/protobuf_unittest.OneString] {\n'
1657 text_format.Merge(text, message, descriptor_pool=empty_pool)
1660 'Type protobuf_unittest.OneString not found in descriptor pool')
1663 text = (
'any_value {\n'
1664 ' type_url: "type.googleapis.com/protobuf_unittest.OneString"\n'
1665 ' value: "\\n\\006string"\n'
1667 message = any_test_pb2.TestAny()
1668 text_format.Merge(text, message)
1669 packed_message = unittest_pb2.OneString()
1670 message.any_value.Unpack(packed_message)
1671 self.assertEqual(
'string', packed_message.data)
1674 message = any_test_pb2.TestAny()
1675 text = (
'any_value {\n'
1676 ' [type.googleapis.com/protobuf_unittest.OneString] {\n'
1677 ' data: "string"\n')
1679 text_format.Merge(text, message)
1680 self.assertEqual(
str(e.exception),
'3:11 : Expected "}".')
1686 text = (
'identifier1:"string1"\n \n\n'
1687 'identifier2 : \n \n123 \n identifier3 :\'string\'\n'
1688 'identifiER_4 : 1.1e+2 ID5:-0.23 ID6:\'aaaa\\\'bbbb\'\n'
1689 'ID7 : "aa\\"bb"\n\n\n\n ID8: {A:inf B:-inf C:true D:false}\n'
1690 'ID9: 22 ID10: -111111111111111111 ID11: -22\n'
1691 'ID12: 2222222222222222222 ID13: 1.23456f ID14: 1.2e+2f '
1692 'false_bool: 0 true_BOOL:t \n true_bool1: 1 false_BOOL1:f '
1693 'False_bool: False True_bool: True X:iNf Y:-inF Z:nAN')
1695 methods = [(tokenizer.ConsumeIdentifier,
'identifier1'),
':',
1696 (tokenizer.ConsumeString,
'string1'),
1697 (tokenizer.ConsumeIdentifier,
'identifier2'),
':',
1698 (tokenizer.ConsumeInteger, 123),
1699 (tokenizer.ConsumeIdentifier,
'identifier3'),
':',
1700 (tokenizer.ConsumeString,
'string'),
1701 (tokenizer.ConsumeIdentifier,
'identifiER_4'),
':',
1702 (tokenizer.ConsumeFloat, 1.1e+2),
1703 (tokenizer.ConsumeIdentifier,
'ID5'),
':',
1704 (tokenizer.ConsumeFloat, -0.23),
1705 (tokenizer.ConsumeIdentifier,
'ID6'),
':',
1706 (tokenizer.ConsumeString,
'aaaa\'bbbb'),
1707 (tokenizer.ConsumeIdentifier,
'ID7'),
':',
1708 (tokenizer.ConsumeString,
'aa\"bb'),
1709 (tokenizer.ConsumeIdentifier,
'ID8'),
':',
'{',
1710 (tokenizer.ConsumeIdentifier,
'A'),
':',
1711 (tokenizer.ConsumeFloat, float(
'inf')),
1712 (tokenizer.ConsumeIdentifier,
'B'),
':',
1713 (tokenizer.ConsumeFloat, -float(
'inf')),
1714 (tokenizer.ConsumeIdentifier,
'C'),
':',
1715 (tokenizer.ConsumeBool,
True),
1716 (tokenizer.ConsumeIdentifier,
'D'),
':',
1717 (tokenizer.ConsumeBool,
False),
'}',
1718 (tokenizer.ConsumeIdentifier,
'ID9'),
':',
1719 (tokenizer.ConsumeInteger, 22),
1720 (tokenizer.ConsumeIdentifier,
'ID10'),
':',
1721 (tokenizer.ConsumeInteger, -111111111111111111),
1722 (tokenizer.ConsumeIdentifier,
'ID11'),
':',
1723 (tokenizer.ConsumeInteger, -22),
1724 (tokenizer.ConsumeIdentifier,
'ID12'),
':',
1725 (tokenizer.ConsumeInteger, 2222222222222222222),
1726 (tokenizer.ConsumeIdentifier,
'ID13'),
':',
1727 (tokenizer.ConsumeFloat, 1.23456),
1728 (tokenizer.ConsumeIdentifier,
'ID14'),
':',
1729 (tokenizer.ConsumeFloat, 1.2e+2),
1730 (tokenizer.ConsumeIdentifier,
'false_bool'),
':',
1731 (tokenizer.ConsumeBool,
False),
1732 (tokenizer.ConsumeIdentifier,
'true_BOOL'),
':',
1733 (tokenizer.ConsumeBool,
True),
1734 (tokenizer.ConsumeIdentifier,
'true_bool1'),
':',
1735 (tokenizer.ConsumeBool,
True),
1736 (tokenizer.ConsumeIdentifier,
'false_BOOL1'),
':',
1737 (tokenizer.ConsumeBool,
False),
1738 (tokenizer.ConsumeIdentifier,
'False_bool'),
':',
1739 (tokenizer.ConsumeBool,
False),
1740 (tokenizer.ConsumeIdentifier,
'True_bool'),
':',
1741 (tokenizer.ConsumeBool,
True),
1742 (tokenizer.ConsumeIdentifier,
'X'),
':',
1743 (tokenizer.ConsumeFloat, float(
'inf')),
1744 (tokenizer.ConsumeIdentifier,
'Y'),
':',
1745 (tokenizer.ConsumeFloat, float(
'-inf')),
1746 (tokenizer.ConsumeIdentifier,
'Z'),
':',
1747 (tokenizer.ConsumeFloat, float(
'nan'))]
1750 while not tokenizer.AtEnd():
1752 if isinstance(m, str):
1753 token = tokenizer.token
1754 self.assertEqual(token, m)
1755 tokenizer.NextToken()
1756 elif isinstance(m[1], float)
and math.isnan(m[1]):
1757 self.assertTrue(math.isnan(m[0]()))
1759 self.assertEqual(m[1], m[0]())
1765 int64_max = (1 << 63) - 1
1766 uint32_max = (1 << 32) - 1
1767 text =
'-1 %d %d' % (uint32_max + 1, int64_max + 1)
1769 self.assertEqual(-1, tokenizer.ConsumeInteger())
1771 self.assertEqual(uint32_max + 1, tokenizer.ConsumeInteger())
1773 self.assertEqual(int64_max + 1, tokenizer.ConsumeInteger())
1774 self.assertTrue(tokenizer.AtEnd())
1778 self.assertEqual(0, tokenizer.ConsumeInteger())
1779 self.assertEqual(0, tokenizer.ConsumeInteger())
1780 self.assertEqual(
True, tokenizer.TryConsumeInteger())
1781 self.assertEqual(
False, tokenizer.TryConsumeInteger())
1783 tokenizer.ConsumeInteger()
1784 self.assertEqual(1.2, tokenizer.ConsumeFloat())
1785 self.assertTrue(tokenizer.AtEnd())
1790 int64_max = (1 << 63) - 1
1791 uint32_max = (1 << 32) - 1
1792 text =
'-1 %d %d' % (uint32_max + 1, int64_max + 1)
1795 text_format._ConsumeUint32, tokenizer)
1797 text_format._ConsumeUint64, tokenizer)
1798 self.assertEqual(-1, text_format._ConsumeInt32(tokenizer))
1801 text_format._ConsumeUint32, tokenizer)
1803 text_format._ConsumeInt32, tokenizer)
1804 self.assertEqual(uint32_max + 1, text_format._ConsumeInt64(tokenizer))
1807 text_format._ConsumeInt64, tokenizer)
1808 self.assertEqual(int64_max + 1, text_format._ConsumeUint64(tokenizer))
1809 self.assertTrue(tokenizer.AtEnd())
1813 self.assertEqual(0, text_format._ConsumeUint32(tokenizer))
1814 self.assertEqual(0, text_format._ConsumeUint64(tokenizer))
1815 self.assertEqual(0, text_format._ConsumeUint32(tokenizer))
1816 self.assertEqual(0, text_format._ConsumeUint64(tokenizer))
1817 self.assertTrue(tokenizer.AtEnd())
1820 """Test support for C style octal integers."""
1821 text =
'00 -00 04 0755 -010 007 -0033 08 -09 01'
1823 self.assertEqual(0, tokenizer.ConsumeInteger())
1824 self.assertEqual(0, tokenizer.ConsumeInteger())
1825 self.assertEqual(4, tokenizer.ConsumeInteger())
1826 self.assertEqual(0o755, tokenizer.ConsumeInteger())
1827 self.assertEqual(-0o10, tokenizer.ConsumeInteger())
1828 self.assertEqual(7, tokenizer.ConsumeInteger())
1829 self.assertEqual(-0o033, tokenizer.ConsumeInteger())
1831 tokenizer.ConsumeInteger()
1832 tokenizer.NextToken()
1834 tokenizer.ConsumeInteger()
1835 tokenizer.NextToken()
1836 self.assertEqual(1, tokenizer.ConsumeInteger())
1837 self.assertTrue(tokenizer.AtEnd())
1867 self.assertTrue(tokenizer.AtEnd())
1872 skip_comments=
False)
1873 self.assertFalse(tokenizer.AtEnd())
1874 self.assertEqual(
'# some comment', tokenizer.ConsumeComment())
1875 self.assertTrue(tokenizer.AtEnd())
1878 text =
'# some comment\n# another comment'
1880 self.assertEqual(
'# some comment', tokenizer.ConsumeComment())
1881 self.assertFalse(tokenizer.AtEnd())
1882 self.assertEqual(
'# another comment', tokenizer.ConsumeComment())
1883 self.assertTrue(tokenizer.AtEnd())
1886 text =
'some_number: 4\n# some comment'
1890 self.assertEqual(
'some_number', tokenizer.ConsumeIdentifier())
1891 self.assertEqual(tokenizer.token,
':')
1892 tokenizer.NextToken()
1894 self.assertEqual(4, tokenizer.ConsumeInteger())
1895 self.assertFalse(tokenizer.AtEnd())
1897 self.assertEqual(
'# some comment', tokenizer.ConsumeComment())
1898 self.assertTrue(tokenizer.AtEnd())
1902 skip_comments=
False)
1903 self.assertFalse(tokenizer.AtEnd())
1904 self.assertEqual((
False,
'# some comment'),
1905 tokenizer.ConsumeCommentOrTrailingComment())
1906 self.assertTrue(tokenizer.AtEnd())
1909 text =
'# some comment\n# another comment'
1911 self.assertEqual((
False,
'# some comment'),
1912 tokenizer.ConsumeCommentOrTrailingComment())
1913 self.assertFalse(tokenizer.AtEnd())
1914 self.assertEqual((
False,
'# another comment'),
1915 tokenizer.ConsumeCommentOrTrailingComment())
1916 self.assertTrue(tokenizer.AtEnd())
1919 text =
'some_number: 4 # some comment'
1922 tokenizer.ConsumeCommentOrTrailingComment)
1924 self.assertEqual(
'some_number', tokenizer.ConsumeIdentifier())
1925 self.assertEqual(tokenizer.token,
':')
1926 tokenizer.NextToken()
1928 tokenizer.ConsumeCommentOrTrailingComment)
1929 self.assertEqual(4, tokenizer.ConsumeInteger())
1930 self.assertFalse(tokenizer.AtEnd())
1932 self.assertEqual((
True,
'# some comment'),
1933 tokenizer.ConsumeCommentOrTrailingComment())
1934 self.assertTrue(tokenizer.AtEnd())
1937 text =
'some_number: 4 # some comment # not a new comment'
1939 self.assertEqual(
'some_number', tokenizer.ConsumeIdentifier())
1940 self.assertEqual(tokenizer.token,
':')
1941 tokenizer.NextToken()
1942 self.assertEqual(4, tokenizer.ConsumeInteger())
1943 self.assertEqual((
True,
'# some comment # not a new comment'),
1944 tokenizer.ConsumeCommentOrTrailingComment())
1945 self.assertTrue(tokenizer.AtEnd())
1949 text =
'"' +
'a' * (10 * 1024 * 1024) +
'"'
1951 tokenizer.ConsumeString()
1955 @_parameterized.parameters((unittest_pb2), (unittest_proto3_arena_pb2))
1960 def printer(message, indent, as_one_line):
1961 del message, indent, as_one_line
1964 message = message_module.TestAllTypes()
1965 msg = message.repeated_nested_message.add()
1968 text_format.MessageToString(
1969 message, as_one_line=
True, message_formatter=printer),
1970 'repeated_nested_message { bb: 42 }')
1974 def printer(m, indent, as_one_line):
1975 del indent, as_one_line
1976 if m.DESCRIPTOR == message_module.TestAllTypes.NestedMessage.DESCRIPTOR:
1977 return 'My lucky number is %s' % m.bb
1979 message = message_module.TestAllTypes()
1980 msg = message.repeated_nested_message.add()
1983 text_format.MessageToString(
1984 message, as_one_line=
True, message_formatter=printer),
1985 'repeated_nested_message { My lucky number is 42 }')
1989 def printer(m, indent, as_one_line):
1990 if m.DESCRIPTOR == message_module.TestAllTypes.NestedMessage.DESCRIPTOR:
1991 line_deliminator = (
' ' if as_one_line
else '\n') +
' ' * indent
1992 return 'My lucky number is:%s%s' % (line_deliminator, m.bb)
1995 message = message_module.TestAllTypes()
1996 msg = message.repeated_nested_message.add()
1999 text_format.MessageToString(
2000 message, as_one_line=
True, message_formatter=printer),
2001 'repeated_nested_message { My lucky number is: 42 }')
2003 text_format.MessageToString(
2004 message, as_one_line=
False, message_formatter=printer),
2005 'repeated_nested_message {\n My lucky number is:\n 42\n}\n')
2009 def printer(m, indent, as_one_line):
2010 del indent, as_one_line
2011 if m.DESCRIPTOR == message_module.TestAllTypes.DESCRIPTOR:
2012 return 'The is the message!'
2015 message = message_module.TestAllTypes()
2017 text_format.MessageToString(
2018 message, as_one_line=
False, message_formatter=printer),
2019 'The is the message!\n')
2021 text_format.MessageToString(
2022 message, as_one_line=
True, message_formatter=printer),
2023 'The is the message!')
2027 def printer(m, indent, as_one_line):
2028 del indent, as_one_line
2029 if m.DESCRIPTOR == message_module.TestAllTypes.NestedMessage.DESCRIPTOR:
2030 return 'My lucky number is %s' % m.bb
2033 message = message_module.TestAllTypes()
2034 message.optional_int32 = 61
2035 msg = message.repeated_nested_message.add()
2037 msg = message.repeated_nested_message.add()
2039 msg = message.optional_nested_message
2042 text_format.MessageToString(
2043 message, as_one_line=
True, message_formatter=printer),
2044 (
'optional_int32: 61 '
2045 'optional_nested_message { My lucky number is 1 } '
2046 'repeated_nested_message { My lucky number is 42 } '
2047 'repeated_nested_message { My lucky number is 99 }'))
2050 text_format.PrintField(
2051 message_module.TestAllTypes.DESCRIPTOR.fields_by_name[
2052 'optional_nested_message'],
2053 message.optional_nested_message,
2055 message_formatter=printer)
2057 'optional_nested_message {\n My lucky number is 1\n}\n',
2062 text_format.PrintFieldValue(
2063 message_module.TestAllTypes.DESCRIPTOR.fields_by_name[
2064 'optional_nested_message'],
2065 message.optional_nested_message,
2067 message_formatter=printer)
2069 '{\n My lucky number is 1\n}',
2078 self.addCleanup(self.
out.close)
2080 self.
message.child.payload.optional_string =
'value'
2086 text_format.MessageToString(self.
message),
2087 textwrap.dedent(
"""\
2090 optional_string: "value"
2096 text_format.PrintMessage(self.
message, self.
out)
2098 self.
out.getvalue(),
2099 textwrap.dedent(
"""\
2102 optional_string: "value"
2110 self.
out.getvalue(),
2111 textwrap.dedent(
"""\
2114 optional_string: "value"
2120 text_format.PrintFieldValue(
2123 self.
out.getvalue(),
2124 textwrap.dedent(
"""\
2127 optional_string: "value"
2132 if __name__ ==
'__main__':