119625d8cSopenharmony_ciuse clap::{Arg, ArgAction, Command};
219625d8cSopenharmony_ci
319625d8cSopenharmony_ci#[test]
419625d8cSopenharmony_cifn indices_mult_opts() {
519625d8cSopenharmony_ci    let m = Command::new("ind")
619625d8cSopenharmony_ci        .args_override_self(true)
719625d8cSopenharmony_ci        .arg(
819625d8cSopenharmony_ci            Arg::new("exclude")
919625d8cSopenharmony_ci                .short('e')
1019625d8cSopenharmony_ci                .action(ArgAction::Set)
1119625d8cSopenharmony_ci                .num_args(1..)
1219625d8cSopenharmony_ci                .action(ArgAction::Append),
1319625d8cSopenharmony_ci        )
1419625d8cSopenharmony_ci        .arg(
1519625d8cSopenharmony_ci            Arg::new("include")
1619625d8cSopenharmony_ci                .short('i')
1719625d8cSopenharmony_ci                .action(ArgAction::Set)
1819625d8cSopenharmony_ci                .num_args(1..),
1919625d8cSopenharmony_ci        )
2019625d8cSopenharmony_ci        .try_get_matches_from(vec!["ind", "-e", "A", "B", "-i", "B", "C", "-e", "C"])
2119625d8cSopenharmony_ci        .unwrap();
2219625d8cSopenharmony_ci
2319625d8cSopenharmony_ci    assert_eq!(
2419625d8cSopenharmony_ci        m.indices_of("exclude").unwrap().collect::<Vec<_>>(),
2519625d8cSopenharmony_ci        [2, 3, 8]
2619625d8cSopenharmony_ci    );
2719625d8cSopenharmony_ci    assert_eq!(m.indices_of("include").unwrap().collect::<Vec<_>>(), [5, 6]);
2819625d8cSopenharmony_ci}
2919625d8cSopenharmony_ci
3019625d8cSopenharmony_ci#[test]
3119625d8cSopenharmony_cifn index_mult_opts() {
3219625d8cSopenharmony_ci    let m = Command::new("ind")
3319625d8cSopenharmony_ci        .args_override_self(true)
3419625d8cSopenharmony_ci        .arg(
3519625d8cSopenharmony_ci            Arg::new("exclude")
3619625d8cSopenharmony_ci                .short('e')
3719625d8cSopenharmony_ci                .action(ArgAction::Set)
3819625d8cSopenharmony_ci                .num_args(1..)
3919625d8cSopenharmony_ci                .action(ArgAction::Append),
4019625d8cSopenharmony_ci        )
4119625d8cSopenharmony_ci        .arg(
4219625d8cSopenharmony_ci            Arg::new("include")
4319625d8cSopenharmony_ci                .short('i')
4419625d8cSopenharmony_ci                .action(ArgAction::Set)
4519625d8cSopenharmony_ci                .num_args(1..),
4619625d8cSopenharmony_ci        )
4719625d8cSopenharmony_ci        .try_get_matches_from(vec!["ind", "-e", "A", "B", "-i", "B", "C", "-e", "C"])
4819625d8cSopenharmony_ci        .unwrap();
4919625d8cSopenharmony_ci
5019625d8cSopenharmony_ci    assert_eq!(m.index_of("exclude"), Some(2));
5119625d8cSopenharmony_ci    assert_eq!(m.index_of("include"), Some(5));
5219625d8cSopenharmony_ci}
5319625d8cSopenharmony_ci
5419625d8cSopenharmony_ci#[test]
5519625d8cSopenharmony_cifn index_flag() {
5619625d8cSopenharmony_ci    let m = Command::new("ind")
5719625d8cSopenharmony_ci        .args_override_self(true)
5819625d8cSopenharmony_ci        .arg(Arg::new("exclude").short('e').action(ArgAction::SetTrue))
5919625d8cSopenharmony_ci        .arg(Arg::new("include").short('i').action(ArgAction::SetTrue))
6019625d8cSopenharmony_ci        .try_get_matches_from(vec!["ind", "-e", "-i"])
6119625d8cSopenharmony_ci        .unwrap();
6219625d8cSopenharmony_ci
6319625d8cSopenharmony_ci    assert_eq!(m.index_of("exclude"), Some(1));
6419625d8cSopenharmony_ci    assert_eq!(m.index_of("include"), Some(2));
6519625d8cSopenharmony_ci}
6619625d8cSopenharmony_ci
6719625d8cSopenharmony_ci#[test]
6819625d8cSopenharmony_cifn index_flags() {
6919625d8cSopenharmony_ci    let m = Command::new("ind")
7019625d8cSopenharmony_ci        .args_override_self(true)
7119625d8cSopenharmony_ci        .arg(Arg::new("exclude").short('e').action(ArgAction::SetTrue))
7219625d8cSopenharmony_ci        .arg(Arg::new("include").short('i').action(ArgAction::SetTrue))
7319625d8cSopenharmony_ci        .try_get_matches_from(vec!["ind", "-e", "-i", "-e", "-e", "-i"])
7419625d8cSopenharmony_ci        .unwrap();
7519625d8cSopenharmony_ci
7619625d8cSopenharmony_ci    assert_eq!(m.index_of("exclude"), Some(4));
7719625d8cSopenharmony_ci    assert_eq!(m.index_of("include"), Some(5));
7819625d8cSopenharmony_ci}
7919625d8cSopenharmony_ci
8019625d8cSopenharmony_ci#[test]
8119625d8cSopenharmony_cifn indices_mult_flags() {
8219625d8cSopenharmony_ci    let m = Command::new("ind")
8319625d8cSopenharmony_ci        .args_override_self(true)
8419625d8cSopenharmony_ci        .arg(Arg::new("exclude").short('e').action(ArgAction::SetTrue))
8519625d8cSopenharmony_ci        .arg(Arg::new("include").short('i').action(ArgAction::SetTrue))
8619625d8cSopenharmony_ci        .try_get_matches_from(vec!["ind", "-e", "-i", "-e", "-e", "-i"])
8719625d8cSopenharmony_ci        .unwrap();
8819625d8cSopenharmony_ci
8919625d8cSopenharmony_ci    assert_eq!(m.indices_of("exclude").unwrap().collect::<Vec<_>>(), [4]);
9019625d8cSopenharmony_ci    assert_eq!(m.indices_of("include").unwrap().collect::<Vec<_>>(), [5]);
9119625d8cSopenharmony_ci}
9219625d8cSopenharmony_ci
9319625d8cSopenharmony_ci#[test]
9419625d8cSopenharmony_cifn indices_mult_flags_combined() {
9519625d8cSopenharmony_ci    let m = Command::new("ind")
9619625d8cSopenharmony_ci        .args_override_self(true)
9719625d8cSopenharmony_ci        .arg(Arg::new("exclude").short('e').action(ArgAction::SetTrue))
9819625d8cSopenharmony_ci        .arg(Arg::new("include").short('i').action(ArgAction::SetTrue))
9919625d8cSopenharmony_ci        .try_get_matches_from(vec!["ind", "-eieei"])
10019625d8cSopenharmony_ci        .unwrap();
10119625d8cSopenharmony_ci
10219625d8cSopenharmony_ci    assert_eq!(m.indices_of("exclude").unwrap().collect::<Vec<_>>(), [4]);
10319625d8cSopenharmony_ci    assert_eq!(m.indices_of("include").unwrap().collect::<Vec<_>>(), [5]);
10419625d8cSopenharmony_ci}
10519625d8cSopenharmony_ci
10619625d8cSopenharmony_ci#[test]
10719625d8cSopenharmony_cifn indices_mult_flags_opt_combined() {
10819625d8cSopenharmony_ci    let m = Command::new("ind")
10919625d8cSopenharmony_ci        .args_override_self(true)
11019625d8cSopenharmony_ci        .arg(Arg::new("exclude").short('e').action(ArgAction::SetTrue))
11119625d8cSopenharmony_ci        .arg(Arg::new("include").short('i').action(ArgAction::SetTrue))
11219625d8cSopenharmony_ci        .arg(Arg::new("option").short('o').action(ArgAction::Set))
11319625d8cSopenharmony_ci        .try_get_matches_from(vec!["ind", "-eieeio", "val"])
11419625d8cSopenharmony_ci        .unwrap();
11519625d8cSopenharmony_ci
11619625d8cSopenharmony_ci    assert_eq!(m.indices_of("exclude").unwrap().collect::<Vec<_>>(), [4]);
11719625d8cSopenharmony_ci    assert_eq!(m.indices_of("include").unwrap().collect::<Vec<_>>(), [5]);
11819625d8cSopenharmony_ci    assert_eq!(m.indices_of("option").unwrap().collect::<Vec<_>>(), [7]);
11919625d8cSopenharmony_ci}
12019625d8cSopenharmony_ci
12119625d8cSopenharmony_ci#[test]
12219625d8cSopenharmony_cifn indices_mult_flags_opt_combined_eq() {
12319625d8cSopenharmony_ci    let m = Command::new("ind")
12419625d8cSopenharmony_ci        .args_override_self(true)
12519625d8cSopenharmony_ci        .arg(Arg::new("exclude").short('e').action(ArgAction::SetTrue))
12619625d8cSopenharmony_ci        .arg(Arg::new("include").short('i').action(ArgAction::SetTrue))
12719625d8cSopenharmony_ci        .arg(Arg::new("option").short('o').action(ArgAction::Set))
12819625d8cSopenharmony_ci        .try_get_matches_from(vec!["ind", "-eieeio=val"])
12919625d8cSopenharmony_ci        .unwrap();
13019625d8cSopenharmony_ci
13119625d8cSopenharmony_ci    assert_eq!(m.indices_of("exclude").unwrap().collect::<Vec<_>>(), [4]);
13219625d8cSopenharmony_ci    assert_eq!(m.indices_of("include").unwrap().collect::<Vec<_>>(), [5]);
13319625d8cSopenharmony_ci    assert_eq!(m.indices_of("option").unwrap().collect::<Vec<_>>(), [7]);
13419625d8cSopenharmony_ci}
13519625d8cSopenharmony_ci
13619625d8cSopenharmony_ci#[test]
13719625d8cSopenharmony_cifn indices_mult_opt_value_delim_eq() {
13819625d8cSopenharmony_ci    let m = Command::new("myapp")
13919625d8cSopenharmony_ci        .args_override_self(true)
14019625d8cSopenharmony_ci        .arg(
14119625d8cSopenharmony_ci            Arg::new("option")
14219625d8cSopenharmony_ci                .short('o')
14319625d8cSopenharmony_ci                .action(ArgAction::Set)
14419625d8cSopenharmony_ci                .value_delimiter(',')
14519625d8cSopenharmony_ci                .num_args(1..),
14619625d8cSopenharmony_ci        )
14719625d8cSopenharmony_ci        .try_get_matches_from(vec!["myapp", "-o=val1,val2,val3"])
14819625d8cSopenharmony_ci        .unwrap();
14919625d8cSopenharmony_ci    assert_eq!(
15019625d8cSopenharmony_ci        m.indices_of("option").unwrap().collect::<Vec<_>>(),
15119625d8cSopenharmony_ci        [2, 3, 4]
15219625d8cSopenharmony_ci    );
15319625d8cSopenharmony_ci}
15419625d8cSopenharmony_ci
15519625d8cSopenharmony_ci#[test]
15619625d8cSopenharmony_cifn indices_mult_opt_value_no_delim_eq() {
15719625d8cSopenharmony_ci    let m = Command::new("myapp")
15819625d8cSopenharmony_ci        .args_override_self(true)
15919625d8cSopenharmony_ci        .arg(
16019625d8cSopenharmony_ci            Arg::new("option")
16119625d8cSopenharmony_ci                .short('o')
16219625d8cSopenharmony_ci                .action(ArgAction::Set)
16319625d8cSopenharmony_ci                .num_args(1..),
16419625d8cSopenharmony_ci        )
16519625d8cSopenharmony_ci        .try_get_matches_from(vec!["myapp", "-o=val1,val2,val3"])
16619625d8cSopenharmony_ci        .unwrap();
16719625d8cSopenharmony_ci    assert_eq!(m.indices_of("option").unwrap().collect::<Vec<_>>(), [2]);
16819625d8cSopenharmony_ci}
16919625d8cSopenharmony_ci
17019625d8cSopenharmony_ci#[test]
17119625d8cSopenharmony_cifn indices_mult_opt_mult_flag() {
17219625d8cSopenharmony_ci    let m = Command::new("myapp")
17319625d8cSopenharmony_ci        .args_override_self(true)
17419625d8cSopenharmony_ci        .arg(Arg::new("option").short('o').action(ArgAction::Append))
17519625d8cSopenharmony_ci        .arg(Arg::new("flag").short('f').action(ArgAction::SetTrue))
17619625d8cSopenharmony_ci        .try_get_matches_from(vec!["myapp", "-o", "val1", "-f", "-o", "val2", "-f"])
17719625d8cSopenharmony_ci        .unwrap();
17819625d8cSopenharmony_ci
17919625d8cSopenharmony_ci    assert_eq!(m.indices_of("option").unwrap().collect::<Vec<_>>(), [2, 5]);
18019625d8cSopenharmony_ci    assert_eq!(m.indices_of("flag").unwrap().collect::<Vec<_>>(), [6]);
18119625d8cSopenharmony_ci}
182