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
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
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
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
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
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
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
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
def _AddStructComputedData(exported, struct): struct.packed = pack.PackedStruct(struct) struct.bytes = pack.GetByteLayout(struct.packed) struct.versions = pack.GetVersionInfo(struct.packed) struct.exported = exported
def GetDataHeader(exported, struct): struct.packed = pack.PackedStruct(struct) struct.bytes = pack.GetByteLayout(struct.packed) struct.exported = exported return struct
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
def TestZeroFields(): errors = 0 struct = mojom.Struct('test') ps = pack.PackedStruct(struct) errors += EXPECT_EQ(0, len(ps.packed_fields)) return errors