use escriba_command::{CommandError, CommandRegistry};
use escriba_madoguchi::FakeSnapshot;
const DEFAULT_RC: &str = include_str!("../configs/blnvim-defaults.lisp");
#[test]
fn the_shipped_aliases_that_name_a_registered_command_now_dispatch() {
let mut plan = escriba_lisp::apply_source(DEFAULT_RC).expect("defaults parse");
plan.merge(
escriba::catalog_bundle::bundled_plan_excluding(&Default::default())
.expect("bundled catalog parses"),
);
let mut reg = CommandRegistry::default_set();
escriba_lisp::apply_plan_to_commands(&plan, &mut reg);
let snap = FakeSnapshot::default();
let mut unhandled = Vec::new();
let mut dispatched = 0usize;
for name in reg.names() {
match reg.run(name, &snap, &[]) {
Ok(_) => dispatched += 1,
Err(CommandError::Unhandled(sym)) => unhandled.push(sym),
Err(_) => {}
}
}
assert!(
!unhandled.iter().any(|s| s == "comment.toggle-line"),
"`comment.toggle-line` is a registered native — an alias naming it \
must reach it. Still unhandled: {unhandled:?}",
);
assert!(
dispatched > 0,
"some command must dispatch, or this test proves nothing",
);
unhandled.sort();
unhandled.dedup();
let expected: Vec<String> = UNHANDLED_ALIASES.iter().map(|s| (*s).to_string()).collect();
assert_eq!(
unhandled, expected,
"the unhandled-alias inventory moved.\n\
Wiring a subsystem? Remove its entries from UNHANDLED_ALIASES.\n\
Added a plugin? Its action must either resolve or be listed.\n\
dispatched={dispatched}",
);
}
const UNHANDLED_ALIASES: &[&str] = &[
"ai.chat",
"ai.inline",
"autopairs.toggle",
"cmp.toggle",
"colorizer.toggle",
"comment.toggle-context-aware",
"dap.continue",
"dap.toggle-breakpoint",
"git.diff",
"git.status",
"indent.toggle",
"leap.forward",
"lsp.format",
"lsp.info",
"lsp.outline",
"lsp.restart",
"lsp.signature",
"markdown.toggle-render",
"mason.install",
"mason.open",
"noice.dismiss",
"notify.history",
"snacks.dashboard",
"snacks.zen",
"task.run",
"task.toggle",
"test.run-nearest",
"test.toggle-summary",
"todo.quickfix",
"tree.find-file",
"tree.toggle",
"treesitter.install",
"treesitter.playground",
"treesitter.update",
"ts-autotag.toggle",
"ts-context.toggle",
"whichkey.show",
];