def testDefineField_Default_Bool(self): """Test defining a default value for a bool.""" field_descriptor = descriptor.FieldDescriptor() field_descriptor.name = 'a_field' field_descriptor.number = 1 field_descriptor.variant = descriptor.FieldDescriptor.Variant.BOOL field_descriptor.default_value = u'true' field = definition.define_field(field_descriptor) # Name will not be set from the original descriptor. self.assertFalse(hasattr(field, 'name')) self.assertTrue(isinstance(field, messages.BooleanField)) self.assertEquals(1, field.number) self.assertEquals(descriptor.FieldDescriptor.Variant.BOOL, field.variant) self.assertFalse(field.required) self.assertFalse(field.repeated) self.assertEqual(field.default, True) field_descriptor.default_value = u'false' field = definition.define_field(field_descriptor) self.assertEqual(field.default, False)
def __FieldDescriptorFromProperties(self, name, index, attrs): """Create a field descriptor for these attrs.""" field = descriptor.FieldDescriptor() field.name = self.__names.CleanName(name) field.number = index field.label = self.__ComputeLabel(attrs) new_type_name_hint = self.__names.ClassName( '%sValue' % self.__names.ClassName(name)) type_info = self.__GetTypeInfo(attrs, new_type_name_hint) field.type_name = type_info.type_name field.variant = type_info.variant if 'default' in attrs: # TODO(craigcitro): Correctly handle non-primitive default values. default = attrs['default'] if field.type_name != 'string' and field.variant != messages.Variant.ENUM: default = str(json.loads(default)) if field.variant == messages.Variant.ENUM: default = self.__names.NormalizeEnumName(default) field.default_value = default extended_field = extended_descriptor.ExtendedFieldDescriptor() extended_field.name = field.name extended_field.description = util.CleanDescription( attrs.get('description', 'A %s attribute.' % field.type_name)) extended_field.field_descriptor = field return extended_field
def testRepeatedField(self): field = descriptor.FieldDescriptor() field.name = 'integer_field' field.number = 1 field.label = descriptor.FieldDescriptor.Label.REPEATED field.variant = descriptor.FieldDescriptor.Variant.INT64 self.DoMessageTest([field])
def testNonDefaultVariant(self): field = descriptor.FieldDescriptor() field.name = 'integer_field' field.number = 1 field.label = descriptor.FieldDescriptor.Label.OPTIONAL field.variant = descriptor.FieldDescriptor.Variant.UINT64 self.DoMessageTest([field])
def testDateTimeField(self): field = descriptor.FieldDescriptor() field.name = 'timestamp' field.number = 1 field.label = descriptor.FieldDescriptor.Label.OPTIONAL field.variant = descriptor.FieldDescriptor.Variant.MESSAGE field.type_name = 'protorpc.message_types.DateTimeMessage' self.DoMessageTest([field])
def testIntegerDefaultValue(self): field = descriptor.FieldDescriptor() field.name = 'integer_field' field.number = 1 field.label = descriptor.FieldDescriptor.Label.OPTIONAL field.variant = descriptor.FieldDescriptor.Variant.INT64 field.default_value = '10' self.DoMessageTest([field])
def testMessageField_ExternalReference(self): 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 = 'protorpc.registry.GetFileSetResponse' self.DoMessageTest([field])
def testFloatDefaultValue(self): field = descriptor.FieldDescriptor() field.name = 'float_field' field.number = 1 field.label = descriptor.FieldDescriptor.Label.OPTIONAL field.variant = descriptor.FieldDescriptor.Variant.DOUBLE field.default_value = '10.1' self.DoMessageTest([field])
def testEnumField_ExternalReference(self): field = descriptor.FieldDescriptor() field.name = 'color' field.number = 1 field.label = descriptor.FieldDescriptor.Label.OPTIONAL field.variant = descriptor.FieldDescriptor.Variant.ENUM field.type_name = 'protorpc.descriptor.FieldDescriptor.Label' self.DoMessageTest([field])
def testStringDefaultValue(self): field = descriptor.FieldDescriptor() field.name = 'string_field' field.number = 1 field.label = descriptor.FieldDescriptor.Label.OPTIONAL field.variant = descriptor.FieldDescriptor.Variant.STRING field.default_value = u'a nice lovely string\'s "string"' self.DoMessageTest([field])
def testEnumDefaultValue(self): field = descriptor.FieldDescriptor() field.name = 'label' field.number = 1 field.label = descriptor.FieldDescriptor.Label.OPTIONAL field.variant = descriptor.FieldDescriptor.Variant.ENUM field.type_name = 'protorpc.descriptor.FieldDescriptor.Label' field.default_value = '2' self.DoMessageTest([field])
def testMultiFields(self): field1 = descriptor.FieldDescriptor() field1.name = 'integer_field' field1.number = 1 field1.label = descriptor.FieldDescriptor.Label.OPTIONAL field1.variant = descriptor.FieldDescriptor.Variant.INT64 field2 = descriptor.FieldDescriptor() field2.name = 'string_field' field2.number = 2 field2.label = descriptor.FieldDescriptor.Label.OPTIONAL field2.variant = descriptor.FieldDescriptor.Variant.STRING field3 = descriptor.FieldDescriptor() field3.name = 'unsigned_integer_field' field3.number = 3 field3.label = descriptor.FieldDescriptor.Label.OPTIONAL field3.variant = descriptor.FieldDescriptor.Variant.UINT64 self.DoMessageTest([field1, field2, field3])
def testEnumField_InternalReference(self): enum = descriptor.EnumDescriptor() enum.name = 'Color' field = descriptor.FieldDescriptor() field.name = 'color' field.number = 1 field.label = descriptor.FieldDescriptor.Label.OPTIONAL field.variant = descriptor.FieldDescriptor.Variant.ENUM field.type_name = 'my_package.Color' self.DoMessageTest([field], enum_types=[enum])
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 testMessageField(self): field = messages.MessageField(descriptor.FieldDescriptor, 10) field.name = 'a_field' expected = descriptor.FieldDescriptor() expected.name = 'a_field' expected.number = 10 expected.label = descriptor.FieldDescriptor.Label.OPTIONAL expected.variant = messages.MessageField.DEFAULT_VARIANT expected.type_name = ('protorpc.descriptor.FieldDescriptor') described = descriptor.describe_field(field) described.check_initialized() self.assertEquals(expected, described)
def testDateTimeField(self): field = message_types.DateTimeField(20) field.name = 'a_timestamp' expected = descriptor.FieldDescriptor() expected.name = 'a_timestamp' expected.number = 20 expected.label = descriptor.FieldDescriptor.Label.OPTIONAL expected.variant = messages.MessageField.DEFAULT_VARIANT expected.type_name = ('protorpc.message_types.DateTimeMessage') described = descriptor.describe_field(field) described.check_initialized() self.assertEquals(expected, described)
def testSingleField(self): field = descriptor.FieldDescriptor() field.name = 'integer_field' field.number = 1 field.label = descriptor.FieldDescriptor.Label.OPTIONAL field.variant = descriptor.FieldDescriptor.Variant.INT64 self.MakeMessage(fields=[field]) generate_proto.format_proto_file(self.file_descriptor, self.output) self.assertEquals('\n\n' 'message MyMessage {\n' ' optional int64 integer_field = 1;\n' '}\n', self.result)
def testRepeatedFieldWithDefault(self): field = descriptor.FieldDescriptor() field.name = 'integer_field' field.number = 1 field.label = descriptor.FieldDescriptor.Label.REPEATED field.variant = descriptor.FieldDescriptor.Variant.INT64 field.default_value = '[10, 20]' self.MakeMessage(fields=[field]) generate_proto.format_proto_file(self.file_descriptor, self.output) self.assertEquals('\n\n' 'message MyMessage {\n' ' repeated int64 integer_field = 1;\n' '}\n', self.result)
def testSingleFieldWithDefaultEmptyString(self): field = descriptor.FieldDescriptor() field.name = 'string_field' field.number = 1 field.label = descriptor.FieldDescriptor.Label.OPTIONAL field.variant = descriptor.FieldDescriptor.Variant.STRING field.default_value = '' self.MakeMessage(fields=[field]) generate_proto.format_proto_file(self.file_descriptor, self.output) self.assertEquals('\n\n' 'message MyMessage {\n' " optional string string_field = 1 [default=''];\n" '}\n', self.result)
def testSingleFieldWithDefaultMessage(self): 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 = 'MyNestedMessage' field.default_value = 'not valid' self.MakeMessage(fields=[field]) generate_proto.format_proto_file(self.file_descriptor, self.output) self.assertEquals('\n\n' 'message MyMessage {\n' " optional MyNestedMessage message_field = 1;\n" '}\n', self.result)
def testSingleFieldWithDefaultEnum(self): field = descriptor.FieldDescriptor() field.name = 'enum_field' field.number = 1 field.label = descriptor.FieldDescriptor.Label.OPTIONAL field.variant = descriptor.FieldDescriptor.Variant.ENUM field.type_name = 'my_package.MyEnum' field.default_value = '17' self.MakeMessage(fields=[field]) generate_proto.format_proto_file(self.file_descriptor, self.output) self.assertEquals('\n\n' 'message MyMessage {\n' " optional my_package.MyEnum enum_field = 1 " "[default=17];\n" '}\n', self.result)
def testDefault_EnumField(self): class MyEnum(messages.Enum): VAL = 1 module_name = test_util.get_module_name(MyEnum) field = messages.EnumField(MyEnum, 10, default=MyEnum.VAL) field.name = 'a_field' expected = descriptor.FieldDescriptor() expected.name = 'a_field' expected.number = 10 expected.label = descriptor.FieldDescriptor.Label.OPTIONAL expected.variant = messages.EnumField.DEFAULT_VARIANT expected.type_name = '%s.MyEnum' % module_name expected.default_value = '1' described = descriptor.describe_field(field) self.assertEquals(expected, described)
def testLabel(self): for repeated, required, expected_label in ( (True, False, descriptor.FieldDescriptor.Label.REPEATED), (False, True, descriptor.FieldDescriptor.Label.REQUIRED), (False, False, descriptor.FieldDescriptor.Label.OPTIONAL)): field = messages.IntegerField(10, required=required, repeated=repeated) field.name = 'a_field' expected = descriptor.FieldDescriptor() expected.name = 'a_field' expected.number = 10 expected.label = expected_label expected.variant = descriptor.FieldDescriptor.Variant.INT64 described = descriptor.describe_field(field) described.check_initialized() self.assertEquals(expected, described)
def testDefineField_Repeated(self): """Test defining a repeated field instance from a method descriptor.""" field_descriptor = descriptor.FieldDescriptor() field_descriptor.name = 'a_field' field_descriptor.number = 1 field_descriptor.variant = descriptor.FieldDescriptor.Variant.DOUBLE field_descriptor.label = descriptor.FieldDescriptor.Label.REPEATED field = definition.define_field(field_descriptor) # Name will not be set from the original descriptor. self.assertFalse(hasattr(field, 'name')) self.assertTrue(isinstance(field, messages.FloatField)) self.assertEquals(1, field.number) self.assertEquals(descriptor.FieldDescriptor.Variant.DOUBLE, field.variant) self.assertFalse(field.required) self.assertTrue(field.repeated)
def testDefineField_Optional(self): """Test defining an optional field instance from a method descriptor.""" field_descriptor = descriptor.FieldDescriptor() field_descriptor.name = 'a_field' field_descriptor.number = 1 field_descriptor.variant = descriptor.FieldDescriptor.Variant.INT32 field_descriptor.label = descriptor.FieldDescriptor.Label.OPTIONAL field = definition.define_field(field_descriptor) # Name will not be set from the original descriptor. self.assertFalse(hasattr(field, 'name')) self.assertTrue(isinstance(field, messages.IntegerField)) self.assertEquals(1, field.number) self.assertEquals(descriptor.FieldDescriptor.Variant.INT32, field.variant) self.assertFalse(field.required) self.assertFalse(field.repeated)
def testDefineField_DateTime(self): """Test defining a date time field.""" field_descriptor = descriptor.FieldDescriptor() field_descriptor.name = 'a_timestamp' field_descriptor.number = 1 field_descriptor.variant = descriptor.FieldDescriptor.Variant.MESSAGE field_descriptor.type_name = 'protorpc.message_types.DateTimeMessage' field_descriptor.label = descriptor.FieldDescriptor.Label.REPEATED field = definition.define_field(field_descriptor) # Name will not be set from the original descriptor. self.assertFalse(hasattr(field, 'name')) self.assertTrue(isinstance(field, message_types.DateTimeField)) self.assertEquals(1, field.number) self.assertEquals(descriptor.FieldDescriptor.Variant.MESSAGE, field.variant) self.assertFalse(field.required) self.assertTrue(field.repeated)
def testDefineField_Default_Float(self): """Test defining a default value for a float.""" field_descriptor = descriptor.FieldDescriptor() field_descriptor.name = 'a_field' field_descriptor.number = 1 field_descriptor.variant = descriptor.FieldDescriptor.Variant.FLOAT field_descriptor.default_value = u'34.567' field = definition.define_field(field_descriptor) # Name will not be set from the original descriptor. self.assertFalse(hasattr(field, 'name')) self.assertTrue(isinstance(field, messages.FloatField)) self.assertEquals(1, field.number) self.assertEquals(descriptor.FieldDescriptor.Variant.FLOAT, field.variant) self.assertFalse(field.required) self.assertFalse(field.repeated) self.assertEqual(field.default, 34.567)
def testDefineField_Default_Str(self): """Test defining a default value for a str.""" field_descriptor = descriptor.FieldDescriptor() field_descriptor.name = 'a_field' field_descriptor.number = 1 field_descriptor.variant = descriptor.FieldDescriptor.Variant.STRING field_descriptor.default_value = u'Test' field = definition.define_field(field_descriptor) # Name will not be set from the original descriptor. self.assertFalse(hasattr(field, 'name')) self.assertTrue(isinstance(field, messages.StringField)) self.assertEquals(1, field.number) self.assertEquals(descriptor.FieldDescriptor.Variant.STRING, field.variant) self.assertFalse(field.required) self.assertFalse(field.repeated) self.assertEqual(field.default, u'Test')
def testDefault(self): for field_class, default, expected_default in ( (messages.IntegerField, 200, '200'), (messages.FloatField, 1.5, '1.5'), (messages.FloatField, 1e6, '1000000.0'), (messages.BooleanField, True, 'true'), (messages.BooleanField, False, 'false'), (messages.BytesField, 'ab\xF1', 'ab\\xf1'), (messages.StringField, RUSSIA, RUSSIA), ): field = field_class(10, default=default) field.name = u'a_field' expected = descriptor.FieldDescriptor() expected.name = u'a_field' expected.number = 10 expected.label = descriptor.FieldDescriptor.Label.OPTIONAL expected.variant = field_class.DEFAULT_VARIANT expected.default_value = expected_default described = descriptor.describe_field(field) described.check_initialized() self.assertEquals(expected, described)
def testDefineField_Default_Invalid(self): """Test defining a default value that is not valid.""" field_descriptor = descriptor.FieldDescriptor() field_descriptor.name = 'a_field' field_descriptor.number = 1 field_descriptor.variant = descriptor.FieldDescriptor.Variant.INT64 field_descriptor.default_value = u'Test' # Verify that the string is passed to the Constructor. mock = mox.Mox() mock.StubOutWithMock(messages.IntegerField, '__init__') messages.IntegerField.__init__( default=u'Test', number=1, variant=messages.Variant.INT64).AndRaise( messages.InvalidDefaultError) mock.ReplayAll() self.assertRaises(messages.InvalidDefaultError, definition.define_field, field_descriptor) mock.VerifyAll() mock.ResetAll() mock.UnsetStubs()