AsyncWriteTestExt

Trait AsyncWriteTestExt 

Source
pub trait AsyncWriteTestExt: AsyncWrite {
    // Provided methods
    fn interleave_pending_write(self) -> InterleavePending<Self> 
       where Self: Sized { ... }
    fn limited_write(self, limit: usize) -> Limited<Self>
       where Self: Sized { ... }
}
Expand description

Additional combinators for testing async writers.

Provided Methods§

Source

fn interleave_pending_write(self) -> InterleavePending<Self>
where Self: Sized,

Introduces an extra Poll::Pending in between each operation on the writer.

§Examples
use futures::task::Poll;
use futures::io::AsyncWrite;
use futures_test::task::noop_context;
use futures_test::io::AsyncWriteTestExt;
use futures::pin_mut;

let writer = std::io::Cursor::new([0u8; 4]).interleave_pending_write();
pin_mut!(writer);

let mut cx = noop_context();

assert_eq!(writer.as_mut().poll_write(&mut cx, &[1, 2])?, Poll::Pending);
assert_eq!(writer.as_mut().poll_write(&mut cx, &[1, 2])?, Poll::Ready(2));
assert_eq!(writer.get_ref().get_ref(), &[1, 2, 0, 0]);
assert_eq!(writer.as_mut().poll_write(&mut cx, &[3, 4])?, Poll::Pending);
assert_eq!(writer.as_mut().poll_write(&mut cx, &[3, 4])?, Poll::Ready(2));
assert_eq!(writer.get_ref().get_ref(), &[1, 2, 3, 4]);
assert_eq!(writer.as_mut().poll_write(&mut cx, &[5, 6])?, Poll::Pending);
assert_eq!(writer.as_mut().poll_write(&mut cx, &[5, 6])?, Poll::Ready(0));

assert_eq!(writer.as_mut().poll_flush(&mut cx)?, Poll::Pending);
assert_eq!(writer.as_mut().poll_flush(&mut cx)?, Poll::Ready(()));

assert_eq!(writer.as_mut().poll_close(&mut cx)?, Poll::Pending);
assert_eq!(writer.as_mut().poll_close(&mut cx)?, Poll::Ready(()));
Source

fn limited_write(self, limit: usize) -> Limited<Self>
where Self: Sized,

Limit the number of bytes allowed to be written on each call to poll_write.

§Examples
use futures::task::Poll;
use futures::io::AsyncWrite;
use futures_test::task::noop_context;
use futures_test::io::AsyncWriteTestExt;
use futures::pin_mut;

let writer = std::io::Cursor::new([0u8; 4]).limited_write(2);
pin_mut!(writer);

let mut cx = noop_context();

assert_eq!(writer.as_mut().poll_write(&mut cx, &[1, 2])?, Poll::Ready(2));
assert_eq!(writer.get_ref().get_ref(), &[1, 2, 0, 0]);
assert_eq!(writer.as_mut().poll_write(&mut cx, &[3])?, Poll::Ready(1));
assert_eq!(writer.get_ref().get_ref(), &[1, 2, 3, 0]);
assert_eq!(writer.as_mut().poll_write(&mut cx, &[4, 5])?, Poll::Ready(1));
assert_eq!(writer.get_ref().get_ref(), &[1, 2, 3, 4]);
assert_eq!(writer.as_mut().poll_write(&mut cx, &[5])?, Poll::Ready(0));

Implementors§

Source§

impl<W> AsyncWriteTestExt for W
where W: AsyncWrite,