#[cfg(test)]
mod tests {
use std::env;
use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
use crate::appdata::WindowFocus;
use crate::keyboard::{handle_master_key, on_key_tree};
use crate::filesystem::get_string_abs_path;
#[test]
fn test_full_loop_simulation() {
let mut app = crate::app::App::new();
app.starting_dir = "/".to_string();
app.init().expect("init failed");
app.window_focus = WindowFocus::Tree;
let state_after_init = get_string_abs_path(&app.parent_file_nodes);
assert_eq!(state_after_init, "/", "initial state should be root");
let key_event = KeyEvent::new(KeyCode::Char('~'), KeyModifiers::NONE);
let master_result = handle_master_key(&mut app, key_event);
assert!(!master_result, "tilde should NOT be handled by master_key");
on_key_tree(&mut app, key_event);
let state_after_key = get_string_abs_path(&app.parent_file_nodes);
let home = env::var("HOME").expect("HOME not set");
assert!(
state_after_key.starts_with(&home) || state_after_key == home,
"after pressing tilde, state should be home: got {}",
state_after_key
);
println!("=== FULL LOOP SIMULATION ===");
println!("Initial state (root): {}", state_after_init);
println!("After pressing ~: {}", state_after_key);
println!("=== EXPECTED: User sees home after first press ===");
}
#[test]
fn test_key_vs_determinism() {
let mut app1 = crate::app::App::new();
app1.starting_dir = "/".to_string();
app1.init().expect("init failed");
app1.window_focus = WindowFocus::Tree;
let key_event = KeyEvent::new(KeyCode::Char('~'), KeyModifiers::NONE);
on_key_tree(&mut app1, key_event);
let path1 = get_string_abs_path(&app1.parent_file_nodes);
let mut app2 = crate::app::App::new();
app2.starting_dir = "/".to_string();
app2.init().expect("init failed");
app2.window_focus = WindowFocus::Tree;
on_key_tree(&mut app2, key_event);
let path2 = get_string_abs_path(&app2.parent_file_nodes);
assert_eq!(path1, path2, "key handling should be deterministic");
}
}