def test_attributes_none(self): mojom_enum = fidl_types_fidl.FidlEnum() mojom_enum.decl_data = fidl_types_fidl.DeclarationData() graph = fidl_files_fidl.FidlFileGraph() attributes = mojom_translator.FileTranslator( graph, None).AttributesFromMojom(mojom_enum) self.assertFalse(attributes)
def test_child_enum(self): file_name = 'a.mojom' mojom_enum = fidl_types_fidl.FidlEnum() mojom_enum.decl_data = fidl_types_fidl.DeclarationData( short_name='AnEnum', source_file_info=fidl_types_fidl.SourceFileInfo( file_name=file_name), container_type_key='struct_key') mojom_enum.values = [] graph = fidl_files_fidl.FidlFileGraph() mojom_struct = fidl_types_fidl.FidlStruct( fields=[], decl_data=fidl_types_fidl.DeclarationData( short_name='AStruct', source_file_info=fidl_types_fidl.SourceFileInfo( file_name=file_name))) add_version_info(mojom_struct, 0) graph.resolved_types = { 'struct_key': fidl_types_fidl.UserDefinedType(struct_type=mojom_struct) } enum = module.Enum() translator = mojom_translator.FileTranslator(graph, file_name) translator.EnumFromMojom( enum, fidl_types_fidl.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 = fidl_types_fidl.FidlEnum() mojom_enum.decl_data = fidl_types_fidl.DeclarationData( short_name='AnEnum', source_file_info=fidl_types_fidl.SourceFileInfo( file_name=file_name)) value1 = fidl_types_fidl.EnumValue( decl_data=fidl_types_fidl.DeclarationData(short_name='val1'), initializer_value=fidl_types_fidl.Value( literal_value=fidl_types_fidl.LiteralValue(uint64_value=20)), int_value=20) value2 = fidl_types_fidl.EnumValue( decl_data=fidl_types_fidl.DeclarationData(short_name='val2'), int_value=70) mojom_enum.values = [value1, value2] graph = fidl_files_fidl.FidlFileGraph() enum = module.Enum() translator = mojom_translator.FileTranslator(graph, file_name) translator.EnumFromMojom( enum, fidl_types_fidl.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 test_contained_declarations(self): graph = fidl_files_fidl.FidlFileGraph() file_name = 'root/f.mojom' mojom_enum = fidl_types_fidl.FidlEnum( values=[], decl_data=fidl_types_fidl.DeclarationData( short_name='AnEnum', source_file_info=fidl_types_fidl.SourceFileInfo( file_name=file_name), container_type_key='parent_key')) graph.resolved_types = { 'enum_key': fidl_types_fidl.UserDefinedType(enum_type=mojom_enum) } mojom_const = fidl_types_fidl.DeclaredConstant( decl_data=fidl_types_fidl.DeclarationData( short_name='AConst', container_type_key='parent_key'), type=fidl_types_fidl.Type( simple_type=fidl_types_fidl.SimpleType.INT64), value=fidl_types_fidl.Value( literal_value=fidl_types_fidl.LiteralValue(int64_value=30))) graph.resolved_constants = {'constant_key': mojom_const} contained_declarations = fidl_types_fidl.ContainedDeclarations( enums=['enum_key'], constants=['constant_key']) translator = mojom_translator.FileTranslator(graph, file_name) struct = module.Struct(name='parent') translator._type_cache['parent_key'] = struct translator.PopulateContainedDeclarationsFromMojom( struct, contained_declarations) self.assertEquals(mojom_enum.decl_data.short_name, struct.enums[0].name) self.assertEquals(struct, struct.enums[0].parent_kind) self.assertEquals(mojom_const.decl_data.short_name, struct.constants[0].name) self.assertEquals(struct, struct.constants[0].parent_kind)
def test_attributes(self): mojom_enum = fidl_types_fidl.FidlEnum() mojom_enum.decl_data = fidl_types_fidl.DeclarationData() gold = { 'foo': 'bar', 'other': 'thing', 'hello': 'world', 'min_version': 2, 'pi': 3.14159, 'is_happy': True } mojom_enum.decl_data.attributes = [] for key, value in gold.iteritems(): mojom_enum.decl_data.attributes.append( fidl_types_fidl.Attribute(key=key, value=self.literal_value(value))) graph = fidl_files_fidl.FidlFileGraph() attributes = mojom_translator.FileTranslator( graph, None).AttributesFromMojom(mojom_enum) self.assertEquals(gold, attributes)
def test_enum_value(self): file_name = 'a.mojom' mojom_enum = fidl_types_fidl.FidlEnum() mojom_enum.decl_data = fidl_types_fidl.DeclarationData( short_name='AnEnum', source_file_info=fidl_types_fidl.SourceFileInfo( file_name=file_name)) value1 = fidl_types_fidl.EnumValue( decl_data=fidl_types_fidl.DeclarationData( short_name='val1', source_file_info=fidl_types_fidl.SourceFileInfo( file_name=file_name)), initializer_value=fidl_types_fidl.Value( literal_value=fidl_types_fidl.LiteralValue(uint64_value=20)), int_value=20) value2 = fidl_types_fidl.EnumValue( decl_data=fidl_types_fidl.DeclarationData(short_name='val2'), int_value=70) mojom_enum.values = [value1, value2] graph = fidl_files_fidl.FidlFileGraph() graph.resolved_types = { 'enum_key': fidl_types_fidl.UserDefinedType(enum_type=mojom_enum) } mojom = fidl_types_fidl.Value( enum_value_reference=fidl_types_fidl.EnumValueReference( identifier='SOMEID', enum_type_key='enum_key', enum_value_index=0)) translator = mojom_translator.FileTranslator(graph, file_name) enum_value = translator.ValueFromMojom(mojom) enum = translator.UserDefinedFromTypeKey('enum_key') self.assertIs(enum, enum_value.enum) self.assertIs(value1.decl_data.short_name, enum_value.name)
def test_basics(self): graph = fidl_files_fidl.FidlFileGraph(resolved_types={}) file_name = 'root/f.mojom' imported_file_name = 'other/a.mojom' second_level_imported_file_name = 'something/other.mojom' mojom_file = fidl_files_fidl.FidlFile( file_name=file_name, specified_file_name='specified_file_name', module_namespace='somens', imports=[imported_file_name]) imported_file = fidl_files_fidl.FidlFile( file_name=imported_file_name, specified_file_name='', module_namespace='somens', imports=[second_level_imported_file_name]) second_level_imported_file = fidl_files_fidl.FidlFile( file_name=second_level_imported_file_name, specified_file_name='', module_namespace='somens') graph.files = { file_name: mojom_file, imported_file_name: imported_file, second_level_imported_file_name: second_level_imported_file } mojom_interface = fidl_types_fidl.FidlInterface( methods={}, decl_data=fidl_types_fidl.DeclarationData( short_name='AnInterface', source_file_info=fidl_types_fidl.SourceFileInfo( file_name=file_name))) graph.resolved_types[ 'interface_key'] = fidl_types_fidl.UserDefinedType( interface_type=mojom_interface) mojom_struct = fidl_types_fidl.FidlStruct( fields=[], decl_data=fidl_types_fidl.DeclarationData( short_name='AStruct', full_identifier='foo.AStruct', source_file_info=fidl_types_fidl.SourceFileInfo( file_name=file_name))) add_version_info(mojom_struct, 0) graph.resolved_types['struct_key'] = fidl_types_fidl.UserDefinedType( struct_type=mojom_struct) mojom_union = fidl_types_fidl.FidlUnion( fields=[], decl_data=fidl_types_fidl.DeclarationData( short_name='AUnion', source_file_info=fidl_types_fidl.SourceFileInfo( file_name=file_name))) graph.resolved_types['union_key'] = fidl_types_fidl.UserDefinedType( union_type=mojom_union) mojom_enum = fidl_types_fidl.FidlEnum( values=[], decl_data=fidl_types_fidl.DeclarationData( short_name='AnEnum', source_file_info=fidl_types_fidl.SourceFileInfo( file_name=file_name))) graph.resolved_types['enum_key'] = fidl_types_fidl.UserDefinedType( enum_type=mojom_enum) mojom_const = fidl_types_fidl.DeclaredConstant( decl_data=fidl_types_fidl.DeclarationData(short_name='AConst'), type=fidl_types_fidl.Type( simple_type=fidl_types_fidl.SimpleType.INT64), value=fidl_types_fidl.Value( literal_value=fidl_types_fidl.LiteralValue(int64_value=30))) graph.resolved_constants = {'constant_key': mojom_const} mojom_file.declared_fidl_objects = fidl_files_fidl.KeysByType( interfaces=['interface_key'], structs=['struct_key'], unions=['union_key'], top_level_enums=['enum_key'], top_level_constants=['constant_key']) mod = mojom_translator.FileTranslator(graph, file_name).Translate() self.assertEquals('f.mojom', mod.name) self.assertEquals(mojom_file.specified_file_name, mod.specified_name) self.assertEquals(mojom_file.file_name, mod.path) self.assertEquals(mojom_file.module_namespace, mod.namespace) self.assertEquals(1, len(mod.imports)) self.assertEquals('a.mojom', mod.imports[0]['module_name']) self.assertEquals(imported_file.module_namespace, mod.imports[0]['namespace']) self.assertEquals(imported_file.file_name, mod.imports[0]['module'].path) self.assertEquals(2, len(mod.transitive_imports)) transitive_imports_paths = [ imp['module'].path for imp in mod.transitive_imports ] self.assertIn(imported_file_name, transitive_imports_paths) self.assertIn(second_level_imported_file_name, transitive_imports_paths) self.assertEquals('AnInterface', mod.interfaces[0].name) # Interfaces should be assigned their name as their spec. self.assertEquals('AnInterface', mod.interfaces[0].spec) self.assertEquals(mojom_struct.decl_data.short_name, mod.structs[0].name) # The struct was given a full_identifier so its spec should be that. self.assertEquals(mojom_struct.decl_data.full_identifier, mod.structs[0].spec) self.assertEquals(mojom_union.decl_data.short_name, mod.unions[0].name) # The union was given a short name but not a full_identifier so its spec # should be the short name. self.assertEquals(mojom_union.decl_data.short_name, mod.unions[0].spec) self.assertEquals(mojom_enum.decl_data.short_name, mod.enums[0].name) self.assertEquals(mojom_const.decl_data.short_name, mod.constants[0].name) imported_mod = mojom_translator.FileTranslator( graph, imported_file_name).Translate() self.assertFalse(imported_mod.specified_name)