diff options
author | Carl Lerche <me@carllerche.com> | 2019-07-09 16:17:58 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-09 16:17:58 -0700 |
commit | f1b8a318d9d65c8e1ca2b4ee3f23f2c57c53bd04 (patch) | |
tree | 3679247d65bdc278a22f994be9639b786f2762bd /tokio/tests/io_read_to_end.rs | |
parent | 64343f1b786b386bb4fbd6169fc4850cce9e245a (diff) |
tokio: add AsyncReadExt::read_to_end (#1279)
Diffstat (limited to 'tokio/tests/io_read_to_end.rs')
-rw-r--r-- | tokio/tests/io_read_to_end.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tokio/tests/io_read_to_end.rs b/tokio/tests/io_read_to_end.rs new file mode 100644 index 00000000..ac089625 --- /dev/null +++ b/tokio/tests/io_read_to_end.rs @@ -0,0 +1,40 @@ +#![deny(warnings, rust_2018_idioms)] +#![feature(async_await)] + +use tokio::io::{AsyncRead, AsyncReadExt}; +use tokio_test::assert_ok; + +use std::pin::Pin; +use std::task::{Context, Poll}; +use std::{cmp, io}; + +#[tokio::test] +async fn read_to_end() { + struct Rd { + val: &'static [u8], + } + + impl AsyncRead for Rd { + fn poll_read( + mut self: Pin<&mut Self>, + _cx: &mut Context<'_>, + buf: &mut [u8], + ) -> Poll<io::Result<usize>> { + let me = &mut *self; + let len = cmp::min(buf.len(), me.val.len()); + + buf[..len].copy_from_slice(&me.val[..len]); + me.val = &me.val[len..]; + Poll::Ready(Ok(len)) + } + } + + let mut buf = vec![]; + let mut rd = Rd { + val: b"hello world", + }; + + let n = assert_ok!(rd.read_to_end(&mut buf).await); + assert_eq!(n, 11); + assert_eq!(buf[..], b"hello world"[..]); +} |