summaryrefslogtreecommitdiffstats
path: root/tokio/tests/io_lines.rs
diff options
context:
space:
mode:
authorTaiki Endo <te316e89@gmail.com>2019-07-15 15:24:26 +0900
committerSean McArthur <sean@seanmonstar.com>2019-07-15 11:52:13 -0700
commit6742816e78dad0d2ae8137671cc409258df70acf (patch)
tree3186762cdacf914c1401311c8c07b92d95547b26 /tokio/tests/io_lines.rs
parentab040bb498c96623f413efdc9fc16c46f72f9c63 (diff)
tokio: add AsyncBufReadExt::lines
Diffstat (limited to 'tokio/tests/io_lines.rs')
-rw-r--r--tokio/tests/io_lines.rs53
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());
+}