mirror of
https://github.com/clap-rs/clap
synced 2024-12-14 06:42:33 +00:00
108 lines
3.2 KiB
Rust
108 lines
3.2 KiB
Rust
|
use clap::{App, AppSettings, Arg};
|
||
|
|
||
|
#[test]
|
||
|
fn single_short_arg_without_value() {
|
||
|
let app = App::new("app")
|
||
|
.setting(AppSettings::IgnoreErrors)
|
||
|
.arg("-c, --config=[FILE] 'Sets a custom config file'");
|
||
|
|
||
|
let r = app.try_get_matches_from(vec!["app", "-c" /* missing: , "config file" */]);
|
||
|
|
||
|
assert!(r.is_ok(), "unexpected error: {:?}", r);
|
||
|
let m = r.unwrap();
|
||
|
assert!(m.is_present("config"));
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn single_long_arg_without_value() {
|
||
|
let app = App::new("app")
|
||
|
.setting(AppSettings::IgnoreErrors)
|
||
|
.arg("-c, --config=[FILE] 'Sets a custom config file'");
|
||
|
|
||
|
let r = app.try_get_matches_from(vec!["app", "--config" /* missing: , "config file" */]);
|
||
|
|
||
|
assert!(r.is_ok(), "unexpected error: {:?}", r);
|
||
|
let m = r.unwrap();
|
||
|
assert!(m.is_present("config"));
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn multiple_args_and_final_arg_without_value() {
|
||
|
let app = App::new("app")
|
||
|
.setting(AppSettings::IgnoreErrors)
|
||
|
.arg("-c, --config=[FILE] 'Sets a custom config file'")
|
||
|
.arg("-x, --stuff=[FILE] 'Sets a custom stuff file'")
|
||
|
.arg("-f 'Flag'");
|
||
|
|
||
|
let r = app.try_get_matches_from(vec![
|
||
|
"app", "-c", "file", "-f", "-x", /* missing: , "some stuff" */
|
||
|
]);
|
||
|
|
||
|
assert!(r.is_ok(), "unexpected error: {:?}", r);
|
||
|
let m = r.unwrap();
|
||
|
assert_eq!(m.value_of("config"), Some("file"));
|
||
|
assert!(m.is_present("f"));
|
||
|
assert_eq!(m.value_of("stuff"), None);
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn multiple_args_and_intermittent_arg_without_value() {
|
||
|
let app = App::new("app")
|
||
|
.setting(AppSettings::IgnoreErrors)
|
||
|
.arg("-c, --config=[FILE] 'Sets a custom config file'")
|
||
|
.arg("-x, --stuff=[FILE] 'Sets a custom stuff file'")
|
||
|
.arg("-f 'Flag'");
|
||
|
|
||
|
let r = app.try_get_matches_from(vec![
|
||
|
"app", "-x", /* missing: ,"some stuff" */
|
||
|
"-c", "file", "-f",
|
||
|
]);
|
||
|
|
||
|
assert!(r.is_ok(), "unexpected error: {:?}", r);
|
||
|
let m = r.unwrap();
|
||
|
assert_eq!(m.value_of("config"), Some("file"));
|
||
|
assert!(m.is_present("f"));
|
||
|
assert_eq!(m.value_of("stuff"), None);
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn subcommand() {
|
||
|
let app = App::new("test")
|
||
|
.setting(AppSettings::IgnoreErrors)
|
||
|
.subcommand(
|
||
|
App::new("some")
|
||
|
.arg(
|
||
|
Arg::new("test")
|
||
|
.short('t')
|
||
|
.long("test")
|
||
|
.takes_value(true)
|
||
|
.about("testing testing"),
|
||
|
)
|
||
|
.arg(
|
||
|
Arg::new("stuff")
|
||
|
.short('x')
|
||
|
.long("stuff")
|
||
|
.takes_value(true)
|
||
|
.about("stuf value"),
|
||
|
),
|
||
|
)
|
||
|
.arg(Arg::new("other").long("other"));
|
||
|
|
||
|
let m = app.get_matches_from(vec![
|
||
|
"myprog",
|
||
|
"some",
|
||
|
"--test", /* missing: ,"some val" */
|
||
|
"-x",
|
||
|
"some other val",
|
||
|
]);
|
||
|
|
||
|
assert_eq!(m.subcommand_name().unwrap(), "some");
|
||
|
let sub_m = m.subcommand_matches("some").unwrap();
|
||
|
assert!(
|
||
|
sub_m.is_present("test"),
|
||
|
"expected subcommand to be present due to partial parsing"
|
||
|
);
|
||
|
assert_eq!(sub_m.value_of("test"), None);
|
||
|
assert_eq!(sub_m.value_of("stuff"), Some("some other val"));
|
||
|
}
|