Index: third_party/protobuf/python/google/protobuf/internal/descriptor_test.py |
diff --git a/third_party/protobuf/python/google/protobuf/internal/descriptor_test.py b/third_party/protobuf/python/google/protobuf/internal/descriptor_test.py |
index 26866f3a05040bf3ce2914c07e19bb9b9ab89dc5..c74f882e7821098c3bfb72a387be7291e838b527 100755 |
--- a/third_party/protobuf/python/google/protobuf/internal/descriptor_test.py |
+++ b/third_party/protobuf/python/google/protobuf/internal/descriptor_test.py |
@@ -1,8 +1,8 @@ |
-#! /usr/bin/env python |
+#! /usr/bin/python |
# |
# Protocol Buffers - Google's data interchange format |
# Copyright 2008 Google Inc. All rights reserved. |
-# https://developers.google.com/protocol-buffers/ |
+# http://code.google.com/p/protobuf/ |
# |
# Redistribution and use in source and binary forms, with or without |
# modification, are permitted provided that the following conditions are |
@@ -34,16 +34,12 @@ |
__author__ = 'robinson@google.com (Will Robinson)' |
-import sys |
- |
import unittest |
from google.protobuf import unittest_custom_options_pb2 |
from google.protobuf import unittest_import_pb2 |
from google.protobuf import unittest_pb2 |
from google.protobuf import descriptor_pb2 |
-from google.protobuf.internal import api_implementation |
from google.protobuf import descriptor |
-from google.protobuf import symbol_database |
from google.protobuf import text_format |
@@ -55,28 +51,41 @@ name: 'TestEmptyMessage' |
class DescriptorTest(unittest.TestCase): |
def setUp(self): |
- file_proto = descriptor_pb2.FileDescriptorProto( |
+ self.my_file = descriptor.FileDescriptor( |
name='some/filename/some.proto', |
- package='protobuf_unittest') |
- message_proto = file_proto.message_type.add( |
- name='NestedMessage') |
- message_proto.field.add( |
- name='bb', |
- number=1, |
- type=descriptor_pb2.FieldDescriptorProto.TYPE_INT32, |
- label=descriptor_pb2.FieldDescriptorProto.LABEL_OPTIONAL) |
- enum_proto = message_proto.enum_type.add( |
- name='ForeignEnum') |
- enum_proto.value.add(name='FOREIGN_FOO', number=4) |
- enum_proto.value.add(name='FOREIGN_BAR', number=5) |
- enum_proto.value.add(name='FOREIGN_BAZ', number=6) |
- |
- descriptor_pool = symbol_database.Default().pool |
- descriptor_pool.Add(file_proto) |
- self.my_file = descriptor_pool.FindFileByName(file_proto.name) |
- self.my_message = self.my_file.message_types_by_name[message_proto.name] |
- self.my_enum = self.my_message.enum_types_by_name[enum_proto.name] |
- |
+ package='protobuf_unittest' |
+ ) |
+ self.my_enum = descriptor.EnumDescriptor( |
+ name='ForeignEnum', |
+ full_name='protobuf_unittest.ForeignEnum', |
+ filename=None, |
+ file=self.my_file, |
+ values=[ |
+ descriptor.EnumValueDescriptor(name='FOREIGN_FOO', index=0, number=4), |
+ descriptor.EnumValueDescriptor(name='FOREIGN_BAR', index=1, number=5), |
+ descriptor.EnumValueDescriptor(name='FOREIGN_BAZ', index=2, number=6), |
+ ]) |
+ self.my_message = descriptor.Descriptor( |
+ name='NestedMessage', |
+ full_name='protobuf_unittest.TestAllTypes.NestedMessage', |
+ filename=None, |
+ file=self.my_file, |
+ containing_type=None, |
+ fields=[ |
+ descriptor.FieldDescriptor( |
+ name='bb', |
+ full_name='protobuf_unittest.TestAllTypes.NestedMessage.bb', |
+ index=0, number=1, |
+ type=5, cpp_type=1, label=1, |
+ has_default_value=False, default_value=0, |
+ message_type=None, enum_type=None, containing_type=None, |
+ is_extension=False, extension_scope=None), |
+ ], |
+ nested_types=[], |
+ enum_types=[ |
+ self.my_enum, |
+ ], |
+ extensions=[]) |
self.my_method = descriptor.MethodDescriptor( |
name='Bar', |
full_name='protobuf_unittest.TestService.Bar', |
@@ -164,11 +173,6 @@ class DescriptorTest(unittest.TestCase): |
self.assertEqual(unittest_custom_options_pb2.METHODOPT1_VAL2, |
method_options.Extensions[method_opt1]) |
- message_descriptor = ( |
- unittest_custom_options_pb2.DummyMessageContainingEnum.DESCRIPTOR) |
- self.assertTrue(file_descriptor.has_options) |
- self.assertFalse(message_descriptor.has_options) |
- |
def testDifferentCustomOptionTypes(self): |
kint32min = -2**31 |
kint64min = -2**63 |
@@ -240,7 +244,7 @@ class DescriptorTest(unittest.TestCase): |
unittest_custom_options_pb2.double_opt]) |
self.assertEqual("Hello, \"World\"", message_options.Extensions[ |
unittest_custom_options_pb2.string_opt]) |
- self.assertEqual(b"Hello\0World", message_options.Extensions[ |
+ self.assertEqual("Hello\0World", message_options.Extensions[ |
unittest_custom_options_pb2.bytes_opt]) |
dummy_enum = unittest_custom_options_pb2.DummyMessageContainingEnum |
self.assertEqual( |
@@ -390,108 +394,6 @@ class DescriptorTest(unittest.TestCase): |
self.assertEqual(self.my_file.name, 'some/filename/some.proto') |
self.assertEqual(self.my_file.package, 'protobuf_unittest') |
- @unittest.skipIf( |
- api_implementation.Type() != 'cpp' or api_implementation.Version() != 2, |
- 'Immutability of descriptors is only enforced in v2 implementation') |
- def testImmutableCppDescriptor(self): |
- message_descriptor = unittest_pb2.TestAllTypes.DESCRIPTOR |
- with self.assertRaises(AttributeError): |
- message_descriptor.fields_by_name = None |
- with self.assertRaises(TypeError): |
- message_descriptor.fields_by_name['Another'] = None |
- with self.assertRaises(TypeError): |
- message_descriptor.fields.append(None) |
- |
- |
-class GeneratedDescriptorTest(unittest.TestCase): |
- """Tests for the properties of descriptors in generated code.""" |
- |
- def CheckMessageDescriptor(self, message_descriptor): |
- # Basic properties |
- self.assertEqual(message_descriptor.name, 'TestAllTypes') |
- self.assertEqual(message_descriptor.full_name, |
- 'protobuf_unittest.TestAllTypes') |
- # Test equality and hashability |
- self.assertEqual(message_descriptor, message_descriptor) |
- self.assertEqual(message_descriptor.fields[0].containing_type, |
- message_descriptor) |
- self.assertIn(message_descriptor, [message_descriptor]) |
- self.assertIn(message_descriptor, {message_descriptor: None}) |
- # Test field containers |
- self.CheckDescriptorSequence(message_descriptor.fields) |
- self.CheckDescriptorMapping(message_descriptor.fields_by_name) |
- self.CheckDescriptorMapping(message_descriptor.fields_by_number) |
- |
- def CheckFieldDescriptor(self, field_descriptor): |
- # Basic properties |
- self.assertEqual(field_descriptor.name, 'optional_int32') |
- self.assertEqual(field_descriptor.full_name, |
- 'protobuf_unittest.TestAllTypes.optional_int32') |
- self.assertEqual(field_descriptor.containing_type.name, 'TestAllTypes') |
- # Test equality and hashability |
- self.assertEqual(field_descriptor, field_descriptor) |
- self.assertEqual( |
- field_descriptor.containing_type.fields_by_name['optional_int32'], |
- field_descriptor) |
- self.assertIn(field_descriptor, [field_descriptor]) |
- self.assertIn(field_descriptor, {field_descriptor: None}) |
- |
- def CheckDescriptorSequence(self, sequence): |
- # Verifies that a property like 'messageDescriptor.fields' has all the |
- # properties of an immutable abc.Sequence. |
- self.assertGreater(len(sequence), 0) # Sized |
- self.assertEqual(len(sequence), len(list(sequence))) # Iterable |
- item = sequence[0] |
- self.assertEqual(item, sequence[0]) |
- self.assertIn(item, sequence) # Container |
- self.assertEqual(sequence.index(item), 0) |
- self.assertEqual(sequence.count(item), 1) |
- reversed_iterator = reversed(sequence) |
- self.assertEqual(list(reversed_iterator), list(sequence)[::-1]) |
- self.assertRaises(StopIteration, next, reversed_iterator) |
- |
- def CheckDescriptorMapping(self, mapping): |
- # Verifies that a property like 'messageDescriptor.fields' has all the |
- # properties of an immutable abc.Mapping. |
- self.assertGreater(len(mapping), 0) # Sized |
- self.assertEqual(len(mapping), len(list(mapping))) # Iterable |
- if sys.version_info.major >= 3: |
- key, item = next(iter(mapping.items())) |
- else: |
- key, item = mapping.items()[0] |
- self.assertIn(key, mapping) # Container |
- self.assertEqual(mapping.get(key), item) |
- # keys(), iterkeys() &co |
- item = (next(iter(mapping.keys())), next(iter(mapping.values()))) |
- self.assertEqual(item, next(iter(mapping.items()))) |
- if sys.version_info.major < 3: |
- def CheckItems(seq, iterator): |
- self.assertEqual(next(iterator), seq[0]) |
- self.assertEqual(list(iterator), seq[1:]) |
- CheckItems(mapping.keys(), mapping.iterkeys()) |
- CheckItems(mapping.values(), mapping.itervalues()) |
- CheckItems(mapping.items(), mapping.iteritems()) |
- |
- def testDescriptor(self): |
- message_descriptor = unittest_pb2.TestAllTypes.DESCRIPTOR |
- self.CheckMessageDescriptor(message_descriptor) |
- field_descriptor = message_descriptor.fields_by_name['optional_int32'] |
- self.CheckFieldDescriptor(field_descriptor) |
- |
- def testCppDescriptorContainer(self): |
- # Check that the collection is still valid even if the parent disappeared. |
- enum = unittest_pb2.TestAllTypes.DESCRIPTOR.enum_types_by_name['NestedEnum'] |
- values = enum.values |
- del enum |
- self.assertEqual('FOO', values[0].name) |
- |
- def testCppDescriptorContainer_Iterator(self): |
- # Same test with the iterator |
- enum = unittest_pb2.TestAllTypes.DESCRIPTOR.enum_types_by_name['NestedEnum'] |
- values_iter = iter(enum.values) |
- del enum |
- self.assertEqual('FOO', next(values_iter).name) |
- |
class DescriptorCopyToProtoTest(unittest.TestCase): |
"""Tests for CopyTo functions of Descriptor.""" |
@@ -628,49 +530,47 @@ class DescriptorCopyToProtoTest(unittest.TestCase): |
descriptor_pb2.DescriptorProto, |
TEST_MESSAGE_WITH_SEVERAL_EXTENSIONS_ASCII) |
- # Disable this test so we can make changes to the proto file. |
- # TODO(xiaofeng): Enable this test after cl/55530659 is submitted. |
- # |
- # def testCopyToProto_FileDescriptor(self): |
- # UNITTEST_IMPORT_FILE_DESCRIPTOR_ASCII = (""" |
- # name: 'google/protobuf/unittest_import.proto' |
- # package: 'protobuf_unittest_import' |
- # dependency: 'google/protobuf/unittest_import_public.proto' |
- # message_type: < |
- # name: 'ImportMessage' |
- # field: < |
- # name: 'd' |
- # number: 1 |
- # label: 1 # Optional |
- # type: 5 # TYPE_INT32 |
- # > |
- # > |
- # """ + |
- # """enum_type: < |
- # name: 'ImportEnum' |
- # value: < |
- # name: 'IMPORT_FOO' |
- # number: 7 |
- # > |
- # value: < |
- # name: 'IMPORT_BAR' |
- # number: 8 |
- # > |
- # value: < |
- # name: 'IMPORT_BAZ' |
- # number: 9 |
- # > |
- # > |
- # options: < |
- # java_package: 'com.google.protobuf.test' |
- # optimize_for: 1 # SPEED |
- # > |
- # public_dependency: 0 |
- # """) |
- # self._InternalTestCopyToProto( |
- # unittest_import_pb2.DESCRIPTOR, |
- # descriptor_pb2.FileDescriptorProto, |
- # UNITTEST_IMPORT_FILE_DESCRIPTOR_ASCII) |
+ def testCopyToProto_FileDescriptor(self): |
+ UNITTEST_IMPORT_FILE_DESCRIPTOR_ASCII = (""" |
+ name: 'google/protobuf/unittest_import.proto' |
+ package: 'protobuf_unittest_import' |
+ dependency: 'google/protobuf/unittest_import_public.proto' |
+ message_type: < |
+ name: 'ImportMessage' |
+ field: < |
+ name: 'd' |
+ number: 1 |
+ label: 1 # Optional |
+ type: 5 # TYPE_INT32 |
+ > |
+ > |
+ """ + |
+ """enum_type: < |
+ name: 'ImportEnum' |
+ value: < |
+ name: 'IMPORT_FOO' |
+ number: 7 |
+ > |
+ value: < |
+ name: 'IMPORT_BAR' |
+ number: 8 |
+ > |
+ value: < |
+ name: 'IMPORT_BAZ' |
+ number: 9 |
+ > |
+ > |
+ options: < |
+ java_package: 'com.google.protobuf.test' |
+ optimize_for: 1 # SPEED |
+ > |
+ public_dependency: 0 |
+ """) |
+ |
+ self._InternalTestCopyToProto( |
+ unittest_import_pb2.DESCRIPTOR, |
+ descriptor_pb2.FileDescriptorProto, |
+ UNITTEST_IMPORT_FILE_DESCRIPTOR_ASCII) |
def testCopyToProto_ServiceDescriptor(self): |
TEST_SERVICE_ASCII = """ |
@@ -686,94 +586,28 @@ class DescriptorCopyToProtoTest(unittest.TestCase): |
output_type: '.protobuf_unittest.BarResponse' |
> |
""" |
- # TODO(rocking): enable this test after the proto descriptor change is |
- # checked in. |
- #self._InternalTestCopyToProto( |
- # unittest_pb2.TestService.DESCRIPTOR, |
- # descriptor_pb2.ServiceDescriptorProto, |
- # TEST_SERVICE_ASCII) |
- |
- |
-class MakeDescriptorTest(unittest.TestCase): |
- def testMakeDescriptorWithNestedFields(self): |
- file_descriptor_proto = descriptor_pb2.FileDescriptorProto() |
- file_descriptor_proto.name = 'Foo2' |
- message_type = file_descriptor_proto.message_type.add() |
- message_type.name = file_descriptor_proto.name |
- nested_type = message_type.nested_type.add() |
- nested_type.name = 'Sub' |
- enum_type = nested_type.enum_type.add() |
- enum_type.name = 'FOO' |
- enum_type_val = enum_type.value.add() |
- enum_type_val.name = 'BAR' |
- enum_type_val.number = 3 |
- field = message_type.field.add() |
- field.number = 1 |
- field.name = 'uint64_field' |
- field.label = descriptor.FieldDescriptor.LABEL_REQUIRED |
- field.type = descriptor.FieldDescriptor.TYPE_UINT64 |
- field = message_type.field.add() |
- field.number = 2 |
- field.name = 'nested_message_field' |
- field.label = descriptor.FieldDescriptor.LABEL_REQUIRED |
- field.type = descriptor.FieldDescriptor.TYPE_MESSAGE |
- field.type_name = 'Sub' |
- enum_field = nested_type.field.add() |
- enum_field.number = 2 |
- enum_field.name = 'bar_field' |
- enum_field.label = descriptor.FieldDescriptor.LABEL_REQUIRED |
- enum_field.type = descriptor.FieldDescriptor.TYPE_ENUM |
- enum_field.type_name = 'Foo2.Sub.FOO' |
+ self._InternalTestCopyToProto( |
+ unittest_pb2.TestService.DESCRIPTOR, |
+ descriptor_pb2.ServiceDescriptorProto, |
+ TEST_SERVICE_ASCII) |
- result = descriptor.MakeDescriptor(message_type) |
- self.assertEqual(result.fields[0].cpp_type, |
- descriptor.FieldDescriptor.CPPTYPE_UINT64) |
- self.assertEqual(result.fields[1].cpp_type, |
- descriptor.FieldDescriptor.CPPTYPE_MESSAGE) |
- self.assertEqual(result.fields[1].message_type.containing_type, |
- result) |
- self.assertEqual(result.nested_types[0].fields[0].full_name, |
- 'Foo2.Sub.bar_field') |
- self.assertEqual(result.nested_types[0].fields[0].enum_type, |
- result.nested_types[0].enum_types[0]) |
+class MakeDescriptorTest(unittest.TestCase): |
def testMakeDescriptorWithUnsignedIntField(self): |
file_descriptor_proto = descriptor_pb2.FileDescriptorProto() |
file_descriptor_proto.name = 'Foo' |
message_type = file_descriptor_proto.message_type.add() |
message_type.name = file_descriptor_proto.name |
- enum_type = message_type.enum_type.add() |
- enum_type.name = 'FOO' |
- enum_type_val = enum_type.value.add() |
- enum_type_val.name = 'BAR' |
- enum_type_val.number = 3 |
field = message_type.field.add() |
field.number = 1 |
field.name = 'uint64_field' |
field.label = descriptor.FieldDescriptor.LABEL_REQUIRED |
field.type = descriptor.FieldDescriptor.TYPE_UINT64 |
- enum_field = message_type.field.add() |
- enum_field.number = 2 |
- enum_field.name = 'bar_field' |
- enum_field.label = descriptor.FieldDescriptor.LABEL_REQUIRED |
- enum_field.type = descriptor.FieldDescriptor.TYPE_ENUM |
- enum_field.type_name = 'Foo.FOO' |
- |
result = descriptor.MakeDescriptor(message_type) |
self.assertEqual(result.fields[0].cpp_type, |
descriptor.FieldDescriptor.CPPTYPE_UINT64) |
- def testMakeDescriptorWithOptions(self): |
- descriptor_proto = descriptor_pb2.DescriptorProto() |
- aggregate_message = unittest_custom_options_pb2.AggregateMessage |
- aggregate_message.DESCRIPTOR.CopyToProto(descriptor_proto) |
- reformed_descriptor = descriptor.MakeDescriptor(descriptor_proto) |
- |
- options = reformed_descriptor.GetOptions() |
- self.assertEquals(101, |
- options.Extensions[unittest_custom_options_pb2.msgopt].i) |
- |
if __name__ == '__main__': |
unittest.main() |