| // Internal |
| use args::settings::ArgSettings; |
| use args::Arg; |
| use map::VecMap; |
| use INTERNAL_ERROR_MSG; |
| |
| #[derive(PartialEq, Debug)] |
| enum UsageToken { |
| Name, |
| ValName, |
| Short, |
| Long, |
| Help, |
| Multiple, |
| Unknown, |
| } |
| |
| #[doc(hidden)] |
| #[derive(Debug)] |
| pub struct UsageParser<'a> { |
| usage: &'a str, |
| pos: usize, |
| start: usize, |
| prev: UsageToken, |
| explicit_name_set: bool, |
| } |
| |
| impl<'a> UsageParser<'a> { |
| fn new(usage: &'a str) -> Self { |
| debugln!("UsageParser::new: usage={:?}", usage); |
| UsageParser { |
| usage: usage, |
| pos: 0, |
| start: 0, |
| prev: UsageToken::Unknown, |
| explicit_name_set: false, |
| } |
| } |
| |
| pub fn from_usage(usage: &'a str) -> Self { |
| debugln!("UsageParser::from_usage;"); |
| UsageParser::new(usage) |
| } |
| |
| pub fn parse(mut self) -> Arg<'a, 'a> { |
| debugln!("UsageParser::parse;"); |
| let mut arg = Arg::default(); |
| loop { |
| debugln!("UsageParser::parse:iter: pos={};", self.pos); |
| self.stop_at(token); |
| if let Some(&c) = self.usage.as_bytes().get(self.pos) { |
| match c { |
| b'-' => self.short_or_long(&mut arg), |
| b'.' => self.multiple(&mut arg), |
| b'\'' => self.help(&mut arg), |
| _ => self.name(&mut arg), |
| } |
| } else { |
| break; |
| } |
| } |
| debug_assert!( |
| !arg.b.name.is_empty(), |
| format!( |
| "No name found for Arg when parsing usage string: {}", |
| self.usage |
| ) |
| ); |
| arg.v.num_vals = match arg.v.val_names { |
| Some(ref v) if v.len() >= 2 => Some(v.len() as u64), |
| _ => None, |
| }; |
| debugln!("UsageParser::parse: vals...{:?}", arg.v.val_names); |
| arg |
| } |
| |
| fn name(&mut self, arg: &mut Arg<'a, 'a>) { |
| debugln!("UsageParser::name;"); |
| if *self |
| .usage |
| .as_bytes() |
| .get(self.pos) |
| .expect(INTERNAL_ERROR_MSG) |
| == b'<' |
| && !self.explicit_name_set |
| { |
| arg.setb(ArgSettings::Required); |
| } |
| self.pos += 1; |
| self.stop_at(name_end); |
| let name = &self.usage[self.start..self.pos]; |
| if self.prev == UsageToken::Unknown { |
| debugln!("UsageParser::name: setting name...{}", name); |
| arg.b.name = name; |
| if arg.s.long.is_none() && arg.s.short.is_none() { |
| debugln!("UsageParser::name: explicit name set..."); |
| self.explicit_name_set = true; |
| self.prev = UsageToken::Name; |
| } |
| } else { |
| debugln!("UsageParser::name: setting val name...{}", name); |
| if let Some(ref mut v) = arg.v.val_names { |
| let len = v.len(); |
| v.insert(len, name); |
| } else { |
| let mut v = VecMap::new(); |
| v.insert(0, name); |
| arg.v.val_names = Some(v); |
| arg.setb(ArgSettings::TakesValue); |
| } |
| self.prev = UsageToken::ValName; |
| } |
| } |
| |
| fn stop_at<F>(&mut self, f: F) |
| where |
| F: Fn(u8) -> bool, |
| { |
| debugln!("UsageParser::stop_at;"); |
| self.start = self.pos; |
| self.pos += self.usage[self.start..] |
| .bytes() |
| .take_while(|&b| f(b)) |
| .count(); |
| } |
| |
| fn short_or_long(&mut self, arg: &mut Arg<'a, 'a>) { |
| debugln!("UsageParser::short_or_long;"); |
| self.pos += 1; |
| if *self |
| .usage |
| .as_bytes() |
| .get(self.pos) |
| .expect(INTERNAL_ERROR_MSG) |
| == b'-' |
| { |
| self.pos += 1; |
| self.long(arg); |
| return; |
| } |
| self.short(arg) |
| } |
| |
| fn long(&mut self, arg: &mut Arg<'a, 'a>) { |
| debugln!("UsageParser::long;"); |
| self.stop_at(long_end); |
| let name = &self.usage[self.start..self.pos]; |
| if !self.explicit_name_set { |
| debugln!("UsageParser::long: setting name...{}", name); |
| arg.b.name = name; |
| } |
| debugln!("UsageParser::long: setting long...{}", name); |
| arg.s.long = Some(name); |
| self.prev = UsageToken::Long; |
| } |
| |
| fn short(&mut self, arg: &mut Arg<'a, 'a>) { |
| debugln!("UsageParser::short;"); |
| let start = &self.usage[self.pos..]; |
| let short = start.chars().nth(0).expect(INTERNAL_ERROR_MSG); |
| debugln!("UsageParser::short: setting short...{}", short); |
| arg.s.short = Some(short); |
| if arg.b.name.is_empty() { |
| // --long takes precedence but doesn't set self.explicit_name_set |
| let name = &start[..short.len_utf8()]; |
| debugln!("UsageParser::short: setting name...{}", name); |
| arg.b.name = name; |
| } |
| self.prev = UsageToken::Short; |
| } |
| |
| // "something..." |
| fn multiple(&mut self, arg: &mut Arg) { |
| debugln!("UsageParser::multiple;"); |
| let mut dot_counter = 1; |
| let start = self.pos; |
| let mut bytes = self.usage[start..].bytes(); |
| while bytes.next() == Some(b'.') { |
| dot_counter += 1; |
| self.pos += 1; |
| if dot_counter == 3 { |
| debugln!("UsageParser::multiple: setting multiple"); |
| arg.setb(ArgSettings::Multiple); |
| if arg.is_set(ArgSettings::TakesValue) { |
| arg.setb(ArgSettings::UseValueDelimiter); |
| arg.unsetb(ArgSettings::ValueDelimiterNotSet); |
| if arg.v.val_delim.is_none() { |
| arg.v.val_delim = Some(','); |
| } |
| } |
| self.prev = UsageToken::Multiple; |
| self.pos += 1; |
| break; |
| } |
| } |
| } |
| |
| fn help(&mut self, arg: &mut Arg<'a, 'a>) { |
| debugln!("UsageParser::help;"); |
| self.stop_at(help_start); |
| self.start = self.pos + 1; |
| self.pos = self.usage.len() - 1; |
| debugln!( |
| "UsageParser::help: setting help...{}", |
| &self.usage[self.start..self.pos] |
| ); |
| arg.b.help = Some(&self.usage[self.start..self.pos]); |
| self.pos += 1; // Move to next byte to keep from thinking ending ' is a start |
| self.prev = UsageToken::Help; |
| } |
| } |
| |
| #[inline] |
| fn name_end(b: u8) -> bool { |
| b != b']' && b != b'>' |
| } |
| |
| #[inline] |
| fn token(b: u8) -> bool { |
| b != b'\'' && b != b'.' && b != b'<' && b != b'[' && b != b'-' |
| } |
| |
| #[inline] |
| fn long_end(b: u8) -> bool { |
| b != b'\'' && b != b'.' && b != b'<' && b != b'[' && b != b'=' && b != b' ' |
| } |
| |
| #[inline] |
| fn help_start(b: u8) -> bool { |
| b != b'\'' |
| } |
| |
| #[cfg(test)] |
| mod test { |
| use args::Arg; |
| use args::ArgSettings; |
| |
| #[test] |
| fn create_flag_usage() { |
| let a = Arg::from_usage("[flag] -f 'some help info'"); |
| assert_eq!(a.b.name, "flag"); |
| assert_eq!(a.s.short.unwrap(), 'f'); |
| assert!(a.s.long.is_none()); |
| assert_eq!(a.b.help.unwrap(), "some help info"); |
| assert!(!a.is_set(ArgSettings::Multiple)); |
| assert!(a.v.val_names.is_none()); |
| assert!(a.v.num_vals.is_none()); |
| |
| let b = Arg::from_usage("[flag] --flag 'some help info'"); |
| assert_eq!(b.b.name, "flag"); |
| assert_eq!(b.s.long.unwrap(), "flag"); |
| assert!(b.s.short.is_none()); |
| assert_eq!(b.b.help.unwrap(), "some help info"); |
| assert!(!b.is_set(ArgSettings::Multiple)); |
| assert!(a.v.val_names.is_none()); |
| assert!(a.v.num_vals.is_none()); |
| |
| let b = Arg::from_usage("--flag 'some help info'"); |
| assert_eq!(b.b.name, "flag"); |
| assert_eq!(b.s.long.unwrap(), "flag"); |
| assert!(b.s.short.is_none()); |
| assert_eq!(b.b.help.unwrap(), "some help info"); |
| assert!(!b.is_set(ArgSettings::Multiple)); |
| assert!(b.v.val_names.is_none()); |
| assert!(b.v.num_vals.is_none()); |
| |
| let c = Arg::from_usage("[flag] -f --flag 'some help info'"); |
| assert_eq!(c.b.name, "flag"); |
| assert_eq!(c.s.short.unwrap(), 'f'); |
| assert_eq!(c.s.long.unwrap(), "flag"); |
| assert_eq!(c.b.help.unwrap(), "some help info"); |
| assert!(!c.is_set(ArgSettings::Multiple)); |
| assert!(c.v.val_names.is_none()); |
| assert!(c.v.num_vals.is_none()); |
| |
| let d = Arg::from_usage("[flag] -f... 'some help info'"); |
| assert_eq!(d.b.name, "flag"); |
| assert_eq!(d.s.short.unwrap(), 'f'); |
| assert!(d.s.long.is_none()); |
| assert_eq!(d.b.help.unwrap(), "some help info"); |
| assert!(d.is_set(ArgSettings::Multiple)); |
| assert!(d.v.val_names.is_none()); |
| assert!(d.v.num_vals.is_none()); |
| |
| let e = Arg::from_usage("[flag] -f --flag... 'some help info'"); |
| assert_eq!(e.b.name, "flag"); |
| assert_eq!(e.s.long.unwrap(), "flag"); |
| assert_eq!(e.s.short.unwrap(), 'f'); |
| assert_eq!(e.b.help.unwrap(), "some help info"); |
| assert!(e.is_set(ArgSettings::Multiple)); |
| assert!(e.v.val_names.is_none()); |
| assert!(e.v.num_vals.is_none()); |
| |
| let e = Arg::from_usage("-f --flag... 'some help info'"); |
| assert_eq!(e.b.name, "flag"); |
| assert_eq!(e.s.long.unwrap(), "flag"); |
| assert_eq!(e.s.short.unwrap(), 'f'); |
| assert_eq!(e.b.help.unwrap(), "some help info"); |
| assert!(e.is_set(ArgSettings::Multiple)); |
| assert!(e.v.val_names.is_none()); |
| assert!(e.v.num_vals.is_none()); |
| |
| let e = Arg::from_usage("--flags"); |
| assert_eq!(e.b.name, "flags"); |
| assert_eq!(e.s.long.unwrap(), "flags"); |
| assert!(e.v.val_names.is_none()); |
| assert!(e.v.num_vals.is_none()); |
| |
| let e = Arg::from_usage("--flags..."); |
| assert_eq!(e.b.name, "flags"); |
| assert_eq!(e.s.long.unwrap(), "flags"); |
| assert!(e.is_set(ArgSettings::Multiple)); |
| assert!(e.v.val_names.is_none()); |
| assert!(e.v.num_vals.is_none()); |
| |
| let e = Arg::from_usage("[flags] -f"); |
| assert_eq!(e.b.name, "flags"); |
| assert_eq!(e.s.short.unwrap(), 'f'); |
| assert!(e.v.val_names.is_none()); |
| assert!(e.v.num_vals.is_none()); |
| |
| let e = Arg::from_usage("[flags] -f..."); |
| assert_eq!(e.b.name, "flags"); |
| assert_eq!(e.s.short.unwrap(), 'f'); |
| assert!(e.is_set(ArgSettings::Multiple)); |
| assert!(e.v.val_names.is_none()); |
| assert!(e.v.num_vals.is_none()); |
| |
| let a = Arg::from_usage("-f 'some help info'"); |
| assert_eq!(a.b.name, "f"); |
| assert_eq!(a.s.short.unwrap(), 'f'); |
| assert!(a.s.long.is_none()); |
| assert_eq!(a.b.help.unwrap(), "some help info"); |
| assert!(!a.is_set(ArgSettings::Multiple)); |
| assert!(a.v.val_names.is_none()); |
| assert!(a.v.num_vals.is_none()); |
| |
| let e = Arg::from_usage("-f"); |
| assert_eq!(e.b.name, "f"); |
| assert_eq!(e.s.short.unwrap(), 'f'); |
| assert!(e.v.val_names.is_none()); |
| assert!(e.v.num_vals.is_none()); |
| |
| let e = Arg::from_usage("-f..."); |
| assert_eq!(e.b.name, "f"); |
| assert_eq!(e.s.short.unwrap(), 'f'); |
| assert!(e.is_set(ArgSettings::Multiple)); |
| assert!(e.v.val_names.is_none()); |
| assert!(e.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage0() { |
| // Short only |
| let a = Arg::from_usage("[option] -o [opt] 'some help info'"); |
| assert_eq!(a.b.name, "option"); |
| assert_eq!(a.s.short.unwrap(), 'o'); |
| assert!(a.s.long.is_none()); |
| assert_eq!(a.b.help.unwrap(), "some help info"); |
| assert!(!a.is_set(ArgSettings::Multiple)); |
| assert!(a.is_set(ArgSettings::TakesValue)); |
| assert!(!a.is_set(ArgSettings::Required)); |
| assert_eq!( |
| a.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(a.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage1() { |
| let b = Arg::from_usage("-o [opt] 'some help info'"); |
| assert_eq!(b.b.name, "o"); |
| assert_eq!(b.s.short.unwrap(), 'o'); |
| assert!(b.s.long.is_none()); |
| assert_eq!(b.b.help.unwrap(), "some help info"); |
| assert!(!b.is_set(ArgSettings::Multiple)); |
| assert!(b.is_set(ArgSettings::TakesValue)); |
| assert!(!b.is_set(ArgSettings::Required)); |
| assert_eq!( |
| b.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(b.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage2() { |
| let c = Arg::from_usage("<option> -o <opt> 'some help info'"); |
| assert_eq!(c.b.name, "option"); |
| assert_eq!(c.s.short.unwrap(), 'o'); |
| assert!(c.s.long.is_none()); |
| assert_eq!(c.b.help.unwrap(), "some help info"); |
| assert!(!c.is_set(ArgSettings::Multiple)); |
| assert!(c.is_set(ArgSettings::TakesValue)); |
| assert!(c.is_set(ArgSettings::Required)); |
| assert_eq!( |
| c.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(c.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage3() { |
| let d = Arg::from_usage("-o <opt> 'some help info'"); |
| assert_eq!(d.b.name, "o"); |
| assert_eq!(d.s.short.unwrap(), 'o'); |
| assert!(d.s.long.is_none()); |
| assert_eq!(d.b.help.unwrap(), "some help info"); |
| assert!(!d.is_set(ArgSettings::Multiple)); |
| assert!(d.is_set(ArgSettings::TakesValue)); |
| assert!(d.is_set(ArgSettings::Required)); |
| assert_eq!( |
| d.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(d.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage4() { |
| let a = Arg::from_usage("[option] -o [opt]... 'some help info'"); |
| assert_eq!(a.b.name, "option"); |
| assert_eq!(a.s.short.unwrap(), 'o'); |
| assert!(a.s.long.is_none()); |
| assert_eq!(a.b.help.unwrap(), "some help info"); |
| assert!(a.is_set(ArgSettings::Multiple)); |
| assert!(a.is_set(ArgSettings::TakesValue)); |
| assert!(!a.is_set(ArgSettings::Required)); |
| assert_eq!( |
| a.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(a.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage5() { |
| let a = Arg::from_usage("[option]... -o [opt] 'some help info'"); |
| assert_eq!(a.b.name, "option"); |
| assert_eq!(a.s.short.unwrap(), 'o'); |
| assert!(a.s.long.is_none()); |
| assert_eq!(a.b.help.unwrap(), "some help info"); |
| assert!(a.is_set(ArgSettings::Multiple)); |
| assert!(a.is_set(ArgSettings::TakesValue)); |
| assert!(!a.is_set(ArgSettings::Required)); |
| assert_eq!( |
| a.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(a.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage6() { |
| let b = Arg::from_usage("-o [opt]... 'some help info'"); |
| assert_eq!(b.b.name, "o"); |
| assert_eq!(b.s.short.unwrap(), 'o'); |
| assert!(b.s.long.is_none()); |
| assert_eq!(b.b.help.unwrap(), "some help info"); |
| assert!(b.is_set(ArgSettings::Multiple)); |
| assert!(b.is_set(ArgSettings::TakesValue)); |
| assert!(!b.is_set(ArgSettings::Required)); |
| assert_eq!( |
| b.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(b.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage7() { |
| let c = Arg::from_usage("<option> -o <opt>... 'some help info'"); |
| assert_eq!(c.b.name, "option"); |
| assert_eq!(c.s.short.unwrap(), 'o'); |
| assert!(c.s.long.is_none()); |
| assert_eq!(c.b.help.unwrap(), "some help info"); |
| assert!(c.is_set(ArgSettings::Multiple)); |
| assert!(c.is_set(ArgSettings::TakesValue)); |
| assert!(c.is_set(ArgSettings::Required)); |
| assert_eq!( |
| c.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(c.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage8() { |
| let c = Arg::from_usage("<option>... -o <opt> 'some help info'"); |
| assert_eq!(c.b.name, "option"); |
| assert_eq!(c.s.short.unwrap(), 'o'); |
| assert!(c.s.long.is_none()); |
| assert_eq!(c.b.help.unwrap(), "some help info"); |
| assert!(c.is_set(ArgSettings::Multiple)); |
| assert!(c.is_set(ArgSettings::TakesValue)); |
| assert!(c.is_set(ArgSettings::Required)); |
| assert_eq!( |
| c.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(c.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage9() { |
| let d = Arg::from_usage("-o <opt>... 'some help info'"); |
| assert_eq!(d.b.name, "o"); |
| assert_eq!(d.s.short.unwrap(), 'o'); |
| assert!(d.s.long.is_none()); |
| assert_eq!(d.b.help.unwrap(), "some help info"); |
| assert!(d.is_set(ArgSettings::Multiple)); |
| assert!(d.is_set(ArgSettings::TakesValue)); |
| assert!(d.is_set(ArgSettings::Required)); |
| assert_eq!( |
| d.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(d.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long1() { |
| let a = Arg::from_usage("[option] --opt [opt] 'some help info'"); |
| assert_eq!(a.b.name, "option"); |
| assert_eq!(a.s.long.unwrap(), "opt"); |
| assert!(a.s.short.is_none()); |
| assert_eq!(a.b.help.unwrap(), "some help info"); |
| assert!(!a.is_set(ArgSettings::Multiple)); |
| assert!(a.is_set(ArgSettings::TakesValue)); |
| assert!(!a.is_set(ArgSettings::Required)); |
| assert_eq!( |
| a.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(a.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long2() { |
| let b = Arg::from_usage("--opt [option] 'some help info'"); |
| assert_eq!(b.b.name, "opt"); |
| assert_eq!(b.s.long.unwrap(), "opt"); |
| assert!(b.s.short.is_none()); |
| assert_eq!(b.b.help.unwrap(), "some help info"); |
| assert!(!b.is_set(ArgSettings::Multiple)); |
| assert!(b.is_set(ArgSettings::TakesValue)); |
| assert!(!b.is_set(ArgSettings::Required)); |
| assert_eq!( |
| b.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(b.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long3() { |
| let c = Arg::from_usage("<option> --opt <opt> 'some help info'"); |
| assert_eq!(c.b.name, "option"); |
| assert_eq!(c.s.long.unwrap(), "opt"); |
| assert!(c.s.short.is_none()); |
| assert_eq!(c.b.help.unwrap(), "some help info"); |
| assert!(!c.is_set(ArgSettings::Multiple)); |
| assert!(c.is_set(ArgSettings::TakesValue)); |
| assert!(c.is_set(ArgSettings::Required)); |
| assert_eq!( |
| c.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(c.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long4() { |
| let d = Arg::from_usage("--opt <option> 'some help info'"); |
| assert_eq!(d.b.name, "opt"); |
| assert_eq!(d.s.long.unwrap(), "opt"); |
| assert!(d.s.short.is_none()); |
| assert_eq!(d.b.help.unwrap(), "some help info"); |
| assert!(!d.is_set(ArgSettings::Multiple)); |
| assert!(d.is_set(ArgSettings::TakesValue)); |
| assert!(d.is_set(ArgSettings::Required)); |
| assert_eq!( |
| d.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(d.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long5() { |
| let a = Arg::from_usage("[option] --opt [opt]... 'some help info'"); |
| assert_eq!(a.b.name, "option"); |
| assert_eq!(a.s.long.unwrap(), "opt"); |
| assert!(a.s.short.is_none()); |
| assert_eq!(a.b.help.unwrap(), "some help info"); |
| assert!(a.is_set(ArgSettings::Multiple)); |
| assert!(a.is_set(ArgSettings::TakesValue)); |
| assert!(!a.is_set(ArgSettings::Required)); |
| assert_eq!( |
| a.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(a.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long6() { |
| let a = Arg::from_usage("[option]... --opt [opt] 'some help info'"); |
| assert_eq!(a.b.name, "option"); |
| assert_eq!(a.s.long.unwrap(), "opt"); |
| assert!(a.s.short.is_none()); |
| assert_eq!(a.b.help.unwrap(), "some help info"); |
| assert!(a.is_set(ArgSettings::Multiple)); |
| assert!(a.is_set(ArgSettings::TakesValue)); |
| assert!(!a.is_set(ArgSettings::Required)); |
| assert_eq!( |
| a.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(a.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long7() { |
| let b = Arg::from_usage("--opt [option]... 'some help info'"); |
| assert_eq!(b.b.name, "opt"); |
| assert_eq!(b.s.long.unwrap(), "opt"); |
| assert!(b.s.short.is_none()); |
| assert_eq!(b.b.help.unwrap(), "some help info"); |
| assert!(b.is_set(ArgSettings::Multiple)); |
| assert!(b.is_set(ArgSettings::TakesValue)); |
| assert!(!b.is_set(ArgSettings::Required)); |
| assert_eq!( |
| b.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(b.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long8() { |
| let c = Arg::from_usage("<option> --opt <opt>... 'some help info'"); |
| assert_eq!(c.b.name, "option"); |
| assert_eq!(c.s.long.unwrap(), "opt"); |
| assert!(c.s.short.is_none()); |
| assert_eq!(c.b.help.unwrap(), "some help info"); |
| assert!(c.is_set(ArgSettings::Multiple)); |
| assert!(c.is_set(ArgSettings::TakesValue)); |
| assert!(c.is_set(ArgSettings::Required)); |
| assert_eq!( |
| c.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(c.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long9() { |
| let c = Arg::from_usage("<option>... --opt <opt> 'some help info'"); |
| assert_eq!(c.b.name, "option"); |
| assert_eq!(c.s.long.unwrap(), "opt"); |
| assert!(c.s.short.is_none()); |
| assert_eq!(c.b.help.unwrap(), "some help info"); |
| assert!(c.is_set(ArgSettings::Multiple)); |
| assert!(c.is_set(ArgSettings::TakesValue)); |
| assert!(c.is_set(ArgSettings::Required)); |
| assert_eq!( |
| c.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(c.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long10() { |
| let d = Arg::from_usage("--opt <option>... 'some help info'"); |
| assert_eq!(d.b.name, "opt"); |
| assert_eq!(d.s.long.unwrap(), "opt"); |
| assert!(d.s.short.is_none()); |
| assert_eq!(d.b.help.unwrap(), "some help info"); |
| assert!(d.is_set(ArgSettings::Multiple)); |
| assert!(d.is_set(ArgSettings::TakesValue)); |
| assert!(d.is_set(ArgSettings::Required)); |
| assert_eq!( |
| d.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(d.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long_equals1() { |
| let a = Arg::from_usage("[option] --opt=[opt] 'some help info'"); |
| assert_eq!(a.b.name, "option"); |
| assert_eq!(a.s.long.unwrap(), "opt"); |
| assert!(a.s.short.is_none()); |
| assert_eq!(a.b.help.unwrap(), "some help info"); |
| assert!(!a.is_set(ArgSettings::Multiple)); |
| assert!(a.is_set(ArgSettings::TakesValue)); |
| assert!(!a.is_set(ArgSettings::Required)); |
| assert_eq!( |
| a.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(a.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long_equals2() { |
| let b = Arg::from_usage("--opt=[option] 'some help info'"); |
| assert_eq!(b.b.name, "opt"); |
| assert_eq!(b.s.long.unwrap(), "opt"); |
| assert!(b.s.short.is_none()); |
| assert_eq!(b.b.help.unwrap(), "some help info"); |
| assert!(!b.is_set(ArgSettings::Multiple)); |
| assert!(b.is_set(ArgSettings::TakesValue)); |
| assert!(!b.is_set(ArgSettings::Required)); |
| assert_eq!( |
| b.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(b.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long_equals3() { |
| let c = Arg::from_usage("<option> --opt=<opt> 'some help info'"); |
| assert_eq!(c.b.name, "option"); |
| assert_eq!(c.s.long.unwrap(), "opt"); |
| assert!(c.s.short.is_none()); |
| assert_eq!(c.b.help.unwrap(), "some help info"); |
| assert!(!c.is_set(ArgSettings::Multiple)); |
| assert!(c.is_set(ArgSettings::TakesValue)); |
| assert!(c.is_set(ArgSettings::Required)); |
| assert_eq!( |
| c.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(c.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long_equals4() { |
| let d = Arg::from_usage("--opt=<option> 'some help info'"); |
| assert_eq!(d.b.name, "opt"); |
| assert_eq!(d.s.long.unwrap(), "opt"); |
| assert!(d.s.short.is_none()); |
| assert_eq!(d.b.help.unwrap(), "some help info"); |
| assert!(!d.is_set(ArgSettings::Multiple)); |
| assert!(d.is_set(ArgSettings::TakesValue)); |
| assert!(d.is_set(ArgSettings::Required)); |
| assert_eq!( |
| d.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(d.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long_equals5() { |
| let a = Arg::from_usage("[option] --opt=[opt]... 'some help info'"); |
| assert_eq!(a.b.name, "option"); |
| assert_eq!(a.s.long.unwrap(), "opt"); |
| assert!(a.s.short.is_none()); |
| assert_eq!(a.b.help.unwrap(), "some help info"); |
| assert!(a.is_set(ArgSettings::Multiple)); |
| assert!(a.is_set(ArgSettings::TakesValue)); |
| assert!(!a.is_set(ArgSettings::Required)); |
| assert_eq!( |
| a.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(a.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long_equals6() { |
| let a = Arg::from_usage("[option]... --opt=[opt] 'some help info'"); |
| assert_eq!(a.b.name, "option"); |
| assert_eq!(a.s.long.unwrap(), "opt"); |
| assert!(a.s.short.is_none()); |
| assert_eq!(a.b.help.unwrap(), "some help info"); |
| assert!(a.is_set(ArgSettings::Multiple)); |
| assert!(a.is_set(ArgSettings::TakesValue)); |
| assert!(!a.is_set(ArgSettings::Required)); |
| assert_eq!( |
| a.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(a.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long_equals7() { |
| let b = Arg::from_usage("--opt=[option]... 'some help info'"); |
| assert_eq!(b.b.name, "opt"); |
| assert_eq!(b.s.long.unwrap(), "opt"); |
| assert!(b.s.short.is_none()); |
| assert_eq!(b.b.help.unwrap(), "some help info"); |
| assert!(b.is_set(ArgSettings::Multiple)); |
| assert!(b.is_set(ArgSettings::TakesValue)); |
| assert!(!b.is_set(ArgSettings::Required)); |
| assert_eq!( |
| b.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(b.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long_equals8() { |
| let c = Arg::from_usage("<option> --opt=<opt>... 'some help info'"); |
| assert_eq!(c.b.name, "option"); |
| assert_eq!(c.s.long.unwrap(), "opt"); |
| assert!(c.s.short.is_none()); |
| assert_eq!(c.b.help.unwrap(), "some help info"); |
| assert!(c.is_set(ArgSettings::Multiple)); |
| assert!(c.is_set(ArgSettings::TakesValue)); |
| assert!(c.is_set(ArgSettings::Required)); |
| assert_eq!( |
| c.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(c.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long_equals9() { |
| let c = Arg::from_usage("<option>... --opt=<opt> 'some help info'"); |
| assert_eq!(c.b.name, "option"); |
| assert_eq!(c.s.long.unwrap(), "opt"); |
| assert!(c.s.short.is_none()); |
| assert_eq!(c.b.help.unwrap(), "some help info"); |
| assert!(c.is_set(ArgSettings::Multiple)); |
| assert!(c.is_set(ArgSettings::TakesValue)); |
| assert!(c.is_set(ArgSettings::Required)); |
| assert_eq!( |
| c.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(c.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_long_equals10() { |
| let d = Arg::from_usage("--opt=<option>... 'some help info'"); |
| assert_eq!(d.b.name, "opt"); |
| assert_eq!(d.s.long.unwrap(), "opt"); |
| assert!(d.s.short.is_none()); |
| assert_eq!(d.b.help.unwrap(), "some help info"); |
| assert!(d.is_set(ArgSettings::Multiple)); |
| assert!(d.is_set(ArgSettings::TakesValue)); |
| assert!(d.is_set(ArgSettings::Required)); |
| assert_eq!( |
| d.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(d.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_both1() { |
| let a = Arg::from_usage("[option] -o --opt [option] 'some help info'"); |
| assert_eq!(a.b.name, "option"); |
| assert_eq!(a.s.long.unwrap(), "opt"); |
| assert_eq!(a.s.short.unwrap(), 'o'); |
| assert_eq!(a.b.help.unwrap(), "some help info"); |
| assert!(!a.is_set(ArgSettings::Multiple)); |
| assert!(a.is_set(ArgSettings::TakesValue)); |
| assert!(!a.is_set(ArgSettings::Required)); |
| assert_eq!( |
| a.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(a.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_both2() { |
| let b = Arg::from_usage("-o --opt [option] 'some help info'"); |
| assert_eq!(b.b.name, "opt"); |
| assert_eq!(b.s.long.unwrap(), "opt"); |
| assert_eq!(b.s.short.unwrap(), 'o'); |
| assert_eq!(b.b.help.unwrap(), "some help info"); |
| assert!(!b.is_set(ArgSettings::Multiple)); |
| assert!(b.is_set(ArgSettings::TakesValue)); |
| assert!(!b.is_set(ArgSettings::Required)); |
| assert_eq!( |
| b.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(b.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_both3() { |
| let c = Arg::from_usage("<option> -o --opt <opt> 'some help info'"); |
| assert_eq!(c.b.name, "option"); |
| assert_eq!(c.s.long.unwrap(), "opt"); |
| assert_eq!(c.s.short.unwrap(), 'o'); |
| assert_eq!(c.b.help.unwrap(), "some help info"); |
| assert!(!c.is_set(ArgSettings::Multiple)); |
| assert!(c.is_set(ArgSettings::TakesValue)); |
| assert!(c.is_set(ArgSettings::Required)); |
| assert_eq!( |
| c.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(c.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_both4() { |
| let d = Arg::from_usage("-o --opt <option> 'some help info'"); |
| assert_eq!(d.b.name, "opt"); |
| assert_eq!(d.s.long.unwrap(), "opt"); |
| assert_eq!(d.s.short.unwrap(), 'o'); |
| assert_eq!(d.b.help.unwrap(), "some help info"); |
| assert!(!d.is_set(ArgSettings::Multiple)); |
| assert!(d.is_set(ArgSettings::TakesValue)); |
| assert!(d.is_set(ArgSettings::Required)); |
| assert_eq!( |
| d.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(d.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_both5() { |
| let a = Arg::from_usage("[option]... -o --opt [option] 'some help info'"); |
| assert_eq!(a.b.name, "option"); |
| assert_eq!(a.s.long.unwrap(), "opt"); |
| assert_eq!(a.s.short.unwrap(), 'o'); |
| assert_eq!(a.b.help.unwrap(), "some help info"); |
| assert!(a.is_set(ArgSettings::Multiple)); |
| assert!(a.is_set(ArgSettings::TakesValue)); |
| assert!(!a.is_set(ArgSettings::Required)); |
| assert_eq!( |
| a.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(a.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_both6() { |
| let b = Arg::from_usage("-o --opt [option]... 'some help info'"); |
| assert_eq!(b.b.name, "opt"); |
| assert_eq!(b.s.long.unwrap(), "opt"); |
| assert_eq!(b.s.short.unwrap(), 'o'); |
| assert_eq!(b.b.help.unwrap(), "some help info"); |
| assert!(b.is_set(ArgSettings::Multiple)); |
| assert!(b.is_set(ArgSettings::TakesValue)); |
| assert!(!b.is_set(ArgSettings::Required)); |
| assert_eq!( |
| b.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(b.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_both7() { |
| let c = Arg::from_usage("<option>... -o --opt <opt> 'some help info'"); |
| assert_eq!(c.b.name, "option"); |
| assert_eq!(c.s.long.unwrap(), "opt"); |
| assert_eq!(c.s.short.unwrap(), 'o'); |
| assert_eq!(c.b.help.unwrap(), "some help info"); |
| assert!(c.is_set(ArgSettings::Multiple)); |
| assert!(c.is_set(ArgSettings::TakesValue)); |
| assert!(c.is_set(ArgSettings::Required)); |
| assert_eq!( |
| c.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(c.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_both8() { |
| let d = Arg::from_usage("-o --opt <option>... 'some help info'"); |
| assert_eq!(d.b.name, "opt"); |
| assert_eq!(d.s.long.unwrap(), "opt"); |
| assert_eq!(d.s.short.unwrap(), 'o'); |
| assert_eq!(d.b.help.unwrap(), "some help info"); |
| assert!(d.is_set(ArgSettings::Multiple)); |
| assert!(d.is_set(ArgSettings::TakesValue)); |
| assert!(d.is_set(ArgSettings::Required)); |
| assert_eq!( |
| d.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(d.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_both_equals1() { |
| let a = Arg::from_usage("[option] -o --opt=[option] 'some help info'"); |
| assert_eq!(a.b.name, "option"); |
| assert_eq!(a.s.long.unwrap(), "opt"); |
| assert_eq!(a.s.short.unwrap(), 'o'); |
| assert_eq!(a.b.help.unwrap(), "some help info"); |
| assert!(!a.is_set(ArgSettings::Multiple)); |
| assert!(a.is_set(ArgSettings::TakesValue)); |
| assert!(!a.is_set(ArgSettings::Required)); |
| assert_eq!( |
| a.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(a.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_both_equals2() { |
| let b = Arg::from_usage("-o --opt=[option] 'some help info'"); |
| assert_eq!(b.b.name, "opt"); |
| assert_eq!(b.s.long.unwrap(), "opt"); |
| assert_eq!(b.s.short.unwrap(), 'o'); |
| assert_eq!(b.b.help.unwrap(), "some help info"); |
| assert!(!b.is_set(ArgSettings::Multiple)); |
| assert!(b.is_set(ArgSettings::TakesValue)); |
| assert!(!b.is_set(ArgSettings::Required)); |
| assert_eq!( |
| b.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(b.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_both_equals3() { |
| let c = Arg::from_usage("<option> -o --opt=<opt> 'some help info'"); |
| assert_eq!(c.b.name, "option"); |
| assert_eq!(c.s.long.unwrap(), "opt"); |
| assert_eq!(c.s.short.unwrap(), 'o'); |
| assert_eq!(c.b.help.unwrap(), "some help info"); |
| assert!(!c.is_set(ArgSettings::Multiple)); |
| assert!(c.is_set(ArgSettings::TakesValue)); |
| assert!(c.is_set(ArgSettings::Required)); |
| assert_eq!( |
| c.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(c.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_both_equals4() { |
| let d = Arg::from_usage("-o --opt=<option> 'some help info'"); |
| assert_eq!(d.b.name, "opt"); |
| assert_eq!(d.s.long.unwrap(), "opt"); |
| assert_eq!(d.s.short.unwrap(), 'o'); |
| assert_eq!(d.b.help.unwrap(), "some help info"); |
| assert!(!d.is_set(ArgSettings::Multiple)); |
| assert!(d.is_set(ArgSettings::TakesValue)); |
| assert!(d.is_set(ArgSettings::Required)); |
| assert_eq!( |
| d.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(d.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_both_equals5() { |
| let a = Arg::from_usage("[option]... -o --opt=[option] 'some help info'"); |
| assert_eq!(a.b.name, "option"); |
| assert_eq!(a.s.long.unwrap(), "opt"); |
| assert_eq!(a.s.short.unwrap(), 'o'); |
| assert_eq!(a.b.help.unwrap(), "some help info"); |
| assert!(a.is_set(ArgSettings::Multiple)); |
| assert!(a.is_set(ArgSettings::TakesValue)); |
| assert!(!a.is_set(ArgSettings::Required)); |
| assert_eq!( |
| a.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(a.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_both_equals6() { |
| let b = Arg::from_usage("-o --opt=[option]... 'some help info'"); |
| assert_eq!(b.b.name, "opt"); |
| assert_eq!(b.s.long.unwrap(), "opt"); |
| assert_eq!(b.s.short.unwrap(), 'o'); |
| assert_eq!(b.b.help.unwrap(), "some help info"); |
| assert!(b.is_set(ArgSettings::Multiple)); |
| assert!(b.is_set(ArgSettings::TakesValue)); |
| assert!(!b.is_set(ArgSettings::Required)); |
| assert_eq!( |
| b.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(b.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_both_equals7() { |
| let c = Arg::from_usage("<option>... -o --opt=<opt> 'some help info'"); |
| assert_eq!(c.b.name, "option"); |
| assert_eq!(c.s.long.unwrap(), "opt"); |
| assert_eq!(c.s.short.unwrap(), 'o'); |
| assert_eq!(c.b.help.unwrap(), "some help info"); |
| assert!(c.is_set(ArgSettings::Multiple)); |
| assert!(c.is_set(ArgSettings::TakesValue)); |
| assert!(c.is_set(ArgSettings::Required)); |
| assert_eq!( |
| c.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"opt"] |
| ); |
| assert!(c.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_usage_both_equals8() { |
| let d = Arg::from_usage("-o --opt=<option>... 'some help info'"); |
| assert_eq!(d.b.name, "opt"); |
| assert_eq!(d.s.long.unwrap(), "opt"); |
| assert_eq!(d.s.short.unwrap(), 'o'); |
| assert_eq!(d.b.help.unwrap(), "some help info"); |
| assert!(d.is_set(ArgSettings::Multiple)); |
| assert!(d.is_set(ArgSettings::TakesValue)); |
| assert!(d.is_set(ArgSettings::Required)); |
| assert_eq!( |
| d.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"option"] |
| ); |
| assert!(d.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_option_with_vals1() { |
| let d = Arg::from_usage("-o <file> <mode> 'some help info'"); |
| assert_eq!(d.b.name, "o"); |
| assert!(d.s.long.is_none()); |
| assert_eq!(d.s.short.unwrap(), 'o'); |
| assert_eq!(d.b.help.unwrap(), "some help info"); |
| assert!(!d.is_set(ArgSettings::Multiple)); |
| assert!(d.is_set(ArgSettings::TakesValue)); |
| assert!(d.is_set(ArgSettings::Required)); |
| assert_eq!( |
| d.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"file", &"mode"] |
| ); |
| assert_eq!(d.v.num_vals.unwrap(), 2); |
| } |
| |
| #[test] |
| fn create_option_with_vals2() { |
| let d = Arg::from_usage("-o <file> <mode>... 'some help info'"); |
| assert_eq!(d.b.name, "o"); |
| assert!(d.s.long.is_none()); |
| assert_eq!(d.s.short.unwrap(), 'o'); |
| assert_eq!(d.b.help.unwrap(), "some help info"); |
| assert!(d.is_set(ArgSettings::Multiple)); |
| assert!(d.is_set(ArgSettings::TakesValue)); |
| assert!(d.is_set(ArgSettings::Required)); |
| assert_eq!( |
| d.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"file", &"mode"] |
| ); |
| assert_eq!(d.v.num_vals.unwrap(), 2); |
| } |
| |
| #[test] |
| fn create_option_with_vals3() { |
| let d = Arg::from_usage("--opt <file> <mode>... 'some help info'"); |
| assert_eq!(d.b.name, "opt"); |
| assert!(d.s.short.is_none()); |
| assert_eq!(d.s.long.unwrap(), "opt"); |
| assert_eq!(d.b.help.unwrap(), "some help info"); |
| assert!(d.is_set(ArgSettings::Multiple)); |
| assert!(d.is_set(ArgSettings::TakesValue)); |
| assert!(d.is_set(ArgSettings::Required)); |
| assert_eq!( |
| d.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"file", &"mode"] |
| ); |
| assert_eq!(d.v.num_vals.unwrap(), 2); |
| } |
| |
| #[test] |
| fn create_option_with_vals4() { |
| let d = Arg::from_usage("[myopt] --opt <file> <mode> 'some help info'"); |
| assert_eq!(d.b.name, "myopt"); |
| assert!(d.s.short.is_none()); |
| assert_eq!(d.s.long.unwrap(), "opt"); |
| assert_eq!(d.b.help.unwrap(), "some help info"); |
| assert!(!d.is_set(ArgSettings::Multiple)); |
| assert!(d.is_set(ArgSettings::TakesValue)); |
| assert!(!d.is_set(ArgSettings::Required)); |
| assert_eq!( |
| d.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"file", &"mode"] |
| ); |
| assert_eq!(d.v.num_vals.unwrap(), 2); |
| } |
| |
| #[test] |
| fn create_option_with_vals5() { |
| let d = Arg::from_usage("--opt <file> <mode> 'some help info'"); |
| assert_eq!(d.b.name, "opt"); |
| assert!(d.s.short.is_none()); |
| assert_eq!(d.s.long.unwrap(), "opt"); |
| assert_eq!(d.b.help.unwrap(), "some help info"); |
| assert!(!d.is_set(ArgSettings::Multiple)); |
| assert!(d.is_set(ArgSettings::TakesValue)); |
| assert!(d.is_set(ArgSettings::Required)); |
| assert_eq!(d.v.num_vals.unwrap(), 2); |
| } |
| |
| #[test] |
| fn create_positional_usage() { |
| let a = Arg::from_usage("[pos] 'some help info'"); |
| assert_eq!(a.b.name, "pos"); |
| assert_eq!(a.b.help.unwrap(), "some help info"); |
| assert!(!a.is_set(ArgSettings::Multiple)); |
| assert!(!a.is_set(ArgSettings::Required)); |
| assert!(a.v.val_names.is_none()); |
| assert!(a.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn create_positional_usage0() { |
| let b = Arg::from_usage("<pos> 'some help info'"); |
| assert_eq!(b.b.name, "pos"); |
| assert_eq!(b.b.help.unwrap(), "some help info"); |
| assert!(!b.is_set(ArgSettings::Multiple)); |
| assert!(b.is_set(ArgSettings::Required)); |
| assert!(b.v.val_names.is_none()); |
| assert!(b.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn pos_mult_help() { |
| let c = Arg::from_usage("[pos]... 'some help info'"); |
| assert_eq!(c.b.name, "pos"); |
| assert_eq!(c.b.help.unwrap(), "some help info"); |
| assert!(c.is_set(ArgSettings::Multiple)); |
| assert!(!c.is_set(ArgSettings::Required)); |
| assert!(c.v.val_names.is_none()); |
| assert!(c.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn pos_help_lit_single_quote() { |
| let c = Arg::from_usage("[pos]... 'some help\' info'"); |
| assert_eq!(c.b.name, "pos"); |
| assert_eq!(c.b.help.unwrap(), "some help' info"); |
| assert!(c.is_set(ArgSettings::Multiple)); |
| assert!(!c.is_set(ArgSettings::Required)); |
| assert!(c.v.val_names.is_none()); |
| assert!(c.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn pos_help_double_lit_single_quote() { |
| let c = Arg::from_usage("[pos]... 'some \'help\' info'"); |
| assert_eq!(c.b.name, "pos"); |
| assert_eq!(c.b.help.unwrap(), "some 'help' info"); |
| assert!(c.is_set(ArgSettings::Multiple)); |
| assert!(!c.is_set(ArgSettings::Required)); |
| assert!(c.v.val_names.is_none()); |
| assert!(c.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn pos_help_newline() { |
| let c = Arg::from_usage( |
| "[pos]... 'some help{n}\ |
| info'", |
| ); |
| assert_eq!(c.b.name, "pos"); |
| assert_eq!(c.b.help.unwrap(), "some help{n}info"); |
| assert!(c.is_set(ArgSettings::Multiple)); |
| assert!(!c.is_set(ArgSettings::Required)); |
| assert!(c.v.val_names.is_none()); |
| assert!(c.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn pos_help_newline_lit_sq() { |
| let c = Arg::from_usage( |
| "[pos]... 'some help\' stuff{n}\ |
| info'", |
| ); |
| assert_eq!(c.b.name, "pos"); |
| assert_eq!(c.b.help.unwrap(), "some help' stuff{n}info"); |
| assert!(c.is_set(ArgSettings::Multiple)); |
| assert!(!c.is_set(ArgSettings::Required)); |
| assert!(c.v.val_names.is_none()); |
| assert!(c.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn pos_req_mult_help() { |
| let d = Arg::from_usage("<pos>... 'some help info'"); |
| assert_eq!(d.b.name, "pos"); |
| assert_eq!(d.b.help.unwrap(), "some help info"); |
| assert!(d.is_set(ArgSettings::Multiple)); |
| assert!(d.is_set(ArgSettings::Required)); |
| assert!(d.v.val_names.is_none()); |
| assert!(d.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn pos_req() { |
| let b = Arg::from_usage("<pos>"); |
| assert_eq!(b.b.name, "pos"); |
| assert!(!b.is_set(ArgSettings::Multiple)); |
| assert!(b.is_set(ArgSettings::Required)); |
| assert!(b.v.val_names.is_none()); |
| assert!(b.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn pos_mult() { |
| let c = Arg::from_usage("[pos]..."); |
| assert_eq!(c.b.name, "pos"); |
| assert!(c.is_set(ArgSettings::Multiple)); |
| assert!(!c.is_set(ArgSettings::Required)); |
| assert!(c.v.val_names.is_none()); |
| assert!(c.v.num_vals.is_none()); |
| } |
| |
| #[test] |
| fn nonascii() { |
| let a = Arg::from_usage("<ASCII> 'üñíčöĐ€'"); |
| assert_eq!(a.b.name, "ASCII"); |
| assert_eq!(a.b.help, Some("üñíčöĐ€")); |
| let a = Arg::from_usage("<üñíčöĐ€> 'ASCII'"); |
| assert_eq!(a.b.name, "üñíčöĐ€"); |
| assert_eq!(a.b.help, Some("ASCII")); |
| let a = Arg::from_usage("<üñíčöĐ€> 'üñíčöĐ€'"); |
| assert_eq!(a.b.name, "üñíčöĐ€"); |
| assert_eq!(a.b.help, Some("üñíčöĐ€")); |
| let a = Arg::from_usage("-ø 'ø'"); |
| assert_eq!(a.b.name, "ø"); |
| assert_eq!(a.s.short, Some('ø')); |
| assert_eq!(a.b.help, Some("ø")); |
| let a = Arg::from_usage("--üñíčöĐ€ 'Nōṫ ASCII'"); |
| assert_eq!(a.b.name, "üñíčöĐ€"); |
| assert_eq!(a.s.long, Some("üñíčöĐ€")); |
| assert_eq!(a.b.help, Some("Nōṫ ASCII")); |
| let a = Arg::from_usage("[ñämê] --ôpt=[üñíčöĐ€] 'hælp'"); |
| assert_eq!(a.b.name, "ñämê"); |
| assert_eq!(a.s.long, Some("ôpt")); |
| assert_eq!( |
| a.v.val_names.unwrap().values().collect::<Vec<_>>(), |
| [&"üñíčöĐ€"] |
| ); |
| assert_eq!(a.b.help, Some("hælp")); |
| } |
| } |