Exemplo n.º 1
0
    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
Exemplo n.º 3
0
    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])
Exemplo n.º 4
0
    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])
Exemplo n.º 5
0
    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])
Exemplo n.º 6
0
    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])
Exemplo n.º 7
0
    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])
Exemplo n.º 8
0
    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])
Exemplo n.º 9
0
    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])
Exemplo n.º 10
0
    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])
Exemplo n.º 11
0
    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])
Exemplo n.º 12
0
    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])
Exemplo n.º 13
0
    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])
Exemplo n.º 14
0
    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])
Exemplo n.º 15
0
    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)
Exemplo n.º 16
0
    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)
Exemplo n.º 17
0
  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)
Exemplo n.º 18
0
  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)
Exemplo n.º 19
0
  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)
Exemplo n.º 20
0
  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)
Exemplo n.º 21
0
  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)
Exemplo n.º 22
0
    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)
Exemplo n.º 23
0
    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)
Exemplo n.º 24
0
    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)
Exemplo n.º 25
0
    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)
Exemplo n.º 26
0
    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)
Exemplo n.º 27
0
    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)
Exemplo n.º 28
0
    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')
Exemplo n.º 29
0
    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)
Exemplo n.º 30
0
    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()