use sva_cli::help_text;
#[test]
fn help_states_the_sample_rate_default() {
let page = help_text();
assert!(
page.contains(&format!("Default {}.", sva_engine::DEFAULT_SAMPLE_RATE)),
"the rate a render actually uses: {page}"
);
}
#[test]
fn help_states_the_depth_peaks_oversample_and_frame_defaults() {
let page = help_text();
let counts = [
sva_engine::DEFAULT_LEDGER_DEPTH,
sva_engine::DEFAULT_MAX_PEAKS,
sva_engine::DEFAULT_OVERSAMPLE as usize,
];
for held in counts {
assert!(page.contains(&format!("Default {held}")), "{held}: {page}");
}
assert!(
page.contains(&format!(
"Default {}; only a device",
sva_engine::DEFAULT_BUFFER_SECS
)),
"the buffer a live device holds: {page}"
);
assert!(
page.contains(&format!("Default {}", sva_engine::DEFAULT_FRAME_SECS)),
"the frame a pitch or stereo reading steps by: {page}"
);
for flag in [
"ledger(depth=",
"samples(buffer=",
"(peaks=",
"alias(oversample=",
"(frame=",
"--rate",
"--bits",
] {
assert!(
page.contains(flag),
"{flag} is named under DEFAULTS: {page}"
);
}
}
#[test]
fn help_lists_every_reading_with_its_arguments_and_line() {
let page = help_text();
for row in &sva_engine::READINGS {
let keys: Vec<&str> = row.takes.iter().map(|arg| arg.key()).collect();
let call = match keys[..] {
[] => format!("\n {} ", row.name),
_ => format!("\n {}({})", row.name, keys.join(", ")),
};
assert!(page.contains(&call), "{call}: {page}");
assert!(page.contains(row.help), "{}: {page}", row.help);
}
}
#[test]
fn help_states_where_the_store_lives_and_its_budget() {
let page = help_text();
let budget = format!("{} GB", sva_core::DEFAULT_STORE_BYTES >> 30);
for held in [
"--cache <path|none>",
"$XDG_CACHE_HOME/sva",
"~/.cache/sva",
&budget,
] {
assert!(page.contains(held), "{held}: {page}");
}
}
#[test]
fn help_says_the_store_names_a_value_by_what_it_computes() {
let page = help_text();
let flat = page.split_whitespace().collect::<Vec<_>>().join(" ");
assert!(flat.contains("named by what it computes"), "{page}");
for gone in ["file text", "neither types"] {
assert!(!flat.contains(gone), "{gone}: {page}");
}
}
#[test]
fn help_says_where_the_two_verbs_with_no_standard_name_sit() {
let page = help_text();
for named in ["render", "analyze"] {
assert!(page.contains(named), "{named} is named under VERB ALIASES");
}
assert!(
page.contains("no word for"),
"and the page says why they keep their own names: {page}"
);
}
#[test]
fn help_answers_the_envelope_every_other_subcommand_answers() {
let page = help_text();
let envelope = sva_cli::success_envelope(&sva_cli::help_data(&page), &[]);
assert!(
envelope.starts_with("{\n \"status\": \"success\","),
"{envelope}"
);
assert!(
envelope.contains(&format!("\"help\": \"{}\"", sva_core::json::escape(&page))),
"the whole page, escaped: {envelope}"
);
assert!(
page.lines().count() > envelope.lines().count(),
"a multi-line page inside a one-line field"
);
}