#[cfg(test)]
mod tests {
use std::env;
use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
use crate::appdata::WindowFocus;
use crate::keyboard::handle_master_key;
use crate::filesystem::get_string_abs_path;
#[test]
fn test_full_key_event_loop_key_handler() {
let mut app = crate::app::App::new();
app.starting_dir = "/".to_string();
app.init().expect("init failed");
app.window_focus = WindowFocus::Tree;
let key_event = KeyEvent::new(KeyCode::Char('~'), KeyModifiers::NONE);
let master_handled = handle_master_key(&mut app, key_event);
assert!(!master_handled, "tilde should NOT be handled by master_key");
use crate::keyboard::on_key_tree;
on_key_tree(&mut app, key_event);
let new_path = get_string_abs_path(&app.parent_file_nodes);
let home = env::var("HOME").expect("HOME not set");
assert!(
new_path.starts_with(&home),
"on_key_tree should call go_to_home for tilde"
);
}
#[test]
fn test_key_routing_no_error_state() {
let mut app = crate::app::App::new();
app.starting_dir = "/".to_string();
app.init().expect("init failed");
assert!(!app.has_error(), "should have no error");
assert!(!app.has_info(), "should have no info");
let key_event = KeyEvent::new(KeyCode::Char('~'), KeyModifiers::NONE);
let result = handle_master_key(&mut app, key_event);
assert!(!result, "master_key should return false for tilde");
}
#[test]
fn test_key_routing_with_error_state() {
let mut app = crate::app::App::new();
app.starting_dir = "/".to_string();
app.init().expect("init failed");
app.show_error("test error".to_string());
assert!(app.has_error(), "should have error");
let key_event = KeyEvent::new(KeyCode::Enter, KeyModifiers::NONE);
let result = handle_master_key(&mut app, key_event);
assert!(result, "master_key should return true for Enter when error");
assert!(!app.has_error(), "error should be cleared");
}
#[test]
fn test_key_routing_with_info_state() {
let mut app = crate::app::App::new();
app.starting_dir = "/".to_string();
app.init().expect("init failed");
app.show_info("test info".to_string());
assert!(app.has_info(), "should have info");
let key_event = KeyEvent::new(KeyCode::Down, KeyModifiers::NONE);
let result = handle_master_key(&mut app, key_event);
assert!(result, "master_key should return true for Down when info");
}
}