119625d8cSopenharmony_ciuse super::utils;
219625d8cSopenharmony_ci
319625d8cSopenharmony_ciuse clap::{arg, Command};
419625d8cSopenharmony_ci
519625d8cSopenharmony_ci#[cfg(not(feature = "unstable-v5"))]
619625d8cSopenharmony_cistatic EXAMPLE1_TMPL_S: &str = "{bin} {version}
719625d8cSopenharmony_ci{author}
819625d8cSopenharmony_ci{about}
919625d8cSopenharmony_ci
1019625d8cSopenharmony_ciUsage: {usage}
1119625d8cSopenharmony_ci
1219625d8cSopenharmony_ci{all-args}";
1319625d8cSopenharmony_ci
1419625d8cSopenharmony_ci#[cfg(feature = "unstable-v5")]
1519625d8cSopenharmony_cistatic EXAMPLE1_TMPL_S: &str = "{name} {version}
1619625d8cSopenharmony_ci{author}
1719625d8cSopenharmony_ci{about}
1819625d8cSopenharmony_ci
1919625d8cSopenharmony_ciUsage: {usage}
2019625d8cSopenharmony_ci
2119625d8cSopenharmony_ci{all-args}";
2219625d8cSopenharmony_ci
2319625d8cSopenharmony_ci#[cfg(not(feature = "unstable-v5"))]
2419625d8cSopenharmony_cistatic EXAMPLE1_TMPS_F: &str = "{bin} {version}
2519625d8cSopenharmony_ci{author}
2619625d8cSopenharmony_ci{about}
2719625d8cSopenharmony_ci
2819625d8cSopenharmony_ciUsage: {usage}
2919625d8cSopenharmony_ci
3019625d8cSopenharmony_ciOptions:
3119625d8cSopenharmony_ci{options}
3219625d8cSopenharmony_ciArguments:
3319625d8cSopenharmony_ci{positionals}
3419625d8cSopenharmony_ciCommands:
3519625d8cSopenharmony_ci{subcommands}";
3619625d8cSopenharmony_ci
3719625d8cSopenharmony_ci#[cfg(feature = "unstable-v5")]
3819625d8cSopenharmony_cistatic EXAMPLE1_TMPS_F: &str = "{name} {version}
3919625d8cSopenharmony_ci{author}
4019625d8cSopenharmony_ci{about}
4119625d8cSopenharmony_ci
4219625d8cSopenharmony_ciUsage: {usage}
4319625d8cSopenharmony_ci
4419625d8cSopenharmony_ciOptions:
4519625d8cSopenharmony_ci{options}
4619625d8cSopenharmony_ciArguments:
4719625d8cSopenharmony_ci{positionals}
4819625d8cSopenharmony_ciCommands:
4919625d8cSopenharmony_ci{subcommands}";
5019625d8cSopenharmony_ci
5119625d8cSopenharmony_cistatic CUSTOM_TEMPL_HELP: &str = "MyApp 1.0
5219625d8cSopenharmony_ciKevin K. <kbknapp@gmail.com>
5319625d8cSopenharmony_ciDoes awesome things
5419625d8cSopenharmony_ci
5519625d8cSopenharmony_ciUsage: MyApp [OPTIONS] <output> [COMMAND]
5619625d8cSopenharmony_ci
5719625d8cSopenharmony_ciOptions:
5819625d8cSopenharmony_ci  -c, --config <FILE>  Sets a custom config file
5919625d8cSopenharmony_ci  -d...                Turn debugging information on
6019625d8cSopenharmony_ci  -h, --help           Print help
6119625d8cSopenharmony_ci  -V, --version        Print version
6219625d8cSopenharmony_ciArguments:
6319625d8cSopenharmony_ci  <output>  Sets an optional output file
6419625d8cSopenharmony_ciCommands:
6519625d8cSopenharmony_ci  test  does testing things
6619625d8cSopenharmony_ci  help  Print this message or the help of the given subcommand(s)
6719625d8cSopenharmony_ci";
6819625d8cSopenharmony_ci
6919625d8cSopenharmony_cistatic SIMPLE_TEMPLATE: &str = "MyApp 1.0
7019625d8cSopenharmony_ciKevin K. <kbknapp@gmail.com>
7119625d8cSopenharmony_ciDoes awesome things
7219625d8cSopenharmony_ci
7319625d8cSopenharmony_ciUsage: MyApp [OPTIONS] <output> [COMMAND]
7419625d8cSopenharmony_ci
7519625d8cSopenharmony_ciCommands:
7619625d8cSopenharmony_ci  test  does testing things
7719625d8cSopenharmony_ci  help  Print this message or the help of the given subcommand(s)
7819625d8cSopenharmony_ci
7919625d8cSopenharmony_ciArguments:
8019625d8cSopenharmony_ci  <output>  Sets an optional output file
8119625d8cSopenharmony_ci
8219625d8cSopenharmony_ciOptions:
8319625d8cSopenharmony_ci  -c, --config <FILE>  Sets a custom config file
8419625d8cSopenharmony_ci  -d...                Turn debugging information on
8519625d8cSopenharmony_ci  -h, --help           Print help
8619625d8cSopenharmony_ci  -V, --version        Print version
8719625d8cSopenharmony_ci";
8819625d8cSopenharmony_ci
8919625d8cSopenharmony_ci#[test]
9019625d8cSopenharmony_cifn with_template() {
9119625d8cSopenharmony_ci    let cmd = get_app().help_template(EXAMPLE1_TMPL_S);
9219625d8cSopenharmony_ci    utils::assert_output(cmd, "MyApp --help", SIMPLE_TEMPLATE, false);
9319625d8cSopenharmony_ci}
9419625d8cSopenharmony_ci
9519625d8cSopenharmony_ci#[test]
9619625d8cSopenharmony_cifn custom_template() {
9719625d8cSopenharmony_ci    let cmd = get_app().help_template(EXAMPLE1_TMPS_F);
9819625d8cSopenharmony_ci    utils::assert_output(cmd, "MyApp --help", CUSTOM_TEMPL_HELP, false);
9919625d8cSopenharmony_ci}
10019625d8cSopenharmony_ci
10119625d8cSopenharmony_ci#[test]
10219625d8cSopenharmony_cifn template_empty() {
10319625d8cSopenharmony_ci    let cmd = Command::new("MyApp")
10419625d8cSopenharmony_ci        .version("1.0")
10519625d8cSopenharmony_ci        .author("Kevin K. <kbknapp@gmail.com>")
10619625d8cSopenharmony_ci        .about("Does awesome things")
10719625d8cSopenharmony_ci        .help_template("");
10819625d8cSopenharmony_ci    utils::assert_output(cmd, "MyApp --help", "\n", false);
10919625d8cSopenharmony_ci}
11019625d8cSopenharmony_ci
11119625d8cSopenharmony_ci#[test]
11219625d8cSopenharmony_cifn template_notag() {
11319625d8cSopenharmony_ci    let cmd = Command::new("MyApp")
11419625d8cSopenharmony_ci        .version("1.0")
11519625d8cSopenharmony_ci        .author("Kevin K. <kbknapp@gmail.com>")
11619625d8cSopenharmony_ci        .about("Does awesome things")
11719625d8cSopenharmony_ci        .help_template("test no tag test");
11819625d8cSopenharmony_ci    utils::assert_output(cmd, "MyApp --help", "test no tag test\n", false);
11919625d8cSopenharmony_ci}
12019625d8cSopenharmony_ci
12119625d8cSopenharmony_ci#[test]
12219625d8cSopenharmony_cifn template_unknowntag() {
12319625d8cSopenharmony_ci    let cmd = Command::new("MyApp")
12419625d8cSopenharmony_ci        .version("1.0")
12519625d8cSopenharmony_ci        .author("Kevin K. <kbknapp@gmail.com>")
12619625d8cSopenharmony_ci        .about("Does awesome things")
12719625d8cSopenharmony_ci        .help_template("test {unknown_tag} test");
12819625d8cSopenharmony_ci    utils::assert_output(cmd, "MyApp --help", "test {unknown_tag} test\n", false);
12919625d8cSopenharmony_ci}
13019625d8cSopenharmony_ci
13119625d8cSopenharmony_ci#[test]
13219625d8cSopenharmony_cifn template_author_version() {
13319625d8cSopenharmony_ci    #[cfg(not(feature = "unstable-v5"))]
13419625d8cSopenharmony_ci    let cmd = Command::new("MyApp")
13519625d8cSopenharmony_ci        .version("1.0")
13619625d8cSopenharmony_ci        .author("Kevin K. <kbknapp@gmail.com>")
13719625d8cSopenharmony_ci        .about("Does awesome things")
13819625d8cSopenharmony_ci        .help_template("{author}\n{version}\n{about}\n{bin}");
13919625d8cSopenharmony_ci
14019625d8cSopenharmony_ci    #[cfg(feature = "unstable-v5")]
14119625d8cSopenharmony_ci    let cmd = Command::new("MyApp")
14219625d8cSopenharmony_ci        .version("1.0")
14319625d8cSopenharmony_ci        .author("Kevin K. <kbknapp@gmail.com>")
14419625d8cSopenharmony_ci        .about("Does awesome things")
14519625d8cSopenharmony_ci        .help_template("{author}\n{version}\n{about}\n{name}");
14619625d8cSopenharmony_ci
14719625d8cSopenharmony_ci    utils::assert_output(
14819625d8cSopenharmony_ci        cmd,
14919625d8cSopenharmony_ci        "MyApp --help",
15019625d8cSopenharmony_ci        "Kevin K. <kbknapp@gmail.com>\n1.0\nDoes awesome things\nMyApp\n",
15119625d8cSopenharmony_ci        false,
15219625d8cSopenharmony_ci    );
15319625d8cSopenharmony_ci}
15419625d8cSopenharmony_ci
15519625d8cSopenharmony_ci// ----------
15619625d8cSopenharmony_ci
15719625d8cSopenharmony_cifn get_app() -> Command {
15819625d8cSopenharmony_ci    Command::new("MyApp")
15919625d8cSopenharmony_ci        .version("1.0")
16019625d8cSopenharmony_ci        .author("Kevin K. <kbknapp@gmail.com>")
16119625d8cSopenharmony_ci        .about("Does awesome things")
16219625d8cSopenharmony_ci        .arg(
16319625d8cSopenharmony_ci            arg!(
16419625d8cSopenharmony_ci                -c --config <FILE> "Sets a custom config file"
16519625d8cSopenharmony_ci            )
16619625d8cSopenharmony_ci            .required(false),
16719625d8cSopenharmony_ci        )
16819625d8cSopenharmony_ci        .arg(arg!(
16919625d8cSopenharmony_ci            <output>            "Sets an optional output file"
17019625d8cSopenharmony_ci        ))
17119625d8cSopenharmony_ci        .arg(arg!(
17219625d8cSopenharmony_ci            d: -d ...           "Turn debugging information on"
17319625d8cSopenharmony_ci        ))
17419625d8cSopenharmony_ci        .subcommand(
17519625d8cSopenharmony_ci            Command::new("test")
17619625d8cSopenharmony_ci                .about("does testing things")
17719625d8cSopenharmony_ci                .arg(arg!(-l --list "lists test values")),
17819625d8cSopenharmony_ci        )
17919625d8cSopenharmony_ci}
180