Пример #1
0
def test_UB_read():
    bits = BitStream("101010")
    assert bits.read(UB[6]) == 42
    assert bits.bits_available == 0

    bits = BitStream("010 0111011001 101010 10001 10111")
    assert bits.read(UB[3]) == 2
    assert bits.bits_available == 26
    assert bits.read(UB[10]) == 0b0111011001
    assert bits.bits_available == 16
    assert bits.read(UB[6]) == 0b101010
    assert bits.bits_available == 10
    assert bits.read(UB[5]) == 0b10001
    assert bits.bits_available == 5
    assert bits.read(UB[5]) == 0b10111
    assert bits.bits_available == 0

    bits = BitStream()
    bits.write("\xDD\xEE\xFF", ByteString)

    bits.seek(0)
    result = bits.read(UB[24])
    assert result == 0xDDEEFF
    assert bits.bits_available == 0

    bits.seek(0)
    result = bits.read(UB[24:"<"])
    assert result == 0xFFEEDD
    assert bits.bits_available == 0
Пример #2
0
def test_UB_read():
    bits = BitStream("101010")
    assert bits.read(UB[6]) == 42
    assert bits.bits_available == 0

    bits = BitStream("010 0111011001 101010 10001 10111")
    assert bits.read(UB[3]) == 2
    assert bits.bits_available == 26
    assert bits.read(UB[10]) == 0b0111011001
    assert bits.bits_available == 16
    assert bits.read(UB[6]) == 0b101010
    assert bits.bits_available == 10
    assert bits.read(UB[5]) == 0b10001
    assert bits.bits_available == 5
    assert bits.read(UB[5]) == 0b10111
    assert bits.bits_available == 0

    bits = BitStream()
    bits.write("\xDD\xEE\xFF", ByteString)

    bits.seek(0)
    result = bits.read(UB[24])
    assert result == 0xDDEEFF
    assert bits.bits_available == 0

    bits.seek(0)
    result = bits.read(UB[24:"<"])
    assert result == 0xFFEEDD
    assert bits.bits_available == 0
Пример #3
0
def test_cursor():
    bits = BitStream("01001101")
    assert bits.tell() == 0
    bits.seek(1, os.SEEK_END)
    assert bits.bits_available == 1
    assert bits.read_bit() == 1
    py.test.raises(IndexError, bits.read_bit)

    bits.seek(0)
    assert bits.bits_available == 8

    result = bits.read_bit()
    assert result == 0

    result = bits.read_bits(2)
    assert result == [True, False]

    bits.seek(1, os.SEEK_CUR)
    assert bits.bits_available == 4
    assert bits.read_bits(2) == [True, True]

    bits.seek(1, os.SEEK_END)
    assert bits.bits_available == 0

    bits.seek(0)
    result = bits.read_bits(8)
    assert str(result) == str(bits)
Пример #4
0
def test_BitStream_specialized_format_write():
    L = [1, 0, True, False]

    bits = BitStream()
    bits.write(L)
    assert str(bits) == "1010"

    bits = BitStream("11")
    bits.write(L)
    assert str(bits) == "1010"

    bits = BitStream()
    bits.write(L[3:], BitStream[1])
    bits.write(L[2:], BitStream[1])
    assert str(bits) == "01"

    test = BitStream()
    test.write("SWF", ByteString)
    test.seek(0)

    bits = BitStream()
    bits.write(test, BitStream["<"])
    bits.seek(0)

    result = bits.read(ByteString[3])
    assert result == "FWS"
    assert bits.bits_available == 0
Пример #5
0
def test_flush():
    # Test when bits has no data.
    bits = BitStream("")
    bits.flush()
    assert str(bits) == ""
    assert bits.bits_available == 0

    # Test when cursor == 0
    bits = BitStream("1111")
    bits.seek(0)
    bits.flush()
    assert str(bits) == "11110000"
    assert bits.bits_available == 0

    # Test when cursor != 0.
    bits = BitStream("11100")
    bits.seek(0, os.SEEK_END)
    bits.flush()
    assert str(bits) == "11100000"
    assert bits.bits_available == 0

    # Test when already flush.
    bits = BitStream("11111111")
    bits.seek(0)
    bits.flush()
    assert str(bits) == "11111111"
    assert bits.bits_available == 0

    bits = BitStream("11111111 11111")
    bits.seek(0, os.SEEK_END)
    bits.flush()
    assert str(bits) == "1111111111111000"
    assert bits.bits_available == 0
Пример #6
0
def test_BitStream_specialized_format_read():
    bits = BitStream("1011001")
    result = bits.read(BitStream[4])
    assert result == [True, False, True, True]
    assert bits.bits_available == 3
    py.test.raises(IndexError, bits.read, BitStream[4])

    bits = BitStream()
    bits.write("SWF", ByteString)

    bits.seek(0)
    result = bits.read(BitStream[24:"<"])
    result = result.read(ByteString[3])
    assert result == "FWS"
    assert bits.bits_available == 0
Пример #7
0
def test_CString_read():
    # Testing basics.
    bits = BitStream()
    test_data = "test 123\x01\xFF"
    bits.write(test_data, ByteString)
    bits.write(Zero[8])
    bits.seek(0)
    result = bits.read(CString)
    assert result == test_data

    # Testing error-handling.
    bits = BitStream()
    bits.write("adsfasfdgjklhrgokrjygaosaf", ByteString)
    bits.seek(0)
    py.test.raises(ValueError, bits.read, CString)
Пример #8
0
def test_CString_read():
    # Testing basics.
    bits = BitStream()
    test_data = "test 123\x01\xFF"
    bits.write(test_data, ByteString)
    bits.write(Zero[8])
    bits.seek(0)
    result = bits.read(CString)
    assert result == test_data

    # Testing error-handling.
    bits = BitStream()
    bits.write("adsfasfdgjklhrgokrjygaosaf", ByteString)
    bits.seek(0)
    py.test.raises(ValueError, bits.read, CString)
Пример #9
0
 def as_bitstream(self):
     bitstream = BitStream()
     bitstream.byte_aligned = getattr(self.create_fields, "byte_aligned", False)
     self.TEMP_FIELDS = {}
     statements = {}
     for statement in self.create_fields():
         statement = IStructStatement(statement)
         statement._pre_write(self)
         statements[statement] = statement
     self.writing = True
     for statement in self.create_fields():
         statement = IStructStatement(statements.get(statement, statement))
         statement._struct_write(self, bitstream)
     del self.TEMP_FIELDS
     self.writing = False
     bitstream.seek(0)
     return bitstream
Пример #10
0
def test_skip_flush():
    bits = BitStream("111")
    bits.seek(0)
    bits.skip_flush()
    assert str(bits) == "111"
    assert bits.bits_available == 3

    bits.seek(0, os.SEEK_END)
    bits.skip_flush()
    assert str(bits) == "111"
    assert bits.bits_available == 0

    bits = BitStream("11110000 111")
    bits.skip_flush()
    assert bits.tell() == 0
    assert bits.bits_available == 11

    bits.seek(1, os.SEEK_CUR)
    bits.skip_flush()
    assert bits.tell() == 8
    assert bits.bits_available == 3

    bits.skip_flush()
    assert bits.tell() == 8
    assert bits.bits_available == 3

    bits = BitStream("11110000 11100011 101")
    bits.skip_flush()
    assert bits.tell() == 0
    assert bits.bits_available == 19

    bits.seek(1, os.SEEK_CUR)
    bits.cursor += 1
    bits.skip_flush()
    assert bits.tell() == 8
    assert bits.bits_available == 11

    bits.skip_flush()
    assert bits.tell() == 8
    assert bits.bits_available == 11

    bits.seek(1, os.SEEK_CUR)
    bits.skip_flush()
    assert bits.tell() == 16
    assert bits.bits_available == 3
Пример #11
0
 def as_bitstream(self):
     bitstream = BitStream()
     bitstream.byte_aligned = getattr(self.create_fields, "byte_aligned",
                                      False)
     self.TEMP_FIELDS = {}
     statements = {}
     for statement in self.create_fields():
         statement = IStructStatement(statement)
         statement._pre_write(self)
         statements[statement] = statement
     self.writing = True
     for statement in self.create_fields():
         statement = IStructStatement(statements.get(statement, statement))
         statement._struct_write(self, bitstream)
     del self.TEMP_FIELDS
     self.writing = False
     bitstream.seek(0)
     return bitstream
Пример #12
0
def test_CString_write():
    # Testing basics.
    bits = BitStream()
    bits.write("FWS", CString)
    assert bits.bits_available == 0
    assert len(bits) == 32
    bits.seek(0)
    result = bits.read(Byte)
    assert result == ord("F")
    assert bits.bits_available == 24
    result = bits.read(Byte)
    assert result == ord("W")
    assert bits.bits_available == 16
    result = bits.read(Byte)
    assert result == ord("S")
    assert bits.bits_available == 8
    result = bits.read(Byte)
    assert result == 0
    assert bits.bits_available == 0
Пример #13
0
def test_CString_write():
    # Testing basics.
    bits = BitStream()
    bits.write("FWS", CString)
    assert bits.bits_available == 0
    assert len(bits) == 32
    bits.seek(0)
    result = bits.read(Byte)
    assert result == ord("F")
    assert bits.bits_available == 24
    result = bits.read(Byte)
    assert result == ord("W")
    assert bits.bits_available == 16
    result = bits.read(Byte)
    assert result == ord("S")
    assert bits.bits_available == 8
    result = bits.read(Byte)
    assert result == 0
    assert bits.bits_available == 0
Пример #14
0
def test_Byte_read():
    # Testing basics.
    bits = BitStream("10101010 11001100")
    result = bits.read(Byte[1])
    assert result == 0b10101010
    assert bits.bits_available == 8

    result = bits.read(Byte[1])
    assert result == 0b11001100
    assert bits.bits_available == 0

    # Testing out-of-bounds checking.
    py.test.raises(ValueError, bits.read, Byte)

    # Testing length.
    bits.seek(0)
    result = bits.read(Byte[2])
    assert result == 0b1010101011001100
    assert bits.bits_available == 0

    # Testing endianness.
    bits.seek(0)
    result = bits.read(Byte[2:"<"])
    assert result == 0b1100110010101010
    assert bits.bits_available == 0

    # Testing length behavior.
    bits.seek(0)
    result = bits.read(Byte)  # This should read one byte.
    assert result == 0b10101010
    assert bits.bits_available == 8

    # Make length not divisible by 8.
    bits.seek(0, os.SEEK_END)
    bits.write(Zero)

    bits.seek(0)
    result = bits.read(Byte)  # But this should still work.
    assert result == 0b10101010
    assert bits.bits_available == 9
Пример #15
0
def test_Byte_read():
    # Testing basics.
    bits = BitStream("10101010 11001100")
    result = bits.read(Byte[1])
    assert result == 0b10101010
    assert bits.bits_available == 8

    result = bits.read(Byte[1])
    assert result == 0b11001100
    assert bits.bits_available == 0

    # Testing out-of-bounds checking.
    py.test.raises(ValueError, bits.read, Byte)

    # Testing length.
    bits.seek(0)
    result = bits.read(Byte[2])
    assert result == 0b1010101011001100
    assert bits.bits_available == 0

    # Testing endianness.
    bits.seek(0)
    result = bits.read(Byte[2:"<"])
    assert result == 0b1100110010101010
    assert bits.bits_available == 0

    # Testing length behavior.
    bits.seek(0)
    result = bits.read(Byte) # This should read one byte.
    assert result == 0b10101010
    assert bits.bits_available == 8

    # Make length not divisible by 8.
    bits.seek(0, os.SEEK_END)
    bits.write(Zero)

    bits.seek(0)
    result = bits.read(Byte) # But this should still work.
    assert result == 0b10101010
    assert bits.bits_available == 9
Пример #16
0
def test_UB_write():
    bits = BitStream()
    bits.write(0b1111, UB[4])
    assert len(bits) == 4 and str(bits) == "1111"

    bits = BitStream()
    bits.write(0b1111, UB[8])
    assert len(bits) == 8 and str(bits) == "00001111"

    bits = BitStream()
    bits.write(0xDDEEFF, UB)
    bits.seek(0)
    result = bits.read(ByteString[3])
    assert result == "\xDD\xEE\xFF"
    assert bits.bits_available == 0

    bits = BitStream()
    bits.write(0xDDEEFF, UB["<"])
    bits.seek(0)
    result = bits.read(ByteString[3])
    assert result == "\xFF\xEE\xDD"
    assert bits.bits_available == 0
Пример #17
0
def test_UB_write():
    bits = BitStream()
    bits.write(0b1111, UB[4])
    assert len(bits) == 4 and str(bits) == "1111"

    bits = BitStream()
    bits.write(0b1111, UB[8])
    assert len(bits) == 8 and str(bits) == "00001111"

    bits = BitStream()
    bits.write(0xDDEEFF, UB)
    bits.seek(0)
    result = bits.read(ByteString[3])
    assert result == "\xDD\xEE\xFF"
    assert bits.bits_available == 0

    bits = BitStream()
    bits.write(0xDDEEFF, UB["<"])
    bits.seek(0)
    result = bits.read(ByteString[3])
    assert result == "\xFF\xEE\xDD"
    assert bits.bits_available == 0
Пример #18
0
def test_ByteString_read():
    # Testing basics.
    bits = BitStream("00101010 00101111")
    result = bits.read(ByteString[1])
    assert result == chr(0b00101010)
    assert bits.bits_available == 8

    # Testing length.
    bits.seek(0)
    result = bits.read(ByteString[2])
    assert result == chr(0b00101010) + chr(0b00101111)
    assert bits.bits_available == 0

    # Testing endianness.
    bits.seek(0)
    result = bits.read(ByteString[2:"<"])
    assert result == chr(0b00101111) + chr(0b00101010)
    assert bits.bits_available == 0

    # Testing with no length provided.
    bits.seek(0)
    result = bits.read(ByteString)
    assert result == chr(0b00101010) + chr(0b00101111)


    # Testing non-flush length.

    # Make length not divisible by 8.
    bits.seek(0, os.SEEK_END)
    bits.write(Zero)

    bits.seek(0)
    result = bits.read(ByteString[2]) # This should still work.
    assert result == chr(0b00101010) + chr(0b00101111)
    assert bits.bits_available == 1

    bits.seek(0)
    py.test.raises(ValueError, bits.read, ByteString) # But this should fail.
Пример #19
0
def test_ByteString_write():
    # Testing basics.
    bits = BitStream()
    bits.write("SWF", ByteString)
    assert bits.bits_available == 0
    assert len(bits) == 24

    bits.seek(0)
    for i, char in enumerate("SWF"):
        result = bits.read(Byte)
        assert result == ord(char)
        assert bits.bits_available + i * 8 == 16

    # Testing explicit length.
    bits = BitStream()
    bits.write("SWF", ByteString[3])
    assert bits.bits_available == 0
    assert len(bits) == 24

    bits.seek(0)
    for i, char in enumerate("SWF"):
        result = bits.read(Byte)
        assert result == ord(char)
        assert bits.bits_available + i * 8 == 16

    # Testing leftover > 0.
    bits = BitStream()
    bits.write("SWF", ByteString[4])
    assert bits.bits_available == 0
    assert len(bits) == 32

    bits.seek(0)
    for i, char in enumerate("\0SWF"):
        result = bits.read(Byte)
        assert result == ord(char)
        assert bits.bits_available + i * 8 == 24

    # Testing leftover < 0.
    bits = BitStream()
    py.test.raises(ValueError, bits.write, "SWF", ByteString[1])

    # Testing endianness.
    bits = BitStream()
    bits.write("SWF", ByteString["<"])
    assert bits.bits_available == 0
    assert len(bits) == 24

    bits.seek(0)
    for i, char in enumerate("FWS"):
        result = bits.read(Byte)
        assert result == ord(char)
        assert bits.bits_available + i * 8 == 16

    # Testing leftover > 0 and endianness.
    bits = BitStream()
    bits.write("SWF", ByteString[5:"<"])
    assert bits.bits_available == 0
    assert len(bits) == 40

    bits.seek(0)
    for i, char in enumerate("FWS\0\0"):
        result = bits.read(Byte)
        assert result == ord(char)
        assert bits.bits_available + i * 8 == 32
Пример #20
0
def test_ByteString_read():
    # Testing basics.
    bits = BitStream("00101010 00101111")
    result = bits.read(ByteString[1])
    assert result == chr(0b00101010)
    assert bits.bits_available == 8

    # Testing length.
    bits.seek(0)
    result = bits.read(ByteString[2])
    assert result == chr(0b00101010) + chr(0b00101111)
    assert bits.bits_available == 0

    # Testing endianness.
    bits.seek(0)
    result = bits.read(ByteString[2:"<"])
    assert result == chr(0b00101111) + chr(0b00101010)
    assert bits.bits_available == 0

    # Testing with no length provided.
    bits.seek(0)
    result = bits.read(ByteString)
    assert result == chr(0b00101010) + chr(0b00101111)

    # Testing non-flush length.

    # Make length not divisible by 8.
    bits.seek(0, os.SEEK_END)
    bits.write(Zero)

    bits.seek(0)
    result = bits.read(ByteString[2])  # This should still work.
    assert result == chr(0b00101010) + chr(0b00101111)
    assert bits.bits_available == 1

    bits.seek(0)
    py.test.raises(ValueError, bits.read, ByteString)  # But this should fail.
Пример #21
0
def test_ByteString_write():
    # Testing basics.
    bits = BitStream()
    bits.write("SWF", ByteString)
    assert bits.bits_available == 0
    assert len(bits) == 24

    bits.seek(0)
    for i, char in enumerate("SWF"):
        result = bits.read(Byte)
        assert result == ord(char)
        assert bits.bits_available + i*8 == 16

    # Testing explicit length.
    bits = BitStream()
    bits.write("SWF", ByteString[3])
    assert bits.bits_available == 0
    assert len(bits) == 24

    bits.seek(0)
    for i, char in enumerate("SWF"):
        result = bits.read(Byte)
        assert result == ord(char)
        assert bits.bits_available + i*8 == 16

    # Testing leftover > 0.
    bits = BitStream()
    bits.write("SWF", ByteString[4])
    assert bits.bits_available == 0
    assert len(bits) == 32

    bits.seek(0)
    for i, char in enumerate("\0SWF"):
        result = bits.read(Byte)
        assert result == ord(char)
        assert bits.bits_available + i*8 == 24

    # Testing leftover < 0.
    bits = BitStream()
    py.test.raises(ValueError, bits.write, "SWF", ByteString[1])

    # Testing endianness.
    bits = BitStream()
    bits.write("SWF", ByteString["<"])
    assert bits.bits_available == 0
    assert len(bits) == 24

    bits.seek(0)
    for i, char in enumerate("FWS"):
        result = bits.read(Byte)
        assert result == ord(char)
        assert bits.bits_available + i*8 == 16

    # Testing leftover > 0 and endianness.
    bits = BitStream()
    bits.write("SWF", ByteString[5:"<"])
    assert bits.bits_available == 0
    assert len(bits) == 40

    bits.seek(0)
    for i, char in enumerate("FWS\0\0"):
        result = bits.read(Byte)
        assert result == ord(char)
        assert bits.bits_available + i*8 == 32