use super::*;
fn argv(parts: &[&str]) -> Vec<String> {
parts.iter().map(|s| (*s).to_string()).collect()
}
#[test]
fn the_top_level_answers_help_with_the_roster() {
for spelling in ["--help", "-h", "help"] {
let page = answer(&argv(&["yog", spelling])).unwrap_or_default();
assert!(page.contains("Commands:"), "{spelling}: {page}");
}
}
#[test]
fn a_command_is_asked_about_from_either_end() {
let subcmd = crate::world::hatch::EXEC_SUBCMD;
let from_top = answer(&argv(&["yog", "help", subcmd]));
let at_command = answer(&argv(&["yog", subcmd, "--help"]));
assert_eq!(from_top, at_command);
assert!(
from_top.unwrap_or_default().contains("--cwd"),
"the page is `exec`'s own"
);
assert_eq!(
answer(&argv(&["yog", subcmd, "-h"])),
at_command,
"-h is the same ask"
);
}
#[test]
fn every_yog_subcommand_answers_at_the_command() {
for verb in [
crate::boundary::SERVE_SUBCMD,
crate::world::hatch::ENV_SUBCMD,
crate::world::hatch::EXEC_SUBCMD,
crate::control::SUBCMD,
] {
let page = answer(&argv(&["yog", verb, "--help"])).unwrap_or_default();
assert!(page.starts_with(&format!("yog {verb}")), "{verb}: {page}");
}
}
#[test]
fn a_namespace_help_is_the_tools_own_and_falls_through() {
for word in ["gesture", "lernie", "bl", "bz", "bl-delivery", "bl-tracker"] {
assert_eq!(answer(&argv(&["yog", word, "--help"])), None, "{word}");
}
for word in ["gesture", "lernie", "bl", "bz"] {
assert!(answer(&argv(&["yog", "help", word])).is_some(), "{word}");
}
}
#[test]
fn anything_that_is_not_a_help_ask_is_left_alone() {
assert_eq!(answer(&[]), None);
assert_eq!(answer(&argv(&["yog"])), None);
assert_eq!(answer(&argv(&["yog", "--editor-apply", "/co"])), None);
assert_eq!(answer(&argv(&["yog", "env"])), None);
assert_eq!(answer(&argv(&["yog", "exec", "bash"])), None);
assert_eq!(answer(&argv(&["yog", "something-else", "--help"])), None);
assert_eq!(answer(&argv(&["yog", "something-else"])), None);
}
#[test]
fn help_about_an_unknown_command_falls_back_to_the_roster() {
let page = answer(&argv(&["yog", "--help", "enhance"])).unwrap_or_default();
assert!(page.contains("Commands:"), "{page}");
}
#[test]
fn every_page_opens_with_the_word_its_dispatcher_routes_on() {
for row in COMMANDS {
assert!(
row.usage.starts_with(&format!("yog {}", row.verb)),
"{}: {}",
row.verb,
row.usage
);
assert!(!row.detail.is_empty(), "{} has no page", row.verb);
}
}
#[test]
fn the_only_unlisted_command_is_the_machine_seam() {
let unlisted: Vec<&str> = COMMANDS
.iter()
.filter(|row| row.summary.is_empty())
.map(|row| row.verb)
.collect();
assert_eq!(unlisted, vec![crate::control::SUBCMD]);
}
#[test]
fn a_discovery_probe_is_the_whole_argv_or_it_is_not_one() {
for flag in ["--help", "-h", "--version", "-V", "--skill"] {
assert!(is_discovery(&argv(&[flag])), "{flag}");
}
for not in [
vec![],
vec!["list"],
vec!["--system", "--help"],
vec!["--help", "close"],
vec!["--", "--help"],
vec!["--helpful"],
] {
assert!(!is_discovery(&argv(¬)), "{not:?}");
}
}