40 lines
1.1 KiB
Rust
40 lines
1.1 KiB
Rust
use client::config::binds::config::Config;
|
|
use client::input::engine::{InputEngine, InputContext, InputOutcome};
|
|
use client::modes::handlers::mode_manager::AppMode;
|
|
use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
|
|
|
|
fn ctx() -> InputContext {
|
|
InputContext {
|
|
app_mode: AppMode::General,
|
|
overlay_active: false,
|
|
allow_navigation_capture: true,
|
|
}
|
|
}
|
|
|
|
fn key(c: char) -> KeyEvent {
|
|
KeyEvent::new(KeyCode::Char(c), KeyModifiers::empty())
|
|
}
|
|
|
|
#[test]
|
|
fn engine_collects_space_b_r() {
|
|
let toml_str = r#"
|
|
[keybindings]
|
|
revert = ["space+b+r"]
|
|
"#;
|
|
let config: Config = toml::from_str(toml_str).unwrap();
|
|
|
|
let mut eng = InputEngine::new(400, 5_000);
|
|
|
|
// space -> Pending (leader started)
|
|
let out1 = eng.process_key(key(' '), &ctx(), &config);
|
|
assert!(matches!(out1, InputOutcome::Pending));
|
|
|
|
// b -> Pending (prefix)
|
|
let out2 = eng.process_key(key('b'), &ctx(), &config);
|
|
assert!(matches!(out2, InputOutcome::Pending));
|
|
|
|
// r -> Action(revert)
|
|
let out3 = eng.process_key(key('r'), &ctx(), &config);
|
|
assert!(matches!(out3, InputOutcome::Action(_)));
|
|
}
|