Ejemplo n.º 1
0
    def test_interface(self):
        file_name = 'a.mojom'
        mojom_interface = mojom_types_mojom.MojomInterface(
            decl_data=mojom_types_mojom.DeclarationData(
                source_file_info=mojom_types_mojom.SourceFileInfo(
                    file_name=file_name)),
            interface_name='AnInterface')
        mojom_method = mojom_types_mojom.MojomMethod(
            ordinal=10,
            decl_data=mojom_types_mojom.DeclarationData(
                short_name='AMethod',
                source_file_info=mojom_types_mojom.SourceFileInfo(
                    file_name=file_name)),
            parameters=mojom_types_mojom.MojomStruct(fields=[]))
        mojom_interface.methods = {10: mojom_method}

        interface = module.Interface()
        graph = mojom_files_mojom.MojomFileGraph()
        translator = mojom_translator.FileTranslator(graph, file_name)
        translator.InterfaceFromMojom(
            interface,
            mojom_types_mojom.UserDefinedType(interface_type=mojom_interface))

        self.assertEquals(translator._module, interface.module)
        self.assertEquals(mojom_interface.interface_name, interface.name)
        self.assertEquals(mojom_method.ordinal, interface.methods[0].ordinal)
  def do_interface_test(self, specify_service_name):
    file_name = 'a.mojom'
    mojom_interface = mojom_types_mojom.MojomInterface(
        decl_data=mojom_types_mojom.DeclarationData(
          short_name='AnInterface',
          source_file_info=mojom_types_mojom.SourceFileInfo(
            file_name=file_name)))
    if specify_service_name:
      mojom_interface.service_name = 'test::TheInterface'
      mojom_interface.decl_data.attributes = [mojom_types_mojom.Attribute(
          key='ServiceName', value=mojom_types_mojom.LiteralValue(
              string_value='test::TheInterface'))]
    else:
      mojom_interface.service_name = None
    mojom_method10 = mojom_types_mojom.MojomMethod(
        ordinal=10,
        decl_data=mojom_types_mojom.DeclarationData(
          short_name='AMethod10',
          source_file_info=mojom_types_mojom.SourceFileInfo(
            file_name=file_name)),
        parameters=mojom_types_mojom.MojomStruct(fields=[]))
    mojom_method0 = mojom_types_mojom.MojomMethod(
        ordinal=0,
        decl_data=mojom_types_mojom.DeclarationData(
          short_name='AMethod0',
          source_file_info=mojom_types_mojom.SourceFileInfo(
            file_name=file_name)),
        parameters=mojom_types_mojom.MojomStruct(fields=[]))
    mojom_method7 = mojom_types_mojom.MojomMethod(
        ordinal=7,
        decl_data=mojom_types_mojom.DeclarationData(
          short_name='AMethod10',
          source_file_info=mojom_types_mojom.SourceFileInfo(
            file_name=file_name)),
        parameters=mojom_types_mojom.MojomStruct(fields=[]))
    mojom_interface.methods = {10: mojom_method10, 0: mojom_method0,
        7: mojom_method7}

    interface = module.Interface()
    graph = mojom_files_mojom.MojomFileGraph()
    translator = mojom_translator.FileTranslator(graph, file_name)
    translator.InterfaceFromMojom(interface, mojom_types_mojom.UserDefinedType(
      interface_type=mojom_interface))

    self.assertEquals(translator._module, interface.module)
    self.assertEquals('AnInterface', interface.name)
    self.assertEquals(0, interface.methods[0].ordinal)
    self.assertEquals(7, interface.methods[1].ordinal)
    self.assertEquals(10, interface.methods[2].ordinal)
    if specify_service_name:
      self.assertEquals('test::TheInterface', interface.service_name)
    else:
      self.assertEquals(None, interface.service_name)
Ejemplo n.º 3
0
    def do_interface_test(self, nullable, interface_request):
        # Build a MojomInterface
        file_name = 'a.mojom'
        mojom_interface = mojom_types_mojom.MojomInterface(
            decl_data=mojom_types_mojom.DeclarationData(
                short_name='AnInterface',
                source_file_info=mojom_types_mojom.SourceFileInfo(
                    file_name=file_name)))
        mojom_interface.methods = {}

        # Register the MojomInterface in a MojomFileGraph
        graph = mojom_files_mojom.MojomFileGraph()
        type_key = 'some_type_key'
        graph.resolved_types = {
            type_key:
            mojom_types_mojom.UserDefinedType(interface_type=mojom_interface)
        }

        # Build a reference to the interface.
        type_ref = mojom_types_mojom.Type(
            type_reference=mojom_types_mojom.TypeReference(
                type_key=type_key,
                nullable=nullable,
                is_interface_request=interface_request))

        # Construct a translator
        translator = mojom_translator.FileTranslator(graph, file_name)

        # Translate the MojomInterface referenced by type_ref.
        interface = translator.UserDefinedFromTypeRef(type_ref)

        # Check the translation
        if interface_request:
            self.assertEquals('AnInterface', interface.kind.name)
            self.assertEquals('some_type_key', interface.kind.type_key)
        else:
            self.assertEquals('AnInterface', interface.name)
            self.assertEquals('some_type_key', interface.type_key)
        self.assertEquals(nullable, interface.is_nullable)
        self.assertEquals(interface_request,
                          isinstance(interface, module.InterfaceRequest))
Ejemplo n.º 4
0
    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)