implement reserved names and ranges for messages and enums
https://github.com/protocolbuffers/protobuf/issues/10158
PiperOrigin-RevId: 488863171
diff --git a/python/google/protobuf/internal/descriptor_test.py b/python/google/protobuf/internal/descriptor_test.py
index 7961f38..614a845 100644
--- a/python/google/protobuf/internal/descriptor_test.py
+++ b/python/google/protobuf/internal/descriptor_test.py
@@ -134,6 +134,88 @@
file_descriptor = pool.AddSerializedFile(serialized)
self.assertEqual('', file_descriptor.package)
+ def testReservedName(self):
+ text = """
+ name: "foo.proto"
+ message_type {
+ name: "BrokenMessageFoo"
+ reserved_name: "is_deprecated"
+ }
+ """
+
+ fdp = text_format.Parse(text, descriptor_pb2.FileDescriptorProto())
+ serialized = fdp.SerializeToString()
+ # AddSerializedFile() will allow duplicate adds but only if the descriptors
+ # are identical and can round-trip through a FileDescriptor losslessly.
+ desc1 = descriptor_pool.Default().AddSerializedFile(serialized)
+ desc2 = descriptor_pool.Default().AddSerializedFile(serialized)
+ self.assertEqual(desc1, desc2)
+
+ def testReservedRange(self):
+ text = """
+ name: "bar.proto"
+ message_type {
+ name: "BrokenMessageBar"
+ reserved_range {
+ start: 101
+ end: 102
+ }
+ }
+ """
+
+ fdp = text_format.Parse(text, descriptor_pb2.FileDescriptorProto())
+ serialized = fdp.SerializeToString()
+ # AddSerializedFile() will allow duplicate adds but only if the descriptors
+ # are identical and can round-trip through a FileDescriptor losslessly.
+ desc1 = descriptor_pool.Default().AddSerializedFile(serialized)
+ desc2 = descriptor_pool.Default().AddSerializedFile(serialized)
+ self.assertEqual(desc1, desc2)
+
+ def testReservedNameEnum(self):
+ text = """
+ name: "baz.proto"
+ enum_type {
+ name: "BrokenMessageBaz"
+ value: <
+ name: 'ENUM_BAZ'
+ number: 114
+ >
+ reserved_name: "is_deprecated"
+ }
+ """
+
+ fdp = text_format.Parse(text, descriptor_pb2.FileDescriptorProto())
+ serialized = fdp.SerializeToString()
+ # AddSerializedFile() will allow duplicate adds but only if the descriptors
+ # are identical and can round-trip through a FileDescriptor losslessly.
+ desc1 = descriptor_pool.Default().AddSerializedFile(serialized)
+ desc2 = descriptor_pool.Default().AddSerializedFile(serialized)
+ self.assertEqual(desc1, desc2)
+
+ def testReservedRangeEnum(self):
+ text = """
+ name: "bat.proto"
+ enum_type {
+ name: "BrokenMessageBat"
+ value: <
+ name: 'ENUM_BAT'
+ number: 115
+ >
+ reserved_range {
+ start: 1001
+ end: 1002
+ }
+ }
+ """
+
+ fdp = text_format.Parse(text, descriptor_pb2.FileDescriptorProto())
+ serialized = fdp.SerializeToString()
+ # AddSerializedFile() will allow duplicate adds but only if the descriptors
+ # are identical and can round-trip through a FileDescriptor losslessly.
+ desc1 = descriptor_pool.Default().AddSerializedFile(serialized)
+ desc2 = descriptor_pool.Default().AddSerializedFile(serialized)
+ self.assertEqual(desc1, desc2)
+
def testFindMethodByName(self):
service_descriptor = (unittest_custom_options_pb2.
TestServiceWithCustomOptions.DESCRIPTOR)