use engine_io_parser::binary::decoder;
use engine_io_parser::binary::encoder;
use engine_io_parser::packet::*;
use std::borrow::Cow;
#[test]
fn decodes_packet() {
let result = decoder::decode_packet(b"\x01asdf abc").unwrap();
assert_eq!(
result,
Packet {
packet_type: PacketType::Close,
data: "asdf abc".as_bytes().into(),
}
);
}
#[test]
fn decodes_binary_payload() {
let result = decoder::decode_payload(b"\x01\x08\xff\x04qqq 123").unwrap();
assert_eq!(result.len(), 1);
assert_eq!(
result[0],
Packet {
packet_type: PacketType::Message,
data: "qqq 123".as_bytes().into(),
}
);
}
#[test]
fn decodes_multi_payload() {
let result = decoder::decode_payload(
b"\x01\x09\xff\x04qqq 1235\x01\x07\xff\x02abcd12\x01\x0c\xff\x05abcdq\nwerzx",
)
.unwrap();
assert_eq!(result.len(), 3);
let packet1 = &result[0];
let packet2 = &result[1];
let packet3 = &result[2];
assert_eq!(packet1.packet_type, PacketType::Message);
assert_eq!(packet2.packet_type, PacketType::Ping);
assert_eq!(packet3.packet_type, PacketType::Upgrade);
assert_eq!(packet1.data, "qqq 1235".as_bytes().into());
assert_eq!(packet2.data, "abcd12".as_bytes().into());
assert_eq!(packet3.data, "abcdq\nwerzx".as_bytes().into());
}
#[test]
fn decodes_mixed_payload() {
assert_eq!(
decoder::decode_payload(b"\x00\x04\xff\x34\xe2\x82\xac\x01\x05\xff\x04\x01\x02\x03\x04"),
Ok(vec![
Packet {
packet_type: PacketType::Message,
data: "€".into(),
},
Packet {
packet_type: PacketType::Message,
data: PacketData::Binary(Cow::Owned(vec![1u8, 2u8, 3u8, 4u8]))
}
])
);
}
#[test]
fn encodes_binary_packet() {
assert_eq!(
encoder::encode_packet(&Packet {
packet_type: PacketType::Upgrade,
data: "hello world".as_bytes().into(),
}),
b"\x05hello world"
);
assert_eq!(
encoder::encode_packet(&Packet {
packet_type: PacketType::Message,
data: PacketData::Binary(Cow::Owned(vec![16u8, 8u8, 4u8, 2u8])),
}),
b"\x04\x10\x08\x04\x02"
);
}
#[test]
fn encodes_binary_payload() {
assert_eq!(
encoder::encode_payload(&[Packet {
packet_type: PacketType::Message,
data: PacketData::Binary(Cow::Owned(vec![0x54, 0x32, 0x18, 0x22, 0x44, 0x58])),
}]),
b"\x01\x07\xff\x04\x54\x32\x18\x22\x44\x58"
)
}
#[test]
fn encodes_plaintext_binary_payload() {
assert_eq!(
encoder::encode_payload(&[
Packet {
packet_type: PacketType::Message,
data: "hello".into(),
},
Packet {
packet_type: PacketType::Ping,
data: "€".into()
}
]),
b"\x00\x06\xff\x34hello\x00\x04\xff\x32\xe2\x82\xac"
)
}
#[test]
fn encodes_mixed_binary_payload() {
assert_eq!(
encoder::encode_payload(&[
Packet {
packet_type: PacketType::Message,
data: "€".into(),
},
Packet {
packet_type: PacketType::Message,
data: PacketData::Binary(Cow::Owned(vec![1, 2, 3, 4]))
}
]),
b"\x00\x04\xff\x34\xe2\x82\xac\x01\x05\xff\x04\x01\x02\x03\x04"
);
}