Exemplo n.º 1
0
    def test_child_enum(self):
        file_name = 'a.mojom'
        mojom_enum = mojom_types_mojom.MojomEnum()
        mojom_enum.decl_data = mojom_types_mojom.DeclarationData(
            short_name='AnEnum',
            source_file_info=mojom_types_mojom.SourceFileInfo(
                file_name=file_name),
            container_type_key='struct_key')
        mojom_enum.values = []

        graph = mojom_files_mojom.MojomFileGraph()
        mojom_struct = mojom_types_mojom.MojomStruct(
            fields=[],
            decl_data=mojom_types_mojom.DeclarationData(
                short_name='AStruct',
                source_file_info=mojom_types_mojom.SourceFileInfo(
                    file_name=file_name)))
        add_version_info(mojom_struct, 0)
        graph.resolved_types = {
            'struct_key':
            mojom_types_mojom.UserDefinedType(struct_type=mojom_struct)
        }

        enum = module.Enum()
        translator = mojom_translator.FileTranslator(graph, file_name)
        translator.EnumFromMojom(
            enum, mojom_types_mojom.UserDefinedType(enum_type=mojom_enum))

        self.assertEquals(mojom_enum.decl_data.short_name, enum.name)
        self.assertEquals(len(mojom_enum.values), len(enum.fields))
Exemplo n.º 2
0
    def test_enum(self):
        file_name = 'a.mojom'
        mojom_enum = mojom_types_mojom.MojomEnum()
        mojom_enum.decl_data = mojom_types_mojom.DeclarationData(
            short_name='AnEnum',
            source_file_info=mojom_types_mojom.SourceFileInfo(
                file_name=file_name))
        value1 = mojom_types_mojom.EnumValue(
            decl_data=mojom_types_mojom.DeclarationData(short_name='val1'),
            initializer_value=mojom_types_mojom.Value(
                literal_value=mojom_types_mojom.LiteralValue(uint64_value=20)),
            int_value=20)
        value2 = mojom_types_mojom.EnumValue(
            decl_data=mojom_types_mojom.DeclarationData(short_name='val2'),
            int_value=70)
        mojom_enum.values = [value1, value2]

        graph = mojom_files_mojom.MojomFileGraph()
        enum = module.Enum()
        translator = mojom_translator.FileTranslator(graph, file_name)
        translator.EnumFromMojom(
            enum, mojom_types_mojom.UserDefinedType(enum_type=mojom_enum))

        self.assertEquals(translator._module, enum.module)
        self.assertEquals(mojom_enum.decl_data.short_name, enum.name)
        self.assertEquals(len(mojom_enum.values), len(enum.fields))

        self.assertEquals(value1.decl_data.short_name, enum.fields[0].name)
        self.assertEquals(value2.decl_data.short_name, enum.fields[1].name)

        self.assertEquals('20', enum.fields[0].value)
        self.assertIsNone(enum.fields[1].value)

        self.assertEquals(value1.int_value, enum.fields[0].numeric_value)
        self.assertEquals(value2.int_value, enum.fields[1].numeric_value)
Exemplo n.º 3
0
def _Enum(module, parsed_enum, parent_kind):
    """
  Args:
    module: {mojom.Module} Module currently being constructed.
    parsed_enum: {ast.Enum} Parsed enum.

  Returns:
    {mojom.Enum} AST enum.
  """
    enum = mojom.Enum(module=module)
    enum.mojom_name = parsed_enum.mojom_name
    enum.native_only = parsed_enum.enum_value_list is None
    mojom_name = enum.mojom_name
    if parent_kind:
        mojom_name = parent_kind.mojom_name + '.' + mojom_name
    enum.spec = 'x:%s.%s' % (module.mojom_namespace, mojom_name)
    enum.parent_kind = parent_kind
    enum.attributes = _AttributeListToDict(parsed_enum.attribute_list)
    if not enum.native_only:
        enum.fields = map(
            lambda field: _EnumField(module, enum, field, parent_kind),
            parsed_enum.enum_value_list)
        enum.min_value, enum.max_value = _ResolveNumericEnumValues(enum.fields)

    module.kinds[enum.spec] = enum

    # Enforce that a [Native] attribute is set to make native-only enum
    # declarations more explicit.
    if enum.native_only:
        if not enum.attributes or not enum.attributes.get('Native', False):
            raise Exception("Native-only enum declarations must include a " +
                            "Native attribute.")

    return enum
Exemplo n.º 4
0
def EnumFromData(module, data, parent_kind):
  enum = mojom.Enum(module=module)
  enum.name = data['name']
  enum.native_only = data['native_only']
  name = enum.name
  if parent_kind:
    name = parent_kind.name + '.' + name
  enum.spec = 'x:%s.%s' % (module.namespace, name)
  enum.parent_kind = parent_kind
  enum.attributes = data.get('attributes')
  if enum.native_only:
    enum.fields = []
  else:
    enum.fields = map(
        lambda field: EnumFieldFromData(module, enum, field, parent_kind),
        data['fields'])
    ResolveNumericEnumValues(enum.fields)

  module.kinds[enum.spec] = enum

  # Enforce that a [Native] attribute is set to make native-only enum
  # declarations more explicit.
  if enum.native_only:
    if not enum.attributes or not enum.attributes.get('Native', False):
      raise Exception("Native-only enum declarations must include a " +
                      "Native attribute.")

  return enum
Exemplo n.º 5
0
def EnumFromData(module, data, parent_kind):
    enum = mojom.Enum(module=module)
    enum.name = data['name']
    name = enum.name
    if parent_kind:
        name = parent_kind.name + '.' + name
    enum.spec = 'x:%s.%s' % (module.namespace, name)
    enum.parent_kind = parent_kind

    enum.fields = map(
        lambda field: EnumFieldFromData(module, enum, field, parent_kind),
        data['fields'])
    module.kinds[enum.spec] = enum
    return enum
Exemplo n.º 6
0
def EnumFromData(module, data, parent_kind):
    enum = mojom.Enum(module=module)
    enum.name = data['name']
    name = enum.name
    if parent_kind:
        name = parent_kind.name + '.' + name
    enum.spec = 'x:%s.%s' % (module.namespace, name)
    enum.parent_kind = parent_kind
    enum.fields = map(
        lambda field: EnumFieldFromData(module, enum, field, parent_kind),
        data['fields'])
    enum.attributes = data.get('attributes')
    ResolveNumericEnumValues(enum.fields)

    module.kinds[enum.spec] = enum
    return enum