1b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#! /usr/bin/env python 2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 3fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Protocol Buffers - Google's data interchange format 4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Copyright 2008 Google Inc. All rights reserved. 5afb4b72037e3f13db208590fc782c4bc8e27f862Jeff Davidson# https://developers.google.com/protocol-buffers/ 6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Redistribution and use in source and binary forms, with or without 8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# modification, are permitted provided that the following conditions are 9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# met: 10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Redistributions of source code must retain the above copyright 12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# notice, this list of conditions and the following disclaimer. 13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Redistributions in binary form must reproduce the above 14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# copyright notice, this list of conditions and the following disclaimer 15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# in the documentation and/or other materials provided with the 16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# distribution. 17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Neither the name of Google Inc. nor the names of its 18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# contributors may be used to endorse or promote products derived from 19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# this software without specific prior written permission. 20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville"""Unittest for google.protobuf.internal.descriptor.""" 34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville__author__ = 'robinson@google.com (Will Robinson)' 36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 37b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerimport sys 38b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 39b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammertry: 40b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer import unittest2 as unittest #PY26 41b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerexcept ImportError: 42b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer import unittest 43b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 44a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonfrom google.protobuf import unittest_custom_options_pb2 45d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savillefrom google.protobuf import unittest_import_pb2 46d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savillefrom google.protobuf import unittest_pb2 47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefrom google.protobuf import descriptor_pb2 48b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerfrom google.protobuf.internal import api_implementation 49b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerfrom google.protobuf.internal import test_util 50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefrom google.protobuf import descriptor 51b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerfrom google.protobuf import descriptor_pool 52b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerfrom google.protobuf import symbol_database 53d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savillefrom google.protobuf import text_format 54d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 55d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 56d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleTEST_EMPTY_MESSAGE_DESCRIPTOR_ASCII = """ 57d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savillename: 'TestEmptyMessage' 58d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville""" 59d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 60fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 61b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerclass DescriptorTest(unittest.TestCase): 62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 63fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def setUp(self): 64b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer file_proto = descriptor_pb2.FileDescriptorProto( 65d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville name='some/filename/some.proto', 66b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer package='protobuf_unittest') 67b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message_proto = file_proto.message_type.add( 68b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer name='NestedMessage') 69b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message_proto.field.add( 70b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer name='bb', 71b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer number=1, 72b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer type=descriptor_pb2.FieldDescriptorProto.TYPE_INT32, 73b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer label=descriptor_pb2.FieldDescriptorProto.LABEL_OPTIONAL) 74b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer enum_proto = message_proto.enum_type.add( 75b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer name='ForeignEnum') 76b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer enum_proto.value.add(name='FOREIGN_FOO', number=4) 77b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer enum_proto.value.add(name='FOREIGN_BAR', number=5) 78b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer enum_proto.value.add(name='FOREIGN_BAZ', number=6) 79b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 80b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.pool = self.GetDescriptorPool() 81b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.pool.Add(file_proto) 82b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.my_file = self.pool.FindFileByName(file_proto.name) 83b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.my_message = self.my_file.message_types_by_name[message_proto.name] 84b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.my_enum = self.my_message.enum_types_by_name[enum_proto.name] 85b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 86fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.my_method = descriptor.MethodDescriptor( 87fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville name='Bar', 88fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville full_name='protobuf_unittest.TestService.Bar', 89fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville index=0, 90fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville containing_service=None, 91fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville input_type=None, 92fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville output_type=None) 93fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.my_service = descriptor.ServiceDescriptor( 94fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville name='TestServiceWithOptions', 95fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville full_name='protobuf_unittest.TestServiceWithOptions', 96d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville file=self.my_file, 97fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville index=0, 98fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville methods=[ 99fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.my_method 100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ]) 101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 102b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer def GetDescriptorPool(self): 103b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return symbol_database.Default().pool 104b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 105a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testEnumValueName(self): 106a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(self.my_message.EnumValueName('ForeignEnum', 4), 107a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'FOREIGN_FOO') 108a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 109a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual( 110a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.my_message.enum_types_by_name[ 111a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'ForeignEnum'].values_by_number[4].name, 112a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.my_message.EnumValueName('ForeignEnum', 4)) 113a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 114fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testEnumFixups(self): 115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(self.my_enum, self.my_enum.values[0].type) 116fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 117fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testContainingTypeFixups(self): 118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(self.my_message, self.my_message.fields[0].containing_type) 119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(self.my_message, self.my_enum.containing_type) 120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 121fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testContainingServiceFixups(self): 122fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(self.my_service, self.my_method.containing_service) 123fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 124fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testGetOptions(self): 125fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(self.my_enum.GetOptions(), 126fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville descriptor_pb2.EnumOptions()) 127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(self.my_enum.values[0].GetOptions(), 128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville descriptor_pb2.EnumValueOptions()) 129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(self.my_message.GetOptions(), 130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville descriptor_pb2.MessageOptions()) 131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(self.my_message.fields[0].GetOptions(), 132fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville descriptor_pb2.FieldOptions()) 133fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(self.my_method.GetOptions(), 134fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville descriptor_pb2.MethodOptions()) 135fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(self.my_service.GetOptions(), 136fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville descriptor_pb2.ServiceOptions()) 137fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 138a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testSimpleCustomOptions(self): 139a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson file_descriptor = unittest_custom_options_pb2.DESCRIPTOR 140a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_descriptor =\ 141a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.TestMessageWithCustomOptions.DESCRIPTOR 142a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field_descriptor = message_descriptor.fields_by_name["field1"] 143a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_descriptor = message_descriptor.enum_types_by_name["AnEnum"] 144a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_value_descriptor =\ 145a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_descriptor.enum_values_by_name["ANENUM_VAL2"] 146a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson service_descriptor =\ 147a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.TestServiceWithCustomOptions.DESCRIPTOR 148a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson method_descriptor = service_descriptor.FindMethodByName("Foo") 149a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 150a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson file_options = file_descriptor.GetOptions() 151a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson file_opt1 = unittest_custom_options_pb2.file_opt1 152a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(9876543210, file_options.Extensions[file_opt1]) 153a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_options = message_descriptor.GetOptions() 154a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_opt1 = unittest_custom_options_pb2.message_opt1 155a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(-56, message_options.Extensions[message_opt1]) 156a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field_options = field_descriptor.GetOptions() 157a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field_opt1 = unittest_custom_options_pb2.field_opt1 158a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(8765432109, field_options.Extensions[field_opt1]) 159a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field_opt2 = unittest_custom_options_pb2.field_opt2 160a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(42, field_options.Extensions[field_opt2]) 161a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_options = enum_descriptor.GetOptions() 162a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_opt1 = unittest_custom_options_pb2.enum_opt1 163a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(-789, enum_options.Extensions[enum_opt1]) 164a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_value_options = enum_value_descriptor.GetOptions() 165a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_value_opt1 = unittest_custom_options_pb2.enum_value_opt1 166a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(123, enum_value_options.Extensions[enum_value_opt1]) 167a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 168a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson service_options = service_descriptor.GetOptions() 169a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson service_opt1 = unittest_custom_options_pb2.service_opt1 170a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(-9876543210, service_options.Extensions[service_opt1]) 171a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson method_options = method_descriptor.GetOptions() 172a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson method_opt1 = unittest_custom_options_pb2.method_opt1 173a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(unittest_custom_options_pb2.METHODOPT1_VAL2, 174a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson method_options.Extensions[method_opt1]) 175a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 176b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message_descriptor = ( 177b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer unittest_custom_options_pb2.DummyMessageContainingEnum.DESCRIPTOR) 178b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertTrue(file_descriptor.has_options) 179b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertFalse(message_descriptor.has_options) 180b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 181a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testDifferentCustomOptionTypes(self): 182a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson kint32min = -2**31 183a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson kint64min = -2**63 184a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson kint32max = 2**31 - 1 185a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson kint64max = 2**63 - 1 186a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson kuint32max = 2**32 - 1 187a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson kuint64max = 2**64 - 1 188a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 189a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_descriptor =\ 190a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.CustomOptionMinIntegerValues.DESCRIPTOR 191a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_options = message_descriptor.GetOptions() 192a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(False, message_options.Extensions[ 193a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.bool_opt]) 194a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(kint32min, message_options.Extensions[ 195a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.int32_opt]) 196a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(kint64min, message_options.Extensions[ 197a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.int64_opt]) 198a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(0, message_options.Extensions[ 199a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.uint32_opt]) 200a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(0, message_options.Extensions[ 201a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.uint64_opt]) 202a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(kint32min, message_options.Extensions[ 203a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.sint32_opt]) 204a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(kint64min, message_options.Extensions[ 205a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.sint64_opt]) 206a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(0, message_options.Extensions[ 207a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.fixed32_opt]) 208a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(0, message_options.Extensions[ 209a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.fixed64_opt]) 210a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(kint32min, message_options.Extensions[ 211a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.sfixed32_opt]) 212a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(kint64min, message_options.Extensions[ 213a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.sfixed64_opt]) 214a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 215a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_descriptor =\ 216a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.CustomOptionMaxIntegerValues.DESCRIPTOR 217a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_options = message_descriptor.GetOptions() 218a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(True, message_options.Extensions[ 219a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.bool_opt]) 220a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(kint32max, message_options.Extensions[ 221a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.int32_opt]) 222a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(kint64max, message_options.Extensions[ 223a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.int64_opt]) 224a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(kuint32max, message_options.Extensions[ 225a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.uint32_opt]) 226a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(kuint64max, message_options.Extensions[ 227a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.uint64_opt]) 228a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(kint32max, message_options.Extensions[ 229a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.sint32_opt]) 230a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(kint64max, message_options.Extensions[ 231a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.sint64_opt]) 232a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(kuint32max, message_options.Extensions[ 233a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.fixed32_opt]) 234a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(kuint64max, message_options.Extensions[ 235a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.fixed64_opt]) 236a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(kint32max, message_options.Extensions[ 237a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.sfixed32_opt]) 238a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(kint64max, message_options.Extensions[ 239a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.sfixed64_opt]) 240a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 241a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_descriptor =\ 242a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.CustomOptionOtherValues.DESCRIPTOR 243a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_options = message_descriptor.GetOptions() 244a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(-100, message_options.Extensions[ 245a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.int32_opt]) 246a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertAlmostEqual(12.3456789, message_options.Extensions[ 247a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.float_opt], 6) 248a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertAlmostEqual(1.234567890123456789, message_options.Extensions[ 249a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.double_opt]) 250a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual("Hello, \"World\"", message_options.Extensions[ 251a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.string_opt]) 252a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(b"Hello\0World", message_options.Extensions[ 253a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.bytes_opt]) 254a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson dummy_enum = unittest_custom_options_pb2.DummyMessageContainingEnum 255a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual( 256a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson dummy_enum.TEST_OPTION_ENUM_TYPE2, 257a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_options.Extensions[unittest_custom_options_pb2.enum_opt]) 258a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 259a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_descriptor =\ 260a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.SettingRealsFromPositiveInts.DESCRIPTOR 261a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_options = message_descriptor.GetOptions() 262a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertAlmostEqual(12, message_options.Extensions[ 263a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.float_opt], 6) 264a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertAlmostEqual(154, message_options.Extensions[ 265a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.double_opt]) 266a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 267a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_descriptor =\ 268a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.SettingRealsFromNegativeInts.DESCRIPTOR 269a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_options = message_descriptor.GetOptions() 270a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertAlmostEqual(-12, message_options.Extensions[ 271a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.float_opt], 6) 272a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertAlmostEqual(-154, message_options.Extensions[ 273a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.double_opt]) 274a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 275a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testComplexExtensionOptions(self): 276a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson descriptor =\ 277a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.VariousComplexOptions.DESCRIPTOR 278a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson options = descriptor.GetOptions() 279a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(42, options.Extensions[ 280a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.complex_opt1].foo) 281a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(324, options.Extensions[ 282a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.complex_opt1].Extensions[ 283a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.quux]) 284a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(876, options.Extensions[ 285a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.complex_opt1].Extensions[ 286a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.corge].qux) 287a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(987, options.Extensions[ 288a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.complex_opt2].baz) 289a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(654, options.Extensions[ 290a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.complex_opt2].Extensions[ 291a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.grault]) 292a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(743, options.Extensions[ 293a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.complex_opt2].bar.foo) 294a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(1999, options.Extensions[ 295a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.complex_opt2].bar.Extensions[ 296a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.quux]) 297a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(2008, options.Extensions[ 298a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.complex_opt2].bar.Extensions[ 299a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.corge].qux) 300a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(741, options.Extensions[ 301a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.complex_opt2].Extensions[ 302a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.garply].foo) 303a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(1998, options.Extensions[ 304a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.complex_opt2].Extensions[ 305a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.garply].Extensions[ 306a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.quux]) 307a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(2121, options.Extensions[ 308a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.complex_opt2].Extensions[ 309a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.garply].Extensions[ 310a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.corge].qux) 311a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(1971, options.Extensions[ 312a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.ComplexOptionType2 313a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .ComplexOptionType4.complex_opt4].waldo) 314a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(321, options.Extensions[ 315a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.complex_opt2].fred.waldo) 316a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(9, options.Extensions[ 317a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.complex_opt3].qux) 318a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(22, options.Extensions[ 319a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.complex_opt3].complexoptiontype5.plugh) 320a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(24, options.Extensions[ 321a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.complexopt6].xyzzy) 322a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 323a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # Check that aggregate options were parsed and saved correctly in 324a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # the appropriate descriptors. 325a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testAggregateOptions(self): 326a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson file_descriptor = unittest_custom_options_pb2.DESCRIPTOR 327a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_descriptor =\ 328a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.AggregateMessage.DESCRIPTOR 329a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field_descriptor = message_descriptor.fields_by_name["fieldname"] 330a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_descriptor = unittest_custom_options_pb2.AggregateEnum.DESCRIPTOR 331a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_value_descriptor = enum_descriptor.values_by_name["VALUE"] 332a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson service_descriptor =\ 333a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.AggregateService.DESCRIPTOR 334a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson method_descriptor = service_descriptor.FindMethodByName("Method") 335a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 336a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # Tests for the different types of data embedded in fileopt 337a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson file_options = file_descriptor.GetOptions().Extensions[ 338a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.fileopt] 339a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(100, file_options.i) 340a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual("FileAnnotation", file_options.s) 341a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual("NestedFileAnnotation", file_options.sub.s) 342a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual("FileExtensionAnnotation", file_options.file.Extensions[ 343a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.fileopt].s) 344a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual("EmbeddedMessageSetElement", file_options.mset.Extensions[ 345a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.AggregateMessageSetElement 346a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson .message_set_extension].s) 347a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 348a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # Simple tests for all the other types of annotations 349a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual( 350a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "MessageAnnotation", 351a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_descriptor.GetOptions().Extensions[ 352a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.msgopt].s) 353a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual( 354a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "FieldAnnotation", 355a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field_descriptor.GetOptions().Extensions[ 356a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.fieldopt].s) 357a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual( 358a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "EnumAnnotation", 359a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_descriptor.GetOptions().Extensions[ 360a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.enumopt].s) 361a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual( 362a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "EnumValueAnnotation", 363a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_value_descriptor.GetOptions().Extensions[ 364a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.enumvalopt].s) 365a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual( 366a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "ServiceAnnotation", 367a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson service_descriptor.GetOptions().Extensions[ 368a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.serviceopt].s) 369a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual( 370a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson "MethodAnnotation", 371a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson method_descriptor.GetOptions().Extensions[ 372a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.methodopt].s) 373a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 374a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testNestedOptions(self): 375a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson nested_message =\ 376a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.NestedOptionType.NestedMessage.DESCRIPTOR 377a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(1001, nested_message.GetOptions().Extensions[ 378a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.message_opt1]) 379a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson nested_field = nested_message.fields_by_name["nested_field"] 380a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(1002, nested_field.GetOptions().Extensions[ 381a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.field_opt1]) 382a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson outer_message =\ 383a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.NestedOptionType.DESCRIPTOR 384a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson nested_enum = outer_message.enum_types_by_name["NestedEnum"] 385a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(1003, nested_enum.GetOptions().Extensions[ 386a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.enum_opt1]) 387a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson nested_enum_value = outer_message.enum_values_by_name["NESTED_ENUM_VALUE"] 388a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(1004, nested_enum_value.GetOptions().Extensions[ 389a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.enum_value_opt1]) 390a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson nested_extension = outer_message.extensions_by_name["nested_extension"] 391a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(1005, nested_extension.GetOptions().Extensions[ 392a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson unittest_custom_options_pb2.field_opt2]) 393a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 394d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testFileDescriptorReferences(self): 395d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual(self.my_enum.file, self.my_file) 396d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual(self.my_message.file, self.my_file) 397d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 398d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testFileDescriptor(self): 399d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual(self.my_file.name, 'some/filename/some.proto') 400d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual(self.my_file.package, 'protobuf_unittest') 401b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(self.my_file.pool, self.pool) 402b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer # Generated modules also belong to the default pool. 403b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(unittest_pb2.DESCRIPTOR.pool, descriptor_pool.Default()) 404b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 405b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer @unittest.skipIf( 406b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer api_implementation.Type() != 'cpp' or api_implementation.Version() != 2, 407b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 'Immutability of descriptors is only enforced in v2 implementation') 408b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer def testImmutableCppDescriptor(self): 409b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message_descriptor = unittest_pb2.TestAllTypes.DESCRIPTOR 410b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer with self.assertRaises(AttributeError): 411b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message_descriptor.fields_by_name = None 412b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer with self.assertRaises(TypeError): 413b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message_descriptor.fields_by_name['Another'] = None 414b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer with self.assertRaises(TypeError): 415b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message_descriptor.fields.append(None) 416b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 417b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 418b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerclass NewDescriptorTest(DescriptorTest): 419b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer """Redo the same tests as above, but with a separate DescriptorPool.""" 420b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 421b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer def GetDescriptorPool(self): 422b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer return descriptor_pool.DescriptorPool() 423b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 424b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 425b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerclass GeneratedDescriptorTest(unittest.TestCase): 426b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer """Tests for the properties of descriptors in generated code.""" 427b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 428b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer def CheckMessageDescriptor(self, message_descriptor): 429b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer # Basic properties 430b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(message_descriptor.name, 'TestAllTypes') 431b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(message_descriptor.full_name, 432b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 'protobuf_unittest.TestAllTypes') 433b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer # Test equality and hashability 434b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(message_descriptor, message_descriptor) 435b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(message_descriptor.fields[0].containing_type, 436b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message_descriptor) 437b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertIn(message_descriptor, [message_descriptor]) 438b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertIn(message_descriptor, {message_descriptor: None}) 439b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer # Test field containers 440b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.CheckDescriptorSequence(message_descriptor.fields) 441b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.CheckDescriptorMapping(message_descriptor.fields_by_name) 442b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.CheckDescriptorMapping(message_descriptor.fields_by_number) 443b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.CheckDescriptorMapping(message_descriptor.fields_by_camelcase_name) 444b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 445b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer def CheckFieldDescriptor(self, field_descriptor): 446b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer # Basic properties 447b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(field_descriptor.name, 'optional_int32') 448b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(field_descriptor.camelcase_name, 'optionalInt32') 449b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(field_descriptor.full_name, 450b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 'protobuf_unittest.TestAllTypes.optional_int32') 451b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(field_descriptor.containing_type.name, 'TestAllTypes') 452b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer # Test equality and hashability 453b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(field_descriptor, field_descriptor) 454b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual( 455b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer field_descriptor.containing_type.fields_by_name['optional_int32'], 456b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer field_descriptor) 457b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual( 458b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer field_descriptor.containing_type.fields_by_camelcase_name[ 459b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 'optionalInt32'], 460b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer field_descriptor) 461b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertIn(field_descriptor, [field_descriptor]) 462b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertIn(field_descriptor, {field_descriptor: None}) 463b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 464b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer def CheckDescriptorSequence(self, sequence): 465b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer # Verifies that a property like 'messageDescriptor.fields' has all the 466b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer # properties of an immutable abc.Sequence. 467b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertGreater(len(sequence), 0) # Sized 468b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(len(sequence), len(list(sequence))) # Iterable 469b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer item = sequence[0] 470b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(item, sequence[0]) 471b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertIn(item, sequence) # Container 472b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(sequence.index(item), 0) 473b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(sequence.count(item), 1) 474b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer reversed_iterator = reversed(sequence) 475b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(list(reversed_iterator), list(sequence)[::-1]) 476b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertRaises(StopIteration, next, reversed_iterator) 477b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 478b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer def CheckDescriptorMapping(self, mapping): 479b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer # Verifies that a property like 'messageDescriptor.fields' has all the 480b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer # properties of an immutable abc.Mapping. 481b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertGreater(len(mapping), 0) # Sized 482b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(len(mapping), len(list(mapping))) # Iterable 483b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if sys.version_info >= (3,): 484b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer key, item = next(iter(mapping.items())) 485b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer else: 486b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer key, item = mapping.items()[0] 487b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertIn(key, mapping) # Container 488b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(mapping.get(key), item) 489b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer # keys(), iterkeys() &co 490b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer item = (next(iter(mapping.keys())), next(iter(mapping.values()))) 491b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(item, next(iter(mapping.items()))) 492b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer if sys.version_info < (3,): 493b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer def CheckItems(seq, iterator): 494b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(next(iterator), seq[0]) 495b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(list(iterator), seq[1:]) 496b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer CheckItems(mapping.keys(), mapping.iterkeys()) 497b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer CheckItems(mapping.values(), mapping.itervalues()) 498b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer CheckItems(mapping.items(), mapping.iteritems()) 499b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 500b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer def testDescriptor(self): 501b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message_descriptor = unittest_pb2.TestAllTypes.DESCRIPTOR 502b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.CheckMessageDescriptor(message_descriptor) 503b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer field_descriptor = message_descriptor.fields_by_name['optional_int32'] 504b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.CheckFieldDescriptor(field_descriptor) 505b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer field_descriptor = message_descriptor.fields_by_camelcase_name[ 506b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 'optionalInt32'] 507b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.CheckFieldDescriptor(field_descriptor) 508b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 509b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer def testCppDescriptorContainer(self): 510b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer # Check that the collection is still valid even if the parent disappeared. 511b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer enum = unittest_pb2.TestAllTypes.DESCRIPTOR.enum_types_by_name['NestedEnum'] 512b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer values = enum.values 513b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer del enum 514b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual('FOO', values[0].name) 515b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 516b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer def testCppDescriptorContainer_Iterator(self): 517b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer # Same test with the iterator 518b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer enum = unittest_pb2.TestAllTypes.DESCRIPTOR.enum_types_by_name['NestedEnum'] 519b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer values_iter = iter(enum.values) 520b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer del enum 521b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual('FOO', next(values_iter).name) 522b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 523b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 524b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerclass DescriptorCopyToProtoTest(unittest.TestCase): 525d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """Tests for CopyTo functions of Descriptor.""" 526d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 527d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def _AssertProtoEqual(self, actual_proto, expected_class, expected_ascii): 528d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville expected_proto = expected_class() 529d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville text_format.Merge(expected_ascii, expected_proto) 530d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 531d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual( 532d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville actual_proto, expected_proto, 533d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 'Not equal,\nActual:\n%s\nExpected:\n%s\n' 534d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville % (str(actual_proto), str(expected_proto))) 535d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 536d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def _InternalTestCopyToProto(self, desc, expected_proto_class, 537d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville expected_proto_ascii): 538d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville actual = expected_proto_class() 539d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville desc.CopyToProto(actual) 540d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._AssertProtoEqual( 541d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville actual, expected_proto_class, expected_proto_ascii) 542d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 543d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testCopyToProto_EmptyMessage(self): 544d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._InternalTestCopyToProto( 545d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestEmptyMessage.DESCRIPTOR, 546d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville descriptor_pb2.DescriptorProto, 547d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville TEST_EMPTY_MESSAGE_DESCRIPTOR_ASCII) 548d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 549d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testCopyToProto_NestedMessage(self): 550d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville TEST_NESTED_MESSAGE_ASCII = """ 551d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville name: 'NestedMessage' 552d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville field: < 553d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville name: 'bb' 554d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville number: 1 555d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville label: 1 # Optional 556d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville type: 5 # TYPE_INT32 557d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville > 558d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """ 559d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 560d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._InternalTestCopyToProto( 561d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.NestedMessage.DESCRIPTOR, 562d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville descriptor_pb2.DescriptorProto, 563d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville TEST_NESTED_MESSAGE_ASCII) 564d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 565d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testCopyToProto_ForeignNestedMessage(self): 566d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville TEST_FOREIGN_NESTED_ASCII = """ 567d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville name: 'TestForeignNested' 568d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville field: < 569d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville name: 'foreign_nested' 570d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville number: 1 571d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville label: 1 # Optional 572d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville type: 11 # TYPE_MESSAGE 573d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville type_name: '.protobuf_unittest.TestAllTypes.NestedMessage' 574d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville > 575d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """ 576d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 577d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._InternalTestCopyToProto( 578d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestForeignNested.DESCRIPTOR, 579d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville descriptor_pb2.DescriptorProto, 580d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville TEST_FOREIGN_NESTED_ASCII) 581d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 582d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testCopyToProto_ForeignEnum(self): 583d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville TEST_FOREIGN_ENUM_ASCII = """ 584d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville name: 'ForeignEnum' 585d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville value: < 586d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville name: 'FOREIGN_FOO' 587d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville number: 4 588d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville > 589d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville value: < 590d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville name: 'FOREIGN_BAR' 591d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville number: 5 592d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville > 593d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville value: < 594d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville name: 'FOREIGN_BAZ' 595d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville number: 6 596d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville > 597d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """ 598d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 599d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._InternalTestCopyToProto( 600b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer unittest_pb2.ForeignEnum.DESCRIPTOR, 601d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville descriptor_pb2.EnumDescriptorProto, 602d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville TEST_FOREIGN_ENUM_ASCII) 603d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 604d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testCopyToProto_Options(self): 605d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville TEST_DEPRECATED_FIELDS_ASCII = """ 606d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville name: 'TestDeprecatedFields' 607d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville field: < 608d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville name: 'deprecated_int32' 609d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville number: 1 610d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville label: 1 # Optional 611d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville type: 5 # TYPE_INT32 612d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville options: < 613d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville deprecated: true 614d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville > 615d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville > 616d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """ 617d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 618d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._InternalTestCopyToProto( 619d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestDeprecatedFields.DESCRIPTOR, 620d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville descriptor_pb2.DescriptorProto, 621d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville TEST_DEPRECATED_FIELDS_ASCII) 622d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 623d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testCopyToProto_AllExtensions(self): 624d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville TEST_EMPTY_MESSAGE_WITH_EXTENSIONS_ASCII = """ 625d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville name: 'TestEmptyMessageWithExtensions' 626d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville extension_range: < 627d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville start: 1 628d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville end: 536870912 629d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville > 630d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """ 631d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 632d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._InternalTestCopyToProto( 633d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestEmptyMessageWithExtensions.DESCRIPTOR, 634d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville descriptor_pb2.DescriptorProto, 635d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville TEST_EMPTY_MESSAGE_WITH_EXTENSIONS_ASCII) 636d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 637d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testCopyToProto_SeveralExtensions(self): 638d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville TEST_MESSAGE_WITH_SEVERAL_EXTENSIONS_ASCII = """ 639d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville name: 'TestMultipleExtensionRanges' 640d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville extension_range: < 641d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville start: 42 642d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville end: 43 643d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville > 644d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville extension_range: < 645d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville start: 4143 646d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville end: 4244 647d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville > 648d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville extension_range: < 649d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville start: 65536 650d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville end: 536870912 651d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville > 652d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """ 653d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 654d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self._InternalTestCopyToProto( 655d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestMultipleExtensionRanges.DESCRIPTOR, 656d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville descriptor_pb2.DescriptorProto, 657d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville TEST_MESSAGE_WITH_SEVERAL_EXTENSIONS_ASCII) 658d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 659a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # Disable this test so we can make changes to the proto file. 660a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # TODO(xiaofeng): Enable this test after cl/55530659 is submitted. 661a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # 662a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # def testCopyToProto_FileDescriptor(self): 663a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # UNITTEST_IMPORT_FILE_DESCRIPTOR_ASCII = (""" 664a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # name: 'google/protobuf/unittest_import.proto' 665a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # package: 'protobuf_unittest_import' 666a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # dependency: 'google/protobuf/unittest_import_public.proto' 667a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # message_type: < 668a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # name: 'ImportMessage' 669a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # field: < 670a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # name: 'd' 671a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # number: 1 672a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # label: 1 # Optional 673a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # type: 5 # TYPE_INT32 674a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # > 675a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # > 676a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # """ + 677a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # """enum_type: < 678a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # name: 'ImportEnum' 679a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # value: < 680a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # name: 'IMPORT_FOO' 681a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # number: 7 682a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # > 683a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # value: < 684a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # name: 'IMPORT_BAR' 685a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # number: 8 686a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # > 687a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # value: < 688a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # name: 'IMPORT_BAZ' 689a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # number: 9 690a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # > 691a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # > 692a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # options: < 693a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # java_package: 'com.google.protobuf.test' 694a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # optimize_for: 1 # SPEED 695a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # > 696a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # public_dependency: 0 697a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # """) 698a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # self._InternalTestCopyToProto( 699a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # unittest_import_pb2.DESCRIPTOR, 700a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # descriptor_pb2.FileDescriptorProto, 701a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # UNITTEST_IMPORT_FILE_DESCRIPTOR_ASCII) 702d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 703d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testCopyToProto_ServiceDescriptor(self): 704d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville TEST_SERVICE_ASCII = """ 705d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville name: 'TestService' 706d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville method: < 707d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville name: 'Foo' 708d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville input_type: '.protobuf_unittest.FooRequest' 709d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville output_type: '.protobuf_unittest.FooResponse' 710d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville > 711d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville method: < 712d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville name: 'Bar' 713d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville input_type: '.protobuf_unittest.BarRequest' 714d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville output_type: '.protobuf_unittest.BarResponse' 715d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville > 716d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville """ 717b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer # TODO(rocking): enable this test after the proto descriptor change is 718b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer # checked in. 719b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer #self._InternalTestCopyToProto( 720b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer # unittest_pb2.TestService.DESCRIPTOR, 721b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer # descriptor_pb2.ServiceDescriptorProto, 722b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer # TEST_SERVICE_ASCII) 723d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 724d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 725b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammerclass MakeDescriptorTest(unittest.TestCase): 726a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 727a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testMakeDescriptorWithNestedFields(self): 728a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson file_descriptor_proto = descriptor_pb2.FileDescriptorProto() 729a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson file_descriptor_proto.name = 'Foo2' 730a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_type = file_descriptor_proto.message_type.add() 731a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_type.name = file_descriptor_proto.name 732a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson nested_type = message_type.nested_type.add() 733a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson nested_type.name = 'Sub' 734a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_type = nested_type.enum_type.add() 735a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_type.name = 'FOO' 736a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_type_val = enum_type.value.add() 737a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_type_val.name = 'BAR' 738a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_type_val.number = 3 739a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field = message_type.field.add() 740a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field.number = 1 741a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field.name = 'uint64_field' 742a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field.label = descriptor.FieldDescriptor.LABEL_REQUIRED 743a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field.type = descriptor.FieldDescriptor.TYPE_UINT64 744a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field = message_type.field.add() 745a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field.number = 2 746a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field.name = 'nested_message_field' 747a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field.label = descriptor.FieldDescriptor.LABEL_REQUIRED 748a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field.type = descriptor.FieldDescriptor.TYPE_MESSAGE 749a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field.type_name = 'Sub' 750a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_field = nested_type.field.add() 751a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_field.number = 2 752a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_field.name = 'bar_field' 753a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_field.label = descriptor.FieldDescriptor.LABEL_REQUIRED 754a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_field.type = descriptor.FieldDescriptor.TYPE_ENUM 755a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_field.type_name = 'Foo2.Sub.FOO' 756a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 757a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson result = descriptor.MakeDescriptor(message_type) 758a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(result.fields[0].cpp_type, 759a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson descriptor.FieldDescriptor.CPPTYPE_UINT64) 760a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(result.fields[1].cpp_type, 761a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson descriptor.FieldDescriptor.CPPTYPE_MESSAGE) 762a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(result.fields[1].message_type.containing_type, 763a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson result) 764a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(result.nested_types[0].fields[0].full_name, 765a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'Foo2.Sub.bar_field') 766a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(result.nested_types[0].fields[0].enum_type, 767a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson result.nested_types[0].enum_types[0]) 768a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 769a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testMakeDescriptorWithUnsignedIntField(self): 770a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson file_descriptor_proto = descriptor_pb2.FileDescriptorProto() 771a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson file_descriptor_proto.name = 'Foo' 772a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_type = file_descriptor_proto.message_type.add() 773a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message_type.name = file_descriptor_proto.name 774a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_type = message_type.enum_type.add() 775a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_type.name = 'FOO' 776a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_type_val = enum_type.value.add() 777a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_type_val.name = 'BAR' 778a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_type_val.number = 3 779a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field = message_type.field.add() 780a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field.number = 1 781a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field.name = 'uint64_field' 782a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field.label = descriptor.FieldDescriptor.LABEL_REQUIRED 783a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field.type = descriptor.FieldDescriptor.TYPE_UINT64 784a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_field = message_type.field.add() 785a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_field.number = 2 786a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_field.name = 'bar_field' 787a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_field.label = descriptor.FieldDescriptor.LABEL_REQUIRED 788a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_field.type = descriptor.FieldDescriptor.TYPE_ENUM 789a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_field.type_name = 'Foo.FOO' 790a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 791a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson result = descriptor.MakeDescriptor(message_type) 792a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(result.fields[0].cpp_type, 793a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson descriptor.FieldDescriptor.CPPTYPE_UINT64) 794a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 795a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 796b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer def testMakeDescriptorWithOptions(self): 797b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer descriptor_proto = descriptor_pb2.DescriptorProto() 798b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer aggregate_message = unittest_custom_options_pb2.AggregateMessage 799b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer aggregate_message.DESCRIPTOR.CopyToProto(descriptor_proto) 800b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer reformed_descriptor = descriptor.MakeDescriptor(descriptor_proto) 801b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 802b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer options = reformed_descriptor.GetOptions() 803b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(101, 804b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer options.Extensions[unittest_custom_options_pb2.msgopt].i) 805b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 806b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer def testCamelcaseName(self): 807b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer descriptor_proto = descriptor_pb2.DescriptorProto() 808b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer descriptor_proto.name = 'Bar' 809b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer names = ['foo_foo', 'FooBar', 'fooBaz', 'fooFoo', 'foobar'] 810b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer camelcase_names = ['fooFoo', 'fooBar', 'fooBaz', 'fooFoo', 'foobar'] 811b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for index in range(len(names)): 812b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer field = descriptor_proto.field.add() 813b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer field.number = index + 1 814b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer field.name = names[index] 815b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer result = descriptor.MakeDescriptor(descriptor_proto) 816b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer for index in range(len(camelcase_names)): 817b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer self.assertEqual(result.fields[index].camelcase_name, 818b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer camelcase_names[index]) 819b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 820b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 821fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleif __name__ == '__main__': 822b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer unittest.main() 823