Files
owlen/crates/owlen-tui/tests/state_tests.rs

60 lines
1.7 KiB
Rust

use owlen_tui::commands;
use owlen_tui::state::CommandPalette;
#[test]
fn palette_tracks_buffer_and_suggestions() {
let mut palette = CommandPalette::new();
assert_eq!(palette.buffer(), "");
assert!(palette.suggestions().is_empty());
palette.set_buffer("mo");
assert_eq!(palette.buffer(), "mo");
assert!(!palette.suggestions().is_empty());
palette.push_char('d');
assert_eq!(palette.buffer(), "mod");
assert!(!palette.suggestions().is_empty());
palette.pop_char();
assert_eq!(palette.buffer(), "mo");
}
#[test]
fn palette_selection_wraps_safely() {
let mut palette = CommandPalette::new();
palette.set_buffer("m");
let suggestions = palette.suggestions().len();
assert!(suggestions > 0);
palette.select_previous();
assert_eq!(palette.selected_index(), 0);
for _ in 0..suggestions * 2 {
palette.select_next();
}
assert!(palette.selected_index() < palette.suggestions().len());
}
#[test]
fn palette_apply_selected_updates_buffer() {
let mut palette = CommandPalette::new();
palette.set_buffer("mo");
palette.select_next();
let selected = palette.apply_selected().expect("suggestion");
assert_eq!(palette.buffer(), selected);
assert!(selected.starts_with("m"));
}
#[test]
fn command_catalog_contains_expected_aliases() {
let mut keywords: Vec<&str> = Vec::new();
for descriptor in commands::catalog() {
keywords.extend_from_slice(descriptor.keywords());
}
assert!(keywords.contains(&"model"));
assert!(keywords.contains(&"open"));
assert!(keywords.contains(&"close"));
assert!(keywords.contains(&"sessions"));
assert!(keywords.contains(&"new"));
}