| Index: third_party/protobuf/python/google/protobuf/internal/text_format_test.py
|
| diff --git a/third_party/protobuf/python/google/protobuf/internal/text_format_test.py b/third_party/protobuf/python/google/protobuf/internal/text_format_test.py
|
| index 0e14556c6f029af7940498231f558cc78db24e2d..ab2bf05b8e99f3df14319a923426abec6c6b2af2 100755
|
| --- a/third_party/protobuf/python/google/protobuf/internal/text_format_test.py
|
| +++ b/third_party/protobuf/python/google/protobuf/internal/text_format_test.py
|
| @@ -40,9 +40,10 @@ import six
|
| import string
|
|
|
| try:
|
| - import unittest2 as unittest
|
| + import unittest2 as unittest #PY26
|
| except ImportError:
|
| import unittest
|
| +
|
| from google.protobuf.internal import _parameterized
|
|
|
| from google.protobuf import map_unittest_pb2
|
| @@ -62,7 +63,7 @@ class SimpleTextFormatTests(unittest.TestCase):
|
| # expects single characters. Therefore it's an error (in addition to being
|
| # non-sensical in the first place) to try to specify a "quote mark" that is
|
| # more than one character.
|
| - def TestQuoteMarksAreSingleChars(self):
|
| + def testQuoteMarksAreSingleChars(self):
|
| for quote in text_format._QUOTES:
|
| self.assertEqual(1, len(quote))
|
|
|
| @@ -249,6 +250,36 @@ class TextFormatTest(TextFormatBase):
|
| message.c = 123
|
| self.assertEqual('c: 123\n', str(message))
|
|
|
| + def testPrintField(self, message_module):
|
| + message = message_module.TestAllTypes()
|
| + field = message.DESCRIPTOR.fields_by_name['optional_float']
|
| + value = message.optional_float
|
| + out = text_format.TextWriter(False)
|
| + text_format.PrintField(field, value, out)
|
| + self.assertEqual('optional_float: 0.0\n', out.getvalue())
|
| + out.close()
|
| + # Test Printer
|
| + out = text_format.TextWriter(False)
|
| + printer = text_format._Printer(out)
|
| + printer.PrintField(field, value)
|
| + self.assertEqual('optional_float: 0.0\n', out.getvalue())
|
| + out.close()
|
| +
|
| + def testPrintFieldValue(self, message_module):
|
| + message = message_module.TestAllTypes()
|
| + field = message.DESCRIPTOR.fields_by_name['optional_float']
|
| + value = message.optional_float
|
| + out = text_format.TextWriter(False)
|
| + text_format.PrintFieldValue(field, value, out)
|
| + self.assertEqual('0.0', out.getvalue())
|
| + out.close()
|
| + # Test Printer
|
| + out = text_format.TextWriter(False)
|
| + printer = text_format._Printer(out)
|
| + printer.PrintFieldValue(field, value)
|
| + self.assertEqual('0.0', out.getvalue())
|
| + out.close()
|
| +
|
| def testParseAllFields(self, message_module):
|
| message = message_module.TestAllTypes()
|
| test_util.SetAllFields(message)
|
| @@ -314,6 +345,18 @@ class TextFormatTest(TextFormatBase):
|
| self.assertEqual(u'one', message.repeated_string[0])
|
| self.assertEqual(u'two', message.repeated_string[1])
|
|
|
| + def testParseRepeatedMessageShortFormat(self, message_module):
|
| + message = message_module.TestAllTypes()
|
| + text = ('repeated_nested_message: [{bb: 100}, {bb: 200}],\n'
|
| + 'repeated_nested_message: {bb: 300}\n'
|
| + 'repeated_nested_message [{bb: 400}];\n')
|
| + text_format.Parse(text, message)
|
| +
|
| + self.assertEqual(100, message.repeated_nested_message[0].bb)
|
| + self.assertEqual(200, message.repeated_nested_message[1].bb)
|
| + self.assertEqual(300, message.repeated_nested_message[2].bb)
|
| + self.assertEqual(400, message.repeated_nested_message[3].bb)
|
| +
|
| def testParseEmptyText(self, message_module):
|
| message = message_module.TestAllTypes()
|
| text = ''
|
| @@ -411,6 +454,19 @@ class TextFormatTest(TextFormatBase):
|
| text_format.Parse(text_format.MessageToString(m), m2)
|
| self.assertEqual('oneof_uint32', m2.WhichOneof('oneof_field'))
|
|
|
| + def testParseMultipleOneof(self, message_module):
|
| + m_string = '\n'.join([
|
| + 'oneof_uint32: 11',
|
| + 'oneof_string: "foo"'])
|
| + m2 = message_module.TestAllTypes()
|
| + if message_module is unittest_pb2:
|
| + with self.assertRaisesRegexp(
|
| + text_format.ParseError, ' is specified along with field '):
|
| + text_format.Parse(m_string, m2)
|
| + else:
|
| + text_format.Parse(m_string, m2)
|
| + self.assertEqual('oneof_string', m2.WhichOneof('oneof_field'))
|
| +
|
|
|
| # These are tests that aren't fundamentally specific to proto2, but are at
|
| # the moment because of differences between the proto2 and proto3 test schemas.
|
| @@ -426,7 +482,8 @@ class OnlyWorksWithProto2RightNowTests(TextFormatBase):
|
| 'text_format_unittest_data_pointy_oneof.txt')
|
|
|
| def testParseGolden(self):
|
| - golden_text = '\n'.join(self.ReadGolden('text_format_unittest_data.txt'))
|
| + golden_text = '\n'.join(self.ReadGolden(
|
| + 'text_format_unittest_data_oneof_implemented.txt'))
|
| parsed_message = unittest_pb2.TestAllTypes()
|
| r = text_format.Parse(golden_text, parsed_message)
|
| self.assertIs(r, parsed_message)
|
| @@ -469,7 +526,7 @@ class OnlyWorksWithProto2RightNowTests(TextFormatBase):
|
| 'optional_nested_message {\n bb: 1\n oo: 0\n}\n')
|
|
|
| def testMergeLinesGolden(self):
|
| - opened = self.ReadGolden('text_format_unittest_data.txt')
|
| + opened = self.ReadGolden('text_format_unittest_data_oneof_implemented.txt')
|
| parsed_message = unittest_pb2.TestAllTypes()
|
| r = text_format.MergeLines(opened, parsed_message)
|
| self.assertIs(r, parsed_message)
|
| @@ -479,7 +536,7 @@ class OnlyWorksWithProto2RightNowTests(TextFormatBase):
|
| self.assertEqual(message, parsed_message)
|
|
|
| def testParseLinesGolden(self):
|
| - opened = self.ReadGolden('text_format_unittest_data.txt')
|
| + opened = self.ReadGolden('text_format_unittest_data_oneof_implemented.txt')
|
| parsed_message = unittest_pb2.TestAllTypes()
|
| r = text_format.ParseLines(opened, parsed_message)
|
| self.assertIs(r, parsed_message)
|
| @@ -589,6 +646,26 @@ class Proto2Tests(TextFormatBase):
|
| ' text: \"bar\"\n'
|
| '}\n')
|
|
|
| + def testPrintMessageSetByFieldNumber(self):
|
| + out = text_format.TextWriter(False)
|
| + message = unittest_mset_pb2.TestMessageSetContainer()
|
| + ext1 = unittest_mset_pb2.TestMessageSetExtension1.message_set_extension
|
| + ext2 = unittest_mset_pb2.TestMessageSetExtension2.message_set_extension
|
| + message.message_set.Extensions[ext1].i = 23
|
| + message.message_set.Extensions[ext2].str = 'foo'
|
| + text_format.PrintMessage(message, out, use_field_number=True)
|
| + self.CompareToGoldenText(
|
| + out.getvalue(),
|
| + '1 {\n'
|
| + ' 1545008 {\n'
|
| + ' 15: 23\n'
|
| + ' }\n'
|
| + ' 1547769 {\n'
|
| + ' 25: \"foo\"\n'
|
| + ' }\n'
|
| + '}\n')
|
| + out.close()
|
| +
|
| def testPrintMessageSetAsOneLine(self):
|
| message = unittest_mset_pb2.TestMessageSetContainer()
|
| ext1 = unittest_mset_pb2.TestMessageSetExtension1.message_set_extension
|
| @@ -629,6 +706,48 @@ class Proto2Tests(TextFormatBase):
|
| self.assertEqual(23, message.message_set.Extensions[ext1].i)
|
| self.assertEqual('foo', message.message_set.Extensions[ext2].str)
|
|
|
| + def testParseMessageByFieldNumber(self):
|
| + message = unittest_pb2.TestAllTypes()
|
| + text = ('34: 1\n'
|
| + 'repeated_uint64: 2\n')
|
| + text_format.Parse(text, message, allow_field_number=True)
|
| + self.assertEqual(1, message.repeated_uint64[0])
|
| + self.assertEqual(2, message.repeated_uint64[1])
|
| +
|
| + message = unittest_mset_pb2.TestMessageSetContainer()
|
| + text = ('1 {\n'
|
| + ' 1545008 {\n'
|
| + ' 15: 23\n'
|
| + ' }\n'
|
| + ' 1547769 {\n'
|
| + ' 25: \"foo\"\n'
|
| + ' }\n'
|
| + '}\n')
|
| + text_format.Parse(text, message, allow_field_number=True)
|
| + ext1 = unittest_mset_pb2.TestMessageSetExtension1.message_set_extension
|
| + ext2 = unittest_mset_pb2.TestMessageSetExtension2.message_set_extension
|
| + self.assertEqual(23, message.message_set.Extensions[ext1].i)
|
| + self.assertEqual('foo', message.message_set.Extensions[ext2].str)
|
| +
|
| + # Can't parse field number without set allow_field_number=True.
|
| + message = unittest_pb2.TestAllTypes()
|
| + text = '34:1\n'
|
| + six.assertRaisesRegex(
|
| + self,
|
| + text_format.ParseError,
|
| + (r'1:1 : Message type "\w+.TestAllTypes" has no field named '
|
| + r'"34".'),
|
| + text_format.Parse, text, message)
|
| +
|
| + # Can't parse if field number is not found.
|
| + text = '1234:1\n'
|
| + six.assertRaisesRegex(
|
| + self,
|
| + text_format.ParseError,
|
| + (r'1:1 : Message type "\w+.TestAllTypes" has no field named '
|
| + r'"1234".'),
|
| + text_format.Parse, text, message, allow_field_number=True)
|
| +
|
| def testPrintAllExtensions(self):
|
| message = unittest_pb2.TestAllExtensions()
|
| test_util.SetAllExtensions(message)
|
| @@ -669,6 +788,7 @@ class Proto2Tests(TextFormatBase):
|
| text = ('message_set {\n'
|
| ' [unknown_extension] {\n'
|
| ' i: 23\n'
|
| + ' bin: "\xe0"'
|
| ' [nested_unknown_ext]: {\n'
|
| ' i: 23\n'
|
| ' test: "test_string"\n'
|
|
|