1use anyhow::Result;
2
3const PREAMBLE: &str = "apm \u{2014} Agent Project Manager\n\
4Run `apm <command> --help` for full flag details on any command.\n";
5
6pub fn run(cli_cmd: clap::Command) -> Result<()> {
7 print!("{}", render(cli_cmd));
8 Ok(())
9}
10
11fn render(cli_cmd: clap::Command) -> String {
12 let mut out = String::from(PREAMBLE);
13 out.push('\n');
14 out.push_str(&super::help::render_commands(&cli_cmd));
15 out.push('\n');
16 out
17}
18
19#[cfg(test)]
20mod tests {
21 use super::*;
22
23 fn make_test_cmd() -> clap::Command {
24 clap::Command::new("testapp")
25 .subcommand(clap::Command::new("foo").about("Do foo things"))
26 .subcommand(clap::Command::new("bar").about("Do bar things"))
27 }
28
29 #[test]
30 fn run_returns_ok() {
31 let result = run(make_test_cmd());
32 assert!(result.is_ok());
33 }
34
35 #[test]
36 fn render_includes_preamble() {
37 let out = render(make_test_cmd());
38 assert!(
39 out.contains("apm \u{2014} Agent Project Manager"),
40 "preamble missing in:\n{out}"
41 );
42 }
43
44 #[test]
45 fn render_includes_command_name() {
46 let out = render(make_test_cmd());
47 assert!(out.contains("foo"), "command name 'foo' missing in:\n{out}");
48 }
49
50 #[test]
51 fn render_no_ansi() {
52 let out = render(make_test_cmd());
53 assert!(!out.contains('\x1b'), "ANSI escape code found in:\n{out}");
54 }
55}