示例#1
0
    def test_read_unaligned_data(self):
        # number expected to read at offset
        test_value = 123

        for offset in range(65):
            buffer = bytearray((8 + offset + 7) // 8)

            # write test value at offset to data buffer
            buffer[offset // 8] = test_value >> (offset % 8)
            if offset % 8 != 0:  # don't write behind the buffer
                buffer[offset // 8 + 1] = 0xff & test_value << (8 - offset % 8)

            bitbuffer = BitBuffer(buffer, 8 + offset)
            reader = BitStreamReader.from_bitbuffer(bitbuffer)

            # read offset bits
            self.assertEqual(0, reader.read_bits(offset))

            # read magic number
            self.assertEqual(test_value,
                             reader.read_bits(8),
                             msg=("Offset: " + str(offset)))

            # check eof
            with self.assertRaises(PythonRuntimeException):
                reader.read_bits(1)
示例#2
0
 def test_from_bitbuffer(self):
     bitbuffer = BitBuffer(bytes([0xAE, 0xEA, 0x80]), 17)
     reader = BitStreamReader.from_bitbuffer(bitbuffer)
     self.assertEqual(bitbuffer.bitsize, reader.buffer_bitsize)
     self.assertEqual(0xAEE, reader.read_bits(12))
     self.assertEqual(0x0A, reader.read_bits(4))
     self.assertEqual(0x01, reader.read_bits(1))
     with self.assertRaises(PythonRuntimeException):
         reader.read_bits(1)
示例#3
0
def deserialize(obj_class: typing.Type[typing.Any], bitbuffer: BitBuffer, *args) -> typing.Any:
    """
    Deserializes bit buffer to the generated object.

    :param obj_class: Class instance of the generated object to deserialize.
    :param bitbuffer: Bit buffer which represents generated object in binary format.
    :param args: Additional arguments needed for obj_class.from_reader method.
    :returns: Generated object created from given bit buffer.
    :raises PythonRuntimeException: Throws in case of any error during deserialization.
    """

    reader = BitStreamReader.from_bitbuffer(bitbuffer)

    return obj_class.from_reader(reader, *args)
示例#4
0
 def test_from_bitbuffer_overflow(self):
     bitbuffer = BitBuffer(bytes([0xFF, 0xFF, 0xF0]), 19)
     reader = BitStreamReader.from_bitbuffer(bitbuffer)
     self.assertEqual(bitbuffer.bitsize, reader.buffer_bitsize)
     with self.assertRaises(PythonRuntimeException):
         reader.read_bits(20)