Пример #1
0
 def testExtensionSerializationDictMatchesProto3Spec(self):
   """See go/proto3-json-spec for spec.
   """
   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'
   message_dict = json_format.MessageToDict(
       message
   )
   golden_dict = {
       'messageSet': {
           '[protobuf_unittest.'
           'TestMessageSetExtension1.message_set_extension]': {
               'i': 23,
           },
           '[protobuf_unittest.'
           'TestMessageSetExtension2.message_set_extension]': {
               'str': u'foo',
           },
       },
   }
   self.assertEqual(golden_dict, message_dict)
   parsed_msg = unittest_mset_pb2.TestMessageSetContainer()
   json_format.ParseDict(golden_dict, parsed_msg)
   self.assertEqual(message, parsed_msg)
Пример #2
0
 def testExtensionToDictAndBack(self):
     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'
     message_dict = json_format.MessageToDict(message)
     parsed_message = unittest_mset_pb2.TestMessageSetContainer()
     json_format.ParseDict(message_dict, parsed_message)
     self.assertEqual(message, parsed_message)
  def testPrintMessageSet(self):
    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'
    self.CompareToGoldenText(
        text_format.MessageToString(message),
        'message_set {\n'
        '  [protobuf_unittest.TestMessageSetExtension1] {\n'
        '    i: 23\n'
        '  }\n'
        '  [protobuf_unittest.TestMessageSetExtension2] {\n'
        '    str: \"foo\"\n'
        '  }\n'
        '}\n')

    message = message_set_extensions_pb2.TestMessageSet()
    ext = message_set_extensions_pb2.message_set_extension3
    message.Extensions[ext].text = 'bar'
    self.CompareToGoldenText(
        text_format.MessageToString(message),
        '[google.protobuf.internal.TestMessageSetExtension3] {\n'
        '  text: \"bar\"\n'
        '}\n')
Пример #4
0
 def testPrintMessageSet(self):
     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'
     self.CompareToGoldenText(
         text_format.MessageToString(message),
         b('message_set {\n') +
         b('  [protobuf_unittest.TestMessageSetExtension1] {\n') +
         b('    i: 23\n') + b('  }\n') +
         b('  [protobuf_unittest.TestMessageSetExtension2] {\n') +
         b('    str: \"foo\"\n') + b('  }\n') + b('}\n'))
 def testPrintMessageSetAsOneLine(self):
   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'
   self.CompareToGoldenText(
       text_format.MessageToString(message, as_one_line=True),
       'message_set {'
       ' [protobuf_unittest.TestMessageSetExtension1] {'
       ' i: 23'
       ' }'
       ' [protobuf_unittest.TestMessageSetExtension2] {'
       ' str: \"foo\"'
       ' }'
       ' }')
Пример #6
0
 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()
Пример #7
0
    def testMergeMessageSet(self):
        message = unittest_pb2.TestAllTypes()
        text = (b('repeated_uint64: 1\n') + b('repeated_uint64: 2\n'))
        text_format.Merge(text, message)
        self.assertEqual(1, message.repeated_uint64[0])
        self.assertEqual(2, message.repeated_uint64[1])

        message = unittest_mset_pb2.TestMessageSetContainer()
        text = (b('message_set {\n') +
                b('  [protobuf_unittest.TestMessageSetExtension1] {\n') +
                b('    i: 23\n') + b('  }\n') +
                b('  [protobuf_unittest.TestMessageSetExtension2] {\n') +
                b('    str: \"foo\"\n') + b('  }\n') + b('}\n'))
        text_format.Merge(text, message)
        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)
Пример #8
0
    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)
Пример #9
0
 def testExtensionSerializationJsonMatchesProto3Spec(self):
     """See go/proto3-json-spec for spec.
 """
     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'
     message_text = json_format.MessageToJson(message)
     ext1_text = ('protobuf_unittest.TestMessageSetExtension1.'
                  'messageSetExtension')
     ext2_text = ('protobuf_unittest.TestMessageSetExtension2.'
                  'messageSetExtension')
     golden_text = ('{"messageSet": {'
                    '    "[%s]": {'
                    '        "i": 23'
                    '    },'
                    '    "[%s]": {'
                    '        "str": "foo"'
                    '    }'
                    '}}') % (ext1_text, ext2_text)
     self.assertEqual(json.loads(golden_text), json.loads(message_text))
Пример #10
0
    def testParseAllowedUnknownExtension(self):
        # Skip over unknown extension correctly.
        message = unittest_mset_pb2.TestMessageSetContainer()
        text = ('message_set {\n'
                '  [unknown_extension] {\n'
                '    i: 23\n'
                '    bin: "\xe0"'
                '    [nested_unknown_ext]: {\n'
                '      i: 23\n'
                '      test: "test_string"\n'
                '      floaty_float: -0.315\n'
                '      num: -inf\n'
                '      multiline_str: "abc"\n'
                '          "def"\n'
                '          "xyz."\n'
                '      [nested_unknown_ext]: <\n'
                '        i: 23\n'
                '        i: 24\n'
                '        pointfloat: .3\n'
                '        test: "test_string"\n'
                '        floaty_float: -0.315\n'
                '        num: -inf\n'
                '        long_string: "test" "test2" \n'
                '      >\n'
                '    }\n'
                '  }\n'
                '  [unknown_extension]: 5\n'
                '}\n')
        text_format.Parse(text, message, allow_unknown_extension=True)
        golden = 'message_set {\n}\n'
        self.CompareToGoldenText(text_format.MessageToString(message), golden)

        # Catch parse errors in unknown extension.
        message = unittest_mset_pb2.TestMessageSetContainer()
        malformed = (
            'message_set {\n'
            '  [unknown_extension] {\n'
            '    i:\n'  # Missing value.
            '  }\n'
            '}\n')
        six.assertRaisesRegex(self,
                              text_format.ParseError,
                              'Invalid field value: }',
                              text_format.Parse,
                              malformed,
                              message,
                              allow_unknown_extension=True)

        message = unittest_mset_pb2.TestMessageSetContainer()
        malformed = (
            'message_set {\n'
            '  [unknown_extension] {\n'
            '    str: "malformed string\n'  # Missing closing quote.
            '  }\n'
            '}\n')
        six.assertRaisesRegex(self,
                              text_format.ParseError,
                              'Invalid field value: "',
                              text_format.Parse,
                              malformed,
                              message,
                              allow_unknown_extension=True)

        message = unittest_mset_pb2.TestMessageSetContainer()
        malformed = ('message_set {\n'
                     '  [unknown_extension] {\n'
                     '    str: "malformed\n multiline\n string\n'
                     '  }\n'
                     '}\n')
        six.assertRaisesRegex(self,
                              text_format.ParseError,
                              'Invalid field value: "',
                              text_format.Parse,
                              malformed,
                              message,
                              allow_unknown_extension=True)

        message = unittest_mset_pb2.TestMessageSetContainer()
        malformed = (
            'message_set {\n'
            '  [malformed_extension] <\n'
            '    i: -5\n'
            '  \n'  # Missing '>' here.
            '}\n')
        six.assertRaisesRegex(self,
                              text_format.ParseError,
                              '5:1 : Expected ">".',
                              text_format.Parse,
                              malformed,
                              message,
                              allow_unknown_extension=True)

        # Don't allow unknown fields with allow_unknown_extension=True.
        message = unittest_mset_pb2.TestMessageSetContainer()
        malformed = (
            'message_set {\n'
            '  unknown_field: true\n'
            '  \n'  # Missing '>' here.
            '}\n')
        six.assertRaisesRegex(
            self,
            text_format.ParseError,
            ('2:3 : Message type '
             '"proto2_wireformat_unittest.TestMessageSet" has no'
             ' field named "unknown_field".'),
            text_format.Parse,
            malformed,
            message,
            allow_unknown_extension=True)

        # Parse known extension correcty.
        message = unittest_mset_pb2.TestMessageSetContainer()
        text = ('message_set {\n'
                '  [protobuf_unittest.TestMessageSetExtension1] {\n'
                '    i: 23\n'
                '  }\n'
                '  [protobuf_unittest.TestMessageSetExtension2] {\n'
                '    str: \"foo\"\n'
                '  }\n'
                '}\n')
        text_format.Parse(text, message, allow_unknown_extension=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)