示例#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))
示例#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
示例#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
示例#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
示例#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
示例#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
示例#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
示例#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
示例#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
示例#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