diff options
author | Carl Lerche <me@carllerche.com> | 2019-06-26 14:42:19 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-26 14:42:19 -0700 |
commit | 11f6b2862fc458204aabbed9a6f919c65215aeb5 (patch) | |
tree | 544c19e0b13a21f3eeb66e2eff910f37511c2b71 /tokio/tests/io_read_exact.rs | |
parent | 8404f796ac99504ac9fbbce898e78bb02f05804a (diff) |
tokio: move I/O helpers to ext traits (#1204)
Refs: #1203
Diffstat (limited to 'tokio/tests/io_read_exact.rs')
-rw-r--r-- | tokio/tests/io_read_exact.rs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/tokio/tests/io_read_exact.rs b/tokio/tests/io_read_exact.rs new file mode 100644 index 00000000..94e35514 --- /dev/null +++ b/tokio/tests/io_read_exact.rs @@ -0,0 +1,46 @@ +#![deny(warnings, rust_2018_idioms)] + +use tokio::io::{AsyncRead, AsyncReadExt}; +use tokio_test::assert_ready_ok; +use tokio_test::task::MockTask; + +use pin_utils::pin_mut; +use std::future::Future; +use std::io; +use std::pin::Pin; +use std::task::{Context, Poll}; + +#[test] +fn read_exact() { + struct Rd { + val: &'static [u8; 11], + } + + 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 = buf.len(); + + buf[..].copy_from_slice(&me.val[..len]); + Poll::Ready(Ok(buf.len())) + } + } + + let mut buf = Box::new([0; 8]); + let mut task = MockTask::new(); + + task.enter(|cx| { + let mut rd = Rd { val: b"hello world" }; + + let read = rd.read_exact(&mut buf[..]); + pin_mut!(read); + + let n = assert_ready_ok!(read.poll(cx)); + assert_eq!(n, 8); + assert_eq!(buf[..], b"hello wo"[..]); + }); +} |