Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Unified Diff: mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator_unittest.py

Issue 2250183003: Make the fuchsia mojo/public repo the source of truth. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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)

Powered by Google App Engine
This is Rietveld 408576698