Beispiel #1
0
def TestOneField():
    errors = 0
    struct = mojom.Struct('test')
    struct.AddField('testfield1', mojom.INT8)
    ps = pack.PackedStruct(struct)
    errors += EXPECT_EQ(1, len(ps.packed_fields))
    return errors
Beispiel #2
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 = 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
Beispiel #3
0
 def _AddStructComputedData(self, exported, struct):
   """Adds computed data to the given struct. The data is computed once and
   used repeatedly in the generation process."""
   struct.packed = pack.PackedStruct(struct)
   struct.bytes = pack.GetByteLayout(struct.packed)
   struct.versions = pack.GetVersionInfo(struct.packed)
   struct.exported = exported
   return struct
Beispiel #4
0
 def _AddStructComputedData(self, exported, struct):
     """Adds computed data to the given struct. The data is computed once and
 used repeatedly in the generation process."""
     if not hasattr(struct, 'packed') or struct.packed is None:
         struct.packed = pack.PackedStruct(struct)
         struct.bytes = pack.GetByteLayout(struct.packed)
     struct.exported = exported
     return struct
Beispiel #5
0
def GetStructFromMethod(method):
    """Converts a method's parameters into the fields of a struct."""
    params_class = "%s_%s_Params" % (method.interface.name, method.name)
    struct = mojom.Struct(params_class, module=method.interface.module)
    for param in method.parameters:
        struct.AddField(param.name, param.kind, param.ordinal)
    struct.packed = pack.PackedStruct(struct)
    return struct
Beispiel #6
0
def TestOrdinalOrder():
    errors = 0
    struct = mojom.Struct('test')
    struct.AddField('testfield1', mojom.INT32, 2)
    struct.AddField('testfield2', mojom.INT32, 1)
    ps = 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
Beispiel #7
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 = 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
Beispiel #8
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 = 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
Beispiel #9
0
 def _AddStructComputedData(exported, struct):
   struct.packed = pack.PackedStruct(struct)
   struct.bytes = pack.GetByteLayout(struct.packed)
   struct.versions = pack.GetVersionInfo(struct.packed)
   struct.exported = exported
Beispiel #10
0
def GetDataHeader(exported, struct):
    struct.packed = pack.PackedStruct(struct)
    struct.bytes = pack.GetByteLayout(struct.packed)
    struct.exported = exported
    return struct
Beispiel #11
0
def _GetDataHeader(exported, struct):
    struct.packed = pack.PackedStruct(struct)
    struct.bytes = pack.GetByteLayout(struct.packed)
    struct.versions = pack.GetVersionInfo(struct.packed)
    struct.exported = exported
    return struct
Beispiel #12
0
def TestZeroFields():
    errors = 0
    struct = mojom.Struct('test')
    ps = pack.PackedStruct(struct)
    errors += EXPECT_EQ(0, len(ps.packed_fields))
    return errors