Ejemplo n.º 1
0
  def testGetVersionInfoComplexOrder(self):
    """Tests pack.GetVersionInfo() using a struct whose definition order,
    ordinal order and pack order for fields are all different.
    """
    struct = mojom.Struct('test')
    struct.AddField('field_3', mojom.BOOL, ordinal=3,
                    attributes={'MinVersion': 3})
    struct.AddField('field_0', mojom.INT32, ordinal=0)
    struct.AddField('field_1', mojom.INT64, ordinal=1,
                    attributes={'MinVersion': 2})
    struct.AddField('field_2', mojom.INT64, ordinal=2,
                    attributes={'MinVersion': 3})
    ps = pack.PackedStruct(struct)

    versions = pack.GetVersionInfo(ps)
    self.assertEquals(3, len(versions))

    self.assertEquals(0, versions[0].version)
    self.assertEquals(1, versions[0].num_fields)
    self.assertEquals(16, versions[0].num_bytes)

    self.assertEquals(2, versions[1].version)
    self.assertEquals(2, versions[1].num_fields)
    self.assertEquals(24, versions[1].num_bytes)

    self.assertEquals(3, versions[2].version)
    self.assertEquals(4, versions[2].num_fields)
    self.assertEquals(32, versions[2].num_bytes)
Ejemplo n.º 2
0
    def testBools(self):
        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)
        self.assertEqual(10, len(ps.packed_fields))

        # First 8 bits packed together.
        for i in range(8):
            pf = ps.packed_fields[i]
            self.assertEqual(0, pf.offset)
            self.assertEqual("bit%d" % i, pf.field.mojom_name)
            self.assertEqual(i, pf.bit)

        # Ninth bit goes into second byte.
        self.assertEqual("bit8", ps.packed_fields[8].field.mojom_name)
        self.assertEqual(1, ps.packed_fields[8].offset)
        self.assertEqual(0, ps.packed_fields[8].bit)

        # int comes last.
        self.assertEqual("int", ps.packed_fields[9].field.mojom_name)
        self.assertEqual(4, ps.packed_fields[9].offset)
Ejemplo n.º 3
0
    def testOrdinalOrder(self):
        struct = mojom.Struct('test')
        struct.AddField('testfield1', mojom.INT32, 2)
        struct.AddField('testfield2', mojom.INT32, 1)
        ps = pack.PackedStruct(struct)

        self.assertEqual(2, len(ps.packed_fields))
        self.assertEqual('testfield2', ps.packed_fields[0].field.mojom_name)
        self.assertEqual('testfield1', ps.packed_fields[1].field.mojom_name)
Ejemplo n.º 4
0
def GetResponseStructFromMethod(method):
  params_class = "%s_%s_ResponseParams" % (GetNameForElement(method.interface),
      GetNameForElement(method))
  struct = mojom.Struct(params_class, module=method.interface.module)
  for param in method.response_parameters:
    struct.AddField("out%s" % GetNameForElement(param),
        param.kind, param.ordinal)
  struct.packed = pack.PackedStruct(struct)
  struct.bytes = pack.GetByteLayout(struct.packed)
  struct.versions = pack.GetVersionInfo(struct.packed)
  return struct
Ejemplo n.º 5
0
  def testGetVersionInfoEmptyStruct(self):
    """Tests that pack.GetVersionInfo() never returns an empty list, even for
    empty structs.
    """
    struct = mojom.Struct('test')
    ps = pack.PackedStruct(struct)

    versions = pack.GetVersionInfo(ps)
    self.assertEquals(1, len(versions))
    self.assertEquals(0, versions[0].version)
    self.assertEquals(0, versions[0].num_fields)
    self.assertEquals(8, versions[0].num_bytes)
Ejemplo n.º 6
0
  def testMinVersion(self):
    """Tests that |min_version| is properly set for packed fields."""
    struct = mojom.Struct('test')
    struct.AddField('field_2', mojom.BOOL, 2)
    struct.AddField('field_0', mojom.INT32, 0)
    struct.AddField('field_1', mojom.INT64, 1)
    ps = pack.PackedStruct(struct)

    self.assertEquals('field_0', ps.packed_fields[0].field.name)
    self.assertEquals('field_2', ps.packed_fields[1].field.name)
    self.assertEquals('field_1', ps.packed_fields[2].field.name)

    self.assertEquals(0, ps.packed_fields[0].min_version)
    self.assertEquals(0, ps.packed_fields[1].min_version)
    self.assertEquals(0, ps.packed_fields[2].min_version)

    struct.fields[0].attributes = {'MinVersion': 1}
    ps = pack.PackedStruct(struct)

    self.assertEquals(0, ps.packed_fields[0].min_version)
    self.assertEquals(1, ps.packed_fields[1].min_version)
    self.assertEquals(0, ps.packed_fields[2].min_version)
Ejemplo n.º 7
0
    def testPaddingPackedOutOfOrderByOrdinal(self):
        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)
        self.assertEqual(3, len(ps.packed_fields))

        # Second byte should be packed in behind first, altering order.
        self.assertEqual('testfield1', ps.packed_fields[0].field.mojom_name)
        self.assertEqual('testfield3', ps.packed_fields[1].field.mojom_name)
        self.assertEqual('testfield2', ps.packed_fields[2].field.mojom_name)

        # Second byte should be packed with first.
        self.assertEqual(0, ps.packed_fields[0].offset)
        self.assertEqual(1, ps.packed_fields[1].offset)
        self.assertEqual(4, ps.packed_fields[2].offset)
Ejemplo n.º 8
0
  def _CheckPackSequence(self, kinds, fields, offsets):
    """Checks the pack order and offsets of a sequence of mojom.Kinds.

    Args:
      kinds: A sequence of mojom.Kinds that specify the fields that are to be
      created.
      fields: The expected order of the resulting fields, with the integer "1"
      first.
      offsets: The expected order of offsets, with the integer "0" first.
    """
    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)
    self.assertEquals(len(kinds), num_fields)
    for i in xrange(num_fields):
      self.assertEquals('%d' % fields[i], ps.packed_fields[i].field.name)
      self.assertEquals(offsets[i], ps.packed_fields[i].offset)
Ejemplo n.º 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
Ejemplo n.º 10
0
 def testOneField(self):
     struct = mojom.Struct('test')
     struct.AddField('testfield1', mojom.INT8)
     ps = pack.PackedStruct(struct)
     self.assertEqual(1, len(ps.packed_fields))
Ejemplo n.º 11
0
 def testZeroFields(self):
     struct = mojom.Struct('test')
     ps = pack.PackedStruct(struct)
     self.assertEqual(0, len(ps.packed_fields))