60 lines
1.7 KiB
Rust
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"));
|
|
}
|