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))
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)
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
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
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
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