def test_peek(self): data = b"How long is a piece of string?" src = io.BytesIO(data) # make buffer smaller than src b = BufferedStreamWrapper(src, 10) self.assertTrue(b.peek(3) == data[0:3]) self.assertTrue(b.read(8) == data[0:8], "Data consumed by peek") self.assertTrue(b.peek(3) == data[8:10], "Peek to end of buffer") nbytes = 0 while nbytes < 3: rdata = b.read(3 - nbytes) self.assertTrue(rdata, "reading past buffer") nbytes += len(rdata) # now peek should always return empty self.assertTrue(b.peek(1) == b"", "Can't peek past end of buffer")
def test_blocked(self): data = b"How long is a piece of string?" src = Pipe(rblocking=False, name="test_blocked") src.write(data) # no eof, default buffer size will trigger block b = BufferedStreamWrapper(src) self.assertTrue(b.readable()) self.assertFalse(b.writable()) self.assertFalse(b.seekable()) self.assertTrue(b.length is None) # but note that we can still peek on the data # that we have buffered self.assertTrue(b.peek(3) == data[0:3])