def test_unions(self): file_name = 'a.mojom' mojom_union = mojom_types_mojom.MojomUnion() mojom_union.decl_data = mojom_types_mojom.DeclarationData( short_name='AUnion', source_file_info=mojom_types_mojom.SourceFileInfo(file_name=file_name)) field1 = mojom_types_mojom.UnionField( decl_data=mojom_types_mojom.DeclarationData(short_name='field1'), type=mojom_types_mojom.Type( simple_type=mojom_types_mojom.SimpleType.BOOL)) field2 = mojom_types_mojom.UnionField( decl_data=mojom_types_mojom.DeclarationData( short_name='field2', declared_ordinal=5), type=mojom_types_mojom.Type( simple_type=mojom_types_mojom.SimpleType.DOUBLE)) mojom_union.fields = [field1, field2] graph = mojom_files_mojom.MojomFileGraph() union = module.Union() translator = mojom_translator.FileTranslator(graph, file_name) translator.UnionFromMojom( union, mojom_types_mojom.UserDefinedType(union_type=mojom_union)) self.assertEquals(translator._module, union.module) self.assertEquals('AUnion', union.name) self.assertEquals(len(mojom_union.fields), len(union.fields)) for gold, f in zip(mojom_union.fields, union.fields): self.assertEquals(gold.decl_data.short_name, f.name) self.assertEquals(module.BOOL, union.fields[0].kind) self.assertEquals(None, union.fields[0].ordinal) self.assertEquals(module.DOUBLE, union.fields[1].kind) self.assertEquals(5, union.fields[1].ordinal)
def test_unions(self): file_name = 'a.mojom' mojom_union = mojom_types_mojom.MojomUnion() mojom_union.decl_data = mojom_types_mojom.DeclarationData( short_name='AUnion', source_file_info=mojom_types_mojom.SourceFileInfo( file_name=file_name)) field1 = mojom_types_mojom.UnionField( decl_data=mojom_types_mojom.DeclarationData(short_name='field1', declaration_order=0, declared_ordinal=7), type=mojom_types_mojom.Type( simple_type=mojom_types_mojom.SimpleType.BOOL), tag=7) field2 = mojom_types_mojom.UnionField( decl_data=mojom_types_mojom.DeclarationData(short_name='field2', declaration_order=1), type=mojom_types_mojom.Type( simple_type=mojom_types_mojom.SimpleType.DOUBLE), tag=8) field3 = mojom_types_mojom.UnionField( decl_data=mojom_types_mojom.DeclarationData(short_name='field3', declaration_order=2, declared_ordinal=0), type=mojom_types_mojom.Type( simple_type=mojom_types_mojom.SimpleType.INT32), tag=0) mojom_union.fields = [field3, field1, field2] # mojom_fields_declaration_order lists, in declaration order, the indices # of the fields in mojom_union.fields mojom_fields_declaration_order = [1, 2, 0] graph = mojom_files_mojom.MojomFileGraph() union = module.Union() translator = mojom_translator.FileTranslator(graph, file_name) translator.UnionFromMojom( union, mojom_types_mojom.UserDefinedType(union_type=mojom_union)) self.assertEquals(translator._module, union.module) self.assertEquals('AUnion', union.name) self.assertEquals(len(mojom_union.fields), len(union.fields)) for index, gold_index in enumerate(mojom_fields_declaration_order): gold = mojom_union.fields[gold_index] f = union.fields[index] self.assertEquals(gold.decl_data.short_name, f.name) if gold.decl_data.declared_ordinal >= 0: self.assertEquals(gold.decl_data.declared_ordinal, f.declared_tag) else: self.assertEquals(None, f.declared_tag) self.assertEquals(gold.tag, f.ordinal) self.assertEquals(module.BOOL, union.fields[0].kind) self.assertEquals(module.DOUBLE, union.fields[1].kind) self.assertEquals(module.INT32, union.fields[2].kind)
def test_basics(self): graph = mojom_files_mojom.MojomFileGraph(resolved_types={}) file_name = 'root/f.mojom' imported_file_name = 'other/a.mojom' second_level_imported_file_name = 'something/other.mojom' mojom_file = mojom_files_mojom.MojomFile( file_name=file_name, specified_file_name='specified_file_name', module_namespace='somens', imports=[imported_file_name]) imported_file = mojom_files_mojom.MojomFile( file_name=imported_file_name, specified_file_name='', module_namespace='somens', imports=[second_level_imported_file_name]) second_level_imported_file = mojom_files_mojom.MojomFile( 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 = mojom_types_mojom.MojomInterface( methods={}, decl_data=mojom_types_mojom.DeclarationData( short_name='AnInterface', source_file_info=mojom_types_mojom.SourceFileInfo( file_name=file_name))) graph.resolved_types[ 'interface_key'] = mojom_types_mojom.UserDefinedType( interface_type=mojom_interface) mojom_struct = mojom_types_mojom.MojomStruct( fields=[], decl_data=mojom_types_mojom.DeclarationData( short_name='AStruct', full_identifier='foo.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) mojom_union = mojom_types_mojom.MojomUnion( fields=[], decl_data=mojom_types_mojom.DeclarationData( short_name='AUnion', source_file_info=mojom_types_mojom.SourceFileInfo( file_name=file_name))) graph.resolved_types['union_key'] = mojom_types_mojom.UserDefinedType( union_type=mojom_union) mojom_enum = mojom_types_mojom.MojomEnum( values=[], decl_data=mojom_types_mojom.DeclarationData( short_name='AnEnum', source_file_info=mojom_types_mojom.SourceFileInfo( file_name=file_name))) graph.resolved_types['enum_key'] = mojom_types_mojom.UserDefinedType( enum_type=mojom_enum) mojom_const = mojom_types_mojom.DeclaredConstant( decl_data=mojom_types_mojom.DeclarationData(short_name='AConst'), type=mojom_types_mojom.Type( simple_type=mojom_types_mojom.SimpleType.INT64), value=mojom_types_mojom.Value( literal_value=mojom_types_mojom.LiteralValue(int64_value=30))) graph.resolved_constants = {'constant_key': mojom_const} mojom_file.declared_mojom_objects = mojom_files_mojom.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)