def test_eof(self): p = Pipe(timeout=1, bsize=10) p.write(b"123") self.assertTrue(p.canread()) p.read(3) self.assertFalse(p.canread()) p.write_eof() self.assertTrue(p.canread()) self.assertTrue(p.read(3) == b'')
def test_simple(self): p = Pipe() # default constructor self.assertTrue(isinstance(p, io.RawIOBase)) self.assertFalse(p.closed) try: p.fileno() self.fail("fileno should raise IOError") except IOError: pass self.assertFalse(p.isatty()) self.assertTrue(p.readable()) self.assertFalse(p.seekable()) self.assertTrue(p.writable()) # now for our custom attributes self.assertTrue(p.readblocking()) self.assertTrue(p.writeblocking()) self.assertTrue(p.canwrite() == io.DEFAULT_BUFFER_SIZE) self.assertFalse(p.canread()) # now try a quick read and write test data = b"The quick brown fox jumped over the lazy dog" wlen = p.write(data) self.assertTrue(wlen == len(data)) self.assertTrue(p.canwrite() == io.DEFAULT_BUFFER_SIZE - len(data)) self.assertTrue(p.canread()) self.assertTrue(p.read(3) == data[:3]) self.assertTrue(p.canwrite() == io.DEFAULT_BUFFER_SIZE - len(data) + 3) self.assertTrue(p.canread()) # now deal with EOF conditions p.write_eof() try: p.write(b"extra") self.fail("write past EOF") except IOError: pass try: p.canwrite() self.fail("canwrite called past EOF") except IOError: pass self.assertTrue(p.canread(), "But can still read") self.assertFalse(p.closed) self.assertTrue(p.readall() == data[3:]) self.assertTrue(p.canread(), "Can still read") self.assertTrue(p.read(3) == b'') self.assertTrue(len(p.read()) == 0) self.assertTrue(len(p.readall()) == 0) p.close() self.assertTrue(p.closed) try: p.canread() self.fail("canread called on closed pipe") except IOError: pass