Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(128)

Side by Side Diff: third_party/protobuf/python/google/protobuf/internal/descriptor_pool_test.py

Issue 2590803003: Revert "third_party/protobuf: Update to HEAD (83d681ee2c)" (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #! /usr/bin/env python 1 #! /usr/bin/env python
2 # 2 #
3 # Protocol Buffers - Google's data interchange format 3 # Protocol Buffers - Google's data interchange format
4 # Copyright 2008 Google Inc. All rights reserved. 4 # Copyright 2008 Google Inc. All rights reserved.
5 # https://developers.google.com/protocol-buffers/ 5 # https://developers.google.com/protocol-buffers/
6 # 6 #
7 # Redistribution and use in source and binary forms, with or without 7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions are 8 # modification, are permitted provided that the following conditions are
9 # met: 9 # met:
10 # 10 #
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 44
45 from google.protobuf import unittest_import_pb2 45 from google.protobuf import unittest_import_pb2
46 from google.protobuf import unittest_import_public_pb2 46 from google.protobuf import unittest_import_public_pb2
47 from google.protobuf import unittest_pb2 47 from google.protobuf import unittest_pb2
48 from google.protobuf import descriptor_pb2 48 from google.protobuf import descriptor_pb2
49 from google.protobuf.internal import api_implementation 49 from google.protobuf.internal import api_implementation
50 from google.protobuf.internal import descriptor_pool_test1_pb2 50 from google.protobuf.internal import descriptor_pool_test1_pb2
51 from google.protobuf.internal import descriptor_pool_test2_pb2 51 from google.protobuf.internal import descriptor_pool_test2_pb2
52 from google.protobuf.internal import factory_test1_pb2 52 from google.protobuf.internal import factory_test1_pb2
53 from google.protobuf.internal import factory_test2_pb2 53 from google.protobuf.internal import factory_test2_pb2
54 from google.protobuf.internal import file_options_test_pb2
55 from google.protobuf.internal import more_messages_pb2 54 from google.protobuf.internal import more_messages_pb2
56 from google.protobuf import descriptor 55 from google.protobuf import descriptor
57 from google.protobuf import descriptor_database 56 from google.protobuf import descriptor_database
58 from google.protobuf import descriptor_pool 57 from google.protobuf import descriptor_pool
59 from google.protobuf import message_factory 58 from google.protobuf import message_factory
60 from google.protobuf import symbol_database 59 from google.protobuf import symbol_database
61 60
62 61
63 class DescriptorPoolTest(unittest.TestCase): 62 class DescriptorPoolTest(unittest.TestCase):
64 63
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 self.pool.FindFileContainingSymbol('Does not exist') 111 self.pool.FindFileContainingSymbol('Does not exist')
113 112
114 def testFindMessageTypeByName(self): 113 def testFindMessageTypeByName(self):
115 msg1 = self.pool.FindMessageTypeByName( 114 msg1 = self.pool.FindMessageTypeByName(
116 'google.protobuf.python.internal.Factory1Message') 115 'google.protobuf.python.internal.Factory1Message')
117 self.assertIsInstance(msg1, descriptor.Descriptor) 116 self.assertIsInstance(msg1, descriptor.Descriptor)
118 self.assertEqual('Factory1Message', msg1.name) 117 self.assertEqual('Factory1Message', msg1.name)
119 self.assertEqual('google.protobuf.python.internal.Factory1Message', 118 self.assertEqual('google.protobuf.python.internal.Factory1Message',
120 msg1.full_name) 119 msg1.full_name)
121 self.assertEqual(None, msg1.containing_type) 120 self.assertEqual(None, msg1.containing_type)
122 self.assertFalse(msg1.has_options)
123 121
124 nested_msg1 = msg1.nested_types[0] 122 nested_msg1 = msg1.nested_types[0]
125 self.assertEqual('NestedFactory1Message', nested_msg1.name) 123 self.assertEqual('NestedFactory1Message', nested_msg1.name)
126 self.assertEqual(msg1, nested_msg1.containing_type) 124 self.assertEqual(msg1, nested_msg1.containing_type)
127 125
128 nested_enum1 = msg1.enum_types[0] 126 nested_enum1 = msg1.enum_types[0]
129 self.assertEqual('NestedFactory1Enum', nested_enum1.name) 127 self.assertEqual('NestedFactory1Enum', nested_enum1.name)
130 self.assertEqual(msg1, nested_enum1.containing_type) 128 self.assertEqual(msg1, nested_enum1.containing_type)
131 129
132 self.assertEqual(nested_msg1, msg1.fields_by_name[ 130 self.assertEqual(nested_msg1, msg1.fields_by_name[
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 def testFindMessageTypeByNameFailure(self): 194 def testFindMessageTypeByNameFailure(self):
197 with self.assertRaises(KeyError): 195 with self.assertRaises(KeyError):
198 self.pool.FindMessageTypeByName('Does not exist') 196 self.pool.FindMessageTypeByName('Does not exist')
199 197
200 def testFindEnumTypeByName(self): 198 def testFindEnumTypeByName(self):
201 enum1 = self.pool.FindEnumTypeByName( 199 enum1 = self.pool.FindEnumTypeByName(
202 'google.protobuf.python.internal.Factory1Enum') 200 'google.protobuf.python.internal.Factory1Enum')
203 self.assertIsInstance(enum1, descriptor.EnumDescriptor) 201 self.assertIsInstance(enum1, descriptor.EnumDescriptor)
204 self.assertEqual(0, enum1.values_by_name['FACTORY_1_VALUE_0'].number) 202 self.assertEqual(0, enum1.values_by_name['FACTORY_1_VALUE_0'].number)
205 self.assertEqual(1, enum1.values_by_name['FACTORY_1_VALUE_1'].number) 203 self.assertEqual(1, enum1.values_by_name['FACTORY_1_VALUE_1'].number)
206 self.assertFalse(enum1.has_options)
207 204
208 nested_enum1 = self.pool.FindEnumTypeByName( 205 nested_enum1 = self.pool.FindEnumTypeByName(
209 'google.protobuf.python.internal.Factory1Message.NestedFactory1Enum') 206 'google.protobuf.python.internal.Factory1Message.NestedFactory1Enum')
210 self.assertIsInstance(nested_enum1, descriptor.EnumDescriptor) 207 self.assertIsInstance(nested_enum1, descriptor.EnumDescriptor)
211 self.assertEqual( 208 self.assertEqual(
212 0, nested_enum1.values_by_name['NESTED_FACTORY_1_VALUE_0'].number) 209 0, nested_enum1.values_by_name['NESTED_FACTORY_1_VALUE_0'].number)
213 self.assertEqual( 210 self.assertEqual(
214 1, nested_enum1.values_by_name['NESTED_FACTORY_1_VALUE_1'].number) 211 1, nested_enum1.values_by_name['NESTED_FACTORY_1_VALUE_1'].number)
215 212
216 enum2 = self.pool.FindEnumTypeByName( 213 enum2 = self.pool.FindEnumTypeByName(
(...skipping 12 matching lines...) Expand all
229 226
230 def testFindEnumTypeByNameFailure(self): 227 def testFindEnumTypeByNameFailure(self):
231 with self.assertRaises(KeyError): 228 with self.assertRaises(KeyError):
232 self.pool.FindEnumTypeByName('Does not exist') 229 self.pool.FindEnumTypeByName('Does not exist')
233 230
234 def testFindFieldByName(self): 231 def testFindFieldByName(self):
235 field = self.pool.FindFieldByName( 232 field = self.pool.FindFieldByName(
236 'google.protobuf.python.internal.Factory1Message.list_value') 233 'google.protobuf.python.internal.Factory1Message.list_value')
237 self.assertEqual(field.name, 'list_value') 234 self.assertEqual(field.name, 'list_value')
238 self.assertEqual(field.label, field.LABEL_REPEATED) 235 self.assertEqual(field.label, field.LABEL_REPEATED)
239 self.assertFalse(field.has_options)
240
241 with self.assertRaises(KeyError): 236 with self.assertRaises(KeyError):
242 self.pool.FindFieldByName('Does not exist') 237 self.pool.FindFieldByName('Does not exist')
243 238
244 def testFindExtensionByName(self): 239 def testFindExtensionByName(self):
245 # An extension defined in a message. 240 # An extension defined in a message.
246 extension = self.pool.FindExtensionByName( 241 extension = self.pool.FindExtensionByName(
247 'google.protobuf.python.internal.Factory2Message.one_more_field') 242 'google.protobuf.python.internal.Factory2Message.one_more_field')
248 self.assertEqual(extension.name, 'one_more_field') 243 self.assertEqual(extension.name, 'one_more_field')
249 # An extension defined at file scope. 244 # An extension defined at file scope.
250 extension = self.pool.FindExtensionByName( 245 extension = self.pool.FindExtensionByName(
251 'google.protobuf.python.internal.another_field') 246 'google.protobuf.python.internal.another_field')
252 self.assertEqual(extension.name, 'another_field') 247 self.assertEqual(extension.name, 'another_field')
253 self.assertEqual(extension.number, 1002) 248 self.assertEqual(extension.number, 1002)
254 with self.assertRaises(KeyError): 249 with self.assertRaises(KeyError):
255 self.pool.FindFieldByName('Does not exist') 250 self.pool.FindFieldByName('Does not exist')
256 251
257 def testFindAllExtensions(self):
258 factory1_message = self.pool.FindMessageTypeByName(
259 'google.protobuf.python.internal.Factory1Message')
260 factory2_message = self.pool.FindMessageTypeByName(
261 'google.protobuf.python.internal.Factory2Message')
262 # An extension defined in a message.
263 one_more_field = factory2_message.extensions_by_name['one_more_field']
264 self.pool.AddExtensionDescriptor(one_more_field)
265 # An extension defined at file scope.
266 factory_test2 = self.pool.FindFileByName(
267 'google/protobuf/internal/factory_test2.proto')
268 another_field = factory_test2.extensions_by_name['another_field']
269 self.pool.AddExtensionDescriptor(another_field)
270
271 extensions = self.pool.FindAllExtensions(factory1_message)
272 expected_extension_numbers = set([one_more_field, another_field])
273 self.assertEqual(expected_extension_numbers, set(extensions))
274 # Verify that mutating the returned list does not affect the pool.
275 extensions.append('unexpected_element')
276 # Get the extensions again, the returned value does not contain the
277 # 'unexpected_element'.
278 extensions = self.pool.FindAllExtensions(factory1_message)
279 self.assertEqual(expected_extension_numbers, set(extensions))
280
281 def testFindExtensionByNumber(self):
282 factory1_message = self.pool.FindMessageTypeByName(
283 'google.protobuf.python.internal.Factory1Message')
284 factory2_message = self.pool.FindMessageTypeByName(
285 'google.protobuf.python.internal.Factory2Message')
286 # An extension defined in a message.
287 one_more_field = factory2_message.extensions_by_name['one_more_field']
288 self.pool.AddExtensionDescriptor(one_more_field)
289 # An extension defined at file scope.
290 factory_test2 = self.pool.FindFileByName(
291 'google/protobuf/internal/factory_test2.proto')
292 another_field = factory_test2.extensions_by_name['another_field']
293 self.pool.AddExtensionDescriptor(another_field)
294
295 # An extension defined in a message.
296 extension = self.pool.FindExtensionByNumber(factory1_message, 1001)
297 self.assertEqual(extension.name, 'one_more_field')
298 # An extension defined at file scope.
299 extension = self.pool.FindExtensionByNumber(factory1_message, 1002)
300 self.assertEqual(extension.name, 'another_field')
301 with self.assertRaises(KeyError):
302 extension = self.pool.FindExtensionByNumber(factory1_message, 1234567)
303
304 def testExtensionsAreNotFields(self): 252 def testExtensionsAreNotFields(self):
305 with self.assertRaises(KeyError): 253 with self.assertRaises(KeyError):
306 self.pool.FindFieldByName('google.protobuf.python.internal.another_field') 254 self.pool.FindFieldByName('google.protobuf.python.internal.another_field')
307 with self.assertRaises(KeyError): 255 with self.assertRaises(KeyError):
308 self.pool.FindFieldByName( 256 self.pool.FindFieldByName(
309 'google.protobuf.python.internal.Factory2Message.one_more_field') 257 'google.protobuf.python.internal.Factory2Message.one_more_field')
310 with self.assertRaises(KeyError): 258 with self.assertRaises(KeyError):
311 self.pool.FindExtensionByName( 259 self.pool.FindExtensionByName(
312 'google.protobuf.python.internal.Factory1Message.list_value') 260 'google.protobuf.python.internal.Factory1Message.list_value')
313 261
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 expected_field_full_name = '.'.join([msg_desc.full_name, name]) 440 expected_field_full_name = '.'.join([msg_desc.full_name, name])
493 test.assertEqual(expected_field_full_name, field_desc.full_name) 441 test.assertEqual(expected_field_full_name, field_desc.full_name)
494 test.assertEqual(index, field_desc.index) 442 test.assertEqual(index, field_desc.index)
495 test.assertEqual(self.number, field_desc.number) 443 test.assertEqual(self.number, field_desc.number)
496 test.assertEqual(descriptor.FieldDescriptor.TYPE_ENUM, field_desc.type) 444 test.assertEqual(descriptor.FieldDescriptor.TYPE_ENUM, field_desc.type)
497 test.assertEqual(descriptor.FieldDescriptor.CPPTYPE_ENUM, 445 test.assertEqual(descriptor.FieldDescriptor.CPPTYPE_ENUM,
498 field_desc.cpp_type) 446 field_desc.cpp_type)
499 test.assertTrue(field_desc.has_default_value) 447 test.assertTrue(field_desc.has_default_value)
500 test.assertEqual(enum_desc.values_by_name[self.default_value].number, 448 test.assertEqual(enum_desc.values_by_name[self.default_value].number,
501 field_desc.default_value) 449 field_desc.default_value)
502 test.assertFalse(enum_desc.values_by_name[self.default_value].has_options)
503 test.assertEqual(msg_desc, field_desc.containing_type) 450 test.assertEqual(msg_desc, field_desc.containing_type)
504 test.assertEqual(enum_desc, field_desc.enum_type) 451 test.assertEqual(enum_desc, field_desc.enum_type)
505 452
506 453
507 class MessageField(object): 454 class MessageField(object):
508 455
509 def __init__(self, number, type_name): 456 def __init__(self, number, type_name):
510 self.number = number 457 self.number = number
511 self.type_name = type_name 458 self.type_name = type_name
512 459
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 pool = descriptor_pool.DescriptorPool() 623 pool = descriptor_pool.DescriptorPool()
677 file_desc = descriptor_pb2.FileDescriptorProto( 624 file_desc = descriptor_pb2.FileDescriptorProto(
678 name='some/file.proto', package='package') 625 name='some/file.proto', package='package')
679 file_desc.message_type.add(name='Message') 626 file_desc.message_type.add(name='Message')
680 pool.Add(file_desc) 627 pool.Add(file_desc)
681 self.assertEqual(pool.FindFileByName('some/file.proto').name, 628 self.assertEqual(pool.FindFileByName('some/file.proto').name,
682 'some/file.proto') 629 'some/file.proto')
683 self.assertEqual(pool.FindMessageTypeByName('package.Message').name, 630 self.assertEqual(pool.FindMessageTypeByName('package.Message').name,
684 'Message') 631 'Message')
685 632
686 def testFileDescriptorOptionsWithCustomDescriptorPool(self):
687 # Create a descriptor pool, and add a new FileDescriptorProto to it.
688 pool = descriptor_pool.DescriptorPool()
689 file_name = 'file_descriptor_options_with_custom_descriptor_pool.proto'
690 file_descriptor_proto = descriptor_pb2.FileDescriptorProto(name=file_name)
691 extension_id = file_options_test_pb2.foo_options
692 file_descriptor_proto.options.Extensions[extension_id].foo_name = 'foo'
693 pool.Add(file_descriptor_proto)
694 # The options set on the FileDescriptorProto should be available in the
695 # descriptor even if they contain extensions that cannot be deserialized
696 # using the pool.
697 file_descriptor = pool.FindFileByName(file_name)
698 options = file_descriptor.GetOptions()
699 self.assertEqual('foo', options.Extensions[extension_id].foo_name)
700 # The object returned by GetOptions() is cached.
701 self.assertIs(options, file_descriptor.GetOptions())
702
703 633
704 @unittest.skipIf( 634 @unittest.skipIf(
705 api_implementation.Type() != 'cpp', 635 api_implementation.Type() != 'cpp',
706 'default_pool is only supported by the C++ implementation') 636 'default_pool is only supported by the C++ implementation')
707 class DefaultPoolTest(unittest.TestCase): 637 class DefaultPoolTest(unittest.TestCase):
708 638
709 def testFindMethods(self): 639 def testFindMethods(self):
710 # pylint: disable=g-import-not-at-top 640 # pylint: disable=g-import-not-at-top
711 from google.protobuf.pyext import _message 641 from google.protobuf.pyext import _message
712 pool = _message.default_pool 642 pool = _message.default_pool
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
811 ExtensionField(1001, 'DescriptorPoolTest1')), 741 ExtensionField(1001, 'DescriptorPoolTest1')),
812 ]), 742 ]),
813 }, 743 },
814 dependencies=['google/protobuf/internal/descriptor_pool_test1.proto', 744 dependencies=['google/protobuf/internal/descriptor_pool_test1.proto',
815 'google/protobuf/internal/more_messages.proto'], 745 'google/protobuf/internal/more_messages.proto'],
816 public_dependencies=['google/protobuf/internal/more_messages.proto']) 746 public_dependencies=['google/protobuf/internal/more_messages.proto'])
817 747
818 748
819 if __name__ == '__main__': 749 if __name__ == '__main__':
820 unittest.main() 750 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698