예제 #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
예제 #5
0
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