def MakeFileDescriptor(self, package): """Helper method to construct FileDescriptors. Creates FileDescriptor with a MessageDescriptor and an EnumDescriptor. Args: package: Package name to give new file descriptors. Returns: New FileDescriptor instance. """ enum_descriptor = descriptor.EnumDescriptor() enum_descriptor.name = u'MyEnum' message_descriptor = descriptor.MessageDescriptor() message_descriptor.name = u'MyMessage' service_descriptor = descriptor.ServiceDescriptor() service_descriptor.name = u'MyService' file_descriptor = descriptor.FileDescriptor() file_descriptor.package = package file_descriptor.enum_types = [enum_descriptor] file_descriptor.message_types = [message_descriptor] file_descriptor.service_types = [service_descriptor] return file_descriptor
def DoMessageTest(self, field_descriptors, message_types=None, enum_types=None): """Execute message generation test based on FieldDescriptor objects. Args: field_descriptor: List of FieldDescriptor object to generate and test. message_types: List of other MessageDescriptor objects that the new Message class depends on. enum_types: List of EnumDescriptor objects that the new Message class depends on. """ file_descriptor = descriptor.FileDescriptor() file_descriptor.package = 'my_package' message_descriptor = descriptor.MessageDescriptor() message_descriptor.name = 'MyMessage' message_descriptor.fields = list(field_descriptors) file_descriptor.message_types = message_types or [] file_descriptor.message_types.append(message_descriptor) if enum_types: file_descriptor.enum_types = list(enum_types) self.DoPythonTest(file_descriptor)
def setUp(self): self.packageless = descriptor.MessageDescriptor() self.packageless.name = 'Packageless' self.library = descriptor.DescriptorLibrary( descriptors={ 'not.real.Packageless': self.packageless, 'Packageless': self.packageless, })
def MakeMessage(self, name='MyMessage', fields=[]): message = descriptor.MessageDescriptor() message.name = name message.fields = fields messages_list = getattr(self.file_descriptor, 'fields', []) messages_list.append(message) self.file_descriptor.message_types = messages_list
def testNestedMessage(self): message = descriptor.MessageDescriptor() message.name = 'OuterMessage' inner_message = descriptor.MessageDescriptor() inner_message.name = 'InnerMessage' inner_inner_message = descriptor.MessageDescriptor() inner_inner_message.name = 'InnerInnerMessage' inner_message.message_types = [inner_inner_message] message.message_types = [inner_message] file_descriptor = descriptor.FileDescriptor() file_descriptor.message_types = [message] self.DoPythonTest(file_descriptor)
def testMessages(self): """Test that messages are described.""" module = self.LoadModule( 'my.package', 'class Message1(messages.Message): pass\n' 'class Message2(messages.Message): pass\n') message1 = descriptor.MessageDescriptor() message1.name = 'Message1' message2 = descriptor.MessageDescriptor() message2.name = 'Message2' expected = descriptor.FileDescriptor() expected.package = 'my.package' expected.message_types = [message1, message2] described = descriptor.describe_file(module) described.check_initialized() self.assertEquals(expected, described)
def testEmptyDefinition(self): class MyMessage(messages.Message): pass expected = descriptor.MessageDescriptor() expected.name = 'MyMessage' described = descriptor.describe_message(MyMessage) described.check_initialized() self.assertEquals(expected, described)
def testMessageField_InternalReference(self): other_message = descriptor.MessageDescriptor() other_message.name = 'OtherMessage' field = descriptor.FieldDescriptor() field.name = 'message_field' field.number = 1 field.label = descriptor.FieldDescriptor.Label.OPTIONAL field.variant = descriptor.FieldDescriptor.Variant.MESSAGE field.type_name = 'my_package.OtherMessage' self.DoMessageTest([field], message_types=[other_message])
def testNestedEnum(self): message = descriptor.MessageDescriptor() message.name = 'OuterMessage' inner_enum = descriptor.EnumDescriptor() inner_enum.name = 'InnerEnum' message.enum_types = [inner_enum] file_descriptor = descriptor.FileDescriptor() file_descriptor.message_types = [message] self.DoPythonTest(file_descriptor)
def testNestedMessage(self): class MessageWithMessage(messages.Message): class Nesty(messages.Message): pass expected = descriptor.MessageDescriptor() expected.name = 'MessageWithMessage' expected.message_types = [ descriptor.describe_message(MessageWithMessage.Nesty) ] described = descriptor.describe_message(MessageWithMessage) described.check_initialized() self.assertEquals(expected, described)
def testDefinitionWithFields(self): class MessageWithFields(messages.Message): field1 = messages.IntegerField(10) field2 = messages.StringField(30) field3 = messages.IntegerField(20) expected = descriptor.MessageDescriptor() expected.name = 'MessageWithFields' expected.fields = [ descriptor.describe_field( MessageWithFields.field_by_name('field1')), descriptor.describe_field( MessageWithFields.field_by_name('field3')), descriptor.describe_field( MessageWithFields.field_by_name('field2')), ] described = descriptor.describe_message(MessageWithFields) described.check_initialized() self.assertEquals(expected, described)
def testNestedEnum(self): class MessageWithEnum(messages.Message): class Mood(messages.Enum): GOOD = 1 BAD = 2 UGLY = 3 class Music(messages.Enum): CLASSIC = 1 JAZZ = 2 BLUES = 3 expected = descriptor.MessageDescriptor() expected.name = 'MessageWithEnum' expected.enum_types = [ descriptor.describe_enum(MessageWithEnum.Mood), descriptor.describe_enum(MessageWithEnum.Music) ] described = descriptor.describe_message(MessageWithEnum) described.check_initialized() self.assertEquals(expected, described)