descriptor_pool_test.py 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564
  1. #! /usr/bin/python
  2. #
  3. # Protocol Buffers - Google's data interchange format
  4. # Copyright 2008 Google Inc. All rights reserved.
  5. # http://code.google.com/p/protobuf/
  6. #
  7. # Redistribution and use in source and binary forms, with or without
  8. # modification, are permitted provided that the following conditions are
  9. # met:
  10. #
  11. # * Redistributions of source code must retain the above copyright
  12. # notice, this list of conditions and the following disclaimer.
  13. # * Redistributions in binary form must reproduce the above
  14. # copyright notice, this list of conditions and the following disclaimer
  15. # in the documentation and/or other materials provided with the
  16. # distribution.
  17. # * Neither the name of Google Inc. nor the names of its
  18. # contributors may be used to endorse or promote products derived from
  19. # this software without specific prior written permission.
  20. #
  21. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  22. # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  23. # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  24. # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  25. # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  26. # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  27. # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  28. # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  29. # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  30. # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  31. # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  32. """Tests for google.protobuf.descriptor_pool."""
  33. __author__ = 'matthewtoia@google.com (Matt Toia)'
  34. import os
  35. import unittest
  36. from google.apputils import basetest
  37. from google.protobuf import unittest_pb2
  38. from google.protobuf import descriptor_pb2
  39. from google.protobuf.internal import api_implementation
  40. from google.protobuf.internal import descriptor_pool_test1_pb2
  41. from google.protobuf.internal import descriptor_pool_test2_pb2
  42. from google.protobuf.internal import factory_test1_pb2
  43. from google.protobuf.internal import factory_test2_pb2
  44. from google.protobuf import descriptor
  45. from google.protobuf import descriptor_database
  46. from google.protobuf import descriptor_pool
  47. class DescriptorPoolTest(basetest.TestCase):
  48. def setUp(self):
  49. self.pool = descriptor_pool.DescriptorPool()
  50. self.factory_test1_fd = descriptor_pb2.FileDescriptorProto.FromString(
  51. factory_test1_pb2.DESCRIPTOR.serialized_pb)
  52. self.factory_test2_fd = descriptor_pb2.FileDescriptorProto.FromString(
  53. factory_test2_pb2.DESCRIPTOR.serialized_pb)
  54. self.pool.Add(self.factory_test1_fd)
  55. self.pool.Add(self.factory_test2_fd)
  56. def testFindFileByName(self):
  57. name1 = 'google/protobuf/internal/factory_test1.proto'
  58. file_desc1 = self.pool.FindFileByName(name1)
  59. self.assertIsInstance(file_desc1, descriptor.FileDescriptor)
  60. self.assertEquals(name1, file_desc1.name)
  61. self.assertEquals('google.protobuf.python.internal', file_desc1.package)
  62. self.assertIn('Factory1Message', file_desc1.message_types_by_name)
  63. name2 = 'google/protobuf/internal/factory_test2.proto'
  64. file_desc2 = self.pool.FindFileByName(name2)
  65. self.assertIsInstance(file_desc2, descriptor.FileDescriptor)
  66. self.assertEquals(name2, file_desc2.name)
  67. self.assertEquals('google.protobuf.python.internal', file_desc2.package)
  68. self.assertIn('Factory2Message', file_desc2.message_types_by_name)
  69. def testFindFileByNameFailure(self):
  70. with self.assertRaises(KeyError):
  71. self.pool.FindFileByName('Does not exist')
  72. def testFindFileContainingSymbol(self):
  73. file_desc1 = self.pool.FindFileContainingSymbol(
  74. 'google.protobuf.python.internal.Factory1Message')
  75. self.assertIsInstance(file_desc1, descriptor.FileDescriptor)
  76. self.assertEquals('google/protobuf/internal/factory_test1.proto',
  77. file_desc1.name)
  78. self.assertEquals('google.protobuf.python.internal', file_desc1.package)
  79. self.assertIn('Factory1Message', file_desc1.message_types_by_name)
  80. file_desc2 = self.pool.FindFileContainingSymbol(
  81. 'google.protobuf.python.internal.Factory2Message')
  82. self.assertIsInstance(file_desc2, descriptor.FileDescriptor)
  83. self.assertEquals('google/protobuf/internal/factory_test2.proto',
  84. file_desc2.name)
  85. self.assertEquals('google.protobuf.python.internal', file_desc2.package)
  86. self.assertIn('Factory2Message', file_desc2.message_types_by_name)
  87. def testFindFileContainingSymbolFailure(self):
  88. with self.assertRaises(KeyError):
  89. self.pool.FindFileContainingSymbol('Does not exist')
  90. def testFindMessageTypeByName(self):
  91. msg1 = self.pool.FindMessageTypeByName(
  92. 'google.protobuf.python.internal.Factory1Message')
  93. self.assertIsInstance(msg1, descriptor.Descriptor)
  94. self.assertEquals('Factory1Message', msg1.name)
  95. self.assertEquals('google.protobuf.python.internal.Factory1Message',
  96. msg1.full_name)
  97. self.assertEquals(None, msg1.containing_type)
  98. nested_msg1 = msg1.nested_types[0]
  99. self.assertEquals('NestedFactory1Message', nested_msg1.name)
  100. self.assertEquals(msg1, nested_msg1.containing_type)
  101. nested_enum1 = msg1.enum_types[0]
  102. self.assertEquals('NestedFactory1Enum', nested_enum1.name)
  103. self.assertEquals(msg1, nested_enum1.containing_type)
  104. self.assertEquals(nested_msg1, msg1.fields_by_name[
  105. 'nested_factory_1_message'].message_type)
  106. self.assertEquals(nested_enum1, msg1.fields_by_name[
  107. 'nested_factory_1_enum'].enum_type)
  108. msg2 = self.pool.FindMessageTypeByName(
  109. 'google.protobuf.python.internal.Factory2Message')
  110. self.assertIsInstance(msg2, descriptor.Descriptor)
  111. self.assertEquals('Factory2Message', msg2.name)
  112. self.assertEquals('google.protobuf.python.internal.Factory2Message',
  113. msg2.full_name)
  114. self.assertIsNone(msg2.containing_type)
  115. nested_msg2 = msg2.nested_types[0]
  116. self.assertEquals('NestedFactory2Message', nested_msg2.name)
  117. self.assertEquals(msg2, nested_msg2.containing_type)
  118. nested_enum2 = msg2.enum_types[0]
  119. self.assertEquals('NestedFactory2Enum', nested_enum2.name)
  120. self.assertEquals(msg2, nested_enum2.containing_type)
  121. self.assertEquals(nested_msg2, msg2.fields_by_name[
  122. 'nested_factory_2_message'].message_type)
  123. self.assertEquals(nested_enum2, msg2.fields_by_name[
  124. 'nested_factory_2_enum'].enum_type)
  125. self.assertTrue(msg2.fields_by_name['int_with_default'].has_default_value)
  126. self.assertEquals(
  127. 1776, msg2.fields_by_name['int_with_default'].default_value)
  128. self.assertTrue(
  129. msg2.fields_by_name['double_with_default'].has_default_value)
  130. self.assertEquals(
  131. 9.99, msg2.fields_by_name['double_with_default'].default_value)
  132. self.assertTrue(
  133. msg2.fields_by_name['string_with_default'].has_default_value)
  134. self.assertEquals(
  135. 'hello world', msg2.fields_by_name['string_with_default'].default_value)
  136. self.assertTrue(msg2.fields_by_name['bool_with_default'].has_default_value)
  137. self.assertFalse(msg2.fields_by_name['bool_with_default'].default_value)
  138. self.assertTrue(msg2.fields_by_name['enum_with_default'].has_default_value)
  139. self.assertEquals(
  140. 1, msg2.fields_by_name['enum_with_default'].default_value)
  141. msg3 = self.pool.FindMessageTypeByName(
  142. 'google.protobuf.python.internal.Factory2Message.NestedFactory2Message')
  143. self.assertEquals(nested_msg2, msg3)
  144. self.assertTrue(msg2.fields_by_name['bytes_with_default'].has_default_value)
  145. self.assertEquals(
  146. b'a\xfb\x00c',
  147. msg2.fields_by_name['bytes_with_default'].default_value)
  148. self.assertEqual(1, len(msg2.oneofs))
  149. self.assertEqual(1, len(msg2.oneofs_by_name))
  150. self.assertEqual(2, len(msg2.oneofs[0].fields))
  151. for name in ['oneof_int', 'oneof_string']:
  152. self.assertEqual(msg2.oneofs[0],
  153. msg2.fields_by_name[name].containing_oneof)
  154. self.assertIn(msg2.fields_by_name[name], msg2.oneofs[0].fields)
  155. def testFindMessageTypeByNameFailure(self):
  156. with self.assertRaises(KeyError):
  157. self.pool.FindMessageTypeByName('Does not exist')
  158. def testFindEnumTypeByName(self):
  159. enum1 = self.pool.FindEnumTypeByName(
  160. 'google.protobuf.python.internal.Factory1Enum')
  161. self.assertIsInstance(enum1, descriptor.EnumDescriptor)
  162. self.assertEquals(0, enum1.values_by_name['FACTORY_1_VALUE_0'].number)
  163. self.assertEquals(1, enum1.values_by_name['FACTORY_1_VALUE_1'].number)
  164. nested_enum1 = self.pool.FindEnumTypeByName(
  165. 'google.protobuf.python.internal.Factory1Message.NestedFactory1Enum')
  166. self.assertIsInstance(nested_enum1, descriptor.EnumDescriptor)
  167. self.assertEquals(
  168. 0, nested_enum1.values_by_name['NESTED_FACTORY_1_VALUE_0'].number)
  169. self.assertEquals(
  170. 1, nested_enum1.values_by_name['NESTED_FACTORY_1_VALUE_1'].number)
  171. enum2 = self.pool.FindEnumTypeByName(
  172. 'google.protobuf.python.internal.Factory2Enum')
  173. self.assertIsInstance(enum2, descriptor.EnumDescriptor)
  174. self.assertEquals(0, enum2.values_by_name['FACTORY_2_VALUE_0'].number)
  175. self.assertEquals(1, enum2.values_by_name['FACTORY_2_VALUE_1'].number)
  176. nested_enum2 = self.pool.FindEnumTypeByName(
  177. 'google.protobuf.python.internal.Factory2Message.NestedFactory2Enum')
  178. self.assertIsInstance(nested_enum2, descriptor.EnumDescriptor)
  179. self.assertEquals(
  180. 0, nested_enum2.values_by_name['NESTED_FACTORY_2_VALUE_0'].number)
  181. self.assertEquals(
  182. 1, nested_enum2.values_by_name['NESTED_FACTORY_2_VALUE_1'].number)
  183. def testFindEnumTypeByNameFailure(self):
  184. with self.assertRaises(KeyError):
  185. self.pool.FindEnumTypeByName('Does not exist')
  186. def testUserDefinedDB(self):
  187. db = descriptor_database.DescriptorDatabase()
  188. self.pool = descriptor_pool.DescriptorPool(db)
  189. db.Add(self.factory_test1_fd)
  190. db.Add(self.factory_test2_fd)
  191. self.testFindMessageTypeByName()
  192. def testComplexNesting(self):
  193. test1_desc = descriptor_pb2.FileDescriptorProto.FromString(
  194. descriptor_pool_test1_pb2.DESCRIPTOR.serialized_pb)
  195. test2_desc = descriptor_pb2.FileDescriptorProto.FromString(
  196. descriptor_pool_test2_pb2.DESCRIPTOR.serialized_pb)
  197. self.pool.Add(test1_desc)
  198. self.pool.Add(test2_desc)
  199. TEST1_FILE.CheckFile(self, self.pool)
  200. TEST2_FILE.CheckFile(self, self.pool)
  201. class ProtoFile(object):
  202. def __init__(self, name, package, messages, dependencies=None):
  203. self.name = name
  204. self.package = package
  205. self.messages = messages
  206. self.dependencies = dependencies or []
  207. def CheckFile(self, test, pool):
  208. file_desc = pool.FindFileByName(self.name)
  209. test.assertEquals(self.name, file_desc.name)
  210. test.assertEquals(self.package, file_desc.package)
  211. dependencies_names = [f.name for f in file_desc.dependencies]
  212. test.assertEqual(self.dependencies, dependencies_names)
  213. for name, msg_type in self.messages.items():
  214. msg_type.CheckType(test, None, name, file_desc)
  215. class EnumType(object):
  216. def __init__(self, values):
  217. self.values = values
  218. def CheckType(self, test, msg_desc, name, file_desc):
  219. enum_desc = msg_desc.enum_types_by_name[name]
  220. test.assertEqual(name, enum_desc.name)
  221. expected_enum_full_name = '.'.join([msg_desc.full_name, name])
  222. test.assertEqual(expected_enum_full_name, enum_desc.full_name)
  223. test.assertEqual(msg_desc, enum_desc.containing_type)
  224. test.assertEqual(file_desc, enum_desc.file)
  225. for index, (value, number) in enumerate(self.values):
  226. value_desc = enum_desc.values_by_name[value]
  227. test.assertEqual(value, value_desc.name)
  228. test.assertEqual(index, value_desc.index)
  229. test.assertEqual(number, value_desc.number)
  230. test.assertEqual(enum_desc, value_desc.type)
  231. test.assertIn(value, msg_desc.enum_values_by_name)
  232. class MessageType(object):
  233. def __init__(self, type_dict, field_list, is_extendable=False,
  234. extensions=None):
  235. self.type_dict = type_dict
  236. self.field_list = field_list
  237. self.is_extendable = is_extendable
  238. self.extensions = extensions or []
  239. def CheckType(self, test, containing_type_desc, name, file_desc):
  240. if containing_type_desc is None:
  241. desc = file_desc.message_types_by_name[name]
  242. expected_full_name = '.'.join([file_desc.package, name])
  243. else:
  244. desc = containing_type_desc.nested_types_by_name[name]
  245. expected_full_name = '.'.join([containing_type_desc.full_name, name])
  246. test.assertEqual(name, desc.name)
  247. test.assertEqual(expected_full_name, desc.full_name)
  248. test.assertEqual(containing_type_desc, desc.containing_type)
  249. test.assertEqual(desc.file, file_desc)
  250. test.assertEqual(self.is_extendable, desc.is_extendable)
  251. for name, subtype in self.type_dict.items():
  252. subtype.CheckType(test, desc, name, file_desc)
  253. for index, (name, field) in enumerate(self.field_list):
  254. field.CheckField(test, desc, name, index)
  255. for index, (name, field) in enumerate(self.extensions):
  256. field.CheckField(test, desc, name, index)
  257. class EnumField(object):
  258. def __init__(self, number, type_name, default_value):
  259. self.number = number
  260. self.type_name = type_name
  261. self.default_value = default_value
  262. def CheckField(self, test, msg_desc, name, index):
  263. field_desc = msg_desc.fields_by_name[name]
  264. enum_desc = msg_desc.enum_types_by_name[self.type_name]
  265. test.assertEqual(name, field_desc.name)
  266. expected_field_full_name = '.'.join([msg_desc.full_name, name])
  267. test.assertEqual(expected_field_full_name, field_desc.full_name)
  268. test.assertEqual(index, field_desc.index)
  269. test.assertEqual(self.number, field_desc.number)
  270. test.assertEqual(descriptor.FieldDescriptor.TYPE_ENUM, field_desc.type)
  271. test.assertEqual(descriptor.FieldDescriptor.CPPTYPE_ENUM,
  272. field_desc.cpp_type)
  273. test.assertTrue(field_desc.has_default_value)
  274. test.assertEqual(enum_desc.values_by_name[self.default_value].index,
  275. field_desc.default_value)
  276. test.assertEqual(msg_desc, field_desc.containing_type)
  277. test.assertEqual(enum_desc, field_desc.enum_type)
  278. class MessageField(object):
  279. def __init__(self, number, type_name):
  280. self.number = number
  281. self.type_name = type_name
  282. def CheckField(self, test, msg_desc, name, index):
  283. field_desc = msg_desc.fields_by_name[name]
  284. field_type_desc = msg_desc.nested_types_by_name[self.type_name]
  285. test.assertEqual(name, field_desc.name)
  286. expected_field_full_name = '.'.join([msg_desc.full_name, name])
  287. test.assertEqual(expected_field_full_name, field_desc.full_name)
  288. test.assertEqual(index, field_desc.index)
  289. test.assertEqual(self.number, field_desc.number)
  290. test.assertEqual(descriptor.FieldDescriptor.TYPE_MESSAGE, field_desc.type)
  291. test.assertEqual(descriptor.FieldDescriptor.CPPTYPE_MESSAGE,
  292. field_desc.cpp_type)
  293. test.assertFalse(field_desc.has_default_value)
  294. test.assertEqual(msg_desc, field_desc.containing_type)
  295. test.assertEqual(field_type_desc, field_desc.message_type)
  296. class StringField(object):
  297. def __init__(self, number, default_value):
  298. self.number = number
  299. self.default_value = default_value
  300. def CheckField(self, test, msg_desc, name, index):
  301. field_desc = msg_desc.fields_by_name[name]
  302. test.assertEqual(name, field_desc.name)
  303. expected_field_full_name = '.'.join([msg_desc.full_name, name])
  304. test.assertEqual(expected_field_full_name, field_desc.full_name)
  305. test.assertEqual(index, field_desc.index)
  306. test.assertEqual(self.number, field_desc.number)
  307. test.assertEqual(descriptor.FieldDescriptor.TYPE_STRING, field_desc.type)
  308. test.assertEqual(descriptor.FieldDescriptor.CPPTYPE_STRING,
  309. field_desc.cpp_type)
  310. test.assertTrue(field_desc.has_default_value)
  311. test.assertEqual(self.default_value, field_desc.default_value)
  312. class ExtensionField(object):
  313. def __init__(self, number, extended_type):
  314. self.number = number
  315. self.extended_type = extended_type
  316. def CheckField(self, test, msg_desc, name, index):
  317. field_desc = msg_desc.extensions_by_name[name]
  318. test.assertEqual(name, field_desc.name)
  319. expected_field_full_name = '.'.join([msg_desc.full_name, name])
  320. test.assertEqual(expected_field_full_name, field_desc.full_name)
  321. test.assertEqual(self.number, field_desc.number)
  322. test.assertEqual(index, field_desc.index)
  323. test.assertEqual(descriptor.FieldDescriptor.TYPE_MESSAGE, field_desc.type)
  324. test.assertEqual(descriptor.FieldDescriptor.CPPTYPE_MESSAGE,
  325. field_desc.cpp_type)
  326. test.assertFalse(field_desc.has_default_value)
  327. test.assertTrue(field_desc.is_extension)
  328. test.assertEqual(msg_desc, field_desc.extension_scope)
  329. test.assertEqual(msg_desc, field_desc.message_type)
  330. test.assertEqual(self.extended_type, field_desc.containing_type.name)
  331. class AddDescriptorTest(basetest.TestCase):
  332. def _TestMessage(self, prefix):
  333. pool = descriptor_pool.DescriptorPool()
  334. pool.AddDescriptor(unittest_pb2.TestAllTypes.DESCRIPTOR)
  335. self.assertEquals(
  336. 'protobuf_unittest.TestAllTypes',
  337. pool.FindMessageTypeByName(
  338. prefix + 'protobuf_unittest.TestAllTypes').full_name)
  339. # AddDescriptor is not recursive.
  340. with self.assertRaises(KeyError):
  341. pool.FindMessageTypeByName(
  342. prefix + 'protobuf_unittest.TestAllTypes.NestedMessage')
  343. pool.AddDescriptor(unittest_pb2.TestAllTypes.NestedMessage.DESCRIPTOR)
  344. self.assertEquals(
  345. 'protobuf_unittest.TestAllTypes.NestedMessage',
  346. pool.FindMessageTypeByName(
  347. prefix + 'protobuf_unittest.TestAllTypes.NestedMessage').full_name)
  348. # Files are implicitly also indexed when messages are added.
  349. self.assertEquals(
  350. 'google/protobuf/unittest.proto',
  351. pool.FindFileByName(
  352. 'google/protobuf/unittest.proto').name)
  353. self.assertEquals(
  354. 'google/protobuf/unittest.proto',
  355. pool.FindFileContainingSymbol(
  356. prefix + 'protobuf_unittest.TestAllTypes.NestedMessage').name)
  357. def testMessage(self):
  358. self._TestMessage('')
  359. self._TestMessage('.')
  360. def _TestEnum(self, prefix):
  361. pool = descriptor_pool.DescriptorPool()
  362. pool.AddEnumDescriptor(unittest_pb2.ForeignEnum.DESCRIPTOR)
  363. self.assertEquals(
  364. 'protobuf_unittest.ForeignEnum',
  365. pool.FindEnumTypeByName(
  366. prefix + 'protobuf_unittest.ForeignEnum').full_name)
  367. # AddEnumDescriptor is not recursive.
  368. with self.assertRaises(KeyError):
  369. pool.FindEnumTypeByName(
  370. prefix + 'protobuf_unittest.ForeignEnum.NestedEnum')
  371. pool.AddEnumDescriptor(unittest_pb2.TestAllTypes.NestedEnum.DESCRIPTOR)
  372. self.assertEquals(
  373. 'protobuf_unittest.TestAllTypes.NestedEnum',
  374. pool.FindEnumTypeByName(
  375. prefix + 'protobuf_unittest.TestAllTypes.NestedEnum').full_name)
  376. # Files are implicitly also indexed when enums are added.
  377. self.assertEquals(
  378. 'google/protobuf/unittest.proto',
  379. pool.FindFileByName(
  380. 'google/protobuf/unittest.proto').name)
  381. self.assertEquals(
  382. 'google/protobuf/unittest.proto',
  383. pool.FindFileContainingSymbol(
  384. prefix + 'protobuf_unittest.TestAllTypes.NestedEnum').name)
  385. def testEnum(self):
  386. self._TestEnum('')
  387. self._TestEnum('.')
  388. def testFile(self):
  389. pool = descriptor_pool.DescriptorPool()
  390. pool.AddFileDescriptor(unittest_pb2.DESCRIPTOR)
  391. self.assertEquals(
  392. 'google/protobuf/unittest.proto',
  393. pool.FindFileByName(
  394. 'google/protobuf/unittest.proto').name)
  395. # AddFileDescriptor is not recursive; messages and enums within files must
  396. # be explicitly registered.
  397. with self.assertRaises(KeyError):
  398. pool.FindFileContainingSymbol(
  399. 'protobuf_unittest.TestAllTypes')
  400. TEST1_FILE = ProtoFile(
  401. 'google/protobuf/internal/descriptor_pool_test1.proto',
  402. 'google.protobuf.python.internal',
  403. {
  404. 'DescriptorPoolTest1': MessageType({
  405. 'NestedEnum': EnumType([('ALPHA', 1), ('BETA', 2)]),
  406. 'NestedMessage': MessageType({
  407. 'NestedEnum': EnumType([('EPSILON', 5), ('ZETA', 6)]),
  408. 'DeepNestedMessage': MessageType({
  409. 'NestedEnum': EnumType([('ETA', 7), ('THETA', 8)]),
  410. }, [
  411. ('nested_enum', EnumField(1, 'NestedEnum', 'ETA')),
  412. ('nested_field', StringField(2, 'theta')),
  413. ]),
  414. }, [
  415. ('nested_enum', EnumField(1, 'NestedEnum', 'ZETA')),
  416. ('nested_field', StringField(2, 'beta')),
  417. ('deep_nested_message', MessageField(3, 'DeepNestedMessage')),
  418. ])
  419. }, [
  420. ('nested_enum', EnumField(1, 'NestedEnum', 'BETA')),
  421. ('nested_message', MessageField(2, 'NestedMessage')),
  422. ], is_extendable=True),
  423. 'DescriptorPoolTest2': MessageType({
  424. 'NestedEnum': EnumType([('GAMMA', 3), ('DELTA', 4)]),
  425. 'NestedMessage': MessageType({
  426. 'NestedEnum': EnumType([('IOTA', 9), ('KAPPA', 10)]),
  427. 'DeepNestedMessage': MessageType({
  428. 'NestedEnum': EnumType([('LAMBDA', 11), ('MU', 12)]),
  429. }, [
  430. ('nested_enum', EnumField(1, 'NestedEnum', 'MU')),
  431. ('nested_field', StringField(2, 'lambda')),
  432. ]),
  433. }, [
  434. ('nested_enum', EnumField(1, 'NestedEnum', 'IOTA')),
  435. ('nested_field', StringField(2, 'delta')),
  436. ('deep_nested_message', MessageField(3, 'DeepNestedMessage')),
  437. ])
  438. }, [
  439. ('nested_enum', EnumField(1, 'NestedEnum', 'GAMMA')),
  440. ('nested_message', MessageField(2, 'NestedMessage')),
  441. ]),
  442. })
  443. TEST2_FILE = ProtoFile(
  444. 'google/protobuf/internal/descriptor_pool_test2.proto',
  445. 'google.protobuf.python.internal',
  446. {
  447. 'DescriptorPoolTest3': MessageType({
  448. 'NestedEnum': EnumType([('NU', 13), ('XI', 14)]),
  449. 'NestedMessage': MessageType({
  450. 'NestedEnum': EnumType([('OMICRON', 15), ('PI', 16)]),
  451. 'DeepNestedMessage': MessageType({
  452. 'NestedEnum': EnumType([('RHO', 17), ('SIGMA', 18)]),
  453. }, [
  454. ('nested_enum', EnumField(1, 'NestedEnum', 'RHO')),
  455. ('nested_field', StringField(2, 'sigma')),
  456. ]),
  457. }, [
  458. ('nested_enum', EnumField(1, 'NestedEnum', 'PI')),
  459. ('nested_field', StringField(2, 'nu')),
  460. ('deep_nested_message', MessageField(3, 'DeepNestedMessage')),
  461. ])
  462. }, [
  463. ('nested_enum', EnumField(1, 'NestedEnum', 'XI')),
  464. ('nested_message', MessageField(2, 'NestedMessage')),
  465. ], extensions=[
  466. ('descriptor_pool_test',
  467. ExtensionField(1001, 'DescriptorPoolTest1')),
  468. ]),
  469. },
  470. dependencies=['google/protobuf/internal/descriptor_pool_test1.proto'])
  471. if __name__ == '__main__':
  472. basetest.main()