| 1 | use futures::executor::block_on_stream; |
| 2 | use futures::stream::{self, StreamExt}; |
| 3 | |
| 4 | #[test] |
| 5 | fn panic_in_the_middle_of_the_stream() { |
| 6 | let stream = stream::iter(vec![Some(10), None, Some(11)]); |
| 7 | |
| 8 | // panic on second element |
| 9 | let stream_panicking = stream.map(|o| o.unwrap()); |
| 10 | let mut iter = block_on_stream(stream_panicking.catch_unwind()); |
| 11 | |
| 12 | assert_eq!(10, iter.next().unwrap().ok().unwrap()); |
| 13 | assert!(iter.next().unwrap().is_err()); |
| 14 | assert!(iter.next().is_none()); |
| 15 | } |
| 16 | |
| 17 | #[test] |
| 18 | fn no_panic() { |
| 19 | let stream = stream::iter(vec![10, 11, 12]); |
| 20 | |
| 21 | let mut iter = block_on_stream(stream.catch_unwind()); |
| 22 | |
| 23 | assert_eq!(10, iter.next().unwrap().ok().unwrap()); |
| 24 | assert_eq!(11, iter.next().unwrap().ok().unwrap()); |
| 25 | assert_eq!(12, iter.next().unwrap().ok().unwrap()); |
| 26 | assert!(iter.next().is_none()); |
| 27 | } |
| 28 | |