diff options
author | Taiki Endo <te316e89@gmail.com> | 2019-07-15 15:24:26 +0900 |
---|---|---|
committer | Sean McArthur <sean@seanmonstar.com> | 2019-07-15 11:52:13 -0700 |
commit | 6742816e78dad0d2ae8137671cc409258df70acf (patch) | |
tree | 3186762cdacf914c1401311c8c07b92d95547b26 /tokio/tests/io_lines.rs | |
parent | ab040bb498c96623f413efdc9fc16c46f72f9c63 (diff) |
tokio: add AsyncBufReadExt::lines
Diffstat (limited to 'tokio/tests/io_lines.rs')
-rw-r--r-- | tokio/tests/io_lines.rs | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/tokio/tests/io_lines.rs b/tokio/tests/io_lines.rs new file mode 100644 index 00000000..02ce6149 --- /dev/null +++ b/tokio/tests/io_lines.rs @@ -0,0 +1,53 @@ +#![deny(warnings, rust_2018_idioms)] +#![feature(async_await)] + +use futures_util::StreamExt; +use tokio::io::{AsyncBufRead, AsyncBufReadExt, AsyncRead}; +use tokio_test::assert_ok; + +use std::io; +use std::pin::Pin; +use std::task::{Context, Poll}; + +#[tokio::test] +async fn lines() { + struct Rd { + val: &'static [u8], + } + + impl AsyncRead for Rd { + fn poll_read( + self: Pin<&mut Self>, + _: &mut Context<'_>, + _: &mut [u8], + ) -> Poll<io::Result<usize>> { + unimplemented!() + } + } + + impl AsyncBufRead for Rd { + fn poll_fill_buf<'a>( + self: Pin<&'a mut Self>, + _: &mut Context<'_>, + ) -> Poll<io::Result<&'a [u8]>> { + Poll::Ready(Ok(self.val)) + } + + fn consume(mut self: Pin<&mut Self>, amt: usize) { + self.val = &self.val[amt..]; + } + } + + let rd = Rd { + val: b"hello\r\nworld\n\n", + }; + let mut st = rd.lines(); + + let b = assert_ok!(st.next().await.unwrap()); + assert_eq!(b, "hello"); + let b = assert_ok!(st.next().await.unwrap()); + assert_eq!(b, "world"); + let b = assert_ok!(st.next().await.unwrap()); + assert_eq!(b, ""); + assert!(st.next().await.is_none()); +} |