119625d8cSopenharmony_cimod arg {
219625d8cSopenharmony_ci    #[test]
319625d8cSopenharmony_ci    fn name_explicit() {
419625d8cSopenharmony_ci        let arg = clap::arg!(foo: --bar <NUM>);
519625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "foo");
619625d8cSopenharmony_ci        assert_eq!(arg.get_long(), Some("bar"));
719625d8cSopenharmony_ci        assert_eq!(arg.get_value_names(), Some(vec!["NUM".into()].as_slice()));
819625d8cSopenharmony_ci        assert!(!arg.is_required_set());
919625d8cSopenharmony_ci    }
1019625d8cSopenharmony_ci
1119625d8cSopenharmony_ci    #[test]
1219625d8cSopenharmony_ci    fn name_from_long() {
1319625d8cSopenharmony_ci        let arg = clap::arg!(--bar <NUM>);
1419625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "bar");
1519625d8cSopenharmony_ci        assert_eq!(arg.get_long(), Some("bar"));
1619625d8cSopenharmony_ci        assert_eq!(arg.get_value_names(), Some(vec!["NUM".into()].as_slice()));
1719625d8cSopenharmony_ci        assert!(!arg.is_required_set());
1819625d8cSopenharmony_ci    }
1919625d8cSopenharmony_ci
2019625d8cSopenharmony_ci    #[test]
2119625d8cSopenharmony_ci    fn name_from_value() {
2219625d8cSopenharmony_ci        let arg = clap::arg!(<NUM>);
2319625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "NUM");
2419625d8cSopenharmony_ci        assert_eq!(arg.get_long(), None);
2519625d8cSopenharmony_ci        assert_eq!(arg.get_value_names(), Some(vec!["NUM".into()].as_slice()));
2619625d8cSopenharmony_ci        assert!(arg.is_required_set());
2719625d8cSopenharmony_ci    }
2819625d8cSopenharmony_ci
2919625d8cSopenharmony_ci    #[test]
3019625d8cSopenharmony_ci    #[should_panic]
3119625d8cSopenharmony_ci    fn name_none_fails() {
3219625d8cSopenharmony_ci        clap::arg!("Help");
3319625d8cSopenharmony_ci    }
3419625d8cSopenharmony_ci
3519625d8cSopenharmony_ci    #[test]
3619625d8cSopenharmony_ci    #[should_panic]
3719625d8cSopenharmony_ci    fn short_only_fails() {
3819625d8cSopenharmony_ci        clap::arg!(-b);
3919625d8cSopenharmony_ci    }
4019625d8cSopenharmony_ci
4119625d8cSopenharmony_ci    #[test]
4219625d8cSopenharmony_ci    fn short() {
4319625d8cSopenharmony_ci        let arg = clap::arg!(foo: -b);
4419625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "foo");
4519625d8cSopenharmony_ci        assert_eq!(arg.get_short(), Some('b'));
4619625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::SetTrue));
4719625d8cSopenharmony_ci        assert_eq!(arg.get_num_args(), None);
4819625d8cSopenharmony_ci        assert!(!arg.is_required_set());
4919625d8cSopenharmony_ci        assert_eq!(arg.get_help().map(|s| s.to_string()), None);
5019625d8cSopenharmony_ci
5119625d8cSopenharmony_ci        let arg = clap::arg!(foo: -'b');
5219625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "foo");
5319625d8cSopenharmony_ci        assert_eq!(arg.get_short(), Some('b'));
5419625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::SetTrue));
5519625d8cSopenharmony_ci        assert_eq!(arg.get_num_args(), None);
5619625d8cSopenharmony_ci        assert!(!arg.is_required_set());
5719625d8cSopenharmony_ci        assert_eq!(arg.get_help().map(|s| s.to_string()), None);
5819625d8cSopenharmony_ci
5919625d8cSopenharmony_ci        let arg = clap::arg!(foo: -b ...);
6019625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "foo");
6119625d8cSopenharmony_ci        assert_eq!(arg.get_short(), Some('b'));
6219625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::Count));
6319625d8cSopenharmony_ci        assert_eq!(arg.get_num_args(), None);
6419625d8cSopenharmony_ci        assert!(!arg.is_required_set());
6519625d8cSopenharmony_ci        assert_eq!(arg.get_help().map(|s| s.to_string()), None);
6619625d8cSopenharmony_ci
6719625d8cSopenharmony_ci        let arg = clap::arg!(foo: -b "How to use it");
6819625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "foo");
6919625d8cSopenharmony_ci        assert_eq!(arg.get_short(), Some('b'));
7019625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::SetTrue));
7119625d8cSopenharmony_ci        assert_eq!(arg.get_num_args(), None);
7219625d8cSopenharmony_ci        assert!(!arg.is_required_set());
7319625d8cSopenharmony_ci        assert_eq!(
7419625d8cSopenharmony_ci            arg.get_help().map(|s| s.to_string()),
7519625d8cSopenharmony_ci            Some("How to use it".to_owned())
7619625d8cSopenharmony_ci        );
7719625d8cSopenharmony_ci    }
7819625d8cSopenharmony_ci
7919625d8cSopenharmony_ci    #[test]
8019625d8cSopenharmony_ci    fn short_and_long() {
8119625d8cSopenharmony_ci        let arg = clap::arg!(foo: -b --hello);
8219625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "foo");
8319625d8cSopenharmony_ci        assert_eq!(arg.get_long(), Some("hello"));
8419625d8cSopenharmony_ci        assert_eq!(arg.get_short(), Some('b'));
8519625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::SetTrue));
8619625d8cSopenharmony_ci        assert_eq!(arg.get_num_args(), None);
8719625d8cSopenharmony_ci        assert!(!arg.is_required_set());
8819625d8cSopenharmony_ci        assert_eq!(arg.get_help().map(|s| s.to_string()), None);
8919625d8cSopenharmony_ci
9019625d8cSopenharmony_ci        let arg = clap::arg!(foo: -'b' --hello);
9119625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "foo");
9219625d8cSopenharmony_ci        assert_eq!(arg.get_long(), Some("hello"));
9319625d8cSopenharmony_ci        assert_eq!(arg.get_short(), Some('b'));
9419625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::SetTrue));
9519625d8cSopenharmony_ci        assert_eq!(arg.get_num_args(), None);
9619625d8cSopenharmony_ci        assert!(!arg.is_required_set());
9719625d8cSopenharmony_ci        assert_eq!(arg.get_help().map(|s| s.to_string()), None);
9819625d8cSopenharmony_ci
9919625d8cSopenharmony_ci        let arg = clap::arg!(foo: -b --hello ...);
10019625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "foo");
10119625d8cSopenharmony_ci        assert_eq!(arg.get_long(), Some("hello"));
10219625d8cSopenharmony_ci        assert_eq!(arg.get_short(), Some('b'));
10319625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::Count));
10419625d8cSopenharmony_ci        assert_eq!(arg.get_num_args(), None);
10519625d8cSopenharmony_ci        assert!(!arg.is_required_set());
10619625d8cSopenharmony_ci        assert_eq!(arg.get_help().map(|s| s.to_string()), None);
10719625d8cSopenharmony_ci
10819625d8cSopenharmony_ci        let arg = clap::arg!(foo: -b --hello "How to use it");
10919625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "foo");
11019625d8cSopenharmony_ci        assert_eq!(arg.get_long(), Some("hello"));
11119625d8cSopenharmony_ci        assert_eq!(arg.get_short(), Some('b'));
11219625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::SetTrue));
11319625d8cSopenharmony_ci        assert_eq!(arg.get_num_args(), None);
11419625d8cSopenharmony_ci        assert!(!arg.is_required_set());
11519625d8cSopenharmony_ci        assert_eq!(
11619625d8cSopenharmony_ci            arg.get_help().map(|s| s.to_string()),
11719625d8cSopenharmony_ci            Some("How to use it".to_owned())
11819625d8cSopenharmony_ci        );
11919625d8cSopenharmony_ci    }
12019625d8cSopenharmony_ci
12119625d8cSopenharmony_ci    #[test]
12219625d8cSopenharmony_ci    fn short_help() {
12319625d8cSopenharmony_ci        let arg = clap::arg!(help: -b);
12419625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::SetTrue));
12519625d8cSopenharmony_ci
12619625d8cSopenharmony_ci        let mut cmd = clap::Command::new("cmd")
12719625d8cSopenharmony_ci            .disable_help_flag(true)
12819625d8cSopenharmony_ci            .arg(clap::arg!(help: -b).action(clap::ArgAction::Help));
12919625d8cSopenharmony_ci        cmd.build();
13019625d8cSopenharmony_ci        let arg = cmd
13119625d8cSopenharmony_ci            .get_arguments()
13219625d8cSopenharmony_ci            .find(|arg| arg.get_id() == "help")
13319625d8cSopenharmony_ci            .unwrap();
13419625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::Help));
13519625d8cSopenharmony_ci    }
13619625d8cSopenharmony_ci
13719625d8cSopenharmony_ci    #[test]
13819625d8cSopenharmony_ci    fn long_help() {
13919625d8cSopenharmony_ci        let arg = clap::arg!(-'?' - -help);
14019625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::SetTrue));
14119625d8cSopenharmony_ci
14219625d8cSopenharmony_ci        let mut cmd = clap::Command::new("cmd")
14319625d8cSopenharmony_ci            .disable_help_flag(true)
14419625d8cSopenharmony_ci            .arg(clap::arg!(-'?' - -help).action(clap::ArgAction::Help));
14519625d8cSopenharmony_ci        cmd.build();
14619625d8cSopenharmony_ci        let arg = cmd
14719625d8cSopenharmony_ci            .get_arguments()
14819625d8cSopenharmony_ci            .find(|arg| arg.get_id() == "help")
14919625d8cSopenharmony_ci            .unwrap();
15019625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::Help));
15119625d8cSopenharmony_ci    }
15219625d8cSopenharmony_ci
15319625d8cSopenharmony_ci    #[test]
15419625d8cSopenharmony_ci    fn short_version() {
15519625d8cSopenharmony_ci        let arg = clap::arg!(version: -b);
15619625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::SetTrue));
15719625d8cSopenharmony_ci
15819625d8cSopenharmony_ci        let mut cmd = clap::Command::new("cmd")
15919625d8cSopenharmony_ci            .disable_version_flag(true)
16019625d8cSopenharmony_ci            .version("1.0.0")
16119625d8cSopenharmony_ci            .arg(clap::arg!(version: -b).action(clap::ArgAction::Version));
16219625d8cSopenharmony_ci        cmd.build();
16319625d8cSopenharmony_ci        let arg = cmd
16419625d8cSopenharmony_ci            .get_arguments()
16519625d8cSopenharmony_ci            .find(|arg| arg.get_id() == "version")
16619625d8cSopenharmony_ci            .unwrap();
16719625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::Version));
16819625d8cSopenharmony_ci    }
16919625d8cSopenharmony_ci
17019625d8cSopenharmony_ci    #[test]
17119625d8cSopenharmony_ci    fn long_version() {
17219625d8cSopenharmony_ci        let arg = clap::arg!(-'?' - -version);
17319625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::SetTrue));
17419625d8cSopenharmony_ci
17519625d8cSopenharmony_ci        let mut cmd = clap::Command::new("cmd")
17619625d8cSopenharmony_ci            .disable_version_flag(true)
17719625d8cSopenharmony_ci            .version("1.0.0")
17819625d8cSopenharmony_ci            .arg(clap::arg!(-'?' - -version).action(clap::ArgAction::Version));
17919625d8cSopenharmony_ci        cmd.build();
18019625d8cSopenharmony_ci        let arg = cmd
18119625d8cSopenharmony_ci            .get_arguments()
18219625d8cSopenharmony_ci            .find(|arg| arg.get_id() == "version")
18319625d8cSopenharmony_ci            .unwrap();
18419625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::Version));
18519625d8cSopenharmony_ci    }
18619625d8cSopenharmony_ci
18719625d8cSopenharmony_ci    #[test]
18819625d8cSopenharmony_ci    fn short_with_value() {
18919625d8cSopenharmony_ci        let arg = clap::arg!(foo: -b <NUM>);
19019625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "foo");
19119625d8cSopenharmony_ci        assert_eq!(arg.get_short(), Some('b'));
19219625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::Set));
19319625d8cSopenharmony_ci        assert_eq!(arg.get_num_args(), None);
19419625d8cSopenharmony_ci        assert!(!arg.is_required_set());
19519625d8cSopenharmony_ci        assert_eq!(arg.get_help().map(|s| s.to_string()), None);
19619625d8cSopenharmony_ci
19719625d8cSopenharmony_ci        let arg = clap::arg!(foo: -'b' <NUM>);
19819625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "foo");
19919625d8cSopenharmony_ci        assert_eq!(arg.get_short(), Some('b'));
20019625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::Set));
20119625d8cSopenharmony_ci        assert_eq!(arg.get_num_args(), None);
20219625d8cSopenharmony_ci        assert!(!arg.is_required_set());
20319625d8cSopenharmony_ci        assert_eq!(arg.get_help().map(|s| s.to_string()), None);
20419625d8cSopenharmony_ci
20519625d8cSopenharmony_ci        let arg = clap::arg!(foo: -b  <NUM> ...);
20619625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "foo");
20719625d8cSopenharmony_ci        assert_eq!(arg.get_short(), Some('b'));
20819625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::Append));
20919625d8cSopenharmony_ci        assert_eq!(arg.get_num_args(), None);
21019625d8cSopenharmony_ci        assert!(!arg.is_required_set());
21119625d8cSopenharmony_ci        assert_eq!(arg.get_help().map(|s| s.to_string()), None);
21219625d8cSopenharmony_ci
21319625d8cSopenharmony_ci        let arg = clap::arg!(foo: -b  <NUM> "How to use it");
21419625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "foo");
21519625d8cSopenharmony_ci        assert_eq!(arg.get_short(), Some('b'));
21619625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::Set));
21719625d8cSopenharmony_ci        assert_eq!(arg.get_num_args(), None);
21819625d8cSopenharmony_ci        assert!(!arg.is_required_set());
21919625d8cSopenharmony_ci        assert_eq!(
22019625d8cSopenharmony_ci            arg.get_help().map(|s| s.to_string()),
22119625d8cSopenharmony_ci            Some("How to use it".to_owned())
22219625d8cSopenharmony_ci        );
22319625d8cSopenharmony_ci    }
22419625d8cSopenharmony_ci
22519625d8cSopenharmony_ci    #[test]
22619625d8cSopenharmony_ci    fn positional() {
22719625d8cSopenharmony_ci        let arg = clap::arg!(<NUM>);
22819625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "NUM");
22919625d8cSopenharmony_ci        assert_eq!(arg.get_value_names(), Some(vec!["NUM".into()].as_slice()));
23019625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::Set));
23119625d8cSopenharmony_ci        assert_eq!(arg.get_num_args(), None);
23219625d8cSopenharmony_ci        assert!(arg.is_required_set());
23319625d8cSopenharmony_ci        assert_eq!(arg.get_help().map(|s| s.to_string()), None);
23419625d8cSopenharmony_ci
23519625d8cSopenharmony_ci        let arg = clap::arg!([NUM]);
23619625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "NUM");
23719625d8cSopenharmony_ci        assert_eq!(arg.get_value_names(), Some(vec!["NUM".into()].as_slice()));
23819625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::Set));
23919625d8cSopenharmony_ci        assert_eq!(arg.get_num_args(), None);
24019625d8cSopenharmony_ci        assert!(!arg.is_required_set());
24119625d8cSopenharmony_ci        assert_eq!(arg.get_help().map(|s| s.to_string()), None);
24219625d8cSopenharmony_ci
24319625d8cSopenharmony_ci        let arg = clap::arg!(<NUM>);
24419625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "NUM");
24519625d8cSopenharmony_ci        assert_eq!(arg.get_value_names(), Some(vec!["NUM".into()].as_slice()));
24619625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::Set));
24719625d8cSopenharmony_ci        assert_eq!(arg.get_num_args(), None);
24819625d8cSopenharmony_ci        assert!(arg.is_required_set());
24919625d8cSopenharmony_ci        assert_eq!(arg.get_help().map(|s| s.to_string()), None);
25019625d8cSopenharmony_ci
25119625d8cSopenharmony_ci        let arg = clap::arg!(foo: <NUM>);
25219625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "foo");
25319625d8cSopenharmony_ci        assert_eq!(arg.get_value_names(), Some(vec!["NUM".into()].as_slice()));
25419625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::Set));
25519625d8cSopenharmony_ci        assert_eq!(arg.get_num_args(), None);
25619625d8cSopenharmony_ci        assert!(arg.is_required_set());
25719625d8cSopenharmony_ci        assert_eq!(arg.get_help().map(|s| s.to_string()), None);
25819625d8cSopenharmony_ci
25919625d8cSopenharmony_ci        let arg = clap::arg!(<NUM> ...);
26019625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "NUM");
26119625d8cSopenharmony_ci        assert_eq!(arg.get_value_names(), Some(vec!["NUM".into()].as_slice()));
26219625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::Append));
26319625d8cSopenharmony_ci        assert_eq!(arg.get_num_args(), Some((1..).into()));
26419625d8cSopenharmony_ci        assert!(arg.is_required_set());
26519625d8cSopenharmony_ci        assert_eq!(arg.get_help().map(|s| s.to_string()), None);
26619625d8cSopenharmony_ci
26719625d8cSopenharmony_ci        let arg = clap::arg!(<NUM> "How to use it");
26819625d8cSopenharmony_ci        assert_eq!(arg.get_id(), "NUM");
26919625d8cSopenharmony_ci        assert_eq!(arg.get_value_names(), Some(vec!["NUM".into()].as_slice()));
27019625d8cSopenharmony_ci        assert!(matches!(arg.get_action(), clap::ArgAction::Set));
27119625d8cSopenharmony_ci        assert_eq!(arg.get_num_args(), None);
27219625d8cSopenharmony_ci        assert!(arg.is_required_set());
27319625d8cSopenharmony_ci        assert_eq!(
27419625d8cSopenharmony_ci            arg.get_help().map(|s| s.to_string()),
27519625d8cSopenharmony_ci            Some("How to use it".to_owned())
27619625d8cSopenharmony_ci        );
27719625d8cSopenharmony_ci    }
27819625d8cSopenharmony_ci
27919625d8cSopenharmony_ci    #[test]
28019625d8cSopenharmony_ci    #[cfg(all(feature = "help", featiure = "usage"))]
28119625d8cSopenharmony_ci    fn optional_value() {
28219625d8cSopenharmony_ci        let mut cmd = clap::Command::new("test").arg(clap::arg!(port: -p [NUM]));
28319625d8cSopenharmony_ci
28419625d8cSopenharmony_ci        let r = cmd.try_get_matches_from_mut(["test", "-p42"]);
28519625d8cSopenharmony_ci        assert!(r.is_ok(), "{}", r.unwrap_err());
28619625d8cSopenharmony_ci        let m = r.unwrap();
28719625d8cSopenharmony_ci        assert!(m.contains_id("port"));
28819625d8cSopenharmony_ci        assert_eq!(m.get_one::<String>("port").unwrap(), "42");
28919625d8cSopenharmony_ci
29019625d8cSopenharmony_ci        let r = cmd.try_get_matches_from_mut(["test", "-p"]);
29119625d8cSopenharmony_ci        assert!(r.is_ok(), "{}", r.unwrap_err());
29219625d8cSopenharmony_ci        let m = r.unwrap();
29319625d8cSopenharmony_ci        assert!(m.contains_id("port"));
29419625d8cSopenharmony_ci        assert!(m.get_one::<String>("port").is_none());
29519625d8cSopenharmony_ci
29619625d8cSopenharmony_ci        let r = cmd.try_get_matches_from_mut(["test", "-p", "24", "-p", "42"]);
29719625d8cSopenharmony_ci        assert!(r.is_ok(), "{}", r.unwrap_err());
29819625d8cSopenharmony_ci        let m = r.unwrap();
29919625d8cSopenharmony_ci        assert!(m.contains_id("port"));
30019625d8cSopenharmony_ci        assert_eq!(m.get_one::<String>("port").unwrap(), "42");
30119625d8cSopenharmony_ci
30219625d8cSopenharmony_ci        let mut help = Vec::new();
30319625d8cSopenharmony_ci        cmd.write_help(&mut help).unwrap();
30419625d8cSopenharmony_ci        const HELP: &str = "\
30519625d8cSopenharmony_ciUsage: test [OPTIONS]
30619625d8cSopenharmony_ci
30719625d8cSopenharmony_ciOptions:
30819625d8cSopenharmony_ci  -p [<NUM>]
30919625d8cSopenharmony_ci  -h, --help      Print help information
31019625d8cSopenharmony_ci";
31119625d8cSopenharmony_ci        snapbox::assert_eq(HELP, help);
31219625d8cSopenharmony_ci    }
31319625d8cSopenharmony_ci}
31419625d8cSopenharmony_ci
31519625d8cSopenharmony_cimod arg_impl {
31619625d8cSopenharmony_ci    #[test]
31719625d8cSopenharmony_ci    fn string_ident() {
31819625d8cSopenharmony_ci        let expected = "one";
31919625d8cSopenharmony_ci        let actual = clap::arg_impl! { @string one };
32019625d8cSopenharmony_ci        assert_eq!(actual, expected);
32119625d8cSopenharmony_ci    }
32219625d8cSopenharmony_ci
32319625d8cSopenharmony_ci    #[test]
32419625d8cSopenharmony_ci    fn string_literal() {
32519625d8cSopenharmony_ci        let expected = "one";
32619625d8cSopenharmony_ci        let actual = clap::arg_impl! { @string "one" };
32719625d8cSopenharmony_ci        assert_eq!(actual, expected);
32819625d8cSopenharmony_ci    }
32919625d8cSopenharmony_ci
33019625d8cSopenharmony_ci    #[test]
33119625d8cSopenharmony_ci    fn char_ident() {
33219625d8cSopenharmony_ci        let expected = 'o';
33319625d8cSopenharmony_ci        let actual = clap::arg_impl! { @char o };
33419625d8cSopenharmony_ci        assert_eq!(actual, expected);
33519625d8cSopenharmony_ci    }
33619625d8cSopenharmony_ci
33719625d8cSopenharmony_ci    #[test]
33819625d8cSopenharmony_ci    fn char_literal() {
33919625d8cSopenharmony_ci        let expected = 'o';
34019625d8cSopenharmony_ci        let actual = clap::arg_impl! { @char 'o' };
34119625d8cSopenharmony_ci        assert_eq!(actual, expected);
34219625d8cSopenharmony_ci    }
34319625d8cSopenharmony_ci
34419625d8cSopenharmony_ci    #[test]
34519625d8cSopenharmony_ci    // allow double quoted dashed arg name in square brackets (e.g ["some-arg"])
34619625d8cSopenharmony_ci    fn arg_name_dashed() {
34719625d8cSopenharmony_ci        let arg = clap::arg!(["some-arg"] "some arg");
34819625d8cSopenharmony_ci        assert_eq!(arg, clap::Arg::new("some-arg").help("some arg"));
34919625d8cSopenharmony_ci
35019625d8cSopenharmony_ci        let m = clap::Command::new("flag")
35119625d8cSopenharmony_ci            .arg(arg)
35219625d8cSopenharmony_ci            .try_get_matches_from(vec!["", "some-val"])
35319625d8cSopenharmony_ci            .unwrap();
35419625d8cSopenharmony_ci        assert_eq!(m.get_one::<String>("some-arg").unwrap(), "some-val");
35519625d8cSopenharmony_ci    }
35619625d8cSopenharmony_ci
35719625d8cSopenharmony_ci    #[test]
35819625d8cSopenharmony_ci    // allow double quoted dashed arg value in triangle brackets (e.g <"some-val">)
35919625d8cSopenharmony_ci    // test in combination with short argument name (e.g. -v)
36019625d8cSopenharmony_ci    fn arg_value_dashed_with_short_arg() {
36119625d8cSopenharmony_ci        let arg = clap::arg!(-a <"some-val"> "some arg");
36219625d8cSopenharmony_ci        assert_eq!(
36319625d8cSopenharmony_ci            arg,
36419625d8cSopenharmony_ci            clap::Arg::new("some-val")
36519625d8cSopenharmony_ci                .short('a')
36619625d8cSopenharmony_ci                .long("arg")
36719625d8cSopenharmony_ci                .value_name("some-val")
36819625d8cSopenharmony_ci        );
36919625d8cSopenharmony_ci
37019625d8cSopenharmony_ci        let m = clap::Command::new("cmd")
37119625d8cSopenharmony_ci            .arg(arg)
37219625d8cSopenharmony_ci            .try_get_matches_from(vec!["", "-a", "val"])
37319625d8cSopenharmony_ci            .unwrap();
37419625d8cSopenharmony_ci        assert_eq!(m.get_one::<String>("some-val").unwrap(), "val");
37519625d8cSopenharmony_ci    }
37619625d8cSopenharmony_ci
37719625d8cSopenharmony_ci    #[test]
37819625d8cSopenharmony_ci    // allow double quoted dashed arg value in triangle brackets (e.g <"some-val">)
37919625d8cSopenharmony_ci    // test in combination with long argument name (e.g. --value)
38019625d8cSopenharmony_ci    fn arg_value_dashed_with_long_arg() {
38119625d8cSopenharmony_ci        let arg = clap::arg!(-a --arg <"some-val"> "some arg");
38219625d8cSopenharmony_ci        assert_eq!(
38319625d8cSopenharmony_ci            arg,
38419625d8cSopenharmony_ci            clap::Arg::new("arg")
38519625d8cSopenharmony_ci                .short('a')
38619625d8cSopenharmony_ci                .long("arg")
38719625d8cSopenharmony_ci                .value_name("some-val")
38819625d8cSopenharmony_ci        );
38919625d8cSopenharmony_ci
39019625d8cSopenharmony_ci        let m = clap::Command::new("cmd")
39119625d8cSopenharmony_ci            .arg(arg)
39219625d8cSopenharmony_ci            .try_get_matches_from(vec!["", "--arg", "some-val"])
39319625d8cSopenharmony_ci            .unwrap();
39419625d8cSopenharmony_ci        assert_eq!(m.get_one::<String>("arg").unwrap(), "some-val");
39519625d8cSopenharmony_ci    }
39619625d8cSopenharmony_ci}
397