From f1b8a318d9d65c8e1ca2b4ee3f23f2c57c53bd04 Mon Sep 17 00:00:00 2001 From: Carl Lerche Date: Tue, 9 Jul 2019 16:17:58 -0700 Subject: tokio: add AsyncReadExt::read_to_end (#1279) --- tokio/tests/io_read_to_end.rs | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 tokio/tests/io_read_to_end.rs (limited to 'tokio/tests/io_read_to_end.rs') 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> { + 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"[..]); +} -- cgit v1.2.3