alf_tui 0.5.0

A smolderingly-nimble Rust TUI to rediscover your custom shell.
Documentation
use super::*;

#[test]
fn test_enter_search_mode_sets_search_input_mode() {
   let mut app = make_app();
   app.enter_search_mode();
   assert_eq!(app.input_mode(), InputMode::Search);
}

#[test]
fn test_exit_search_keep_query_returns_to_normal() {
   let mut app = make_app();
   app.enter_search_mode();
   app.search_insert_char('a');
   app.exit_search_keep_query();
   assert_eq!(app.input_mode(), InputMode::Normal);
   assert_eq!(app.search_query(), "a", "Query should be preserved");
}

#[test]
fn test_exit_search_clear_query_returns_to_normal_and_clears() {
   let mut app = make_app();
   app.enter_search_mode();
   app.search_insert_char('a');
   app.exit_search_clear_query();
   assert_eq!(app.input_mode(), InputMode::Normal);
   assert_eq!(app.search_query(), "", "Query should be cleared");
}

#[test]
fn test_search_insert_char_filters_visible_entries() {
   let mut app = make_app();
   app.set_search_query("alpha".to_string());
   assert_eq!(app.visible_indices().len(), 1);
}

#[test]
fn test_search_delete_char_updates_visible_entries() {
   let mut app = make_app();
   app.set_search_query("alpha".to_string());
   for _ in 0.."alpha".len() {
      app.search_delete_char();
   }
   assert_eq!(app.search_query(), "");
   assert_eq!(app.visible_indices().len(), 4);
}

#[test]
fn test_set_search_query_filters_by_name() {
   let mut app = make_app();
   app.set_search_query("gamma".to_string());
   assert_eq!(app.visible_indices().len(), 1);
   assert_eq!(app.selected_entry().unwrap().name, "gamma");
}

#[test]
fn test_set_search_query_no_match_empties_visible() {
   let mut app = make_app();
   app.set_search_query("zzznomatch".to_string());
   assert_eq!(app.visible_indices().len(), 0);
}

#[test]
fn test_clear_search_restores_all_entries() {
   let mut app = make_app();
   app.set_search_query("alpha".to_string());
   app.clear_search();
   assert_eq!(app.search_query(), "");
   assert_eq!(app.visible_indices().len(), 4);
}

#[test]
fn test_search_cursor_left_and_right() {
   let mut app = make_app();
   app.set_search_query("abc".to_string());
   assert_eq!(app.cursor_position(), 3);
   app.search_cursor_left();
   assert_eq!(app.cursor_position(), 2);
   app.search_cursor_right();
   assert_eq!(app.cursor_position(), 3);
}