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)
|
||||
}
|
||||
|
||||
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]
|
||||
#[serial]
|
||||
fn classify_device_recognizes_keyboard_and_mouse_capabilities() {
|
||||
@ -89,4 +95,42 @@ mod inputs_contract {
|
||||
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