1 use futures::executor::block_on;
2 use futures::future::{Future, FutureExt};
3 use futures::io::{AsyncBufReadExt, Cursor};
4 use futures::stream::{self, StreamExt, TryStreamExt};
5 use futures::task::Poll;
6 use futures_test::io::AsyncReadTestExt;
7 use futures_test::task::noop_context;
8 
run<F: Future + Unpin>(mut f: F) -> F::Output9 fn run<F: Future + Unpin>(mut f: F) -> F::Output {
10     let mut cx = noop_context();
11     loop {
12         if let Poll::Ready(x) = f.poll_unpin(&mut cx) {
13             return x;
14         }
15     }
16 }
17 
18 #[test]
read_until()19 fn read_until() {
20     let mut buf = Cursor::new(b"12");
21     let mut v = Vec::new();
22     assert_eq!(block_on(buf.read_until(b'3', &mut v)).unwrap(), 2);
23     assert_eq!(v, b"12");
24 
25     let mut buf = Cursor::new(b"1233");
26     let mut v = Vec::new();
27     assert_eq!(block_on(buf.read_until(b'3', &mut v)).unwrap(), 3);
28     assert_eq!(v, b"123");
29     v.truncate(0);
30     assert_eq!(block_on(buf.read_until(b'3', &mut v)).unwrap(), 1);
31     assert_eq!(v, b"3");
32     v.truncate(0);
33     assert_eq!(block_on(buf.read_until(b'3', &mut v)).unwrap(), 0);
34     assert_eq!(v, []);
35 }
36 
37 #[test]
maybe_pending()38 fn maybe_pending() {
39     let mut buf = b"12".interleave_pending();
40     let mut v = Vec::new();
41     assert_eq!(run(buf.read_until(b'3', &mut v)).unwrap(), 2);
42     assert_eq!(v, b"12");
43 
44     let mut buf = stream::iter(vec![&b"12"[..], &b"33"[..], &b"3"[..]])
45         .map(Ok)
46         .into_async_read()
47         .interleave_pending();
48     let mut v = Vec::new();
49     assert_eq!(run(buf.read_until(b'3', &mut v)).unwrap(), 3);
50     assert_eq!(v, b"123");
51     v.clear();
52     assert_eq!(run(buf.read_until(b'3', &mut v)).unwrap(), 1);
53     assert_eq!(v, b"3");
54     v.clear();
55     assert_eq!(run(buf.read_until(b'3', &mut v)).unwrap(), 1);
56     assert_eq!(v, b"3");
57     v.clear();
58     assert_eq!(run(buf.read_until(b'3', &mut v)).unwrap(), 0);
59     assert_eq!(v, []);
60 }
61