|
| 1 | +use async_sse::{decode, encode, Event}; |
| 2 | +use async_std::io::Cursor; |
| 3 | +use async_std::prelude::*; |
| 4 | +use std::time::Duration; |
| 5 | + |
| 6 | +/// Assert a Message. |
| 7 | +fn assert_message(event: &Event, name: &str, data: &str, id: Option<&'static str>) { |
| 8 | + assert!(event.is_message()); |
| 9 | + if let Event::Message(msg) = event { |
| 10 | + assert_eq!(msg.id(), &id.map(|s| s.to_owned())); |
| 11 | + assert_eq!(msg.name(), name); |
| 12 | + assert_eq!( |
| 13 | + String::from_utf8(msg.data().to_owned()).unwrap(), |
| 14 | + String::from_utf8(data.as_bytes().to_owned()).unwrap() |
| 15 | + ); |
| 16 | + } |
| 17 | +} |
| 18 | + |
| 19 | +/// Assert a Message. |
| 20 | +fn assert_retry(event: &Event, dur: u64) { |
| 21 | + assert!(event.is_retry()); |
| 22 | + let expected = Duration::from_secs_f64(dur as f64); |
| 23 | + if let Event::Retry(dur) = event { |
| 24 | + assert_eq!(dur, &expected); |
| 25 | + } |
| 26 | +} |
| 27 | +#[async_std::test] |
| 28 | +async fn encode_message() -> http_types::Result<()> { |
| 29 | + let buf = Cursor::new(vec![]); |
| 30 | + let mut encoder = encode(buf); |
| 31 | + encoder.send("cat", b"chashu", None).await?; |
| 32 | + let mut buf = encoder.into_writer(); |
| 33 | + buf.set_position(0); |
| 34 | + |
| 35 | + let mut reader = decode(buf); |
| 36 | + let event = reader.next().await.unwrap()?; |
| 37 | + assert_message(&event, "cat", "chashu", None); |
| 38 | + Ok(()) |
| 39 | +} |
| 40 | + |
| 41 | +#[async_std::test] |
| 42 | +async fn encode_message_with_id() -> http_types::Result<()> { |
| 43 | + let buf = Cursor::new(vec![]); |
| 44 | + let mut encoder = encode(buf); |
| 45 | + encoder.send("cat", b"chashu", Some("0")).await?; |
| 46 | + let mut buf = encoder.into_writer(); |
| 47 | + buf.set_position(0); |
| 48 | + |
| 49 | + let mut reader = decode(buf); |
| 50 | + let event = reader.next().await.unwrap()?; |
| 51 | + assert_message(&event, "cat", "chashu", Some("0")); |
| 52 | + Ok(()) |
| 53 | +} |
| 54 | + |
| 55 | +#[async_std::test] |
| 56 | +async fn encode_retry() -> http_types::Result<()> { |
| 57 | + let buf = Cursor::new(vec![]); |
| 58 | + let mut encoder = encode(buf); |
| 59 | + encoder.send_retry(Duration::from_secs(12), None).await?; |
| 60 | + let mut buf = encoder.into_writer(); |
| 61 | + buf.set_position(0); |
| 62 | + |
| 63 | + let mut reader = decode(buf); |
| 64 | + let event = reader.next().await.unwrap()?; |
| 65 | + assert_retry(&event, 12); |
| 66 | + Ok(()) |
| 67 | +} |
0 commit comments