Add test when type is missing when build FileDescriptorProto

When build a FileDescriptorProto into pool, FieldDescriptorProto.type may not set if type_name is set. This only add tests. UPB python Fix has been submit in other change

PiperOrigin-RevId: 554516745
pull/13465/head
Jie Luo 2 years ago committed by Copybara-Service
parent 3271478450
commit 47a9091dfa
  1. 31
      python/google/protobuf/internal/descriptor_pool_test.py
  2. 4
      python/google/protobuf/internal/message_factory_test.py

@ -563,6 +563,37 @@ class DescriptorPoolTestBase(object):
with self.assertRaises(TypeError):
pool.FindFileByName(conflict_fd.name)
def testTypeNotSet(self):
f = descriptor_pb2.FileDescriptorProto(
name='google/protobuf/internal/not_type.proto',
package='google.protobuf.python.internal',
syntax='proto3')
f.enum_type.add(name='TestEnum').value.add(name='DEFAULTVALUE',
number=0)
msg_proto = f.message_type.add(name='TestMessage')
msg_proto.nested_type.add(name='Nested')
# type may not set if type_name is set in FieldDescriptorProto
msg_proto.field.add(name='nested_field',
number=1,
label=descriptor.FieldDescriptor.LABEL_OPTIONAL,
type_name='Nested')
msg_proto.field.add(name='enum_field',
number=2,
label=descriptor.FieldDescriptor.LABEL_REPEATED,
type_name='TestEnum')
pool = descriptor_pool.DescriptorPool()
pool.Add(f)
file_des = pool.FindFileByName('google/protobuf/internal/not_type.proto')
msg = file_des.message_types_by_name['TestMessage']
nested_field = msg.fields_by_name['nested_field']
self.assertTrue(nested_field.has_presence)
# cpp extension and upb do not provide is_packed on FieldDescriptor
if api_implementation.Type() == 'python':
self.assertFalse(nested_field.is_packed)
enum_field = msg.fields_by_name['enum_field']
self.assertFalse(enum_field.has_presence)
if api_implementation.Type() == 'python':
self.assertTrue(enum_field.is_packed)
@testing_refleaks.TestCase
class DefaultDescriptorPoolTest(DescriptorPoolTestBase, unittest.TestCase):

@ -180,7 +180,6 @@ class MessageFactoryTest(unittest.TestCase):
msg.extension.add(
name='extension_field',
number=2,
type=descriptor_pb2.FieldDescriptorProto.TYPE_MESSAGE,
label=descriptor_pb2.FieldDescriptorProto.LABEL_OPTIONAL,
type_name='Extension',
extendee='Container',
@ -198,7 +197,6 @@ class MessageFactoryTest(unittest.TestCase):
msg.extension.add(
name='extension_field',
number=2,
type=descriptor_pb2.FieldDescriptorProto.TYPE_MESSAGE,
label=descriptor_pb2.FieldDescriptorProto.LABEL_OPTIONAL,
type_name='Duplicate',
extendee='Container',
@ -243,7 +241,6 @@ class MessageFactoryTest(unittest.TestCase):
f3.extension.add(
name='top_level_extension_field',
number=2,
type=descriptor_pb2.FieldDescriptorProto.TYPE_MESSAGE,
label=descriptor_pb2.FieldDescriptorProto.LABEL_OPTIONAL,
type_name='ValueType',
extendee='Container',
@ -251,7 +248,6 @@ class MessageFactoryTest(unittest.TestCase):
f3.message_type.add(name='Extension').extension.add(
name='nested_extension_field',
number=3,
type=descriptor_pb2.FieldDescriptorProto.TYPE_MESSAGE,
label=descriptor_pb2.FieldDescriptorProto.LABEL_OPTIONAL,
type_name='ValueType',
extendee='Container',

Loading…
Cancel
Save