119625d8cSopenharmony_ciuse super::utils;
219625d8cSopenharmony_ci
319625d8cSopenharmony_ciuse clap::{arg, builder::PossibleValue, Arg, ArgAction, Command};
419625d8cSopenharmony_ci
519625d8cSopenharmony_cistatic HIDDEN_ARGS: &str = "\
619625d8cSopenharmony_citests stuff
719625d8cSopenharmony_ci
819625d8cSopenharmony_ciUsage: test [OPTIONS]
919625d8cSopenharmony_ci
1019625d8cSopenharmony_ciOptions:
1119625d8cSopenharmony_ci  -F, --flag2         some other flag
1219625d8cSopenharmony_ci      --option <opt>  some option
1319625d8cSopenharmony_ci  -h, --help          Print help
1419625d8cSopenharmony_ci  -V, --version       Print version
1519625d8cSopenharmony_ci";
1619625d8cSopenharmony_ci
1719625d8cSopenharmony_ci#[test]
1819625d8cSopenharmony_cifn hide_args() {
1919625d8cSopenharmony_ci    let cmd = Command::new("test")
2019625d8cSopenharmony_ci        .author("Kevin K.")
2119625d8cSopenharmony_ci        .about("tests stuff")
2219625d8cSopenharmony_ci        .version("1.4")
2319625d8cSopenharmony_ci        .args([
2419625d8cSopenharmony_ci            arg!(-f --flag "some flag").hide(true),
2519625d8cSopenharmony_ci            arg!(-F --flag2 "some other flag"),
2619625d8cSopenharmony_ci            arg!(--option <opt> "some option"),
2719625d8cSopenharmony_ci            Arg::new("DUMMY").hide(true),
2819625d8cSopenharmony_ci        ]);
2919625d8cSopenharmony_ci    utils::assert_output(cmd, "test --help", HIDDEN_ARGS, false);
3019625d8cSopenharmony_ci}
3119625d8cSopenharmony_ci
3219625d8cSopenharmony_cistatic HIDDEN_SHORT_ARGS: &str = "\
3319625d8cSopenharmony_cihides short args
3419625d8cSopenharmony_ci
3519625d8cSopenharmony_ciUsage: test [OPTIONS]
3619625d8cSopenharmony_ci
3719625d8cSopenharmony_ciOptions:
3819625d8cSopenharmony_ci  -v, --visible  This text should be visible
3919625d8cSopenharmony_ci  -h, --help     Print help (see more with '--help')
4019625d8cSopenharmony_ci  -V, --version  Print version
4119625d8cSopenharmony_ci";
4219625d8cSopenharmony_ci
4319625d8cSopenharmony_ci/// Ensure hide with short option
4419625d8cSopenharmony_ci#[test]
4519625d8cSopenharmony_cifn hide_short_args() {
4619625d8cSopenharmony_ci    let cmd = Command::new("test")
4719625d8cSopenharmony_ci        .about("hides short args")
4819625d8cSopenharmony_ci        .author("Steve P.")
4919625d8cSopenharmony_ci        .version("2.31.2")
5019625d8cSopenharmony_ci        .args([
5119625d8cSopenharmony_ci            Arg::new("cfg")
5219625d8cSopenharmony_ci                .short('c')
5319625d8cSopenharmony_ci                .long("config")
5419625d8cSopenharmony_ci                .hide_short_help(true)
5519625d8cSopenharmony_ci                .action(ArgAction::SetTrue)
5619625d8cSopenharmony_ci                .help("Some help text describing the --config arg"),
5719625d8cSopenharmony_ci            Arg::new("visible")
5819625d8cSopenharmony_ci                .short('v')
5919625d8cSopenharmony_ci                .long("visible")
6019625d8cSopenharmony_ci                .action(ArgAction::SetTrue)
6119625d8cSopenharmony_ci                .help("This text should be visible"),
6219625d8cSopenharmony_ci        ]);
6319625d8cSopenharmony_ci
6419625d8cSopenharmony_ci    utils::assert_output(cmd, "test -h", HIDDEN_SHORT_ARGS, false);
6519625d8cSopenharmony_ci}
6619625d8cSopenharmony_ci
6719625d8cSopenharmony_ci/// Ensure visible with opposite option
6819625d8cSopenharmony_ci#[test]
6919625d8cSopenharmony_cifn hide_short_args_long_help() {
7019625d8cSopenharmony_ci    static HIDDEN_SHORT_ARGS_LONG_HELP: &str = "\
7119625d8cSopenharmony_cihides short args
7219625d8cSopenharmony_ci
7319625d8cSopenharmony_ciUsage: test [OPTIONS]
7419625d8cSopenharmony_ci
7519625d8cSopenharmony_ciOptions:
7619625d8cSopenharmony_ci  -c, --config
7719625d8cSopenharmony_ci          Some help text describing the --config arg
7819625d8cSopenharmony_ci
7919625d8cSopenharmony_ci  -v, --visible
8019625d8cSopenharmony_ci          This text should be visible
8119625d8cSopenharmony_ci
8219625d8cSopenharmony_ci  -h, --help
8319625d8cSopenharmony_ci          Print help (see a summary with '-h')
8419625d8cSopenharmony_ci
8519625d8cSopenharmony_ci  -V, --version
8619625d8cSopenharmony_ci          Print version
8719625d8cSopenharmony_ci";
8819625d8cSopenharmony_ci
8919625d8cSopenharmony_ci    let cmd = Command::new("test")
9019625d8cSopenharmony_ci        .about("hides short args")
9119625d8cSopenharmony_ci        .author("Steve P.")
9219625d8cSopenharmony_ci        .version("2.31.2")
9319625d8cSopenharmony_ci        .args([
9419625d8cSopenharmony_ci            Arg::new("cfg")
9519625d8cSopenharmony_ci                .short('c')
9619625d8cSopenharmony_ci                .long("config")
9719625d8cSopenharmony_ci                .hide_short_help(true)
9819625d8cSopenharmony_ci                .action(ArgAction::SetTrue)
9919625d8cSopenharmony_ci                .help("Some help text describing the --config arg"),
10019625d8cSopenharmony_ci            Arg::new("visible")
10119625d8cSopenharmony_ci                .short('v')
10219625d8cSopenharmony_ci                .long("visible")
10319625d8cSopenharmony_ci                .action(ArgAction::SetTrue)
10419625d8cSopenharmony_ci                .help("This text should be visible"),
10519625d8cSopenharmony_ci        ]);
10619625d8cSopenharmony_ci
10719625d8cSopenharmony_ci    utils::assert_output(cmd, "test --help", HIDDEN_SHORT_ARGS_LONG_HELP, false);
10819625d8cSopenharmony_ci}
10919625d8cSopenharmony_ci
11019625d8cSopenharmony_cistatic HIDDEN_LONG_ARGS: &str = "\
11119625d8cSopenharmony_cihides long args
11219625d8cSopenharmony_ci
11319625d8cSopenharmony_ciUsage: test [OPTIONS]
11419625d8cSopenharmony_ci
11519625d8cSopenharmony_ciOptions:
11619625d8cSopenharmony_ci  -v, --visible
11719625d8cSopenharmony_ci          This text should be visible
11819625d8cSopenharmony_ci
11919625d8cSopenharmony_ci  -h, --help
12019625d8cSopenharmony_ci          Print help (see a summary with '-h')
12119625d8cSopenharmony_ci
12219625d8cSopenharmony_ci  -V, --version
12319625d8cSopenharmony_ci          Print version
12419625d8cSopenharmony_ci";
12519625d8cSopenharmony_ci
12619625d8cSopenharmony_ci#[test]
12719625d8cSopenharmony_cifn hide_long_args() {
12819625d8cSopenharmony_ci    let cmd = Command::new("test")
12919625d8cSopenharmony_ci        .about("hides long args")
13019625d8cSopenharmony_ci        .author("Steve P.")
13119625d8cSopenharmony_ci        .version("2.31.2")
13219625d8cSopenharmony_ci        .args([
13319625d8cSopenharmony_ci            Arg::new("cfg")
13419625d8cSopenharmony_ci                .short('c')
13519625d8cSopenharmony_ci                .long("config")
13619625d8cSopenharmony_ci                .hide_long_help(true)
13719625d8cSopenharmony_ci                .action(ArgAction::SetTrue)
13819625d8cSopenharmony_ci                .help("Some help text describing the --config arg"),
13919625d8cSopenharmony_ci            Arg::new("visible")
14019625d8cSopenharmony_ci                .short('v')
14119625d8cSopenharmony_ci                .long("visible")
14219625d8cSopenharmony_ci                .action(ArgAction::SetTrue)
14319625d8cSopenharmony_ci                .help("This text should be visible"),
14419625d8cSopenharmony_ci        ]);
14519625d8cSopenharmony_ci
14619625d8cSopenharmony_ci    utils::assert_output(cmd, "test --help", HIDDEN_LONG_ARGS, false);
14719625d8cSopenharmony_ci}
14819625d8cSopenharmony_ci
14919625d8cSopenharmony_cistatic HIDDEN_LONG_ARGS_SHORT_HELP: &str = "\
15019625d8cSopenharmony_cihides long args
15119625d8cSopenharmony_ci
15219625d8cSopenharmony_ciUsage: test [OPTIONS]
15319625d8cSopenharmony_ci
15419625d8cSopenharmony_ciOptions:
15519625d8cSopenharmony_ci  -c, --config   Some help text describing the --config arg
15619625d8cSopenharmony_ci  -v, --visible  This text should be visible
15719625d8cSopenharmony_ci  -h, --help     Print help (see more with '--help')
15819625d8cSopenharmony_ci  -V, --version  Print version
15919625d8cSopenharmony_ci";
16019625d8cSopenharmony_ci
16119625d8cSopenharmony_ci#[test]
16219625d8cSopenharmony_cifn hide_long_args_short_help() {
16319625d8cSopenharmony_ci    let cmd = Command::new("test")
16419625d8cSopenharmony_ci        .about("hides long args")
16519625d8cSopenharmony_ci        .author("Steve P.")
16619625d8cSopenharmony_ci        .version("2.31.2")
16719625d8cSopenharmony_ci        .args([
16819625d8cSopenharmony_ci            Arg::new("cfg")
16919625d8cSopenharmony_ci                .short('c')
17019625d8cSopenharmony_ci                .long("config")
17119625d8cSopenharmony_ci                .hide_long_help(true)
17219625d8cSopenharmony_ci                .action(ArgAction::SetTrue)
17319625d8cSopenharmony_ci                .help("Some help text describing the --config arg"),
17419625d8cSopenharmony_ci            Arg::new("visible")
17519625d8cSopenharmony_ci                .short('v')
17619625d8cSopenharmony_ci                .long("visible")
17719625d8cSopenharmony_ci                .action(ArgAction::SetTrue)
17819625d8cSopenharmony_ci                .help("This text should be visible"),
17919625d8cSopenharmony_ci        ]);
18019625d8cSopenharmony_ci
18119625d8cSopenharmony_ci    utils::assert_output(cmd, "test -h", HIDDEN_LONG_ARGS_SHORT_HELP, false);
18219625d8cSopenharmony_ci}
18319625d8cSopenharmony_ci
18419625d8cSopenharmony_cistatic HIDDEN_POS_ARGS: &str = "\
18519625d8cSopenharmony_ciUsage: test [another]
18619625d8cSopenharmony_ci
18719625d8cSopenharmony_ciArguments:
18819625d8cSopenharmony_ci  [another]  another pos
18919625d8cSopenharmony_ci
19019625d8cSopenharmony_ciOptions:
19119625d8cSopenharmony_ci  -h, --help     Print help
19219625d8cSopenharmony_ci  -V, --version  Print version
19319625d8cSopenharmony_ci";
19419625d8cSopenharmony_ci
19519625d8cSopenharmony_ci#[test]
19619625d8cSopenharmony_cifn hide_pos_args() {
19719625d8cSopenharmony_ci    let cmd = Command::new("test").version("1.4").args([
19819625d8cSopenharmony_ci        Arg::new("pos").help("some pos").hide(true),
19919625d8cSopenharmony_ci        Arg::new("another").help("another pos"),
20019625d8cSopenharmony_ci    ]);
20119625d8cSopenharmony_ci
20219625d8cSopenharmony_ci    utils::assert_output(cmd, "test --help", HIDDEN_POS_ARGS, false);
20319625d8cSopenharmony_ci}
20419625d8cSopenharmony_ci
20519625d8cSopenharmony_cistatic HIDDEN_SUBCMDS: &str = "\
20619625d8cSopenharmony_ciUsage: test
20719625d8cSopenharmony_ci
20819625d8cSopenharmony_ciOptions:
20919625d8cSopenharmony_ci  -h, --help     Print help
21019625d8cSopenharmony_ci  -V, --version  Print version
21119625d8cSopenharmony_ci";
21219625d8cSopenharmony_ci
21319625d8cSopenharmony_ci#[test]
21419625d8cSopenharmony_cifn hide_subcmds() {
21519625d8cSopenharmony_ci    let cmd = Command::new("test")
21619625d8cSopenharmony_ci        .version("1.4")
21719625d8cSopenharmony_ci        .subcommand(Command::new("sub").hide(true));
21819625d8cSopenharmony_ci
21919625d8cSopenharmony_ci    utils::assert_output(cmd, "test --help", HIDDEN_SUBCMDS, false);
22019625d8cSopenharmony_ci}
22119625d8cSopenharmony_ci
22219625d8cSopenharmony_cistatic HIDDEN_OPT_ARGS_ONLY: &str = "\
22319625d8cSopenharmony_ciUsage: test
22419625d8cSopenharmony_ci
22519625d8cSopenharmony_ciAfter help
22619625d8cSopenharmony_ci";
22719625d8cSopenharmony_ci
22819625d8cSopenharmony_ci#[test]
22919625d8cSopenharmony_cifn hide_opt_args_only() {
23019625d8cSopenharmony_ci    let cmd = Command::new("test")
23119625d8cSopenharmony_ci        .version("1.4")
23219625d8cSopenharmony_ci        .after_help("After help")
23319625d8cSopenharmony_ci        .disable_help_flag(true)
23419625d8cSopenharmony_ci        .disable_version_flag(true)
23519625d8cSopenharmony_ci        .arg(arg!(-h - -help).action(ArgAction::Help).hide(true))
23619625d8cSopenharmony_ci        .arg(arg!(-v - -version).hide(true))
23719625d8cSopenharmony_ci        .arg(arg!(--option <opt> "some option").hide(true));
23819625d8cSopenharmony_ci
23919625d8cSopenharmony_ci    utils::assert_output(cmd, "test --help", HIDDEN_OPT_ARGS_ONLY, false);
24019625d8cSopenharmony_ci}
24119625d8cSopenharmony_ci
24219625d8cSopenharmony_cistatic HIDDEN_POS_ARGS_ONLY: &str = "\
24319625d8cSopenharmony_ciUsage: test
24419625d8cSopenharmony_ci
24519625d8cSopenharmony_ciAfter help
24619625d8cSopenharmony_ci";
24719625d8cSopenharmony_ci
24819625d8cSopenharmony_ci#[test]
24919625d8cSopenharmony_cifn hide_pos_args_only() {
25019625d8cSopenharmony_ci    let cmd = Command::new("test")
25119625d8cSopenharmony_ci        .version("1.4")
25219625d8cSopenharmony_ci        .after_help("After help")
25319625d8cSopenharmony_ci        .disable_help_flag(true)
25419625d8cSopenharmony_ci        .disable_version_flag(true)
25519625d8cSopenharmony_ci        .arg(arg!(-h - -help).action(ArgAction::Help).hide(true))
25619625d8cSopenharmony_ci        .arg(arg!(-v - -version).hide(true))
25719625d8cSopenharmony_ci        .args([Arg::new("pos").help("some pos").hide(true)]);
25819625d8cSopenharmony_ci
25919625d8cSopenharmony_ci    utils::assert_output(cmd, "test --help", HIDDEN_POS_ARGS_ONLY, false);
26019625d8cSopenharmony_ci}
26119625d8cSopenharmony_ci
26219625d8cSopenharmony_cistatic HIDDEN_SUBCMDS_ONLY: &str = "\
26319625d8cSopenharmony_ciUsage: test
26419625d8cSopenharmony_ci
26519625d8cSopenharmony_ciAfter help
26619625d8cSopenharmony_ci";
26719625d8cSopenharmony_ci
26819625d8cSopenharmony_ci#[test]
26919625d8cSopenharmony_cifn hide_subcmds_only() {
27019625d8cSopenharmony_ci    let cmd = Command::new("test")
27119625d8cSopenharmony_ci        .version("1.4")
27219625d8cSopenharmony_ci        .after_help("After help")
27319625d8cSopenharmony_ci        .disable_help_flag(true)
27419625d8cSopenharmony_ci        .disable_version_flag(true)
27519625d8cSopenharmony_ci        .arg(arg!(-h - -help).action(ArgAction::Help).hide(true))
27619625d8cSopenharmony_ci        .arg(arg!(-v - -version).hide(true))
27719625d8cSopenharmony_ci        .subcommand(Command::new("sub").hide(true));
27819625d8cSopenharmony_ci
27919625d8cSopenharmony_ci    utils::assert_output(cmd, "test --help", HIDDEN_SUBCMDS_ONLY, false);
28019625d8cSopenharmony_ci}
28119625d8cSopenharmony_ci
28219625d8cSopenharmony_ci#[test]
28319625d8cSopenharmony_cifn hidden_arg_with_possible_value_with_help() {
28419625d8cSopenharmony_ci    // Normally the presence of a possible value with a help text triggers a
28519625d8cSopenharmony_ci    // change of the --help help text by appending `(see more with '--help')`
28619625d8cSopenharmony_ci    // or `(see a summary with '-h')`. When the argument is completely hidden
28719625d8cSopenharmony_ci    // we however do not want it to trigger that change.
28819625d8cSopenharmony_ci    static POS_VALS_HELP: &str = "\
28919625d8cSopenharmony_ciUsage: ctest
29019625d8cSopenharmony_ci
29119625d8cSopenharmony_ciOptions:
29219625d8cSopenharmony_ci  -h, --help  Print help
29319625d8cSopenharmony_ci";
29419625d8cSopenharmony_ci    let app = Command::new("ctest").arg(
29519625d8cSopenharmony_ci        Arg::new("pos")
29619625d8cSopenharmony_ci            .hide(true)
29719625d8cSopenharmony_ci            .value_parser([
29819625d8cSopenharmony_ci                PossibleValue::new("fast"),
29919625d8cSopenharmony_ci                PossibleValue::new("slow").help("not as fast"),
30019625d8cSopenharmony_ci            ])
30119625d8cSopenharmony_ci            .action(ArgAction::Set),
30219625d8cSopenharmony_ci    );
30319625d8cSopenharmony_ci    utils::assert_output(app, "ctest --help", POS_VALS_HELP, false);
30419625d8cSopenharmony_ci}
305