Files
k-frame/crates/protocol/tests/round_trip_tests.rs

100 lines
3.2 KiB
Rust

use protocol::{
ClientMessage, ServerMessage, WidgetDescriptor, WireAlignItems, WireContainerNode,
WireDirection, WireDisplayHint, WireDisplayHintKind, WireJustifyContent, WireKeyValue,
WireLayoutChild, WireLayoutNode, WireSizing, WireValue, WireWidgetState,
decode_client_message, decode_server_message, encode, encode_client,
};
#[test]
fn screen_update_round_trips() {
let msg = ServerMessage::ScreenUpdate {
layout: WireLayoutNode::Container(WireContainerNode {
direction: WireDirection::Row,
gap: 4,
padding: 2,
justify_content: WireJustifyContent::Start,
align_items: WireAlignItems::Stretch,
children: vec![
WireLayoutChild {
sizing: WireSizing::Flex(1),
node: WireLayoutNode::Leaf(1),
},
WireLayoutChild {
sizing: WireSizing::Fixed(80),
node: WireLayoutNode::Leaf(2),
},
],
}),
widgets: vec![WidgetDescriptor {
id: 1,
display_hint: WireDisplayHint::new(WireDisplayHintKind::IconValue),
state: WireWidgetState {
data: vec![
WireKeyValue {
key: "temperature".into(),
value: WireValue::String("5.4°C".into()),
},
WireKeyValue {
key: "icon".into(),
value: WireValue::String("cloud_rain".into()),
},
],
error: None,
},
}],
};
let frame = encode(&msg).unwrap();
let payload = &frame[4..];
let decoded = decode_server_message(payload).unwrap();
assert_eq!(msg, decoded);
}
#[test]
fn data_update_round_trips() {
let msg = ServerMessage::DataUpdate {
widgets: vec![WidgetDescriptor {
id: 3,
display_hint: WireDisplayHint::new(WireDisplayHintKind::TextBlock),
state: WireWidgetState {
data: vec![WireKeyValue {
key: "body".into(),
value: WireValue::String("Breaking news...".into()),
}],
error: None,
},
}],
};
let frame = encode(&msg).unwrap();
let payload = &frame[4..];
let decoded = decode_server_message(payload).unwrap();
assert_eq!(msg, decoded);
}
#[test]
fn server_heartbeat_round_trips() {
let msg = ServerMessage::Heartbeat;
let frame = encode(&msg).unwrap();
let payload = &frame[4..];
let decoded = decode_server_message(payload).unwrap();
assert_eq!(msg, decoded);
}
#[test]
fn client_heartbeat_round_trips() {
let msg = ClientMessage::Heartbeat;
let frame = encode_client(&msg).unwrap();
let payload = &frame[4..];
let decoded = decode_client_message(payload).unwrap();
assert_eq!(msg, decoded);
}
#[test]
fn frame_has_correct_length_prefix() {
let msg = ServerMessage::Heartbeat;
let frame = encode(&msg).unwrap();
let len = u32::from_be_bytes([frame[0], frame[1], frame[2], frame[3]]) as usize;
assert_eq!(len, frame.len() - 4);
}