| Index: mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator_unittest.py
|
| diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator_unittest.py b/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator_unittest.py
|
| deleted file mode 100644
|
| index 5999305893d97027820e9dc2a0793af6b42d4421..0000000000000000000000000000000000000000
|
| --- a/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator_unittest.py
|
| +++ /dev/null
|
| @@ -1,1097 +0,0 @@
|
| -# Copyright 2015 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -import unittest
|
| -import module
|
| -
|
| -try:
|
| - import mojom_translator
|
| - from generated import mojom_files_mojom
|
| - from generated import mojom_types_mojom
|
| - bindings_imported = True
|
| -except ImportError:
|
| - bindings_imported = False
|
| -
|
| -
|
| -@unittest.skipUnless(bindings_imported, 'Could not import python bindings.')
|
| -class TranslateFileGraph(unittest.TestCase):
|
| -
|
| - def test_basics(self):
|
| - g = mojom_files_mojom.MojomFileGraph()
|
| -
|
| - # File names need to be set so the file can be translated at all.
|
| - g.files = {
|
| - 'a.mojom': mojom_files_mojom.MojomFile(
|
| - file_name='a.mojom',
|
| - specified_file_name='',
|
| - imports=[]),
|
| - 'b.mojom': mojom_files_mojom.MojomFile(
|
| - file_name='b.mojom',
|
| - specified_file_name='',
|
| - imports=[]),
|
| - 'root/c.mojom': mojom_files_mojom.MojomFile(
|
| - file_name='root/c.mojom',
|
| - specified_file_name='',
|
| - imports=[]),
|
| - }
|
| -
|
| - modules = mojom_translator.TranslateFileGraph(g)
|
| - self.assertEquals(len(modules), len(g.files))
|
| -
|
| -
|
| -@unittest.skipUnless(bindings_imported, 'Could not import python bindings.')
|
| -class TestTranslateFile(unittest.TestCase):
|
| -
|
| - 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)
|
| -
|
| - def test_no_imports(self):
|
| - graph = mojom_files_mojom.MojomFileGraph(
|
| - resolved_types={})
|
| - file_name = 'root/f.mojom'
|
| - mojom_file = mojom_files_mojom.MojomFile(
|
| - file_name=file_name,
|
| - specified_file_name='',
|
| - module_namespace='somens')
|
| - graph.files = { file_name: mojom_file }
|
| -
|
| - # Should not throw exceptions despite imports not being set on the file.
|
| - mod = mojom_translator.FileTranslator(graph, file_name).Translate()
|
| -
|
| - self.assertEquals([], mod.imports)
|
| -
|
| -@unittest.skipUnless(bindings_imported, 'Could not import python bindings.')
|
| -class TestUserDefinedFromTypeRef(unittest.TestCase):
|
| -
|
| - 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))
|
| -
|
| - def test_interfaces(self):
|
| - self.do_interface_test(False, False)
|
| - self.do_interface_test(False, True)
|
| - self.do_interface_test(True, False)
|
| - self.do_interface_test(True, True)
|
| -
|
| -@unittest.skipUnless(bindings_imported, 'Could not import python bindings.')
|
| -class TestUserDefinedTypeFromMojom(unittest.TestCase):
|
| -
|
| - def test_structs(self):
|
| - file_name = 'a.mojom'
|
| - graph = mojom_files_mojom.MojomFileGraph()
|
| - mojom_file = mojom_files_mojom.MojomFile(
|
| - file_name='a.mojom',
|
| - module_namespace='foo.bar')
|
| - graph.files = {mojom_file.file_name: mojom_file}
|
| -
|
| - mojom_struct = mojom_types_mojom.MojomStruct(
|
| - decl_data=mojom_types_mojom.DeclarationData(short_name='FirstStruct'))
|
| - mojom_struct.fields = [
|
| - mojom_types_mojom.StructField(
|
| - decl_data=mojom_types_mojom.DeclarationData(
|
| - short_name='field03',
|
| - declaration_order=2),
|
| - type=mojom_types_mojom.Type(
|
| - simple_type=mojom_types_mojom.SimpleType.BOOL),
|
| - offset=21,
|
| - bit=6,
|
| - min_version=11),
|
| - mojom_types_mojom.StructField(
|
| - decl_data=mojom_types_mojom.DeclarationData(
|
| - short_name='field01',
|
| - declared_ordinal=1,
|
| - declaration_order=0),
|
| - type=mojom_types_mojom.Type(
|
| - simple_type=mojom_types_mojom.SimpleType.BOOL),
|
| - offset=17,
|
| - bit=1,
|
| - min_version=4),
|
| - mojom_types_mojom.StructField(
|
| - decl_data=mojom_types_mojom.DeclarationData(
|
| - short_name='field02',
|
| - declaration_order=1),
|
| - type=mojom_types_mojom.Type(
|
| - simple_type=mojom_types_mojom.SimpleType.DOUBLE),
|
| - offset=0,
|
| - bit=0,
|
| - min_version=0,
|
| - default_value=mojom_types_mojom.DefaultFieldValue(
|
| - value=mojom_types_mojom.Value(
|
| - literal_value=mojom_types_mojom.LiteralValue(double_value=15)))),
|
| - ]
|
| - mojom_struct.version_info=[
|
| - mojom_types_mojom.StructVersion(
|
| - version_number=0, num_bytes=67, num_fields=1),
|
| - mojom_types_mojom.StructVersion(
|
| - version_number=1, num_bytes=76, num_fields=3),
|
| - ]
|
| - # mojom_fields_declaration_order lists, in declaration order, the indices
|
| - # of the fields in mojom_types_mojom.StructField.
|
| - mojom_fields_declaration_order = [1, 2, 0]
|
| - mojom_struct.decl_data.source_file_info = mojom_types_mojom.SourceFileInfo(
|
| - file_name=mojom_file.file_name)
|
| -
|
| - struct = module.Struct()
|
| - translator = mojom_translator.FileTranslator(graph, file_name)
|
| - translator.StructFromMojom(
|
| - struct, mojom_types_mojom.UserDefinedType(struct_type=mojom_struct))
|
| -
|
| - self.assertEquals('FirstStruct', struct.name)
|
| - self.assertEquals(translator._module, struct.module)
|
| -
|
| - self.assertEquals(len(mojom_struct.fields), len(struct.fields))
|
| - for index, gold_index in enumerate(mojom_fields_declaration_order):
|
| - gold = mojom_struct.fields[gold_index]
|
| - f = struct.fields[index]
|
| - self.assertEquals(f.name, gold.decl_data.short_name)
|
| - if gold.decl_data.declared_ordinal >= 0:
|
| - self.assertEquals(gold.decl_data.declared_ordinal, f.ordinal)
|
| - else:
|
| - self.assertEquals(None, f.ordinal)
|
| - self.assertEquals(gold_index, f.computed_ordinal)
|
| - self.assertEquals(gold.offset, f.computed_offset)
|
| - self.assertEquals(gold.bit, f.computed_bit)
|
| - self.assertEquals(gold.min_version, f.computed_min_version)
|
| - self.assertEquals(struct.fields_in_ordinal_order[index].name,
|
| - mojom_struct.fields[index].decl_data.short_name)
|
| -
|
| - self.assertEquals(2, len(struct.versions))
|
| - for i in xrange(0, 2):
|
| - self.assertEquals(mojom_struct.version_info[i].version_number,
|
| - struct.versions[i].version)
|
| - self.assertEquals(mojom_struct.version_info[i].num_bytes,
|
| - struct.versions[i].num_bytes)
|
| - self.assertEquals(mojom_struct.version_info[i].num_fields,
|
| - struct.versions[i].num_fields)
|
| -
|
| - self.assertEquals(module.BOOL, struct.fields[0].kind)
|
| - self.assertEquals(module.DOUBLE, struct.fields[1].kind)
|
| -
|
| - self.assertEquals('15.0', struct.fields[1].default)
|
| -
|
| - def test_constant(self):
|
| - file_name = 'a.mojom'
|
| - graph = mojom_files_mojom.MojomFileGraph()
|
| -
|
| - mojom_const = mojom_types_mojom.DeclaredConstant()
|
| - mojom_const.decl_data = mojom_types_mojom.DeclarationData(
|
| - short_name='foo', container_type_key='struct_key')
|
| - mojom_const.type = mojom_types_mojom.Type(
|
| - simple_type=mojom_types_mojom.SimpleType.INT64)
|
| - mojom_const.value = mojom_types_mojom.Value()
|
| - mojom_const.value.literal_value = mojom_types_mojom.LiteralValue(
|
| - int64_value=20)
|
| -
|
| - 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)}
|
| -
|
| - const = module.Constant()
|
| - translator = mojom_translator.FileTranslator(graph, file_name)
|
| - translator.ConstantFromMojom(const, mojom_const)
|
| -
|
| - self.assertEquals(mojom_const.decl_data.short_name, const.name)
|
| - self.assertEquals(module.INT64, const.kind)
|
| - self.assertEquals('20', const.value)
|
| - self.assertEquals(translator.UserDefinedFromTypeKey('struct_key'),
|
| - const.parent_kind)
|
| -
|
| - 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 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_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 literal_value(self, x):
|
| - """Creates a typed literal value containing the value |x|.
|
| -
|
| - Args:
|
| - x: A string, int, float or bool value.
|
| -
|
| - Returns:
|
| - {mojom_types.LiteralValue} with an appropriately typed value.
|
| - """
|
| - if isinstance(x, str):
|
| - return mojom_types_mojom.LiteralValue(string_value=x)
|
| - elif isinstance(x, int):
|
| - return mojom_types_mojom.LiteralValue(int64_value=x)
|
| - elif isinstance(x, float):
|
| - return mojom_types_mojom.LiteralValue(double_value=x)
|
| - elif isinstance(x, bool):
|
| - return mojom_types_mojom.LiteralValue(bool_value=x)
|
| - raise Exception("unexpected type(x)=%s" % type(x))
|
| -
|
| -
|
| - def test_attributes(self):
|
| - mojom_enum = mojom_types_mojom.MojomEnum()
|
| - mojom_enum.decl_data = mojom_types_mojom.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(
|
| - mojom_types_mojom.Attribute(key=key, value=self.literal_value(value)))
|
| -
|
| - graph = mojom_files_mojom.MojomFileGraph()
|
| - attributes = mojom_translator.FileTranslator(
|
| - graph, None).AttributesFromMojom(mojom_enum)
|
| -
|
| - self.assertEquals(gold, attributes)
|
| -
|
| - def test_attributes_none(self):
|
| - mojom_enum = mojom_types_mojom.MojomEnum()
|
| - mojom_enum.decl_data = mojom_types_mojom.DeclarationData()
|
| - graph = mojom_files_mojom.MojomFileGraph()
|
| - attributes = mojom_translator.FileTranslator(
|
| - graph, None).AttributesFromMojom(mojom_enum)
|
| - self.assertFalse(attributes)
|
| -
|
| - def test_imported_struct(self):
|
| - graph = mojom_files_mojom.MojomFileGraph()
|
| -
|
| - graph.files = {
|
| - 'a.mojom': mojom_files_mojom.MojomFile(
|
| - file_name='a.mojom',
|
| - specified_file_name='',
|
| - module_namespace='namespace',
|
| - imports=['root/c.mojom']),
|
| - 'root/c.mojom': mojom_files_mojom.MojomFile(
|
| - file_name='root/c.mojom',
|
| - specified_file_name='',
|
| - module_namespace='otherns',
|
| - imports=[]),
|
| - }
|
| -
|
| - mojom_struct = mojom_types_mojom.MojomStruct()
|
| - mojom_struct.decl_data = mojom_types_mojom.DeclarationData(
|
| - short_name='AStruct',
|
| - source_file_info=mojom_types_mojom.SourceFileInfo(
|
| - file_name='root/c.mojom'))
|
| - mojom_struct.fields = []
|
| - add_version_info(mojom_struct, 0)
|
| -
|
| - type_key = 'some_type_key'
|
| - graph.resolved_types = {
|
| - type_key: mojom_types_mojom.UserDefinedType(struct_type=mojom_struct)}
|
| - struct = module.Struct()
|
| -
|
| - # Translate should create the imports.
|
| - translator = mojom_translator.FileTranslator(graph, 'a.mojom')
|
| - translator.Translate()
|
| -
|
| - struct = translator.UserDefinedFromTypeRef(
|
| - mojom_types_mojom.Type(
|
| - type_reference=mojom_types_mojom.TypeReference(
|
| - type_key=type_key)))
|
| -
|
| - self.assertEquals(
|
| - translator._transitive_imports['root/c.mojom']['module'], struct.module)
|
| - self.assertEquals(
|
| - translator._transitive_imports['root/c.mojom'], struct.imported_from)
|
| -
|
| - def test_interface(self):
|
| - self.do_interface_test(True)
|
| - self.do_interface_test(False)
|
| -
|
| - def do_interface_test(self, specify_service_name):
|
| - file_name = 'a.mojom'
|
| - mojom_interface = mojom_types_mojom.MojomInterface(
|
| - current_version=47,
|
| - 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',
|
| - declaration_order=1,
|
| - source_file_info=mojom_types_mojom.SourceFileInfo(
|
| - file_name=file_name)),
|
| - parameters=mojom_types_mojom.MojomStruct(fields=[],
|
| - version_info=build_version_info(0),
|
| - decl_data=build_decl_data('AMethod10_Request')))
|
| - mojom_method0 = mojom_types_mojom.MojomMethod(
|
| - ordinal=0,
|
| - decl_data=mojom_types_mojom.DeclarationData(
|
| - short_name='AMethod0',
|
| - declaration_order=1,
|
| - source_file_info=mojom_types_mojom.SourceFileInfo(
|
| - file_name=file_name)),
|
| - parameters=mojom_types_mojom.MojomStruct(fields=[],
|
| - version_info=build_version_info(0),
|
| - decl_data=build_decl_data('AMethod0_Request')))
|
| - mojom_method7 = mojom_types_mojom.MojomMethod(
|
| - ordinal=7,
|
| - decl_data=mojom_types_mojom.DeclarationData(
|
| - short_name='AMethod7',
|
| - declaration_order=0,
|
| - source_file_info=mojom_types_mojom.SourceFileInfo(
|
| - file_name=file_name)),
|
| - parameters=mojom_types_mojom.MojomStruct(fields=[],
|
| - version_info=build_version_info(0),
|
| - decl_data=build_decl_data('AMethod7_Request')))
|
| - 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(mojom_interface.current_version, interface.version)
|
| - # The methods should be ordered by declaration_order.
|
| - self.assertEquals(7, interface.methods[0].ordinal)
|
| - self.assertEquals(0, 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)
|
| -
|
| - # TODO(azani): Add the contained declarations.
|
| -
|
| - def test_method(self):
|
| - file_name = 'a.mojom'
|
| - mojom_method = mojom_types_mojom.MojomMethod(
|
| - ordinal=10,
|
| - min_version=6,
|
| - decl_data=mojom_types_mojom.DeclarationData(
|
| - short_name='AMethod',
|
| - source_file_info=mojom_types_mojom.SourceFileInfo(
|
| - file_name=file_name)))
|
| -
|
| - param1 = mojom_types_mojom.StructField(
|
| - decl_data=mojom_types_mojom.DeclarationData(short_name='a_param'),
|
| - type=mojom_types_mojom.Type(
|
| - simple_type=mojom_types_mojom.SimpleType.UINT32),
|
| - offset=21,
|
| - bit=6,
|
| - min_version=11)
|
| - param2 = mojom_types_mojom.StructField(
|
| - decl_data=mojom_types_mojom.DeclarationData(short_name='b_param'),
|
| - type=mojom_types_mojom.Type(
|
| - simple_type=mojom_types_mojom.SimpleType.UINT64),
|
| - offset=22,
|
| - bit=7,
|
| - min_version=12)
|
| - mojom_method.parameters = mojom_types_mojom.MojomStruct(
|
| - fields=[param1, param2],
|
| - version_info=build_version_info(2),
|
| - decl_data=build_decl_data('Not used'))
|
| -
|
| - interface = module.Interface('MyInterface')
|
| - graph = mojom_files_mojom.MojomFileGraph()
|
| - translator = mojom_translator.FileTranslator(graph, file_name)
|
| - method = translator.MethodFromMojom(mojom_method, interface)
|
| -
|
| - self.assertEquals(mojom_method.decl_data.short_name, method.name)
|
| - self.assertEquals(interface, method.interface)
|
| - self.assertEquals(mojom_method.ordinal, method.ordinal)
|
| - self.assertEquals(mojom_method.min_version, method.min_version)
|
| - self.assertIsNone(method.response_parameters)
|
| - self.assertEquals(
|
| - len(mojom_method.parameters.fields), len(method.parameters))
|
| - self.assertEquals(param1.decl_data.short_name, method.parameters[0].name)
|
| - self.assertEquals(param2.decl_data.short_name, method.parameters[1].name)
|
| - self.assertEquals('MyInterface_AMethod_Params', method.param_struct.name)
|
| - self.assertEquals(len(mojom_method.parameters.fields),
|
| - len(method.param_struct.fields))
|
| - for i in xrange(0, len(mojom_method.parameters.fields)):
|
| - gold = mojom_method.parameters.fields[i]
|
| - f = method.param_struct.fields_in_ordinal_order[i]
|
| - self.assertEquals(gold.decl_data.short_name, f.name)
|
| - self.assertEquals(gold.offset, f.computed_offset)
|
| - self.assertEquals(gold.bit, f.computed_bit)
|
| - self.assertEquals(gold.min_version, f.computed_min_version)
|
| -
|
| - # Add empty return params.
|
| - mojom_method.response_params = mojom_types_mojom.MojomStruct(fields=[])
|
| - add_version_info(mojom_method.response_params, 0)
|
| - add_decl_data(mojom_method.response_params, 'AMethod_Response')
|
| - method = translator.MethodFromMojom(mojom_method, interface)
|
| - self.assertEquals([], method.response_parameters)
|
| -
|
| - # Add non-empty return params.
|
| - mojom_method.response_params.fields = [param1]
|
| - method = translator.MethodFromMojom(mojom_method, interface)
|
| - self.assertEquals(
|
| - param1.decl_data.short_name, method.response_parameters[0].name)
|
| -
|
| - def test_parameter(self):
|
| - # Parameters are encoded as fields in a struct.
|
| - mojom_param = mojom_types_mojom.StructField(
|
| - decl_data=mojom_types_mojom.DeclarationData(
|
| - short_name='param0',
|
| - declared_ordinal=5),
|
| - type=mojom_types_mojom.Type(
|
| - simple_type=mojom_types_mojom.SimpleType.UINT64),
|
| - default_value=mojom_types_mojom.Value(
|
| - literal_value=mojom_types_mojom.LiteralValue(uint64_value=20)))
|
| -
|
| - graph = mojom_files_mojom.MojomFileGraph()
|
| - translator = mojom_translator.FileTranslator(graph, '')
|
| - param = translator.ParamFromMojom(mojom_param)
|
| -
|
| - self.assertEquals(mojom_param.decl_data.short_name, param.name)
|
| - self.assertEquals(module.UINT64, param.kind)
|
| - self.assertEquals(mojom_param.decl_data.declared_ordinal, param.ordinal)
|
| -
|
| - def test_contained_declarations(self):
|
| - graph = mojom_files_mojom.MojomFileGraph()
|
| - file_name = 'root/f.mojom'
|
| -
|
| - 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),
|
| - container_type_key='parent_key'))
|
| - 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',
|
| - container_type_key='parent_key'),
|
| - 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}
|
| -
|
| - contained_declarations = mojom_types_mojom.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)
|
| -
|
| -
|
| -@unittest.skipUnless(bindings_imported, 'Could not import python bindings.')
|
| -class TestValueFromMojom(unittest.TestCase):
|
| -
|
| - def test_literal_value(self):
|
| - mojom_int64 = mojom_types_mojom.Value()
|
| - mojom_int64.literal_value = mojom_types_mojom.LiteralValue(int64_value=20)
|
| - mojom_bool = mojom_types_mojom.Value()
|
| - mojom_bool.literal_value = mojom_types_mojom.LiteralValue(bool_value=True)
|
| - mojom_double = mojom_types_mojom.Value()
|
| - mojom_double.literal_value = mojom_types_mojom.LiteralValue(
|
| - double_value=1234.012345678901)
|
| -
|
| - graph = mojom_files_mojom.MojomFileGraph()
|
| - int64_const = mojom_translator.FileTranslator(graph, None).ValueFromMojom(
|
| - mojom_int64)
|
| - bool_const = mojom_translator.FileTranslator(graph, None).ValueFromMojom(
|
| - mojom_bool)
|
| - double_const = mojom_translator.FileTranslator(graph, None).ValueFromMojom(
|
| - mojom_double)
|
| -
|
| - self.assertEquals('20', int64_const)
|
| - self.assertEquals('true', bool_const)
|
| - self.assertEquals('1234.012345678901', double_const)
|
| -
|
| - def test_builtin_const(self):
|
| - mojom = mojom_types_mojom.Value()
|
| -
|
| - graph = mojom_files_mojom.MojomFileGraph()
|
| -
|
| - gold = [
|
| - (mojom_types_mojom.BuiltinConstantValue.DOUBLE_INFINITY,
|
| - 'double.INFINITY'),
|
| - (mojom_types_mojom.BuiltinConstantValue.DOUBLE_NEGATIVE_INFINITY,
|
| - 'double.NEGATIVE_INFINITY'),
|
| - (mojom_types_mojom.BuiltinConstantValue.DOUBLE_NAN,
|
| - 'double.NAN'),
|
| - (mojom_types_mojom.BuiltinConstantValue.FLOAT_INFINITY,
|
| - 'float.INFINITY'),
|
| - (mojom_types_mojom.BuiltinConstantValue.FLOAT_NEGATIVE_INFINITY,
|
| - 'float.NEGATIVE_INFINITY'),
|
| - (mojom_types_mojom.BuiltinConstantValue.FLOAT_NAN, 'float.NAN'),
|
| - ]
|
| -
|
| - for mojom_builtin, string in gold:
|
| - mojom.builtin_value = mojom_builtin
|
| - const = mojom_translator.FileTranslator(graph, None).ValueFromMojom(mojom)
|
| - self.assertIsInstance(const, module.BuiltinValue)
|
| - self.assertEquals(string, const.value)
|
| -
|
| - def test_enum_value(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',
|
| - source_file_info=mojom_types_mojom.SourceFileInfo(
|
| - file_name=file_name)),
|
| - 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()
|
| - graph.resolved_types = {
|
| - 'enum_key': mojom_types_mojom.UserDefinedType(enum_type=mojom_enum)}
|
| -
|
| - mojom = mojom_types_mojom.Value(
|
| - enum_value_reference=mojom_types_mojom.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_constant_value(self):
|
| - file_name = 'a.mojom'
|
| - mojom_const = mojom_types_mojom.DeclaredConstant(
|
| - decl_data=mojom_types_mojom.DeclarationData(
|
| - short_name='AConst',
|
| - source_file_info=mojom_types_mojom.SourceFileInfo(
|
| - file_name=file_name)),
|
| - 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 = mojom_files_mojom.MojomFileGraph()
|
| - graph.resolved_constants = {'constant_key': mojom_const}
|
| -
|
| - mojom = mojom_types_mojom.Value(
|
| - constant_reference=mojom_types_mojom.ConstantReference(
|
| - identifier='SOMEID',
|
| - constant_key='constant_key'))
|
| -
|
| - translator = mojom_translator.FileTranslator(graph, file_name)
|
| - const_value = translator.ValueFromMojom(mojom)
|
| - self.assertIs(
|
| - translator.ConstantFromKey('constant_key'), const_value.constant)
|
| - self.assertIs(mojom_const.decl_data.short_name, const_value.name)
|
| -
|
| -
|
| -@unittest.skipUnless(bindings_imported, 'Could not import python bindings.')
|
| -class TestKindFromMojom(unittest.TestCase):
|
| -
|
| - def test_simple_type(self):
|
| - simple_types = [
|
| - (mojom_types_mojom.SimpleType.BOOL, module.BOOL),
|
| - (mojom_types_mojom.SimpleType.INT8, module.INT8),
|
| - (mojom_types_mojom.SimpleType.INT16, module.INT16),
|
| - (mojom_types_mojom.SimpleType.INT32, module.INT32),
|
| - (mojom_types_mojom.SimpleType.INT64, module.INT64),
|
| - (mojom_types_mojom.SimpleType.UINT8, module.UINT8),
|
| - (mojom_types_mojom.SimpleType.UINT16, module.UINT16),
|
| - (mojom_types_mojom.SimpleType.UINT32, module.UINT32),
|
| - (mojom_types_mojom.SimpleType.UINT64, module.UINT64),
|
| - (mojom_types_mojom.SimpleType.FLOAT, module.FLOAT),
|
| - (mojom_types_mojom.SimpleType.DOUBLE, module.DOUBLE),
|
| - ]
|
| -
|
| - g = mojom_files_mojom.MojomFileGraph()
|
| - t = mojom_translator.FileTranslator(g, None)
|
| - for mojom, golden in simple_types:
|
| - self.assertEquals(
|
| - golden, t.KindFromMojom(mojom_types_mojom.Type(simple_type=mojom)))
|
| -
|
| - def test_handle_type(self):
|
| - handle_types = [
|
| - (mojom_types_mojom.HandleType.Kind.UNSPECIFIED, False,
|
| - module.HANDLE),
|
| - (mojom_types_mojom.HandleType.Kind.MESSAGE_PIPE, False,
|
| - module.MSGPIPE),
|
| - (mojom_types_mojom.HandleType.Kind.DATA_PIPE_CONSUMER, False,
|
| - module.DCPIPE),
|
| - (mojom_types_mojom.HandleType.Kind.DATA_PIPE_PRODUCER, False,
|
| - module.DPPIPE),
|
| - (mojom_types_mojom.HandleType.Kind.SHARED_BUFFER, False,
|
| - module.SHAREDBUFFER),
|
| - (mojom_types_mojom.HandleType.Kind.UNSPECIFIED, True,
|
| - module.NULLABLE_HANDLE),
|
| - (mojom_types_mojom.HandleType.Kind.MESSAGE_PIPE, True,
|
| - module.NULLABLE_MSGPIPE),
|
| - (mojom_types_mojom.HandleType.Kind.DATA_PIPE_CONSUMER, True,
|
| - module.NULLABLE_DCPIPE),
|
| - (mojom_types_mojom.HandleType.Kind.DATA_PIPE_PRODUCER, True,
|
| - module.NULLABLE_DPPIPE),
|
| - (mojom_types_mojom.HandleType.Kind.SHARED_BUFFER, True,
|
| - module.NULLABLE_SHAREDBUFFER),
|
| - ]
|
| - g = mojom_files_mojom.MojomFileGraph()
|
| - t = mojom_translator.FileTranslator(g, None)
|
| - for mojom, nullable, golden in handle_types:
|
| - h = mojom_types_mojom.Type()
|
| - h.handle_type = mojom_types_mojom.HandleType(
|
| - kind=mojom, nullable=nullable)
|
| - self.assertEquals(golden, t.KindFromMojom(h))
|
| -
|
| - def test_string_type(self):
|
| - g = mojom_files_mojom.MojomFileGraph()
|
| - t = mojom_translator.FileTranslator(g, None)
|
| -
|
| - s = mojom_types_mojom.Type(string_type=mojom_types_mojom.StringType())
|
| - self.assertEquals(module.STRING, t.KindFromMojom(s))
|
| -
|
| - s.string_type.nullable = True
|
| - self.assertEquals(module.NULLABLE_STRING, t.KindFromMojom(s))
|
| -
|
| - def test_array_type(self):
|
| - array_types = [
|
| - (False, False, -1),
|
| - (False, False, 10),
|
| - (True, False, -1),
|
| - (True, True, -1),
|
| - (False, True, -1),
|
| - (False, True, 10),
|
| - ]
|
| - g = mojom_files_mojom.MojomFileGraph()
|
| - t = mojom_translator.FileTranslator(g, None)
|
| -
|
| - for array_nullable, element_nullable, size in array_types:
|
| - a = mojom_types_mojom.Type()
|
| - a.array_type = mojom_types_mojom.ArrayType(
|
| - nullable=array_nullable,
|
| - fixed_length=size)
|
| - a.array_type.element_type = mojom_types_mojom.Type(
|
| - string_type=mojom_types_mojom.StringType(nullable=element_nullable))
|
| -
|
| - result = t.KindFromMojom(a)
|
| - self.assertTrue(module.IsArrayKind(result))
|
| - self.assertTrue(module.IsStringKind(result.kind))
|
| - self.assertEquals(array_nullable, module.IsNullableKind(result))
|
| - self.assertEquals(element_nullable, module.IsNullableKind(result.kind))
|
| -
|
| - if size < 0:
|
| - self.assertIsNone(result.length)
|
| - else:
|
| - self.assertEquals(size, result.length)
|
| -
|
| - def test_map_type(self):
|
| - map_types = [
|
| - (False, False),
|
| - (True, False),
|
| - (False, True),
|
| - (True, True),
|
| - ]
|
| - g = mojom_files_mojom.MojomFileGraph()
|
| - t = mojom_translator.FileTranslator(g, None)
|
| -
|
| - for map_nullable, value_nullable in map_types:
|
| - m = mojom_types_mojom.Type()
|
| - m.map_type = mojom_types_mojom.MapType(
|
| - nullable=map_nullable)
|
| - m.map_type.key_type = mojom_types_mojom.Type(
|
| - string_type=mojom_types_mojom.StringType())
|
| - m.map_type.value_type = mojom_types_mojom.Type(
|
| - handle_type=mojom_types_mojom.HandleType(
|
| - kind=mojom_types_mojom.HandleType.Kind.SHARED_BUFFER,
|
| - nullable=value_nullable))
|
| -
|
| - result = t.KindFromMojom(m)
|
| - self.assertTrue(module.IsMapKind(result))
|
| - self.assertTrue(module.IsStringKind(result.key_kind))
|
| - self.assertTrue(module.IsSharedBufferKind(result.value_kind))
|
| - self.assertEquals(map_nullable, module.IsNullableKind(result))
|
| - self.assertEquals(value_nullable,
|
| - module.IsNullableKind(result.value_kind))
|
| -
|
| - def test_user_defined_type_type(self):
|
| - graph = mojom_files_mojom.MojomFileGraph()
|
| - mojom_struct = mojom_types_mojom.MojomStruct(
|
| - decl_data=mojom_types_mojom.DeclarationData(short_name='FirstStruct'))
|
| - type_key = 'some opaque string'
|
| - mojom_struct.fields = [
|
| - # Make sure recursive structs are correctly handled.
|
| - mojom_types_mojom.StructField(
|
| - decl_data=mojom_types_mojom.DeclarationData(short_name='field00'),
|
| - type=mojom_types_mojom.Type(
|
| - type_reference=mojom_types_mojom.TypeReference(type_key=type_key)))
|
| - ]
|
| - add_version_info(mojom_struct, 1)
|
| - graph.resolved_types = {
|
| - type_key: mojom_types_mojom.UserDefinedType(struct_type=mojom_struct)}
|
| -
|
| - mojom_type = mojom_types_mojom.Type()
|
| - mojom_type.type_reference = mojom_types_mojom.TypeReference(
|
| - type_key=type_key)
|
| -
|
| - t = mojom_translator.FileTranslator(graph, None)
|
| - result = t.KindFromMojom(mojom_type)
|
| - self.assertTrue(module.IsStructKind(result))
|
| - self.assertEquals(mojom_struct.decl_data.short_name, result.name)
|
| - self.assertEquals(result, result.fields[0].kind)
|
| - self.assertEquals(type_key, result.type_key)
|
| -
|
| - # Make sure we create only one module object per type.
|
| - result2 = t.KindFromMojom(mojom_type)
|
| - self.assertIs(result, result2)
|
| -
|
| - # Nullable type reference
|
| - mojom_type.type_reference.nullable = True
|
| - nullable_result = t.KindFromMojom(mojom_type)
|
| - self.assertTrue(module.IsNullableKind(nullable_result))
|
| -
|
| -if __name__ == '__main__':
|
| - unittest.main()
|
| -
|
| -def build_decl_data(short_name):
|
| - """Builds and returns a DeclarationData with the given short_name.
|
| -
|
| - Args:
|
| - short_name: {str} short_name to use
|
| -
|
| - Returns:
|
| - {mojom_types_mojom.DeclarationData} With the given short_name
|
| - """
|
| - return mojom_types_mojom.DeclarationData(short_name=short_name)
|
| -
|
| -def add_decl_data(element, short_name):
|
| - """Builds a DeclarationData with the given short_name and adds it
|
| - as the |decl_data| attribute of |element|.
|
| -
|
| - Args:
|
| - element: {any} The Python object to which a |decl_data| attribute will be
|
| - added.
|
| - short_name: {str} short_name to use
|
| - """
|
| - element.decl_data=build_decl_data(short_name)
|
| -
|
| -def build_version_info(num_fields):
|
| - """Builds and returns a list containing a single StructVersion with
|
| - version_number=0, num_bytes=0, and the given value for num_fields.
|
| -
|
| - Args:
|
| - num_fields: {int} The value of num_fields to use.
|
| - Returns:
|
| - {[mojom_types_mojom.StructVersion]} Containing a single element with
|
| - the given value for num_fields.
|
| - """
|
| - return [mojom_types_mojom.StructVersion(
|
| - version_number=0, num_bytes=0,num_fields=num_fields)]
|
| -
|
| -def add_version_info(mojom_struct, num_fields):
|
| - """Builds a list containing a single StructVersion with
|
| - version_number=0, num_bytes=0, and the given value for num_fields. Adds this
|
| - as the |version_info| attribute of |mojom_struct|.
|
| -
|
| - Args:
|
| - mojom_struct: {any} The Python object to which a |version_info| attribute
|
| - will be added.
|
| - num_fields: {int} The value of num_fields to use.
|
| - """
|
| - mojom_struct.version_info=build_version_info(num_fields)
|
|
|