2015-12-10 06:41:50 +00:00
|
|
|
extern crate clap;
|
|
|
|
|
2016-01-31 12:37:20 +00:00
|
|
|
use clap::{App, Arg, ErrorKind, SubCommand};
|
2015-12-10 06:41:50 +00:00
|
|
|
|
|
|
|
#[test]
|
2016-01-13 16:28:24 +00:00
|
|
|
fn multiple_values_of_option_long() {
|
2015-12-10 06:41:50 +00:00
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.long("option")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
|
|
|
.multiple(true))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"--option", "val1",
|
|
|
|
"--option", "val2",
|
|
|
|
"--option", "val3",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 3);
|
2016-01-26 07:05:32 +00:00
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3"]);
|
2015-12-10 06:41:50 +00:00
|
|
|
}
|
|
|
|
|
2016-01-31 12:37:20 +00:00
|
|
|
#[test]
|
|
|
|
fn multiple_values_with_subcmd() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.long("option")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
|
|
|
.multiple(true))
|
|
|
|
.subcommand(SubCommand::with_name("foo"))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"--option", "val1",
|
|
|
|
"val2", "foo"
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 1);
|
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2"]);
|
|
|
|
assert_eq!(m.subcommand_name(), Some("foo"));
|
|
|
|
}
|
|
|
|
|
2015-12-10 06:41:50 +00:00
|
|
|
#[test]
|
2016-01-13 16:28:24 +00:00
|
|
|
fn multiple_values_of_option_short() {
|
2015-12-10 06:41:50 +00:00
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.short("o")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
|
|
|
.multiple(true))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"-o", "val1",
|
|
|
|
"-o", "val2",
|
|
|
|
"-o", "val3",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 3);
|
2016-01-26 07:05:32 +00:00
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3"]);
|
2015-12-10 06:41:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2016-01-13 16:28:24 +00:00
|
|
|
fn multiple_values_of_option_mixed() {
|
2015-12-10 06:41:50 +00:00
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.long("option")
|
|
|
|
.short("o")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
|
|
|
.multiple(true))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"-o", "val1",
|
|
|
|
"--option", "val2",
|
|
|
|
"--option", "val3",
|
|
|
|
"-o", "val4",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 4);
|
2016-01-26 07:05:32 +00:00
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3", "val4"]);
|
2015-12-10 06:41:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2016-01-13 16:28:24 +00:00
|
|
|
fn multiple_values_of_option_exact_exact() {
|
2015-12-10 06:41:50 +00:00
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.short("o")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
|
|
|
.multiple(true)
|
|
|
|
.number_of_values(3))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"-o", "val1",
|
|
|
|
"-o", "val2",
|
|
|
|
"-o", "val3",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 3);
|
2016-01-26 07:05:32 +00:00
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3"]);
|
2015-12-10 06:41:50 +00:00
|
|
|
}
|
|
|
|
|
2016-02-05 00:44:30 +00:00
|
|
|
#[test]
|
|
|
|
fn multiple_values_of_option_exact_exact_not_mult() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.short("o")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
|
|
|
.number_of_values(3))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"-o", "val1", "val2", "val3",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 1);
|
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3"]);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_of_option_exact_exact_mult() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.short("o")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
|
|
|
.multiple(true)
|
|
|
|
.number_of_values(3))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"-o", "val1", "val2", "val3",
|
|
|
|
"-o", "val4", "val5", "val6",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 2);
|
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3", "val4", "val5", "val6"]);
|
|
|
|
}
|
|
|
|
|
2015-12-10 06:41:50 +00:00
|
|
|
#[test]
|
2016-01-13 16:28:24 +00:00
|
|
|
fn multiple_values_of_option_exact_less() {
|
2015-12-10 06:41:50 +00:00
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.short("o")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
|
|
|
.multiple(true)
|
|
|
|
.number_of_values(3))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"-o", "val1",
|
|
|
|
"-o", "val2",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_err());
|
2016-01-22 04:18:52 +00:00
|
|
|
assert_eq!(m.unwrap_err().kind, ErrorKind::WrongNumberOfValues);
|
2015-12-10 06:41:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2016-01-13 16:28:24 +00:00
|
|
|
fn multiple_values_of_option_exact_more() {
|
2015-12-10 06:41:50 +00:00
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.short("o")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
|
|
|
.multiple(true)
|
|
|
|
.number_of_values(3))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"-o", "val1",
|
|
|
|
"-o", "val2",
|
|
|
|
"-o", "val3",
|
|
|
|
"-o", "val4",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_err());
|
2016-01-22 04:18:52 +00:00
|
|
|
assert_eq!(m.unwrap_err().kind, ErrorKind::WrongNumberOfValues);
|
2015-12-10 06:41:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2016-01-13 16:28:24 +00:00
|
|
|
fn multiple_values_of_option_min_exact() {
|
2015-12-10 06:41:50 +00:00
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.short("o")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
2016-01-25 18:13:58 +00:00
|
|
|
.multiple(true)
|
2015-12-10 06:41:50 +00:00
|
|
|
.min_values(3))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"-o", "val1",
|
|
|
|
"-o", "val2",
|
|
|
|
"-o", "val3",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 3);
|
2016-01-26 07:05:32 +00:00
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3"]);
|
2015-12-10 06:41:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2016-01-13 16:28:24 +00:00
|
|
|
fn multiple_values_of_option_min_less() {
|
2015-12-10 06:41:50 +00:00
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.short("o")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
2016-01-25 18:13:58 +00:00
|
|
|
.multiple(true)
|
2015-12-10 06:41:50 +00:00
|
|
|
.min_values(3))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"-o", "val1",
|
|
|
|
"-o", "val2",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_err());
|
2016-01-21 05:18:53 +00:00
|
|
|
assert_eq!(m.unwrap_err().kind, ErrorKind::TooFewValues);
|
2015-12-10 06:41:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2016-02-05 03:15:10 +00:00
|
|
|
fn option_short_min_more_mult_occurs() {
|
2015-12-10 06:41:50 +00:00
|
|
|
let m = App::new("multiple_values")
|
2016-02-05 03:15:10 +00:00
|
|
|
.arg(Arg::with_name("arg")
|
|
|
|
.required(true))
|
2015-12-10 06:41:50 +00:00
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.short("o")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
2016-01-25 18:13:58 +00:00
|
|
|
.multiple(true)
|
2015-12-10 06:41:50 +00:00
|
|
|
.min_values(3))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
2016-02-05 03:15:10 +00:00
|
|
|
"pos",
|
2015-12-10 06:41:50 +00:00
|
|
|
"-o", "val1",
|
|
|
|
"-o", "val2",
|
|
|
|
"-o", "val3",
|
|
|
|
"-o", "val4",
|
|
|
|
]);
|
|
|
|
|
2016-02-05 03:15:10 +00:00
|
|
|
let m = m.map_err(|e| println!("failed to unwrap err with error kind {:?}", e.kind)).unwrap();
|
2015-12-10 06:41:50 +00:00
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
2016-02-05 03:15:10 +00:00
|
|
|
assert!(m.is_present("arg"));
|
2015-12-10 06:41:50 +00:00
|
|
|
assert_eq!(m.occurrences_of("option"), 4);
|
2016-01-26 07:05:32 +00:00
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3", "val4"]);
|
2016-02-05 03:15:10 +00:00
|
|
|
assert_eq!(m.value_of("arg"), Some("pos"));
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn option_short_min_more_single_occur() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("arg")
|
|
|
|
.required(true))
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.short("o")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
|
|
|
.multiple(true)
|
|
|
|
.min_values(3))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"pos",
|
|
|
|
"-o", "val1",
|
|
|
|
"val2",
|
|
|
|
"val3",
|
|
|
|
"val4",
|
|
|
|
]);
|
|
|
|
|
|
|
|
let m = m.map_err(|e| println!("failed to unwrap err with error kind {:#?}", e)).unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert!(m.is_present("arg"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 1);
|
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3", "val4"]);
|
|
|
|
assert_eq!(m.value_of("arg"), Some("pos"));
|
2015-12-10 06:41:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2016-01-13 16:28:24 +00:00
|
|
|
fn multiple_values_of_option_max_exact() {
|
2015-12-10 06:41:50 +00:00
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.short("o")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
2016-01-25 18:13:58 +00:00
|
|
|
.multiple(true)
|
2015-12-10 06:41:50 +00:00
|
|
|
.max_values(3))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"-o", "val1",
|
|
|
|
"-o", "val2",
|
|
|
|
"-o", "val3",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 3);
|
2016-01-26 07:05:32 +00:00
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3"]);
|
2015-12-10 06:41:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2016-01-13 16:28:24 +00:00
|
|
|
fn multiple_values_of_option_max_less() {
|
2015-12-10 06:41:50 +00:00
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.short("o")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
2016-01-25 18:13:58 +00:00
|
|
|
.multiple(true)
|
2015-12-10 06:41:50 +00:00
|
|
|
.max_values(3))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"-o", "val1",
|
|
|
|
"-o", "val2",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 2);
|
2016-01-26 07:05:32 +00:00
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2"]);
|
2015-12-10 06:41:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2016-01-13 16:28:24 +00:00
|
|
|
fn multiple_values_of_option_max_more() {
|
2015-12-10 06:41:50 +00:00
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.short("o")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
2016-01-25 18:13:58 +00:00
|
|
|
.multiple(true)
|
2015-12-10 06:41:50 +00:00
|
|
|
.max_values(3))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"-o", "val1",
|
|
|
|
"-o", "val2",
|
|
|
|
"-o", "val3",
|
|
|
|
"-o", "val4",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_err());
|
2016-01-21 05:18:53 +00:00
|
|
|
assert_eq!(m.unwrap_err().kind, ErrorKind::TooManyValues);
|
2015-12-10 06:41:50 +00:00
|
|
|
}
|
2016-01-13 16:28:24 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_of_positional() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("pos")
|
|
|
|
.help("multiple positionals")
|
|
|
|
.multiple(true))
|
2016-01-21 05:18:53 +00:00
|
|
|
.get_matches_from_safe(vec!["myprog", "val1", "val2", "val3"]);
|
2016-01-13 16:28:24 +00:00
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("pos"));
|
|
|
|
assert_eq!(m.occurrences_of("pos"), 3);
|
2016-01-26 07:05:32 +00:00
|
|
|
assert_eq!(m.values_of("pos").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3"]);
|
2016-01-13 16:28:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_of_positional_exact_exact() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("pos")
|
|
|
|
.help("multiple positionals")
|
|
|
|
.number_of_values(3))
|
2016-01-21 05:18:53 +00:00
|
|
|
.get_matches_from_safe(vec!["myprog", "val1", "val2", "val3"]);
|
2016-01-13 16:28:24 +00:00
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("pos"));
|
|
|
|
assert_eq!(m.occurrences_of("pos"), 3);
|
2016-01-26 07:05:32 +00:00
|
|
|
assert_eq!(m.values_of("pos").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3"]);
|
2016-01-13 16:28:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_of_positional_exact_less() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("pos")
|
|
|
|
.help("multiple positionals")
|
|
|
|
.number_of_values(3))
|
2016-01-21 05:18:53 +00:00
|
|
|
.get_matches_from_safe(vec!["myprog", "val1", "val2"]);
|
2016-01-13 16:28:24 +00:00
|
|
|
|
|
|
|
assert!(m.is_err());
|
2016-01-22 04:18:52 +00:00
|
|
|
assert_eq!(m.unwrap_err().kind, ErrorKind::WrongNumberOfValues);
|
2016-01-13 16:28:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_of_positional_exact_more() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("pos")
|
|
|
|
.help("multiple positionals")
|
|
|
|
.number_of_values(3))
|
2016-01-21 05:18:53 +00:00
|
|
|
.get_matches_from_safe(vec!["myprog", "val1", "val2", "val3", "val4"]);
|
2016-01-13 16:28:24 +00:00
|
|
|
|
|
|
|
assert!(m.is_err());
|
2016-01-22 04:18:52 +00:00
|
|
|
assert_eq!(m.unwrap_err().kind, ErrorKind::WrongNumberOfValues);
|
2016-01-13 16:28:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_of_positional_min_exact() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("pos")
|
|
|
|
.help("multiple positionals")
|
|
|
|
.min_values(3))
|
2016-01-21 05:18:53 +00:00
|
|
|
.get_matches_from_safe(vec!["myprog", "val1", "val2", "val3"]);
|
2016-01-13 16:28:24 +00:00
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("pos"));
|
|
|
|
assert_eq!(m.occurrences_of("pos"), 3);
|
2016-01-26 07:05:32 +00:00
|
|
|
assert_eq!(m.values_of("pos").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3"]);
|
2016-01-13 16:28:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_of_positional_min_less() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("pos")
|
|
|
|
.help("multiple positionals")
|
|
|
|
.min_values(3))
|
2016-01-21 05:18:53 +00:00
|
|
|
.get_matches_from_safe(vec!["myprog", "val1", "val2"]);
|
2016-01-13 16:28:24 +00:00
|
|
|
|
|
|
|
assert!(m.is_err());
|
2016-01-21 05:18:53 +00:00
|
|
|
assert_eq!(m.unwrap_err().kind, ErrorKind::TooFewValues);
|
2016-01-13 16:28:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_of_positional_min_more() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("pos")
|
|
|
|
.help("multiple positionals")
|
|
|
|
.min_values(3))
|
2016-01-21 05:18:53 +00:00
|
|
|
.get_matches_from_safe(vec!["myprog", "val1", "val2", "val3", "val4"]);
|
2016-01-13 16:28:24 +00:00
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("pos"));
|
|
|
|
assert_eq!(m.occurrences_of("pos"), 4);
|
2016-01-26 07:05:32 +00:00
|
|
|
assert_eq!(m.values_of("pos").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3", "val4"]);
|
2016-01-13 16:28:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_of_positional_max_exact() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("pos")
|
|
|
|
.help("multiple positionals")
|
|
|
|
.max_values(3))
|
2016-01-21 05:18:53 +00:00
|
|
|
.get_matches_from_safe(vec!["myprog", "val1", "val2", "val3"]);
|
2016-01-13 16:28:24 +00:00
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("pos"));
|
|
|
|
assert_eq!(m.occurrences_of("pos"), 3);
|
2016-01-26 07:05:32 +00:00
|
|
|
assert_eq!(m.values_of("pos").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3"]);
|
2016-01-13 16:28:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_of_positional_max_less() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("pos")
|
|
|
|
.help("multiple positionals")
|
|
|
|
.max_values(3))
|
2016-01-21 05:18:53 +00:00
|
|
|
.get_matches_from_safe(vec!["myprog", "val1", "val2"]);
|
2016-01-13 16:28:24 +00:00
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("pos"));
|
|
|
|
assert_eq!(m.occurrences_of("pos"), 2);
|
2016-01-26 07:05:32 +00:00
|
|
|
assert_eq!(m.values_of("pos").unwrap().collect::<Vec<_>>(), ["val1", "val2"]);
|
2016-01-13 16:28:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_of_positional_max_more() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("pos")
|
|
|
|
.help("multiple positionals")
|
|
|
|
.max_values(3))
|
2016-01-21 05:18:53 +00:00
|
|
|
.get_matches_from_safe(vec!["myprog", "val1", "val2", "val3", "val4"]);
|
2016-01-13 16:28:24 +00:00
|
|
|
|
|
|
|
assert!(m.is_err());
|
2016-01-21 05:18:53 +00:00
|
|
|
assert_eq!(m.unwrap_err().kind, ErrorKind::TooManyValues);
|
2016-01-13 16:28:24 +00:00
|
|
|
}
|
2016-01-26 07:05:32 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_sep_long_equals() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.long("option")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
|
|
|
.multiple(true))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"--option=val1,val2,val3",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 1);
|
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3"]);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_sep_long_space() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.long("option")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
|
|
|
.multiple(true))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"--option",
|
|
|
|
"val1,val2,val3",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 1);
|
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3"]);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_sep_short_equals() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.short("o")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
|
|
|
.multiple(true))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"-o=val1,val2,val3",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 1);
|
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3"]);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_sep_short_space() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.short("o")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
|
|
|
.multiple(true))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"-o",
|
|
|
|
"val1,val2,val3",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 1);
|
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3"]);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_sep_short_no_space() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.short("o")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
|
|
|
.multiple(true))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"-oval1,val2,val3",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 1);
|
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3"]);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_sep_positional() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.help("multiple options")
|
|
|
|
.multiple(true))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"val1,val2,val3",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 1);
|
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3"]);
|
|
|
|
}
|
2016-01-26 15:14:27 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_different_sep() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.long("option")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
|
|
|
.value_delimiter(";"))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"--option=val1;val2;val3",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 1);
|
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3"]);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_different_sep_positional() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.help("multiple options")
|
|
|
|
.value_delimiter(";"))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"val1;val2;val3",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 1);
|
|
|
|
assert_eq!(m.values_of("option").unwrap().collect::<Vec<_>>(), ["val1", "val2", "val3"]);
|
|
|
|
}
|
2016-01-26 15:52:31 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_no_sep() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.long("option")
|
|
|
|
.help("multiple options")
|
|
|
|
.takes_value(true)
|
|
|
|
.use_delimiter(false))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"--option=val1,val2,val3",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 1);
|
|
|
|
assert_eq!(m.value_of("option").unwrap(), "val1,val2,val3");
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_values_no_sep_positional() {
|
|
|
|
let m = App::new("multiple_values")
|
|
|
|
.arg(Arg::with_name("option")
|
|
|
|
.help("multiple options")
|
|
|
|
.use_delimiter(false))
|
|
|
|
.get_matches_from_safe(vec![
|
|
|
|
"",
|
|
|
|
"val1,val2,val3",
|
|
|
|
]);
|
|
|
|
|
|
|
|
assert!(m.is_ok());
|
|
|
|
let m = m.unwrap();
|
|
|
|
|
|
|
|
assert!(m.is_present("option"));
|
|
|
|
assert_eq!(m.occurrences_of("option"), 1);
|
|
|
|
assert_eq!(m.value_of("option").unwrap(), "val1,val2,val3");
|
|
|
|
}
|