testing: expand input aggregator state-machine contracts
This commit is contained in:
parent
e44ab7feb0
commit
28d490c5eb
@ -78,6 +78,12 @@ mod inputs_contract {
|
|||||||
open_virtual_device(&mut vdev)
|
open_virtual_device(&mut vdev)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn new_aggregator() -> InputAggregator {
|
||||||
|
let (kbd_tx, _) = tokio::sync::broadcast::channel(32);
|
||||||
|
let (mou_tx, _) = tokio::sync::broadcast::channel(32);
|
||||||
|
InputAggregator::new(false, kbd_tx, mou_tx, None)
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[serial]
|
#[serial]
|
||||||
fn classify_device_recognizes_keyboard_and_mouse_capabilities() {
|
fn classify_device_recognizes_keyboard_and_mouse_capabilities() {
|
||||||
@ -89,4 +95,42 @@ mod inputs_contract {
|
|||||||
assert!(matches!(classify_device(&mouse), DeviceKind::Mouse));
|
assert!(matches!(classify_device(&mouse), DeviceKind::Mouse));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn toggle_grab_switches_into_local_control_mode() {
|
||||||
|
let mut agg = new_aggregator();
|
||||||
|
agg.toggle_grab();
|
||||||
|
assert!(agg.pending_release);
|
||||||
|
assert!(!agg.released);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn toggle_grab_switches_back_to_remote_control_when_released() {
|
||||||
|
let mut agg = new_aggregator();
|
||||||
|
agg.released = true;
|
||||||
|
agg.pending_release = false;
|
||||||
|
agg.toggle_grab();
|
||||||
|
assert!(!agg.released);
|
||||||
|
assert!(!agg.pending_release);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn toggle_grab_ignores_requests_while_release_is_pending() {
|
||||||
|
let mut agg = new_aggregator();
|
||||||
|
agg.pending_release = true;
|
||||||
|
agg.toggle_grab();
|
||||||
|
assert!(agg.pending_release);
|
||||||
|
assert!(!agg.released);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test(flavor = "current_thread")]
|
||||||
|
async fn run_returns_once_pending_kill_chord_is_released() {
|
||||||
|
let mut agg = new_aggregator();
|
||||||
|
agg.pending_kill = true;
|
||||||
|
|
||||||
|
let result = tokio::time::timeout(Duration::from_millis(200), agg.run()).await;
|
||||||
|
assert!(result.is_ok(), "run should resolve instead of looping forever");
|
||||||
|
assert!(result.expect("timeout result").is_ok());
|
||||||
|
assert!(agg.released);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user