Exemple #1
0
def TestAllTypes():
    struct = mojom.Struct('test')
    array = mojom.Array()
    return TestSequence(
        (mojom.BOOL, mojom.INT8, mojom.STRING, mojom.UINT8, mojom.INT16,
         mojom.DOUBLE, mojom.UINT16, mojom.INT32, mojom.UINT32, mojom.INT64,
         mojom.FLOAT, mojom.STRING, mojom.HANDLE, mojom.UINT64,
         mojom.Struct('test'), mojom.Array()),
        (1, 2, 4, 5, 7, 3, 6, 8, 9, 10, 11, 13, 12, 14, 15, 16, 17),
        (0, 1, 2, 4, 6, 8, 16, 24, 28, 32, 40, 44, 48, 56, 64, 72, 80))
Exemple #2
0
def TestOneField():
    errors = 0
    struct = mojom.Struct('test')
    struct.AddField('testfield1', mojom.INT8)
    ps = mojom_pack.PackedStruct(struct)
    errors += EXPECT_EQ(1, len(ps.packed_fields))
    return errors
Exemple #3
0
def TestBools():
    errors = 0
    struct = mojom.Struct('test')
    struct.AddField('bit0', mojom.BOOL)
    struct.AddField('bit1', mojom.BOOL)
    struct.AddField('int', mojom.INT32)
    struct.AddField('bit2', mojom.BOOL)
    struct.AddField('bit3', mojom.BOOL)
    struct.AddField('bit4', mojom.BOOL)
    struct.AddField('bit5', mojom.BOOL)
    struct.AddField('bit6', mojom.BOOL)
    struct.AddField('bit7', mojom.BOOL)
    struct.AddField('bit8', mojom.BOOL)
    ps = mojom_pack.PackedStruct(struct)
    errors += EXPECT_EQ(10, len(ps.packed_fields))

    # First 8 bits packed together.
    for i in xrange(8):
        pf = ps.packed_fields[i]
        errors += EXPECT_EQ(0, pf.offset)
        errors += EXPECT_EQ("bit%d" % i, pf.field.name)
        errors += EXPECT_EQ(i, pf.bit)

    # Ninth bit goes into second byte.
    errors += EXPECT_EQ("bit8", ps.packed_fields[8].field.name)
    errors += EXPECT_EQ(1, ps.packed_fields[8].offset)
    errors += EXPECT_EQ(0, ps.packed_fields[8].bit)

    # int comes last.
    errors += EXPECT_EQ("int", ps.packed_fields[9].field.name)
    errors += EXPECT_EQ(4, ps.packed_fields[9].offset)

    return errors
Exemple #4
0
def GetStructFromMethod(interface, method):
    """Converts a method's parameters into the fields of a struct."""
    params_class = "%s_%s_Params" % (interface.name, method.name)
    struct = mojom.Struct(params_class)
    for param in method.parameters:
        struct.AddField(param.name, param.kind, param.ordinal)
    return struct
def StructFromData(kinds, data):
    struct = mojom.Struct()
    struct.name = data['name']
    struct.spec = 'x:' + struct.name
    kinds[struct.spec] = struct
    struct.fields = map(lambda field: FieldFromData(kinds, field),
                        data['fields'])
    return struct
Exemple #6
0
def GetResponseStructFromMethod(interface, method):
    """Converts a method's response_parameters into the fields of a struct."""
    params_class = "%s_%s_ResponseParams" % (interface.name, method.name)
    struct = mojom.Struct(params_class)
    for param in method.response_parameters:
        struct.AddField(param.name, param.kind, param.ordinal)
    struct.packed = mojom_pack.PackedStruct(struct)
    return struct
Exemple #7
0
def StructFromData(module, data):
    struct = mojom.Struct()
    struct.name = data['name']
    struct.spec = 'x:' + module.namespace + '.' + struct.name
    module.kinds[struct.spec] = struct
    struct.enums = map(lambda enum: EnumFromData(module, enum, struct),
                       data['enums'])
    struct.fields = map(lambda field: FieldFromData(module, field, struct),
                        data['fields'])
    return struct
Exemple #8
0
def TestOrdinalOrder():
    errors = 0
    struct = mojom.Struct('test')
    struct.AddField('testfield1', mojom.INT32, 2)
    struct.AddField('testfield2', mojom.INT32, 1)
    ps = mojom_pack.PackedStruct(struct)

    errors += EXPECT_EQ(2, len(ps.packed_fields))
    errors += EXPECT_EQ('testfield2', ps.packed_fields[0].field.name)
    errors += EXPECT_EQ('testfield1', ps.packed_fields[1].field.name)

    return errors
Exemple #9
0
def TestSequence(kinds, fields, offsets):
    errors = 0
    struct = mojom.Struct('test')
    index = 1
    for kind in kinds:
        struct.AddField("%d" % index, kind)
        index += 1
    ps = mojom_pack.PackedStruct(struct)
    num_fields = len(ps.packed_fields)
    errors += EXPECT_EQ(len(kinds), num_fields)
    for i in xrange(num_fields):
        EXPECT_EQ("%d" % fields[i], ps.packed_fields[i].field.name)
        EXPECT_EQ(offsets[i], ps.packed_fields[i].offset)

    return errors
Exemple #10
0
def TestPaddingPackedOutOfOrderByOrdinal():
    errors = 0
    struct = mojom.Struct('test')
    struct.AddField('testfield1', mojom.INT8)
    struct.AddField('testfield3', mojom.UINT8, 3)
    struct.AddField('testfield2', mojom.INT32, 2)
    ps = mojom_pack.PackedStruct(struct)
    errors += EXPECT_EQ(3, len(ps.packed_fields))

    # Second byte should be packed in behind first, altering order.
    errors += EXPECT_EQ('testfield1', ps.packed_fields[0].field.name)
    errors += EXPECT_EQ('testfield3', ps.packed_fields[1].field.name)
    errors += EXPECT_EQ('testfield2', ps.packed_fields[2].field.name)

    # Second byte should be packed with first.
    errors += EXPECT_EQ(0, ps.packed_fields[0].offset)
    errors += EXPECT_EQ(1, ps.packed_fields[1].offset)
    errors += EXPECT_EQ(4, ps.packed_fields[2].offset)

    return errors
Exemple #11
0
def TestZeroFields():
    errors = 0
    struct = mojom.Struct('test')
    ps = mojom_pack.PackedStruct(struct)
    errors += EXPECT_EQ(0, len(ps.packed_fields))
    return errors