3 use INTERNAL_ERROR_MSG
;
5 use args
::settings
::ArgSettings
;
8 #[derive(PartialEq, Debug)]
21 pub struct UsageParser
<'a
> {
26 explicit_name_set
: bool
,
29 impl<'a
> UsageParser
<'a
> {
30 fn new(usage
: &'a
str) -> Self {
31 debugln
!("UsageParser::new: usage={:?}", usage
);
36 prev
: UsageToken
::Unknown
,
37 explicit_name_set
: false,
41 pub fn from_usage(usage
: &'a
str) -> Self {
42 debugln
!("UsageParser::from_usage;");
43 UsageParser
::new(usage
)
46 pub fn parse(mut self) -> Arg
<'a
, 'a
> {
47 debugln
!("UsageParser::parse;");
48 let mut arg
= Arg
::default();
50 debugln
!("UsageParser::parse:iter: pos={};", self.pos
);
52 if let Some(&c
) = self.usage
.as_bytes().get(self.pos
) {
54 b'
-'
=> self.short_or_long(&mut arg
),
55 b'
.'
=> self.multiple(&mut arg
),
56 b'
\''
=> self.help(&mut arg
),
57 _
=> self.name(&mut arg
),
63 debug_assert
!(!arg
.b
.name
.is_empty(),
64 format
!("No name found for Arg when parsing usage string: {}",
66 arg
.v
.num_vals
= match arg
.v
.val_names
{
67 Some(ref v
) if v
.len() >= 2 => Some(v
.len() as u64),
70 debugln
!("UsageParser::parse: vals...{:?}", arg
.v
.val_names
);
74 fn name(&mut self, arg
: &mut Arg
<'a
, 'a
>) {
75 debugln
!("UsageParser::name;");
76 if *self.usage
.as_bytes().get(self.pos
).expect(INTERNAL_ERROR_MSG
) == b'
<'
&&
77 !self.explicit_name_set
{
78 arg
.setb(ArgSettings
::Required
);
81 self.stop_at(name_end
);
82 let name
= &self.usage
[self.start
..self.pos
];
83 if self.prev
== UsageToken
::Unknown
{
84 debugln
!("UsageParser::name: setting name...{}", name
);
86 if arg
.s
.long
.is_none() && arg
.s
.short
.is_none() {
87 debugln
!("UsageParser::name: explicit name set...");
88 self.explicit_name_set
= true;
89 self.prev
= UsageToken
::Name
;
92 debugln
!("UsageParser::name: setting val name...{}", name
);
93 if let Some(ref mut v
) = arg
.v
.val_names
{
97 let mut v
= VecMap
::new();
99 arg
.v
.val_names
= Some(v
);
100 arg
.setb(ArgSettings
::TakesValue
);
102 self.prev
= UsageToken
::ValName
;
106 fn stop_at
<F
>(&mut self, f
: F
)
107 where F
: Fn(u8) -> bool
109 debugln
!("UsageParser::stop_at;");
110 self.start
= self.pos
;
111 self.pos
+= self.usage
[self.start
..].bytes().take_while(|&b
| f(b
)).count();
114 fn short_or_long(&mut self, arg
: &mut Arg
<'a
, 'a
>) {
115 debugln
!("UsageParser::short_or_long;");
117 if *self.usage
.as_bytes().get(self.pos
).expect(INTERNAL_ERROR_MSG
) == b'
-'
{
125 fn long(&mut self, arg
: &mut Arg
<'a
, 'a
>) {
126 debugln
!("UsageParser::long;");
127 self.stop_at(long_end
);
128 let name
= &self.usage
[self.start
..self.pos
];
129 if !self.explicit_name_set
{
130 debugln
!("UsageParser::long: setting name...{}", name
);
133 debugln
!("UsageParser::long: setting long...{}", name
);
134 arg
.s
.long
= Some(name
);
135 self.prev
= UsageToken
::Long
;
138 fn short(&mut self, arg
: &mut Arg
<'a
, 'a
>) {
139 debugln
!("UsageParser::short;");
140 let start
= &self.usage
[self.pos
..];
141 let short
= start
.chars().nth(0).expect(INTERNAL_ERROR_MSG
);
142 debugln
!("UsageParser::short: setting short...{}", short
);
143 arg
.s
.short
= Some(short
);
144 if arg
.b
.name
.is_empty() {
145 // --long takes precedence but doesn't set self.explicit_name_set
146 let name
= &start
[..short
.len_utf8()];
147 debugln
!("UsageParser::short: setting name...{}", name
);
150 self.prev
= UsageToken
::Short
;
154 fn multiple(&mut self, arg
: &mut Arg
) {
155 debugln
!("UsageParser::multiple;");
156 let mut dot_counter
= 1;
157 let start
= self.pos
;
158 let mut bytes
= self.usage
[start
..].bytes();
159 while bytes
.next() == Some(b'
.'
) {
162 if dot_counter
== 3 {
163 debugln
!("UsageParser::multiple: setting multiple");
164 arg
.setb(ArgSettings
::Multiple
);
165 if arg
.is_set(ArgSettings
::TakesValue
) {
166 arg
.setb(ArgSettings
::UseValueDelimiter
);
167 arg
.unsetb(ArgSettings
::ValueDelimiterNotSet
);
168 if arg
.v
.val_delim
.is_none() {
169 arg
.v
.val_delim
= Some('
,'
);
172 self.prev
= UsageToken
::Multiple
;
179 fn help(&mut self, arg
: &mut Arg
<'a
, 'a
>) {
180 debugln
!("UsageParser::help;");
181 self.stop_at(help_start
);
182 self.start
= self.pos
+ 1;
183 self.pos
= self.usage
.len() - 1;
184 debugln
!("UsageParser::help: setting help...{}", &self.usage
[self.start
..self.pos
]);
185 arg
.b
.help
= Some(&self.usage
[self.start
..self.pos
]);
186 self.pos
+= 1; // Move to next byte to keep from thinking ending ' is a start
187 self.prev
= UsageToken
::Help
;
192 fn name_end(b
: u8) -> bool { b != b']' && b != b'>' }
195 fn token(b
: u8) -> bool { b != b'\'' && b != b'.' && b != b'<' && b != b'[' && b != b'-' }
198 fn long_end(b
: u8) -> bool
{
199 b
!= b'
\''
&& b
!= b'
.'
&& b
!= b'
<'
&& b
!= b'
['
&& b
!= b'
='
&& b
!= b' '
203 fn help_start(b
: u8) -> bool { b != b'\'' }
208 use args
::ArgSettings
;
211 fn create_flag_usage() {
212 let a
= Arg
::from_usage("[flag] -f 'some help info'");
213 assert_eq
!(a
.b
.name
, "flag");
214 assert_eq
!(a
.s
.short
.unwrap(), 'f'
);
215 assert
!(a
.s
.long
.is_none());
216 assert_eq
!(a
.b
.help
.unwrap(), "some help info");
217 assert
!(!a
.is_set(ArgSettings
::Multiple
));
218 assert
!(a
.v
.val_names
.is_none());
219 assert
!(a
.v
.num_vals
.is_none());
221 let b
= Arg
::from_usage("[flag] --flag 'some help info'");
222 assert_eq
!(b
.b
.name
, "flag");
223 assert_eq
!(b
.s
.long
.unwrap(), "flag");
224 assert
!(b
.s
.short
.is_none());
225 assert_eq
!(b
.b
.help
.unwrap(), "some help info");
226 assert
!(!b
.is_set(ArgSettings
::Multiple
));
227 assert
!(a
.v
.val_names
.is_none());
228 assert
!(a
.v
.num_vals
.is_none());
230 let b
= Arg
::from_usage("--flag 'some help info'");
231 assert_eq
!(b
.b
.name
, "flag");
232 assert_eq
!(b
.s
.long
.unwrap(), "flag");
233 assert
!(b
.s
.short
.is_none());
234 assert_eq
!(b
.b
.help
.unwrap(), "some help info");
235 assert
!(!b
.is_set(ArgSettings
::Multiple
));
236 assert
!(b
.v
.val_names
.is_none());
237 assert
!(b
.v
.num_vals
.is_none());
239 let c
= Arg
::from_usage("[flag] -f --flag 'some help info'");
240 assert_eq
!(c
.b
.name
, "flag");
241 assert_eq
!(c
.s
.short
.unwrap(), 'f'
);
242 assert_eq
!(c
.s
.long
.unwrap(), "flag");
243 assert_eq
!(c
.b
.help
.unwrap(), "some help info");
244 assert
!(!c
.is_set(ArgSettings
::Multiple
));
245 assert
!(c
.v
.val_names
.is_none());
246 assert
!(c
.v
.num_vals
.is_none());
248 let d
= Arg
::from_usage("[flag] -f... 'some help info'");
249 assert_eq
!(d
.b
.name
, "flag");
250 assert_eq
!(d
.s
.short
.unwrap(), 'f'
);
251 assert
!(d
.s
.long
.is_none());
252 assert_eq
!(d
.b
.help
.unwrap(), "some help info");
253 assert
!(d
.is_set(ArgSettings
::Multiple
));
254 assert
!(d
.v
.val_names
.is_none());
255 assert
!(d
.v
.num_vals
.is_none());
257 let e
= Arg
::from_usage("[flag] -f --flag... 'some help info'");
258 assert_eq
!(e
.b
.name
, "flag");
259 assert_eq
!(e
.s
.long
.unwrap(), "flag");
260 assert_eq
!(e
.s
.short
.unwrap(), 'f'
);
261 assert_eq
!(e
.b
.help
.unwrap(), "some help info");
262 assert
!(e
.is_set(ArgSettings
::Multiple
));
263 assert
!(e
.v
.val_names
.is_none());
264 assert
!(e
.v
.num_vals
.is_none());
266 let e
= Arg
::from_usage("-f --flag... 'some help info'");
267 assert_eq
!(e
.b
.name
, "flag");
268 assert_eq
!(e
.s
.long
.unwrap(), "flag");
269 assert_eq
!(e
.s
.short
.unwrap(), 'f'
);
270 assert_eq
!(e
.b
.help
.unwrap(), "some help info");
271 assert
!(e
.is_set(ArgSettings
::Multiple
));
272 assert
!(e
.v
.val_names
.is_none());
273 assert
!(e
.v
.num_vals
.is_none());
275 let e
= Arg
::from_usage("--flags");
276 assert_eq
!(e
.b
.name
, "flags");
277 assert_eq
!(e
.s
.long
.unwrap(), "flags");
278 assert
!(e
.v
.val_names
.is_none());
279 assert
!(e
.v
.num_vals
.is_none());
281 let e
= Arg
::from_usage("--flags...");
282 assert_eq
!(e
.b
.name
, "flags");
283 assert_eq
!(e
.s
.long
.unwrap(), "flags");
284 assert
!(e
.is_set(ArgSettings
::Multiple
));
285 assert
!(e
.v
.val_names
.is_none());
286 assert
!(e
.v
.num_vals
.is_none());
288 let e
= Arg
::from_usage("[flags] -f");
289 assert_eq
!(e
.b
.name
, "flags");
290 assert_eq
!(e
.s
.short
.unwrap(), 'f'
);
291 assert
!(e
.v
.val_names
.is_none());
292 assert
!(e
.v
.num_vals
.is_none());
294 let e
= Arg
::from_usage("[flags] -f...");
295 assert_eq
!(e
.b
.name
, "flags");
296 assert_eq
!(e
.s
.short
.unwrap(), 'f'
);
297 assert
!(e
.is_set(ArgSettings
::Multiple
));
298 assert
!(e
.v
.val_names
.is_none());
299 assert
!(e
.v
.num_vals
.is_none());
301 let a
= Arg
::from_usage("-f 'some help info'");
302 assert_eq
!(a
.b
.name
, "f");
303 assert_eq
!(a
.s
.short
.unwrap(), 'f'
);
304 assert
!(a
.s
.long
.is_none());
305 assert_eq
!(a
.b
.help
.unwrap(), "some help info");
306 assert
!(!a
.is_set(ArgSettings
::Multiple
));
307 assert
!(a
.v
.val_names
.is_none());
308 assert
!(a
.v
.num_vals
.is_none());
310 let e
= Arg
::from_usage("-f");
311 assert_eq
!(e
.b
.name
, "f");
312 assert_eq
!(e
.s
.short
.unwrap(), 'f'
);
313 assert
!(e
.v
.val_names
.is_none());
314 assert
!(e
.v
.num_vals
.is_none());
316 let e
= Arg
::from_usage("-f...");
317 assert_eq
!(e
.b
.name
, "f");
318 assert_eq
!(e
.s
.short
.unwrap(), 'f'
);
319 assert
!(e
.is_set(ArgSettings
::Multiple
));
320 assert
!(e
.v
.val_names
.is_none());
321 assert
!(e
.v
.num_vals
.is_none());
325 fn create_option_usage0() {
327 let a
= Arg
::from_usage("[option] -o [opt] 'some help info'");
328 assert_eq
!(a
.b
.name
, "option");
329 assert_eq
!(a
.s
.short
.unwrap(), 'o'
);
330 assert
!(a
.s
.long
.is_none());
331 assert_eq
!(a
.b
.help
.unwrap(), "some help info");
332 assert
!(!a
.is_set(ArgSettings
::Multiple
));
333 assert
!(a
.is_set(ArgSettings
::TakesValue
));
334 assert
!(!a
.is_set(ArgSettings
::Required
));
335 assert_eq
!(a
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
336 assert
!(a
.v
.num_vals
.is_none());
340 fn create_option_usage1() {
341 let b
= Arg
::from_usage("-o [opt] 'some help info'");
342 assert_eq
!(b
.b
.name
, "o");
343 assert_eq
!(b
.s
.short
.unwrap(), 'o'
);
344 assert
!(b
.s
.long
.is_none());
345 assert_eq
!(b
.b
.help
.unwrap(), "some help info");
346 assert
!(!b
.is_set(ArgSettings
::Multiple
));
347 assert
!(b
.is_set(ArgSettings
::TakesValue
));
348 assert
!(!b
.is_set(ArgSettings
::Required
));
349 assert_eq
!(b
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
350 assert
!(b
.v
.num_vals
.is_none());
354 fn create_option_usage2() {
355 let c
= Arg
::from_usage("<option> -o <opt> 'some help info'");
356 assert_eq
!(c
.b
.name
, "option");
357 assert_eq
!(c
.s
.short
.unwrap(), 'o'
);
358 assert
!(c
.s
.long
.is_none());
359 assert_eq
!(c
.b
.help
.unwrap(), "some help info");
360 assert
!(!c
.is_set(ArgSettings
::Multiple
));
361 assert
!(c
.is_set(ArgSettings
::TakesValue
));
362 assert
!(c
.is_set(ArgSettings
::Required
));
363 assert_eq
!(c
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
364 assert
!(c
.v
.num_vals
.is_none());
368 fn create_option_usage3() {
369 let d
= Arg
::from_usage("-o <opt> 'some help info'");
370 assert_eq
!(d
.b
.name
, "o");
371 assert_eq
!(d
.s
.short
.unwrap(), 'o'
);
372 assert
!(d
.s
.long
.is_none());
373 assert_eq
!(d
.b
.help
.unwrap(), "some help info");
374 assert
!(!d
.is_set(ArgSettings
::Multiple
));
375 assert
!(d
.is_set(ArgSettings
::TakesValue
));
376 assert
!(d
.is_set(ArgSettings
::Required
));
377 assert_eq
!(d
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
378 assert
!(d
.v
.num_vals
.is_none());
382 fn create_option_usage4() {
383 let a
= Arg
::from_usage("[option] -o [opt]... 'some help info'");
384 assert_eq
!(a
.b
.name
, "option");
385 assert_eq
!(a
.s
.short
.unwrap(), 'o'
);
386 assert
!(a
.s
.long
.is_none());
387 assert_eq
!(a
.b
.help
.unwrap(), "some help info");
388 assert
!(a
.is_set(ArgSettings
::Multiple
));
389 assert
!(a
.is_set(ArgSettings
::TakesValue
));
390 assert
!(!a
.is_set(ArgSettings
::Required
));
391 assert_eq
!(a
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
392 assert
!(a
.v
.num_vals
.is_none());
396 fn create_option_usage5() {
397 let a
= Arg
::from_usage("[option]... -o [opt] 'some help info'");
398 assert_eq
!(a
.b
.name
, "option");
399 assert_eq
!(a
.s
.short
.unwrap(), 'o'
);
400 assert
!(a
.s
.long
.is_none());
401 assert_eq
!(a
.b
.help
.unwrap(), "some help info");
402 assert
!(a
.is_set(ArgSettings
::Multiple
));
403 assert
!(a
.is_set(ArgSettings
::TakesValue
));
404 assert
!(!a
.is_set(ArgSettings
::Required
));
405 assert_eq
!(a
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
406 assert
!(a
.v
.num_vals
.is_none());
410 fn create_option_usage6() {
411 let b
= Arg
::from_usage("-o [opt]... 'some help info'");
412 assert_eq
!(b
.b
.name
, "o");
413 assert_eq
!(b
.s
.short
.unwrap(), 'o'
);
414 assert
!(b
.s
.long
.is_none());
415 assert_eq
!(b
.b
.help
.unwrap(), "some help info");
416 assert
!(b
.is_set(ArgSettings
::Multiple
));
417 assert
!(b
.is_set(ArgSettings
::TakesValue
));
418 assert
!(!b
.is_set(ArgSettings
::Required
));
419 assert_eq
!(b
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
420 assert
!(b
.v
.num_vals
.is_none());
424 fn create_option_usage7() {
425 let c
= Arg
::from_usage("<option> -o <opt>... 'some help info'");
426 assert_eq
!(c
.b
.name
, "option");
427 assert_eq
!(c
.s
.short
.unwrap(), 'o'
);
428 assert
!(c
.s
.long
.is_none());
429 assert_eq
!(c
.b
.help
.unwrap(), "some help info");
430 assert
!(c
.is_set(ArgSettings
::Multiple
));
431 assert
!(c
.is_set(ArgSettings
::TakesValue
));
432 assert
!(c
.is_set(ArgSettings
::Required
));
433 assert_eq
!(c
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
434 assert
!(c
.v
.num_vals
.is_none());
438 fn create_option_usage8() {
439 let c
= Arg
::from_usage("<option>... -o <opt> 'some help info'");
440 assert_eq
!(c
.b
.name
, "option");
441 assert_eq
!(c
.s
.short
.unwrap(), 'o'
);
442 assert
!(c
.s
.long
.is_none());
443 assert_eq
!(c
.b
.help
.unwrap(), "some help info");
444 assert
!(c
.is_set(ArgSettings
::Multiple
));
445 assert
!(c
.is_set(ArgSettings
::TakesValue
));
446 assert
!(c
.is_set(ArgSettings
::Required
));
447 assert_eq
!(c
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
448 assert
!(c
.v
.num_vals
.is_none());
452 fn create_option_usage9() {
453 let d
= Arg
::from_usage("-o <opt>... 'some help info'");
454 assert_eq
!(d
.b
.name
, "o");
455 assert_eq
!(d
.s
.short
.unwrap(), 'o'
);
456 assert
!(d
.s
.long
.is_none());
457 assert_eq
!(d
.b
.help
.unwrap(), "some help info");
458 assert
!(d
.is_set(ArgSettings
::Multiple
));
459 assert
!(d
.is_set(ArgSettings
::TakesValue
));
460 assert
!(d
.is_set(ArgSettings
::Required
));
461 assert_eq
!(d
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
462 assert
!(d
.v
.num_vals
.is_none());
466 fn create_option_usage_long1() {
467 let a
= Arg
::from_usage("[option] --opt [opt] 'some help info'");
468 assert_eq
!(a
.b
.name
, "option");
469 assert_eq
!(a
.s
.long
.unwrap(), "opt");
470 assert
!(a
.s
.short
.is_none());
471 assert_eq
!(a
.b
.help
.unwrap(), "some help info");
472 assert
!(!a
.is_set(ArgSettings
::Multiple
));
473 assert
!(a
.is_set(ArgSettings
::TakesValue
));
474 assert
!(!a
.is_set(ArgSettings
::Required
));
475 assert_eq
!(a
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
476 assert
!(a
.v
.num_vals
.is_none());
480 fn create_option_usage_long2() {
481 let b
= Arg
::from_usage("--opt [option] 'some help info'");
482 assert_eq
!(b
.b
.name
, "opt");
483 assert_eq
!(b
.s
.long
.unwrap(), "opt");
484 assert
!(b
.s
.short
.is_none());
485 assert_eq
!(b
.b
.help
.unwrap(), "some help info");
486 assert
!(!b
.is_set(ArgSettings
::Multiple
));
487 assert
!(b
.is_set(ArgSettings
::TakesValue
));
488 assert
!(!b
.is_set(ArgSettings
::Required
));
489 assert_eq
!(b
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
491 assert
!(b
.v
.num_vals
.is_none());
495 fn create_option_usage_long3() {
496 let c
= Arg
::from_usage("<option> --opt <opt> 'some help info'");
497 assert_eq
!(c
.b
.name
, "option");
498 assert_eq
!(c
.s
.long
.unwrap(), "opt");
499 assert
!(c
.s
.short
.is_none());
500 assert_eq
!(c
.b
.help
.unwrap(), "some help info");
501 assert
!(!c
.is_set(ArgSettings
::Multiple
));
502 assert
!(c
.is_set(ArgSettings
::TakesValue
));
503 assert
!(c
.is_set(ArgSettings
::Required
));
504 assert_eq
!(c
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
505 assert
!(c
.v
.num_vals
.is_none());
509 fn create_option_usage_long4() {
510 let d
= Arg
::from_usage("--opt <option> 'some help info'");
511 assert_eq
!(d
.b
.name
, "opt");
512 assert_eq
!(d
.s
.long
.unwrap(), "opt");
513 assert
!(d
.s
.short
.is_none());
514 assert_eq
!(d
.b
.help
.unwrap(), "some help info");
515 assert
!(!d
.is_set(ArgSettings
::Multiple
));
516 assert
!(d
.is_set(ArgSettings
::TakesValue
));
517 assert
!(d
.is_set(ArgSettings
::Required
));
518 assert_eq
!(d
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
520 assert
!(d
.v
.num_vals
.is_none());
524 fn create_option_usage_long5() {
525 let a
= Arg
::from_usage("[option] --opt [opt]... 'some help info'");
526 assert_eq
!(a
.b
.name
, "option");
527 assert_eq
!(a
.s
.long
.unwrap(), "opt");
528 assert
!(a
.s
.short
.is_none());
529 assert_eq
!(a
.b
.help
.unwrap(), "some help info");
530 assert
!(a
.is_set(ArgSettings
::Multiple
));
531 assert
!(a
.is_set(ArgSettings
::TakesValue
));
532 assert
!(!a
.is_set(ArgSettings
::Required
));
533 assert_eq
!(a
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
534 assert
!(a
.v
.num_vals
.is_none());
538 fn create_option_usage_long6() {
539 let a
= Arg
::from_usage("[option]... --opt [opt] 'some help info'");
540 assert_eq
!(a
.b
.name
, "option");
541 assert_eq
!(a
.s
.long
.unwrap(), "opt");
542 assert
!(a
.s
.short
.is_none());
543 assert_eq
!(a
.b
.help
.unwrap(), "some help info");
544 assert
!(a
.is_set(ArgSettings
::Multiple
));
545 assert
!(a
.is_set(ArgSettings
::TakesValue
));
546 assert
!(!a
.is_set(ArgSettings
::Required
));
547 assert_eq
!(a
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
548 assert
!(a
.v
.num_vals
.is_none());
552 fn create_option_usage_long7() {
553 let b
= Arg
::from_usage("--opt [option]... 'some help info'");
554 assert_eq
!(b
.b
.name
, "opt");
555 assert_eq
!(b
.s
.long
.unwrap(), "opt");
556 assert
!(b
.s
.short
.is_none());
557 assert_eq
!(b
.b
.help
.unwrap(), "some help info");
558 assert
!(b
.is_set(ArgSettings
::Multiple
));
559 assert
!(b
.is_set(ArgSettings
::TakesValue
));
560 assert
!(!b
.is_set(ArgSettings
::Required
));
561 assert_eq
!(b
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
563 assert
!(b
.v
.num_vals
.is_none());
567 fn create_option_usage_long8() {
568 let c
= Arg
::from_usage("<option> --opt <opt>... 'some help info'");
569 assert_eq
!(c
.b
.name
, "option");
570 assert_eq
!(c
.s
.long
.unwrap(), "opt");
571 assert
!(c
.s
.short
.is_none());
572 assert_eq
!(c
.b
.help
.unwrap(), "some help info");
573 assert
!(c
.is_set(ArgSettings
::Multiple
));
574 assert
!(c
.is_set(ArgSettings
::TakesValue
));
575 assert
!(c
.is_set(ArgSettings
::Required
));
576 assert_eq
!(c
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
577 assert
!(c
.v
.num_vals
.is_none());
581 fn create_option_usage_long9() {
582 let c
= Arg
::from_usage("<option>... --opt <opt> 'some help info'");
583 assert_eq
!(c
.b
.name
, "option");
584 assert_eq
!(c
.s
.long
.unwrap(), "opt");
585 assert
!(c
.s
.short
.is_none());
586 assert_eq
!(c
.b
.help
.unwrap(), "some help info");
587 assert
!(c
.is_set(ArgSettings
::Multiple
));
588 assert
!(c
.is_set(ArgSettings
::TakesValue
));
589 assert
!(c
.is_set(ArgSettings
::Required
));
590 assert_eq
!(c
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
591 assert
!(c
.v
.num_vals
.is_none());
595 fn create_option_usage_long10() {
596 let d
= Arg
::from_usage("--opt <option>... 'some help info'");
597 assert_eq
!(d
.b
.name
, "opt");
598 assert_eq
!(d
.s
.long
.unwrap(), "opt");
599 assert
!(d
.s
.short
.is_none());
600 assert_eq
!(d
.b
.help
.unwrap(), "some help info");
601 assert
!(d
.is_set(ArgSettings
::Multiple
));
602 assert
!(d
.is_set(ArgSettings
::TakesValue
));
603 assert
!(d
.is_set(ArgSettings
::Required
));
604 assert_eq
!(d
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
606 assert
!(d
.v
.num_vals
.is_none());
610 fn create_option_usage_long_equals1() {
611 let a
= Arg
::from_usage("[option] --opt=[opt] 'some help info'");
612 assert_eq
!(a
.b
.name
, "option");
613 assert_eq
!(a
.s
.long
.unwrap(), "opt");
614 assert
!(a
.s
.short
.is_none());
615 assert_eq
!(a
.b
.help
.unwrap(), "some help info");
616 assert
!(!a
.is_set(ArgSettings
::Multiple
));
617 assert
!(a
.is_set(ArgSettings
::TakesValue
));
618 assert
!(!a
.is_set(ArgSettings
::Required
));
619 assert_eq
!(a
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
620 assert
!(a
.v
.num_vals
.is_none());
624 fn create_option_usage_long_equals2() {
625 let b
= Arg
::from_usage("--opt=[option] 'some help info'");
626 assert_eq
!(b
.b
.name
, "opt");
627 assert_eq
!(b
.s
.long
.unwrap(), "opt");
628 assert
!(b
.s
.short
.is_none());
629 assert_eq
!(b
.b
.help
.unwrap(), "some help info");
630 assert
!(!b
.is_set(ArgSettings
::Multiple
));
631 assert
!(b
.is_set(ArgSettings
::TakesValue
));
632 assert
!(!b
.is_set(ArgSettings
::Required
));
633 assert_eq
!(b
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
635 assert
!(b
.v
.num_vals
.is_none());
639 fn create_option_usage_long_equals3() {
640 let c
= Arg
::from_usage("<option> --opt=<opt> 'some help info'");
641 assert_eq
!(c
.b
.name
, "option");
642 assert_eq
!(c
.s
.long
.unwrap(), "opt");
643 assert
!(c
.s
.short
.is_none());
644 assert_eq
!(c
.b
.help
.unwrap(), "some help info");
645 assert
!(!c
.is_set(ArgSettings
::Multiple
));
646 assert
!(c
.is_set(ArgSettings
::TakesValue
));
647 assert
!(c
.is_set(ArgSettings
::Required
));
648 assert_eq
!(c
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
649 assert
!(c
.v
.num_vals
.is_none());
653 fn create_option_usage_long_equals4() {
654 let d
= Arg
::from_usage("--opt=<option> 'some help info'");
655 assert_eq
!(d
.b
.name
, "opt");
656 assert_eq
!(d
.s
.long
.unwrap(), "opt");
657 assert
!(d
.s
.short
.is_none());
658 assert_eq
!(d
.b
.help
.unwrap(), "some help info");
659 assert
!(!d
.is_set(ArgSettings
::Multiple
));
660 assert
!(d
.is_set(ArgSettings
::TakesValue
));
661 assert
!(d
.is_set(ArgSettings
::Required
));
662 assert_eq
!(d
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
664 assert
!(d
.v
.num_vals
.is_none());
668 fn create_option_usage_long_equals5() {
669 let a
= Arg
::from_usage("[option] --opt=[opt]... 'some help info'");
670 assert_eq
!(a
.b
.name
, "option");
671 assert_eq
!(a
.s
.long
.unwrap(), "opt");
672 assert
!(a
.s
.short
.is_none());
673 assert_eq
!(a
.b
.help
.unwrap(), "some help info");
674 assert
!(a
.is_set(ArgSettings
::Multiple
));
675 assert
!(a
.is_set(ArgSettings
::TakesValue
));
676 assert
!(!a
.is_set(ArgSettings
::Required
));
677 assert_eq
!(a
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
678 assert
!(a
.v
.num_vals
.is_none());
682 fn create_option_usage_long_equals6() {
683 let a
= Arg
::from_usage("[option]... --opt=[opt] 'some help info'");
684 assert_eq
!(a
.b
.name
, "option");
685 assert_eq
!(a
.s
.long
.unwrap(), "opt");
686 assert
!(a
.s
.short
.is_none());
687 assert_eq
!(a
.b
.help
.unwrap(), "some help info");
688 assert
!(a
.is_set(ArgSettings
::Multiple
));
689 assert
!(a
.is_set(ArgSettings
::TakesValue
));
690 assert
!(!a
.is_set(ArgSettings
::Required
));
691 assert_eq
!(a
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
692 assert
!(a
.v
.num_vals
.is_none());
696 fn create_option_usage_long_equals7() {
697 let b
= Arg
::from_usage("--opt=[option]... 'some help info'");
698 assert_eq
!(b
.b
.name
, "opt");
699 assert_eq
!(b
.s
.long
.unwrap(), "opt");
700 assert
!(b
.s
.short
.is_none());
701 assert_eq
!(b
.b
.help
.unwrap(), "some help info");
702 assert
!(b
.is_set(ArgSettings
::Multiple
));
703 assert
!(b
.is_set(ArgSettings
::TakesValue
));
704 assert
!(!b
.is_set(ArgSettings
::Required
));
705 assert_eq
!(b
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
707 assert
!(b
.v
.num_vals
.is_none());
711 fn create_option_usage_long_equals8() {
712 let c
= Arg
::from_usage("<option> --opt=<opt>... 'some help info'");
713 assert_eq
!(c
.b
.name
, "option");
714 assert_eq
!(c
.s
.long
.unwrap(), "opt");
715 assert
!(c
.s
.short
.is_none());
716 assert_eq
!(c
.b
.help
.unwrap(), "some help info");
717 assert
!(c
.is_set(ArgSettings
::Multiple
));
718 assert
!(c
.is_set(ArgSettings
::TakesValue
));
719 assert
!(c
.is_set(ArgSettings
::Required
));
720 assert_eq
!(c
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
721 assert
!(c
.v
.num_vals
.is_none());
725 fn create_option_usage_long_equals9() {
726 let c
= Arg
::from_usage("<option>... --opt=<opt> 'some help info'");
727 assert_eq
!(c
.b
.name
, "option");
728 assert_eq
!(c
.s
.long
.unwrap(), "opt");
729 assert
!(c
.s
.short
.is_none());
730 assert_eq
!(c
.b
.help
.unwrap(), "some help info");
731 assert
!(c
.is_set(ArgSettings
::Multiple
));
732 assert
!(c
.is_set(ArgSettings
::TakesValue
));
733 assert
!(c
.is_set(ArgSettings
::Required
));
734 assert_eq
!(c
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
735 assert
!(c
.v
.num_vals
.is_none());
739 fn create_option_usage_long_equals10() {
740 let d
= Arg
::from_usage("--opt=<option>... 'some help info'");
741 assert_eq
!(d
.b
.name
, "opt");
742 assert_eq
!(d
.s
.long
.unwrap(), "opt");
743 assert
!(d
.s
.short
.is_none());
744 assert_eq
!(d
.b
.help
.unwrap(), "some help info");
745 assert
!(d
.is_set(ArgSettings
::Multiple
));
746 assert
!(d
.is_set(ArgSettings
::TakesValue
));
747 assert
!(d
.is_set(ArgSettings
::Required
));
748 assert_eq
!(d
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
750 assert
!(d
.v
.num_vals
.is_none());
754 fn create_option_usage_both1() {
755 let a
= Arg
::from_usage("[option] -o --opt [option] 'some help info'");
756 assert_eq
!(a
.b
.name
, "option");
757 assert_eq
!(a
.s
.long
.unwrap(), "opt");
758 assert_eq
!(a
.s
.short
.unwrap(), 'o'
);
759 assert_eq
!(a
.b
.help
.unwrap(), "some help info");
760 assert
!(!a
.is_set(ArgSettings
::Multiple
));
761 assert
!(a
.is_set(ArgSettings
::TakesValue
));
762 assert
!(!a
.is_set(ArgSettings
::Required
));
763 assert_eq
!(a
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
765 assert
!(a
.v
.num_vals
.is_none());
769 fn create_option_usage_both2() {
770 let b
= Arg
::from_usage("-o --opt [option] 'some help info'");
771 assert_eq
!(b
.b
.name
, "opt");
772 assert_eq
!(b
.s
.long
.unwrap(), "opt");
773 assert_eq
!(b
.s
.short
.unwrap(), 'o'
);
774 assert_eq
!(b
.b
.help
.unwrap(), "some help info");
775 assert
!(!b
.is_set(ArgSettings
::Multiple
));
776 assert
!(b
.is_set(ArgSettings
::TakesValue
));
777 assert
!(!b
.is_set(ArgSettings
::Required
));
778 assert_eq
!(b
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
780 assert
!(b
.v
.num_vals
.is_none());
784 fn create_option_usage_both3() {
785 let c
= Arg
::from_usage("<option> -o --opt <opt> 'some help info'");
786 assert_eq
!(c
.b
.name
, "option");
787 assert_eq
!(c
.s
.long
.unwrap(), "opt");
788 assert_eq
!(c
.s
.short
.unwrap(), 'o'
);
789 assert_eq
!(c
.b
.help
.unwrap(), "some help info");
790 assert
!(!c
.is_set(ArgSettings
::Multiple
));
791 assert
!(c
.is_set(ArgSettings
::TakesValue
));
792 assert
!(c
.is_set(ArgSettings
::Required
));
793 assert_eq
!(c
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
794 assert
!(c
.v
.num_vals
.is_none());
798 fn create_option_usage_both4() {
799 let d
= Arg
::from_usage("-o --opt <option> 'some help info'");
800 assert_eq
!(d
.b
.name
, "opt");
801 assert_eq
!(d
.s
.long
.unwrap(), "opt");
802 assert_eq
!(d
.s
.short
.unwrap(), 'o'
);
803 assert_eq
!(d
.b
.help
.unwrap(), "some help info");
804 assert
!(!d
.is_set(ArgSettings
::Multiple
));
805 assert
!(d
.is_set(ArgSettings
::TakesValue
));
806 assert
!(d
.is_set(ArgSettings
::Required
));
807 assert_eq
!(d
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
809 assert
!(d
.v
.num_vals
.is_none());
813 fn create_option_usage_both5() {
814 let a
= Arg
::from_usage("[option]... -o --opt [option] 'some help info'");
815 assert_eq
!(a
.b
.name
, "option");
816 assert_eq
!(a
.s
.long
.unwrap(), "opt");
817 assert_eq
!(a
.s
.short
.unwrap(), 'o'
);
818 assert_eq
!(a
.b
.help
.unwrap(), "some help info");
819 assert
!(a
.is_set(ArgSettings
::Multiple
));
820 assert
!(a
.is_set(ArgSettings
::TakesValue
));
821 assert
!(!a
.is_set(ArgSettings
::Required
));
822 assert_eq
!(a
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
824 assert
!(a
.v
.num_vals
.is_none());
828 fn create_option_usage_both6() {
829 let b
= Arg
::from_usage("-o --opt [option]... 'some help info'");
830 assert_eq
!(b
.b
.name
, "opt");
831 assert_eq
!(b
.s
.long
.unwrap(), "opt");
832 assert_eq
!(b
.s
.short
.unwrap(), 'o'
);
833 assert_eq
!(b
.b
.help
.unwrap(), "some help info");
834 assert
!(b
.is_set(ArgSettings
::Multiple
));
835 assert
!(b
.is_set(ArgSettings
::TakesValue
));
836 assert
!(!b
.is_set(ArgSettings
::Required
));
837 assert_eq
!(b
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
839 assert
!(b
.v
.num_vals
.is_none());
843 fn create_option_usage_both7() {
844 let c
= Arg
::from_usage("<option>... -o --opt <opt> 'some help info'");
845 assert_eq
!(c
.b
.name
, "option");
846 assert_eq
!(c
.s
.long
.unwrap(), "opt");
847 assert_eq
!(c
.s
.short
.unwrap(), 'o'
);
848 assert_eq
!(c
.b
.help
.unwrap(), "some help info");
849 assert
!(c
.is_set(ArgSettings
::Multiple
));
850 assert
!(c
.is_set(ArgSettings
::TakesValue
));
851 assert
!(c
.is_set(ArgSettings
::Required
));
852 assert_eq
!(c
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
853 assert
!(c
.v
.num_vals
.is_none());
857 fn create_option_usage_both8() {
858 let d
= Arg
::from_usage("-o --opt <option>... 'some help info'");
859 assert_eq
!(d
.b
.name
, "opt");
860 assert_eq
!(d
.s
.long
.unwrap(), "opt");
861 assert_eq
!(d
.s
.short
.unwrap(), 'o'
);
862 assert_eq
!(d
.b
.help
.unwrap(), "some help info");
863 assert
!(d
.is_set(ArgSettings
::Multiple
));
864 assert
!(d
.is_set(ArgSettings
::TakesValue
));
865 assert
!(d
.is_set(ArgSettings
::Required
));
866 assert_eq
!(d
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
868 assert
!(d
.v
.num_vals
.is_none());
872 fn create_option_usage_both_equals1() {
873 let a
= Arg
::from_usage("[option] -o --opt=[option] 'some help info'");
874 assert_eq
!(a
.b
.name
, "option");
875 assert_eq
!(a
.s
.long
.unwrap(), "opt");
876 assert_eq
!(a
.s
.short
.unwrap(), 'o'
);
877 assert_eq
!(a
.b
.help
.unwrap(), "some help info");
878 assert
!(!a
.is_set(ArgSettings
::Multiple
));
879 assert
!(a
.is_set(ArgSettings
::TakesValue
));
880 assert
!(!a
.is_set(ArgSettings
::Required
));
881 assert_eq
!(a
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
883 assert
!(a
.v
.num_vals
.is_none());
887 fn create_option_usage_both_equals2() {
888 let b
= Arg
::from_usage("-o --opt=[option] 'some help info'");
889 assert_eq
!(b
.b
.name
, "opt");
890 assert_eq
!(b
.s
.long
.unwrap(), "opt");
891 assert_eq
!(b
.s
.short
.unwrap(), 'o'
);
892 assert_eq
!(b
.b
.help
.unwrap(), "some help info");
893 assert
!(!b
.is_set(ArgSettings
::Multiple
));
894 assert
!(b
.is_set(ArgSettings
::TakesValue
));
895 assert
!(!b
.is_set(ArgSettings
::Required
));
896 assert_eq
!(b
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
898 assert
!(b
.v
.num_vals
.is_none());
902 fn create_option_usage_both_equals3() {
903 let c
= Arg
::from_usage("<option> -o --opt=<opt> 'some help info'");
904 assert_eq
!(c
.b
.name
, "option");
905 assert_eq
!(c
.s
.long
.unwrap(), "opt");
906 assert_eq
!(c
.s
.short
.unwrap(), 'o'
);
907 assert_eq
!(c
.b
.help
.unwrap(), "some help info");
908 assert
!(!c
.is_set(ArgSettings
::Multiple
));
909 assert
!(c
.is_set(ArgSettings
::TakesValue
));
910 assert
!(c
.is_set(ArgSettings
::Required
));
911 assert_eq
!(c
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
912 assert
!(c
.v
.num_vals
.is_none());
916 fn create_option_usage_both_equals4() {
917 let d
= Arg
::from_usage("-o --opt=<option> 'some help info'");
918 assert_eq
!(d
.b
.name
, "opt");
919 assert_eq
!(d
.s
.long
.unwrap(), "opt");
920 assert_eq
!(d
.s
.short
.unwrap(), 'o'
);
921 assert_eq
!(d
.b
.help
.unwrap(), "some help info");
922 assert
!(!d
.is_set(ArgSettings
::Multiple
));
923 assert
!(d
.is_set(ArgSettings
::TakesValue
));
924 assert
!(d
.is_set(ArgSettings
::Required
));
925 assert_eq
!(d
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
927 assert
!(d
.v
.num_vals
.is_none());
931 fn create_option_usage_both_equals5() {
932 let a
= Arg
::from_usage("[option]... -o --opt=[option] 'some help info'");
933 assert_eq
!(a
.b
.name
, "option");
934 assert_eq
!(a
.s
.long
.unwrap(), "opt");
935 assert_eq
!(a
.s
.short
.unwrap(), 'o'
);
936 assert_eq
!(a
.b
.help
.unwrap(), "some help info");
937 assert
!(a
.is_set(ArgSettings
::Multiple
));
938 assert
!(a
.is_set(ArgSettings
::TakesValue
));
939 assert
!(!a
.is_set(ArgSettings
::Required
));
940 assert_eq
!(a
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
942 assert
!(a
.v
.num_vals
.is_none());
946 fn create_option_usage_both_equals6() {
947 let b
= Arg
::from_usage("-o --opt=[option]... 'some help info'");
948 assert_eq
!(b
.b
.name
, "opt");
949 assert_eq
!(b
.s
.long
.unwrap(), "opt");
950 assert_eq
!(b
.s
.short
.unwrap(), 'o'
);
951 assert_eq
!(b
.b
.help
.unwrap(), "some help info");
952 assert
!(b
.is_set(ArgSettings
::Multiple
));
953 assert
!(b
.is_set(ArgSettings
::TakesValue
));
954 assert
!(!b
.is_set(ArgSettings
::Required
));
955 assert_eq
!(b
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
957 assert
!(b
.v
.num_vals
.is_none());
961 fn create_option_usage_both_equals7() {
962 let c
= Arg
::from_usage("<option>... -o --opt=<opt> 'some help info'");
963 assert_eq
!(c
.b
.name
, "option");
964 assert_eq
!(c
.s
.long
.unwrap(), "opt");
965 assert_eq
!(c
.s
.short
.unwrap(), 'o'
);
966 assert_eq
!(c
.b
.help
.unwrap(), "some help info");
967 assert
!(c
.is_set(ArgSettings
::Multiple
));
968 assert
!(c
.is_set(ArgSettings
::TakesValue
));
969 assert
!(c
.is_set(ArgSettings
::Required
));
970 assert_eq
!(c
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(), [&"opt"]);
971 assert
!(c
.v
.num_vals
.is_none());
975 fn create_option_usage_both_equals8() {
976 let d
= Arg
::from_usage("-o --opt=<option>... 'some help info'");
977 assert_eq
!(d
.b
.name
, "opt");
978 assert_eq
!(d
.s
.long
.unwrap(), "opt");
979 assert_eq
!(d
.s
.short
.unwrap(), 'o'
);
980 assert_eq
!(d
.b
.help
.unwrap(), "some help info");
981 assert
!(d
.is_set(ArgSettings
::Multiple
));
982 assert
!(d
.is_set(ArgSettings
::TakesValue
));
983 assert
!(d
.is_set(ArgSettings
::Required
));
984 assert_eq
!(d
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
986 assert
!(d
.v
.num_vals
.is_none());
990 fn create_option_with_vals1() {
991 let d
= Arg
::from_usage("-o <file> <mode> 'some help info'");
992 assert_eq
!(d
.b
.name
, "o");
993 assert
!(d
.s
.long
.is_none());
994 assert_eq
!(d
.s
.short
.unwrap(), 'o'
);
995 assert_eq
!(d
.b
.help
.unwrap(), "some help info");
996 assert
!(!d
.is_set(ArgSettings
::Multiple
));
997 assert
!(d
.is_set(ArgSettings
::TakesValue
));
998 assert
!(d
.is_set(ArgSettings
::Required
));
999 assert_eq
!(d
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
1000 [&"file", &"mode"]);
1001 assert_eq
!(d
.v
.num_vals
.unwrap(), 2);
1005 fn create_option_with_vals2() {
1006 let d
= Arg
::from_usage("-o <file> <mode>... 'some help info'");
1007 assert_eq
!(d
.b
.name
, "o");
1008 assert
!(d
.s
.long
.is_none());
1009 assert_eq
!(d
.s
.short
.unwrap(), 'o'
);
1010 assert_eq
!(d
.b
.help
.unwrap(), "some help info");
1011 assert
!(d
.is_set(ArgSettings
::Multiple
));
1012 assert
!(d
.is_set(ArgSettings
::TakesValue
));
1013 assert
!(d
.is_set(ArgSettings
::Required
));
1014 assert_eq
!(d
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
1015 [&"file", &"mode"]);
1016 assert_eq
!(d
.v
.num_vals
.unwrap(), 2);
1020 fn create_option_with_vals3() {
1021 let d
= Arg
::from_usage("--opt <file> <mode>... 'some help info'");
1022 assert_eq
!(d
.b
.name
, "opt");
1023 assert
!(d
.s
.short
.is_none());
1024 assert_eq
!(d
.s
.long
.unwrap(), "opt");
1025 assert_eq
!(d
.b
.help
.unwrap(), "some help info");
1026 assert
!(d
.is_set(ArgSettings
::Multiple
));
1027 assert
!(d
.is_set(ArgSettings
::TakesValue
));
1028 assert
!(d
.is_set(ArgSettings
::Required
));
1029 assert_eq
!(d
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
1030 [&"file", &"mode"]);
1031 assert_eq
!(d
.v
.num_vals
.unwrap(), 2);
1035 fn create_option_with_vals4() {
1036 let d
= Arg
::from_usage("[myopt] --opt <file> <mode> 'some help info'");
1037 assert_eq
!(d
.b
.name
, "myopt");
1038 assert
!(d
.s
.short
.is_none());
1039 assert_eq
!(d
.s
.long
.unwrap(), "opt");
1040 assert_eq
!(d
.b
.help
.unwrap(), "some help info");
1041 assert
!(!d
.is_set(ArgSettings
::Multiple
));
1042 assert
!(d
.is_set(ArgSettings
::TakesValue
));
1043 assert
!(!d
.is_set(ArgSettings
::Required
));
1044 assert_eq
!(d
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
1045 [&"file", &"mode"]);
1046 assert_eq
!(d
.v
.num_vals
.unwrap(), 2);
1050 fn create_option_with_vals5() {
1051 let d
= Arg
::from_usage("--opt <file> <mode> 'some help info'");
1052 assert_eq
!(d
.b
.name
, "opt");
1053 assert
!(d
.s
.short
.is_none());
1054 assert_eq
!(d
.s
.long
.unwrap(), "opt");
1055 assert_eq
!(d
.b
.help
.unwrap(), "some help info");
1056 assert
!(!d
.is_set(ArgSettings
::Multiple
));
1057 assert
!(d
.is_set(ArgSettings
::TakesValue
));
1058 assert
!(d
.is_set(ArgSettings
::Required
));
1059 assert_eq
!(d
.v
.num_vals
.unwrap(), 2);
1063 fn create_positional_usage() {
1064 let a
= Arg
::from_usage("[pos] 'some help info'");
1065 assert_eq
!(a
.b
.name
, "pos");
1066 assert_eq
!(a
.b
.help
.unwrap(), "some help info");
1067 assert
!(!a
.is_set(ArgSettings
::Multiple
));
1068 assert
!(!a
.is_set(ArgSettings
::Required
));
1069 assert
!(a
.v
.val_names
.is_none());
1070 assert
!(a
.v
.num_vals
.is_none());
1074 fn create_positional_usage0() {
1075 let b
= Arg
::from_usage("<pos> 'some help info'");
1076 assert_eq
!(b
.b
.name
, "pos");
1077 assert_eq
!(b
.b
.help
.unwrap(), "some help info");
1078 assert
!(!b
.is_set(ArgSettings
::Multiple
));
1079 assert
!(b
.is_set(ArgSettings
::Required
));
1080 assert
!(b
.v
.val_names
.is_none());
1081 assert
!(b
.v
.num_vals
.is_none());
1085 fn pos_mult_help() {
1086 let c
= Arg
::from_usage("[pos]... 'some help info'");
1087 assert_eq
!(c
.b
.name
, "pos");
1088 assert_eq
!(c
.b
.help
.unwrap(), "some help info");
1089 assert
!(c
.is_set(ArgSettings
::Multiple
));
1090 assert
!(!c
.is_set(ArgSettings
::Required
));
1091 assert
!(c
.v
.val_names
.is_none());
1092 assert
!(c
.v
.num_vals
.is_none());
1096 fn pos_help_lit_single_quote() {
1097 let c
= Arg
::from_usage("[pos]... 'some help\' info'");
1098 assert_eq
!(c
.b
.name
, "pos");
1099 assert_eq
!(c
.b
.help
.unwrap(), "some help' info");
1100 assert
!(c
.is_set(ArgSettings
::Multiple
));
1101 assert
!(!c
.is_set(ArgSettings
::Required
));
1102 assert
!(c
.v
.val_names
.is_none());
1103 assert
!(c
.v
.num_vals
.is_none());
1107 fn pos_help_double_lit_single_quote() {
1108 let c
= Arg
::from_usage("[pos]... 'some \'help\' info'");
1109 assert_eq
!(c
.b
.name
, "pos");
1110 assert_eq
!(c
.b
.help
.unwrap(), "some 'help' info");
1111 assert
!(c
.is_set(ArgSettings
::Multiple
));
1112 assert
!(!c
.is_set(ArgSettings
::Required
));
1113 assert
!(c
.v
.val_names
.is_none());
1114 assert
!(c
.v
.num_vals
.is_none());
1118 fn pos_help_newline() {
1119 let c
= Arg
::from_usage("[pos]... 'some help{n}\
1121 assert_eq
!(c
.b
.name
, "pos");
1122 assert_eq
!(c
.b
.help
.unwrap(), "some help{n}info");
1123 assert
!(c
.is_set(ArgSettings
::Multiple
));
1124 assert
!(!c
.is_set(ArgSettings
::Required
));
1125 assert
!(c
.v
.val_names
.is_none());
1126 assert
!(c
.v
.num_vals
.is_none());
1130 fn pos_help_newline_lit_sq() {
1131 let c
= Arg
::from_usage("[pos]... 'some help\' stuff{n}\
1133 assert_eq
!(c
.b
.name
, "pos");
1134 assert_eq
!(c
.b
.help
.unwrap(), "some help' stuff{n}info");
1135 assert
!(c
.is_set(ArgSettings
::Multiple
));
1136 assert
!(!c
.is_set(ArgSettings
::Required
));
1137 assert
!(c
.v
.val_names
.is_none());
1138 assert
!(c
.v
.num_vals
.is_none());
1142 fn pos_req_mult_help() {
1143 let d
= Arg
::from_usage("<pos>... 'some help info'");
1144 assert_eq
!(d
.b
.name
, "pos");
1145 assert_eq
!(d
.b
.help
.unwrap(), "some help info");
1146 assert
!(d
.is_set(ArgSettings
::Multiple
));
1147 assert
!(d
.is_set(ArgSettings
::Required
));
1148 assert
!(d
.v
.val_names
.is_none());
1149 assert
!(d
.v
.num_vals
.is_none());
1154 let b
= Arg
::from_usage("<pos>");
1155 assert_eq
!(b
.b
.name
, "pos");
1156 assert
!(!b
.is_set(ArgSettings
::Multiple
));
1157 assert
!(b
.is_set(ArgSettings
::Required
));
1158 assert
!(b
.v
.val_names
.is_none());
1159 assert
!(b
.v
.num_vals
.is_none());
1164 let c
= Arg
::from_usage("[pos]...");
1165 assert_eq
!(c
.b
.name
, "pos");
1166 assert
!(c
.is_set(ArgSettings
::Multiple
));
1167 assert
!(!c
.is_set(ArgSettings
::Required
));
1168 assert
!(c
.v
.val_names
.is_none());
1169 assert
!(c
.v
.num_vals
.is_none());
1174 let a
= Arg
::from_usage("<ASCII> 'üñíčöĐ€'");
1175 assert_eq
!(a
.b
.name
, "ASCII");
1176 assert_eq
!(a
.b
.help
, Some("üñíčöĐ€"));
1177 let a
= Arg
::from_usage("<üñíčöĐ€> 'ASCII'");
1178 assert_eq
!(a
.b
.name
, "üñíčöĐ€");
1179 assert_eq
!(a
.b
.help
, Some("ASCII"));
1180 let a
= Arg
::from_usage("<üñíčöĐ€> 'üñíčöĐ€'");
1181 assert_eq
!(a
.b
.name
, "üñíčöĐ€");
1182 assert_eq
!(a
.b
.help
, Some("üñíčöĐ€"));
1183 let a
= Arg
::from_usage("-ø 'ø'");
1184 assert_eq
!(a
.b
.name
, "ø");
1185 assert_eq
!(a
.s
.short
, Some('ø'
));
1186 assert_eq
!(a
.b
.help
, Some("ø"));
1187 let a
= Arg
::from_usage("--üñíčöĐ€ 'Nōṫ ASCII'");
1188 assert_eq
!(a
.b
.name
, "üñíčöĐ€");
1189 assert_eq
!(a
.s
.long
, Some("üñíčöĐ€"));
1190 assert_eq
!(a
.b
.help
, Some("Nōṫ ASCII"));
1191 let a
= Arg
::from_usage("[ñämê] --ôpt=[üñíčöĐ€] 'hælp'");
1192 assert_eq
!(a
.b
.name
, "ñämê");
1193 assert_eq
!(a
.s
.long
, Some("ôpt"));
1194 assert_eq
!(a
.v
.val_names
.unwrap().values().collect
::<Vec
<_
>>(),
1196 assert_eq
!(a
.b
.help
, Some("hælp"));