larpshell 0.2.3

Ctrl+C then Ctrl+V is simply too much work. Just let an LLM rule your terminal!!
use crate::interactive::{NlshHelper, format_preview_row};
use rustyline::highlight::{CmdKind, Highlighter};

fn format_preview_row_plain(cmd_name: &str, typed_len: usize, description: &str) -> String {
    colored::control::set_override(false);
    let r = format_preview_row(cmd_name, typed_len, description);
    strip_ansi_escapes::strip_str(&r)
}

#[test]
fn highlight_slash_prefix_colors_typed_part() {
    colored::control::set_override(true);
    let helper = NlshHelper;
    let result = helper.highlight("/pr", 3);
    assert!(result.contains("\x1b["), "expected ANSI codes in: {result}");
    assert!(result.contains("/pr"), "typed part must appear in output");
}

#[test]
fn highlight_non_slash_line_is_unchanged() {
    let helper = NlshHelper;
    let result = helper.highlight("list files", 10);
    assert_eq!(result.as_ref(), "list files");
}

#[test]
fn highlight_char_true_for_slash_line() {
    let helper = NlshHelper;
    assert!(helper.highlight_char("/api", 4, CmdKind::Other));
}

#[test]
fn highlight_char_false_for_normal_line() {
    let helper = NlshHelper;
    assert!(!helper.highlight_char("list files", 10, CmdKind::Other));
}

#[test]
fn format_preview_row_pads_to_column() {
    colored::control::set_override(false);
    let row = format_preview_row_plain("/api", 0, "configure API provider");
    assert!(row.contains("configure API provider"), "row: {row}");
    let row2 = format_preview_row_plain("/uninstall", 0, "uninstall larpshell");
    let desc_pos1 = row.find("configure").unwrap();
    let desc_pos2 = row2.find("uninstall larpshell").unwrap();
    assert_eq!(desc_pos1, desc_pos2, "descriptions must align");
}