123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- # coding: utf-8
- import pytest
- from pandas import compat
- from pandas.io.msgpack import BufferFull, OutOfData, Unpacker
- class TestPack(object):
- def test_partial_data(self):
- unpacker = Unpacker()
- msg = "No more data to unpack"
- for data in [b"\xa5", b"h", b"a", b"l", b"l"]:
- unpacker.feed(data)
- with pytest.raises(StopIteration, match=msg):
- next(iter(unpacker))
- unpacker.feed(b"o")
- assert next(iter(unpacker)) == b"hallo"
- def test_foobar(self):
- unpacker = Unpacker(read_size=3, use_list=1)
- unpacker.feed(b'foobar')
- assert unpacker.unpack() == ord(b'f')
- assert unpacker.unpack() == ord(b'o')
- assert unpacker.unpack() == ord(b'o')
- assert unpacker.unpack() == ord(b'b')
- assert unpacker.unpack() == ord(b'a')
- assert unpacker.unpack() == ord(b'r')
- msg = "No more data to unpack"
- with pytest.raises(OutOfData, match=msg):
- unpacker.unpack()
- unpacker.feed(b'foo')
- unpacker.feed(b'bar')
- k = 0
- for o, e in zip(unpacker, 'foobarbaz'):
- assert o == ord(e)
- k += 1
- assert k == len(b'foobar')
- def test_foobar_skip(self):
- unpacker = Unpacker(read_size=3, use_list=1)
- unpacker.feed(b'foobar')
- assert unpacker.unpack() == ord(b'f')
- unpacker.skip()
- assert unpacker.unpack() == ord(b'o')
- unpacker.skip()
- assert unpacker.unpack() == ord(b'a')
- unpacker.skip()
- msg = "No more data to unpack"
- with pytest.raises(OutOfData, match=msg):
- unpacker.unpack()
- def test_maxbuffersize_read_size_exceeds_max_buffer_size(self):
- msg = "read_size should be less or equal to max_buffer_size"
- with pytest.raises(ValueError, match=msg):
- Unpacker(read_size=5, max_buffer_size=3)
- def test_maxbuffersize_bufferfull(self):
- unpacker = Unpacker(read_size=3, max_buffer_size=3, use_list=1)
- unpacker.feed(b'foo')
- with pytest.raises(BufferFull, match=r'^$'):
- unpacker.feed(b'b')
- def test_maxbuffersize(self):
- unpacker = Unpacker(read_size=3, max_buffer_size=3, use_list=1)
- unpacker.feed(b'foo')
- assert ord('f') == next(unpacker)
- unpacker.feed(b'b')
- assert ord('o') == next(unpacker)
- assert ord('o') == next(unpacker)
- assert ord('b') == next(unpacker)
- def test_readbytes(self):
- unpacker = Unpacker(read_size=3)
- unpacker.feed(b'foobar')
- assert unpacker.unpack() == ord(b'f')
- assert unpacker.read_bytes(3) == b'oob'
- assert unpacker.unpack() == ord(b'a')
- assert unpacker.unpack() == ord(b'r')
- # Test buffer refill
- unpacker = Unpacker(compat.BytesIO(b'foobar'), read_size=3)
- assert unpacker.unpack() == ord(b'f')
- assert unpacker.read_bytes(3) == b'oob'
- assert unpacker.unpack() == ord(b'a')
- assert unpacker.unpack() == ord(b'r')
- def test_issue124(self):
- unpacker = Unpacker()
- unpacker.feed(b'\xa1?\xa1!')
- assert tuple(unpacker) == (b'?', b'!')
- assert tuple(unpacker) == ()
- unpacker.feed(b"\xa1?\xa1")
- assert tuple(unpacker) == (b'?', )
- assert tuple(unpacker) == ()
- unpacker.feed(b"!")
- assert tuple(unpacker) == (b'!', )
- assert tuple(unpacker) == ()
|