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