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() {
let owed: Vec<&str> = COMMANDS
.iter()
.map(|row| row.verb)
.filter(|verb| {
!super::super::Namespace::from_arg(verb).is_some_and(super::super::Namespace::owns_argv)
})
.collect();
assert!(!owed.is_empty(), "the roster derived nothing");
for verb in owed {
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, namespace) in super::super::namespace::NAMESPACES {
if namespace.owns_argv() {
assert_eq!(answer(&argv(&["yog", word, "--help"])), None, "{word}");
} else {
let page = answer(&argv(&["yog", word, "--help"])).unwrap_or_default();
assert!(page.starts_with(&format!("yog {word}")), "{word}: {page}");
}
}
for word in ["gesture", "litany", "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 the_mint_page_states_the_boot_mint_and_its_own_word() {
let mint = crate::wire::provision::verb::SUBCMD;
let text = answer(&argv(&["yog", mint, "--help"])).unwrap_or_default();
assert!(text.contains("boot"), "the boot mint is unstated: {text}");
assert!(text.contains("loopback"), "its aim is unstated: {text}");
assert!(text.contains(mint), "the explicit act is unnamed: {text}");
assert!(
!text.contains("silently"),
"the retired claim — a listener absent without a word — is gone"
);
}
#[test]
fn the_mint_page_names_every_setting_it_reads() {
let mint = crate::wire::provision::verb::SUBCMD;
let text = answer(&argv(&["yog", mint, "--help"])).unwrap_or_default();
for reading in crate::wire::provision::verb::READS {
assert!(text.contains(reading), "{reading} is undocumented: {text}");
}
assert!(text.contains("/enroll"), "the enrolment is unnamed: {text}");
}
#[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:?}");
}
}