def test_unions(self):
    file_name = 'a.mojom'
    mojom_union = mojom_types_mojom.MojomUnion()
    mojom_union.decl_data = mojom_types_mojom.DeclarationData(
        short_name='AUnion',
        source_file_info=mojom_types_mojom.SourceFileInfo(file_name=file_name))

    field1 = mojom_types_mojom.UnionField(
        decl_data=mojom_types_mojom.DeclarationData(short_name='field1'),
        type=mojom_types_mojom.Type(
          simple_type=mojom_types_mojom.SimpleType.BOOL))
    field2 = mojom_types_mojom.UnionField(
        decl_data=mojom_types_mojom.DeclarationData(
            short_name='field2', declared_ordinal=5),
        type=mojom_types_mojom.Type(
          simple_type=mojom_types_mojom.SimpleType.DOUBLE))
    mojom_union.fields = [field1, field2]

    graph = mojom_files_mojom.MojomFileGraph()
    union = module.Union()
    translator = mojom_translator.FileTranslator(graph, file_name)
    translator.UnionFromMojom(
        union, mojom_types_mojom.UserDefinedType(union_type=mojom_union))

    self.assertEquals(translator._module, union.module)
    self.assertEquals('AUnion', union.name)
    self.assertEquals(len(mojom_union.fields), len(union.fields))

    for gold, f in zip(mojom_union.fields, union.fields):
      self.assertEquals(gold.decl_data.short_name, f.name)

    self.assertEquals(module.BOOL, union.fields[0].kind)
    self.assertEquals(None, union.fields[0].ordinal)
    self.assertEquals(module.DOUBLE, union.fields[1].kind)
    self.assertEquals(5, union.fields[1].ordinal)
Exemple #2
0
def UnionFromData(module, data):
    union = mojom.Union(module=module)
    union.name = data['name']
    union.spec = 'x:' + module.namespace + '.' + union.name
    module.kinds[union.spec] = union
    # Stash fields data here temporarily.
    union.fields_data = data['fields']
    return union
Exemple #3
0
    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 _Union(module, parsed_union):
    """
  Args:
    module: {mojom.Module} Module currently being constructed.
    parsed_union: {ast.Union} Parsed union.

  Returns:
    {mojom.Union} AST union.
  """
    union = mojom.Union(module=module)
    union.mojom_name = parsed_union.mojom_name
    union.spec = 'x:' + module.mojom_namespace + '.' + union.mojom_name
    module.kinds[union.spec] = union
    # Stash fields parsed_union here temporarily.
    union.fields_data = _ElemsOfType(parsed_union.body, ast.UnionField,
                                     parsed_union.mojom_name)
    union.attributes = _AttributeListToDict(parsed_union.attribute_list)
    return union