35
35
__author__ = 'robinson@google.com (Will Robinson)'
38
from google.protobuf import unittest_import_pb2
39
from google.protobuf import unittest_pb2
38
40
from google.protobuf import descriptor_pb2
39
41
from google.protobuf import descriptor
42
from google.protobuf import text_format
45
TEST_EMPTY_MESSAGE_DESCRIPTOR_ASCII = """
46
name: 'TestEmptyMessage'
41
50
class DescriptorTest(unittest.TestCase):
53
self.my_file = descriptor.FileDescriptor(
54
name='some/filename/some.proto',
55
package='protobuf_unittest'
44
57
self.my_enum = descriptor.EnumDescriptor(
45
58
name='ForeignEnum',
46
59
full_name='protobuf_unittest.ForeignEnum',
47
filename='ForeignEnum',
49
63
descriptor.EnumValueDescriptor(name='FOREIGN_FOO', index=0, number=4),
50
64
descriptor.EnumValueDescriptor(name='FOREIGN_BAR', index=1, number=5),
109
125
self.assertEqual(self.my_service.GetOptions(),
110
126
descriptor_pb2.ServiceOptions())
128
def testFileDescriptorReferences(self):
129
self.assertEqual(self.my_enum.file, self.my_file)
130
self.assertEqual(self.my_message.file, self.my_file)
132
def testFileDescriptor(self):
133
self.assertEqual(self.my_file.name, 'some/filename/some.proto')
134
self.assertEqual(self.my_file.package, 'protobuf_unittest')
137
class DescriptorCopyToProtoTest(unittest.TestCase):
138
"""Tests for CopyTo functions of Descriptor."""
140
def _AssertProtoEqual(self, actual_proto, expected_class, expected_ascii):
141
expected_proto = expected_class()
142
text_format.Merge(expected_ascii, expected_proto)
145
actual_proto, expected_proto,
146
'Not equal,\nActual:\n%s\nExpected:\n%s\n'
147
% (str(actual_proto), str(expected_proto)))
149
def _InternalTestCopyToProto(self, desc, expected_proto_class,
150
expected_proto_ascii):
151
actual = expected_proto_class()
152
desc.CopyToProto(actual)
153
self._AssertProtoEqual(
154
actual, expected_proto_class, expected_proto_ascii)
156
def testCopyToProto_EmptyMessage(self):
157
self._InternalTestCopyToProto(
158
unittest_pb2.TestEmptyMessage.DESCRIPTOR,
159
descriptor_pb2.DescriptorProto,
160
TEST_EMPTY_MESSAGE_DESCRIPTOR_ASCII)
162
def testCopyToProto_NestedMessage(self):
163
TEST_NESTED_MESSAGE_ASCII = """
164
name: 'NestedMessage'
173
self._InternalTestCopyToProto(
174
unittest_pb2.TestAllTypes.NestedMessage.DESCRIPTOR,
175
descriptor_pb2.DescriptorProto,
176
TEST_NESTED_MESSAGE_ASCII)
178
def testCopyToProto_ForeignNestedMessage(self):
179
TEST_FOREIGN_NESTED_ASCII = """
180
name: 'TestForeignNested'
182
name: 'foreign_nested'
185
type: 11 # TYPE_MESSAGE
186
type_name: '.protobuf_unittest.TestAllTypes.NestedMessage'
190
self._InternalTestCopyToProto(
191
unittest_pb2.TestForeignNested.DESCRIPTOR,
192
descriptor_pb2.DescriptorProto,
193
TEST_FOREIGN_NESTED_ASCII)
195
def testCopyToProto_ForeignEnum(self):
196
TEST_FOREIGN_ENUM_ASCII = """
212
self._InternalTestCopyToProto(
213
unittest_pb2._FOREIGNENUM,
214
descriptor_pb2.EnumDescriptorProto,
215
TEST_FOREIGN_ENUM_ASCII)
217
def testCopyToProto_Options(self):
218
TEST_DEPRECATED_FIELDS_ASCII = """
219
name: 'TestDeprecatedFields'
221
name: 'deprecated_int32'
231
self._InternalTestCopyToProto(
232
unittest_pb2.TestDeprecatedFields.DESCRIPTOR,
233
descriptor_pb2.DescriptorProto,
234
TEST_DEPRECATED_FIELDS_ASCII)
236
def testCopyToProto_AllExtensions(self):
237
TEST_EMPTY_MESSAGE_WITH_EXTENSIONS_ASCII = """
238
name: 'TestEmptyMessageWithExtensions'
245
self._InternalTestCopyToProto(
246
unittest_pb2.TestEmptyMessageWithExtensions.DESCRIPTOR,
247
descriptor_pb2.DescriptorProto,
248
TEST_EMPTY_MESSAGE_WITH_EXTENSIONS_ASCII)
250
def testCopyToProto_SeveralExtensions(self):
251
TEST_MESSAGE_WITH_SEVERAL_EXTENSIONS_ASCII = """
252
name: 'TestMultipleExtensionRanges'
267
self._InternalTestCopyToProto(
268
unittest_pb2.TestMultipleExtensionRanges.DESCRIPTOR,
269
descriptor_pb2.DescriptorProto,
270
TEST_MESSAGE_WITH_SEVERAL_EXTENSIONS_ASCII)
272
def testCopyToProto_FileDescriptor(self):
273
UNITTEST_IMPORT_FILE_DESCRIPTOR_ASCII = ("""
274
name: 'google/protobuf/unittest_import.proto'
275
package: 'protobuf_unittest_import'
277
name: 'ImportMessage'
302
java_package: 'com.google.protobuf.test'
303
optimize_for: 1 # SPEED
307
self._InternalTestCopyToProto(
308
unittest_import_pb2.DESCRIPTOR,
309
descriptor_pb2.FileDescriptorProto,
310
UNITTEST_IMPORT_FILE_DESCRIPTOR_ASCII)
312
def testCopyToProto_ServiceDescriptor(self):
313
TEST_SERVICE_ASCII = """
317
input_type: '.protobuf_unittest.FooRequest'
318
output_type: '.protobuf_unittest.FooResponse'
322
input_type: '.protobuf_unittest.BarRequest'
323
output_type: '.protobuf_unittest.BarResponse'
327
self._InternalTestCopyToProto(
328
unittest_pb2.TestService.DESCRIPTOR,
329
descriptor_pb2.ServiceDescriptorProto,
112
333
if __name__ == '__main__':