From 0cfa120ba8c93822d6a84f2e7392008d84622010 Mon Sep 17 00:00:00 2001 From: Taiki Endo Date: Mon, 15 Jul 2019 15:21:09 +0900 Subject: tokio: add AsyncBufReadExt::read_until --- tokio/tests/io_read_until.rs | 56 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 tokio/tests/io_read_until.rs (limited to 'tokio/tests/io_read_until.rs') diff --git a/tokio/tests/io_read_until.rs b/tokio/tests/io_read_until.rs new file mode 100644 index 00000000..22945f55 --- /dev/null +++ b/tokio/tests/io_read_until.rs @@ -0,0 +1,56 @@ +#![deny(warnings, rust_2018_idioms)] +#![feature(async_await)] + +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 read_until() { + struct Rd { + val: &'static [u8], + } + + impl AsyncRead for Rd { + fn poll_read( + self: Pin<&mut Self>, + _: &mut Context<'_>, + _: &mut [u8], + ) -> Poll> { + unimplemented!() + } + } + + impl AsyncBufRead for Rd { + fn poll_fill_buf<'a>( + self: Pin<&'a mut Self>, + _: &mut Context<'_>, + ) -> Poll> { + Poll::Ready(Ok(self.val)) + } + + fn consume(mut self: Pin<&mut Self>, amt: usize) { + self.val = &self.val[amt..]; + } + } + + let mut buf = vec![]; + let mut rd = Rd { + val: b"hello world", + }; + + let n = assert_ok!(rd.read_until(b' ', &mut buf).await); + assert_eq!(n, 6); + assert_eq!(buf, b"hello "); + buf.clear(); + let n = assert_ok!(rd.read_until(b' ', &mut buf).await); + assert_eq!(n, 5); + assert_eq!(buf, b"world"); + buf.clear(); + let n = assert_ok!(rd.read_until(b' ', &mut buf).await); + assert_eq!(n, 0); + assert_eq!(buf, []); +} -- cgit v1.2.3