5 build
::{Arg, ArgSettings}
,
9 #[derive(PartialEq, Debug)]
22 pub(crate) struct UsageParser
<'help
> {
27 explicit_name_set
: bool
,
30 impl<'help
> UsageParser
<'help
> {
31 fn new(usage
: &'help
str) -> Self {
32 debug
!("new: usage={:?}", usage
);
37 prev
: UsageToken
::Unknown
,
38 explicit_name_set
: false,
42 pub(crate) fn from_usage(usage
: &'help
str) -> Self {
43 debug
!("UsageParser::from_usage");
44 UsageParser
::new(usage
)
47 pub(crate) fn parse(mut self) -> Arg
<'help
> {
48 debug
!("UsageParser::parse");
49 let mut arg
= Arg
::default();
51 debug
!("UsageParser::parse:iter: pos={}", self.pos
);
53 if let Some(&c
) = self.usage
.as_bytes().get(self.pos
) {
55 b'
-'
=> self.short_or_long(&mut arg
),
56 b'
.'
=> self.multiple(&mut arg
),
57 b'@'
=> self.default(&mut arg
),
58 b'
\''
=> self.help(&mut arg
),
59 _
=> self.name(&mut arg
),
66 debug
!("UsageParser::parse: vals...{:?}", arg
.val_names
);
70 fn name(&mut self, arg
: &mut Arg
<'help
>) {
71 debug
!("UsageParser::name");
76 .expect(INTERNAL_ERROR_MSG
)
78 && !self.explicit_name_set
80 arg
.settings
.set(ArgSettings
::Required
);
83 self.stop_at(name_end
);
84 let name
= &self.usage
[self.start
..self.pos
];
85 if self.prev
== UsageToken
::Unknown
{
86 debug
!("UsageParser::name: setting name...{}", name
);
89 if arg
.long
.is_none() && arg
.short
.is_none() {
90 debug
!("name: explicit name set...");
91 self.explicit_name_set
= true;
92 self.prev
= UsageToken
::Name
;
95 debug
!("UsageParser::name: setting val name...{}", name
);
96 if arg
.val_names
.is_empty() {
97 arg
.settings
.set(ArgSettings
::TakesValue
);
99 let len
= arg
.val_names
.len();
100 arg
.val_names
.insert(len
, name
);
101 self.prev
= UsageToken
::ValName
;
105 fn stop_at
<F
>(&mut self, f
: F
)
109 debug
!("UsageParser::stop_at");
110 self.start
= self.pos
;
111 self.pos
+= self.usage
[self.start
..]
113 .take_while(|&b
| f(b
))
117 fn short_or_long(&mut self, arg
: &mut Arg
<'help
>) {
118 debug
!("UsageParser::short_or_long");
124 .expect(INTERNAL_ERROR_MSG
)
134 fn long(&mut self, arg
: &mut Arg
<'help
>) {
135 debug
!("UsageParser::long");
136 self.stop_at(long_end
);
137 let name
= &self.usage
[self.start
..self.pos
];
138 if !self.explicit_name_set
{
139 debug
!("UsageParser::long: setting name...{}", name
);
140 arg
.id
= name
.into();
143 debug
!("UsageParser::long: setting long...{}", name
);
144 arg
.long
= Some(name
);
145 self.prev
= UsageToken
::Long
;
148 fn short(&mut self, arg
: &mut Arg
<'help
>) {
149 debug
!("UsageParser::short");
150 let start
= &self.usage
[self.pos
..];
151 let short
= start
.chars().next().expect(INTERNAL_ERROR_MSG
);
152 debug
!("UsageParser::short: setting short...{}", short
);
153 arg
.short
= Some(short
);
154 if arg
.name
.is_empty() {
155 // --long takes precedence but doesn't set self.explicit_name_set
156 let name
= &start
[..short
.len_utf8()];
157 debug
!("UsageParser::short: setting name...{}", name
);
158 arg
.id
= name
.into();
161 self.prev
= UsageToken
::Short
;
165 fn multiple(&mut self, arg
: &mut Arg
) {
166 debug
!("UsageParser::multiple");
167 let mut dot_counter
= 1;
168 let start
= self.pos
;
169 let mut bytes
= self.usage
[start
..].bytes();
170 while bytes
.next() == Some(b'
.'
) {
173 if dot_counter
== 3 {
174 debug
!("UsageParser::multiple: setting multiple");
175 arg
.settings
.set(ArgSettings
::MultipleOccurrences
);
176 if arg
.is_takes_value_set() {
177 arg
.settings
.set(ArgSettings
::MultipleValues
);
178 arg
.settings
.set(ArgSettings
::UseValueDelimiter
);
179 arg
.val_delim
.get_or_insert('
,'
);
181 self.prev
= UsageToken
::Multiple
;
188 fn help(&mut self, arg
: &mut Arg
<'help
>) {
189 debug
!("UsageParser::help");
190 self.stop_at(help_start
);
191 self.start
= self.pos
+ 1;
192 self.pos
= self.usage
.len() - 1;
194 "UsageParser::help: setting help...{}",
195 &self.usage
[self.start
..self.pos
]
197 arg
.help
= Some(&self.usage
[self.start
..self.pos
]);
198 self.pos
+= 1; // Move to next byte to keep from thinking ending ' is a start
199 self.prev
= UsageToken
::Help
;
202 fn default(&mut self, arg
: &mut Arg
<'help
>) {
204 "UsageParser::default: from=\"{}\"",
205 &self.usage
[self.pos
..self.usage
.len()]
207 self.pos
+= 1; // Skip @
208 self.stop_at(default_value_end
); // Find first space after value
210 "UsageParser::default: setting default...\"{}\"",
211 &self.usage
[self.start
..self.pos
]
213 arg
.settings
.set(ArgSettings
::TakesValue
);
214 arg
.default_vals
= vec
![std
::ffi
::OsStr
::new(&self.usage
[self.start
..self.pos
])];
215 self.prev
= UsageToken
::Default
;
220 fn name_end(b
: u8) -> bool
{
221 b
!= b'
]'
&& b
!= b'
>'
225 fn token(b
: u8) -> bool
{
226 b
!= b'
\''
&& b
!= b'
.'
&& b
!= b'
<'
&& b
!= b'
['
&& b
!= b'
-'
&& b
!= b'@'
230 fn long_end(b
: u8) -> bool
{
231 b
!= b'
\''
&& b
!= b'
.'
&& b
!= b'
<'
&& b
!= b'
['
&& b
!= b'
='
&& b
!= b' '
235 fn help_start(b
: u8) -> bool
{
240 fn default_value_end(b
: u8) -> bool
{
246 #![allow(deprecated)]
248 use crate::build
::{Arg, ArgSettings}
;
250 #[allow(clippy::cognitive_complexity)]
252 fn create_flag_usage() {
253 let a
= Arg
::from_usage("[flag] -f 'some help info'");
254 assert_eq
!(a
.name
, "flag");
255 assert_eq
!(a
.short
.unwrap(), 'f'
);
256 assert
!(a
.long
.is_none());
257 assert_eq
!(a
.help
.unwrap(), "some help info");
258 assert
!(!a
.is_multiple_occurrences_set());
259 assert
!(a
.val_names
.is_empty());
261 let a
= Arg
::from_usage("[flag] --flag 'some help info'");
262 assert_eq
!(a
.name
, "flag");
263 assert_eq
!(a
.long
.unwrap(), "flag");
264 assert
!(a
.short
.is_none());
265 assert_eq
!(a
.help
.unwrap(), "some help info");
266 assert
!(!a
.is_multiple_occurrences_set());
267 assert
!(a
.val_names
.is_empty());
269 let a
= Arg
::from_usage("--flag 'some help info'");
270 assert_eq
!(a
.name
, "flag");
271 assert_eq
!(a
.long
.unwrap(), "flag");
272 assert
!(a
.short
.is_none());
273 assert_eq
!(a
.help
.unwrap(), "some help info");
274 assert
!(!a
.is_multiple_occurrences_set());
275 assert
!(a
.val_names
.is_empty());
277 let a
= Arg
::from_usage("[flag] -f --flag 'some help info'");
278 assert_eq
!(a
.name
, "flag");
279 assert_eq
!(a
.short
.unwrap(), 'f'
);
280 assert_eq
!(a
.long
.unwrap(), "flag");
281 assert_eq
!(a
.help
.unwrap(), "some help info");
282 assert
!(!a
.is_multiple_occurrences_set());
283 assert
!(a
.val_names
.is_empty());
285 let a
= Arg
::from_usage("[flag] -f... 'some help info'");
286 assert_eq
!(a
.name
, "flag");
287 assert_eq
!(a
.short
.unwrap(), 'f'
);
288 assert
!(a
.long
.is_none());
289 assert_eq
!(a
.help
.unwrap(), "some help info");
290 assert
!(a
.is_multiple_occurrences_set());
291 assert
!(a
.val_names
.is_empty());
293 let a
= Arg
::from_usage("[flag] -f --flag... 'some help info'");
294 assert_eq
!(a
.name
, "flag");
295 assert_eq
!(a
.long
.unwrap(), "flag");
296 assert_eq
!(a
.short
.unwrap(), 'f'
);
297 assert_eq
!(a
.help
.unwrap(), "some help info");
298 assert
!(a
.is_multiple_occurrences_set());
299 assert
!(a
.val_names
.is_empty());
301 let a
= Arg
::from_usage("-f --flag... 'some help info'");
302 assert_eq
!(a
.name
, "flag");
303 assert_eq
!(a
.long
.unwrap(), "flag");
304 assert_eq
!(a
.short
.unwrap(), 'f'
);
305 assert_eq
!(a
.help
.unwrap(), "some help info");
306 assert
!(a
.is_multiple_occurrences_set());
307 assert
!(a
.val_names
.is_empty());
309 let a
= Arg
::from_usage("--flags");
310 assert_eq
!(a
.name
, "flags");
311 assert_eq
!(a
.long
.unwrap(), "flags");
312 assert
!(a
.val_names
.is_empty());
314 let a
= Arg
::from_usage("--flags...");
315 assert_eq
!(a
.name
, "flags");
316 assert_eq
!(a
.long
.unwrap(), "flags");
317 assert
!(a
.is_multiple_occurrences_set());
318 assert
!(a
.val_names
.is_empty());
320 let a
= Arg
::from_usage("[flags] -f");
321 assert_eq
!(a
.name
, "flags");
322 assert_eq
!(a
.short
.unwrap(), 'f'
);
323 assert
!(a
.val_names
.is_empty());
325 let a
= Arg
::from_usage("[flags] -f...");
326 assert_eq
!(a
.name
, "flags");
327 assert_eq
!(a
.short
.unwrap(), 'f'
);
328 assert
!(a
.is_multiple_occurrences_set());
329 assert
!(a
.val_names
.is_empty());
331 let a
= Arg
::from_usage("-f 'some help info'");
332 assert_eq
!(a
.name
, "f");
333 assert_eq
!(a
.short
.unwrap(), 'f'
);
334 assert
!(a
.long
.is_none());
335 assert_eq
!(a
.help
.unwrap(), "some help info");
336 assert
!(!a
.is_multiple_occurrences_set());
337 assert
!(a
.val_names
.is_empty());
339 let a
= Arg
::from_usage("-f");
340 assert_eq
!(a
.name
, "f");
341 assert_eq
!(a
.short
.unwrap(), 'f'
);
342 assert
!(a
.val_names
.is_empty());
344 let a
= Arg
::from_usage("-f...");
345 assert_eq
!(a
.name
, "f");
346 assert_eq
!(a
.short
.unwrap(), 'f'
);
347 assert
!(a
.is_multiple_occurrences_set());
348 assert
!(a
.val_names
.is_empty());
352 fn create_option_usage0() {
354 let a
= Arg
::from_usage("[option] -o [opt] 'some help info'");
355 assert_eq
!(a
.name
, "option");
356 assert_eq
!(a
.short
.unwrap(), 'o'
);
357 assert
!(a
.long
.is_none());
358 assert_eq
!(a
.help
.unwrap(), "some help info");
359 assert
!(!a
.is_multiple_occurrences_set());
360 assert
!(!a
.is_multiple_values_set());
361 assert
!(a
.is_takes_value_set());
362 assert
!(!a
.is_required_set());
363 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
367 fn create_option_usage1() {
368 let a
= Arg
::from_usage("-o [opt] 'some help info'");
369 assert_eq
!(a
.name
, "o");
370 assert_eq
!(a
.short
.unwrap(), 'o'
);
371 assert
!(a
.long
.is_none());
372 assert_eq
!(a
.help
.unwrap(), "some help info");
373 assert
!(!a
.is_multiple_occurrences_set());
374 assert
!(!a
.is_multiple_values_set());
375 assert
!(a
.is_takes_value_set());
376 assert
!(!a
.is_required_set());
377 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
381 fn create_option_usage2() {
382 let a
= Arg
::from_usage("<option> -o <opt> 'some help info'");
383 assert_eq
!(a
.name
, "option");
384 assert_eq
!(a
.short
.unwrap(), 'o'
);
385 assert
!(a
.long
.is_none());
386 assert_eq
!(a
.help
.unwrap(), "some help info");
387 assert
!(!a
.is_multiple_occurrences_set());
388 assert
!(!a
.is_multiple_values_set());
389 assert
!(a
.is_takes_value_set());
390 assert
!(a
.is_required_set());
391 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
395 fn create_option_usage3() {
396 let a
= Arg
::from_usage("-o <opt> 'some help info'");
397 assert_eq
!(a
.name
, "o");
398 assert_eq
!(a
.short
.unwrap(), 'o'
);
399 assert
!(a
.long
.is_none());
400 assert_eq
!(a
.help
.unwrap(), "some help info");
401 assert
!(!a
.is_multiple_occurrences_set());
402 assert
!(!a
.is_multiple_values_set());
403 assert
!(a
.is_takes_value_set());
404 assert
!(a
.is_required_set());
405 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
409 fn create_option_usage4() {
410 let a
= Arg
::from_usage("[option] -o [opt]... 'some help info'");
411 assert_eq
!(a
.name
, "option");
412 assert_eq
!(a
.short
.unwrap(), 'o'
);
413 assert
!(a
.long
.is_none());
414 assert_eq
!(a
.help
.unwrap(), "some help info");
415 assert
!(a
.is_multiple_occurrences_set());
416 assert
!(a
.is_multiple_values_set());
417 assert
!(a
.is_takes_value_set());
418 assert
!(!a
.is_required_set());
419 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
423 fn create_option_usage5() {
424 let a
= Arg
::from_usage("[option]... -o [opt] 'some help info'");
425 assert_eq
!(a
.name
, "option");
426 assert_eq
!(a
.short
.unwrap(), 'o'
);
427 assert
!(a
.long
.is_none());
428 assert_eq
!(a
.help
.unwrap(), "some help info");
429 assert
!(a
.is_multiple_occurrences_set());
430 assert
!(!a
.is_multiple_values_set());
431 assert
!(a
.is_takes_value_set());
432 assert
!(!a
.is_required_set());
433 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
437 fn create_option_usage6() {
438 let a
= Arg
::from_usage("-o [opt]... 'some help info'");
439 assert_eq
!(a
.name
, "o");
440 assert_eq
!(a
.short
.unwrap(), 'o'
);
441 assert
!(a
.long
.is_none());
442 assert_eq
!(a
.help
.unwrap(), "some help info");
443 assert
!(a
.is_multiple_occurrences_set());
444 assert
!(a
.is_multiple_values_set());
445 assert
!(a
.is_takes_value_set());
446 assert
!(!a
.is_required_set());
447 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
451 fn create_option_usage7() {
452 let a
= Arg
::from_usage("<option> -o <opt>... 'some help info'");
453 assert_eq
!(a
.name
, "option");
454 assert_eq
!(a
.short
.unwrap(), 'o'
);
455 assert
!(a
.long
.is_none());
456 assert_eq
!(a
.help
.unwrap(), "some help info");
457 assert
!(a
.is_multiple_occurrences_set());
458 assert
!(a
.is_multiple_values_set());
459 assert
!(a
.is_takes_value_set());
460 assert
!(a
.is_required_set());
461 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
465 fn create_option_usage8() {
466 let a
= Arg
::from_usage("<option>... -o <opt> 'some help info'");
467 assert_eq
!(a
.name
, "option");
468 assert_eq
!(a
.short
.unwrap(), 'o'
);
469 assert
!(a
.long
.is_none());
470 assert_eq
!(a
.help
.unwrap(), "some help info");
471 assert
!(a
.is_multiple_occurrences_set());
472 assert
!(!a
.is_multiple_values_set());
473 assert
!(a
.is_takes_value_set());
474 assert
!(a
.is_required_set());
475 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
479 fn create_option_usage9() {
480 let a
= Arg
::from_usage("-o <opt>... 'some help info'");
481 assert_eq
!(a
.name
, "o");
482 assert_eq
!(a
.short
.unwrap(), 'o'
);
483 assert
!(a
.long
.is_none());
484 assert_eq
!(a
.help
.unwrap(), "some help info");
485 assert
!(a
.is_multiple_occurrences_set());
486 assert
!(a
.is_multiple_values_set());
487 assert
!(a
.is_takes_value_set());
488 assert
!(a
.is_required_set());
489 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
493 fn create_option_usage_long1() {
494 let a
= Arg
::from_usage("[option] --opt [opt] 'some help info'");
495 assert_eq
!(a
.name
, "option");
496 assert_eq
!(a
.long
.unwrap(), "opt");
497 assert
!(a
.short
.is_none());
498 assert_eq
!(a
.help
.unwrap(), "some help info");
499 assert
!(!a
.is_multiple_occurrences_set());
500 assert
!(!a
.is_multiple_values_set());
501 assert
!(a
.is_takes_value_set());
502 assert
!(!a
.is_required_set());
503 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
507 fn create_option_usage_long2() {
508 let a
= Arg
::from_usage("--opt [option] 'some help info'");
509 assert_eq
!(a
.name
, "opt");
510 assert_eq
!(a
.long
.unwrap(), "opt");
511 assert
!(a
.short
.is_none());
512 assert_eq
!(a
.help
.unwrap(), "some help info");
513 assert
!(!a
.is_multiple_occurrences_set());
514 assert
!(!a
.is_multiple_values_set());
515 assert
!(a
.is_takes_value_set());
516 assert
!(!a
.is_required_set());
517 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
521 fn create_option_usage_long3() {
522 let a
= Arg
::from_usage("<option> --opt <opt> 'some help info'");
523 assert_eq
!(a
.name
, "option");
524 assert_eq
!(a
.long
.unwrap(), "opt");
525 assert
!(a
.short
.is_none());
526 assert_eq
!(a
.help
.unwrap(), "some help info");
527 assert
!(!a
.is_multiple_occurrences_set());
528 assert
!(!a
.is_multiple_values_set());
529 assert
!(a
.is_takes_value_set());
530 assert
!(a
.is_required_set());
531 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
535 fn create_option_usage_long4() {
536 let a
= Arg
::from_usage("--opt <option> 'some help info'");
537 assert_eq
!(a
.name
, "opt");
538 assert_eq
!(a
.long
.unwrap(), "opt");
539 assert
!(a
.short
.is_none());
540 assert_eq
!(a
.help
.unwrap(), "some help info");
541 assert
!(!a
.is_multiple_occurrences_set());
542 assert
!(!a
.is_multiple_values_set());
543 assert
!(a
.is_takes_value_set());
544 assert
!(a
.is_required_set());
545 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
549 fn create_option_usage_long5() {
550 let a
= Arg
::from_usage("[option] --opt [opt]... 'some help info'");
551 assert_eq
!(a
.name
, "option");
552 assert_eq
!(a
.long
.unwrap(), "opt");
553 assert
!(a
.short
.is_none());
554 assert_eq
!(a
.help
.unwrap(), "some help info");
555 assert
!(a
.is_multiple_occurrences_set());
556 assert
!(a
.is_multiple_values_set());
557 assert
!(a
.is_takes_value_set());
558 assert
!(!a
.is_required_set());
559 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
563 fn create_option_usage_long6() {
564 let a
= Arg
::from_usage("[option]... --opt [opt] 'some help info'");
565 assert_eq
!(a
.name
, "option");
566 assert_eq
!(a
.long
.unwrap(), "opt");
567 assert
!(a
.short
.is_none());
568 assert_eq
!(a
.help
.unwrap(), "some help info");
569 assert
!(a
.is_multiple_occurrences_set());
570 assert
!(!a
.is_multiple_values_set());
571 assert
!(a
.is_takes_value_set());
572 assert
!(!a
.is_required_set());
573 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
577 fn create_option_usage_long7() {
578 let a
= Arg
::from_usage("--opt [option]... 'some help info'");
579 assert_eq
!(a
.name
, "opt");
580 assert_eq
!(a
.long
.unwrap(), "opt");
581 assert
!(a
.short
.is_none());
582 assert_eq
!(a
.help
.unwrap(), "some help info");
583 assert
!(a
.is_multiple_occurrences_set());
584 assert
!(a
.is_multiple_values_set());
585 assert
!(a
.is_takes_value_set());
586 assert
!(!a
.is_required_set());
587 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
591 fn create_option_usage_long8() {
592 let a
= Arg
::from_usage("<option> --opt <opt>... 'some help info'");
593 assert_eq
!(a
.name
, "option");
594 assert_eq
!(a
.long
.unwrap(), "opt");
595 assert
!(a
.short
.is_none());
596 assert_eq
!(a
.help
.unwrap(), "some help info");
597 assert
!(a
.is_multiple_occurrences_set());
598 assert
!(a
.is_multiple_values_set());
599 assert
!(a
.is_takes_value_set());
600 assert
!(a
.is_required_set());
601 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
605 fn create_option_usage_long9() {
606 let a
= Arg
::from_usage("<option>... --opt <opt> 'some help info'");
607 assert_eq
!(a
.name
, "option");
608 assert_eq
!(a
.long
.unwrap(), "opt");
609 assert
!(a
.short
.is_none());
610 assert_eq
!(a
.help
.unwrap(), "some help info");
611 assert
!(a
.is_multiple_occurrences_set());
612 assert
!(!a
.is_multiple_values_set());
613 assert
!(a
.is_takes_value_set());
614 assert
!(a
.is_required_set());
615 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
619 fn create_option_usage_long10() {
620 let a
= Arg
::from_usage("--opt <option>... 'some help info'");
621 assert_eq
!(a
.name
, "opt");
622 assert_eq
!(a
.long
.unwrap(), "opt");
623 assert
!(a
.short
.is_none());
624 assert_eq
!(a
.help
.unwrap(), "some help info");
625 assert
!(a
.is_multiple_occurrences_set());
626 assert
!(a
.is_multiple_values_set());
627 assert
!(a
.is_takes_value_set());
628 assert
!(a
.is_required_set());
629 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
633 fn create_option_usage_long_equals1() {
634 let a
= Arg
::from_usage("[option] --opt=[opt] 'some help info'");
635 assert_eq
!(a
.name
, "option");
636 assert_eq
!(a
.long
.unwrap(), "opt");
637 assert
!(a
.short
.is_none());
638 assert_eq
!(a
.help
.unwrap(), "some help info");
639 assert
!(!a
.is_multiple_occurrences_set());
640 assert
!(!a
.is_multiple_values_set());
641 assert
!(a
.is_takes_value_set());
642 assert
!(!a
.is_required_set());
643 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
647 fn create_option_usage_long_equals2() {
648 let a
= Arg
::from_usage("--opt=[option] 'some help info'");
649 assert_eq
!(a
.name
, "opt");
650 assert_eq
!(a
.long
.unwrap(), "opt");
651 assert
!(a
.short
.is_none());
652 assert_eq
!(a
.help
.unwrap(), "some help info");
653 assert
!(!a
.is_multiple_occurrences_set());
654 assert
!(!a
.is_multiple_values_set());
655 assert
!(a
.is_takes_value_set());
656 assert
!(!a
.is_required_set());
657 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
661 fn create_option_usage_long_equals3() {
662 let a
= Arg
::from_usage("<option> --opt=<opt> 'some help info'");
663 assert_eq
!(a
.name
, "option");
664 assert_eq
!(a
.long
.unwrap(), "opt");
665 assert
!(a
.short
.is_none());
666 assert_eq
!(a
.help
.unwrap(), "some help info");
667 assert
!(!a
.is_multiple_occurrences_set());
668 assert
!(!a
.is_multiple_values_set());
669 assert
!(a
.is_takes_value_set());
670 assert
!(a
.is_required_set());
671 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
675 fn create_option_usage_long_equals4() {
676 let a
= Arg
::from_usage("--opt=<option> 'some help info'");
677 assert_eq
!(a
.name
, "opt");
678 assert_eq
!(a
.long
.unwrap(), "opt");
679 assert
!(a
.short
.is_none());
680 assert_eq
!(a
.help
.unwrap(), "some help info");
681 assert
!(!a
.is_multiple_occurrences_set());
682 assert
!(!a
.is_multiple_values_set());
683 assert
!(a
.is_takes_value_set());
684 assert
!(a
.is_required_set());
685 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
689 fn create_option_usage_long_equals5() {
690 let a
= Arg
::from_usage("[option] --opt=[opt]... 'some help info'");
691 assert_eq
!(a
.name
, "option");
692 assert_eq
!(a
.long
.unwrap(), "opt");
693 assert
!(a
.short
.is_none());
694 assert_eq
!(a
.help
.unwrap(), "some help info");
695 assert
!(a
.is_multiple_occurrences_set());
696 assert
!(a
.is_multiple_values_set());
697 assert
!(a
.is_takes_value_set());
698 assert
!(!a
.is_required_set());
699 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
703 fn create_option_usage_long_equals6() {
704 let a
= Arg
::from_usage("[option]... --opt=[opt] 'some help info'");
705 assert_eq
!(a
.name
, "option");
706 assert_eq
!(a
.long
.unwrap(), "opt");
707 assert
!(a
.short
.is_none());
708 assert_eq
!(a
.help
.unwrap(), "some help info");
709 assert
!(a
.is_multiple_occurrences_set());
710 assert
!(!a
.is_multiple_values_set());
711 assert
!(a
.is_takes_value_set());
712 assert
!(!a
.is_required_set());
713 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
717 fn create_option_usage_long_equals7() {
718 let a
= Arg
::from_usage("--opt=[option]... 'some help info'");
719 assert_eq
!(a
.name
, "opt");
720 assert_eq
!(a
.long
.unwrap(), "opt");
721 assert
!(a
.short
.is_none());
722 assert_eq
!(a
.help
.unwrap(), "some help info");
723 assert
!(a
.is_multiple_occurrences_set());
724 assert
!(a
.is_multiple_values_set());
725 assert
!(a
.is_takes_value_set());
726 assert
!(!a
.is_required_set());
727 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
731 fn create_option_usage_long_equals8() {
732 let a
= Arg
::from_usage("<option> --opt=<opt>... 'some help info'");
733 assert_eq
!(a
.name
, "option");
734 assert_eq
!(a
.long
.unwrap(), "opt");
735 assert
!(a
.short
.is_none());
736 assert_eq
!(a
.help
.unwrap(), "some help info");
737 assert
!(a
.is_multiple_occurrences_set());
738 assert
!(a
.is_multiple_values_set());
739 assert
!(a
.is_takes_value_set());
740 assert
!(a
.is_required_set());
741 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
745 fn create_option_usage_long_equals9() {
746 let a
= Arg
::from_usage("<option>... --opt=<opt> 'some help info'");
747 assert_eq
!(a
.name
, "option");
748 assert_eq
!(a
.long
.unwrap(), "opt");
749 assert
!(a
.short
.is_none());
750 assert_eq
!(a
.help
.unwrap(), "some help info");
751 assert
!(a
.is_multiple_occurrences_set());
752 assert
!(!a
.is_multiple_values_set());
753 assert
!(a
.is_takes_value_set());
754 assert
!(a
.is_required_set());
755 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
759 fn create_option_usage_long_equals10() {
760 let a
= Arg
::from_usage("--opt=<option>... 'some help info'");
761 assert_eq
!(a
.name
, "opt");
762 assert_eq
!(a
.long
.unwrap(), "opt");
763 assert
!(a
.short
.is_none());
764 assert_eq
!(a
.help
.unwrap(), "some help info");
765 assert
!(a
.is_multiple_occurrences_set());
766 assert
!(a
.is_multiple_values_set());
767 assert
!(a
.is_takes_value_set());
768 assert
!(a
.is_required_set());
769 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
773 fn create_option_usage_both1() {
774 let a
= Arg
::from_usage("[option] -o --opt [option] 'some help info'");
775 assert_eq
!(a
.name
, "option");
776 assert_eq
!(a
.long
.unwrap(), "opt");
777 assert_eq
!(a
.short
.unwrap(), 'o'
);
778 assert_eq
!(a
.help
.unwrap(), "some help info");
779 assert
!(!a
.is_multiple_occurrences_set());
780 assert
!(!a
.is_multiple_values_set());
781 assert
!(a
.is_takes_value_set());
782 assert
!(!a
.is_required_set());
783 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
787 fn create_option_usage_both2() {
788 let a
= Arg
::from_usage("-o --opt [option] 'some help info'");
789 assert_eq
!(a
.name
, "opt");
790 assert_eq
!(a
.long
.unwrap(), "opt");
791 assert_eq
!(a
.short
.unwrap(), 'o'
);
792 assert_eq
!(a
.help
.unwrap(), "some help info");
793 assert
!(!a
.is_multiple_occurrences_set());
794 assert
!(!a
.is_multiple_values_set());
795 assert
!(a
.is_takes_value_set());
796 assert
!(!a
.is_required_set());
797 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
801 fn create_option_usage_both3() {
802 let a
= Arg
::from_usage("<option> -o --opt <opt> 'some help info'");
803 assert_eq
!(a
.name
, "option");
804 assert_eq
!(a
.long
.unwrap(), "opt");
805 assert_eq
!(a
.short
.unwrap(), 'o'
);
806 assert_eq
!(a
.help
.unwrap(), "some help info");
807 assert
!(!a
.is_multiple_occurrences_set());
808 assert
!(!a
.is_multiple_values_set());
809 assert
!(a
.is_takes_value_set());
810 assert
!(a
.is_required_set());
811 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
815 fn create_option_usage_both4() {
816 let a
= Arg
::from_usage("-o --opt <option> 'some help info'");
817 assert_eq
!(a
.name
, "opt");
818 assert_eq
!(a
.long
.unwrap(), "opt");
819 assert_eq
!(a
.short
.unwrap(), 'o'
);
820 assert_eq
!(a
.help
.unwrap(), "some help info");
821 assert
!(!a
.is_multiple_occurrences_set());
822 assert
!(!a
.is_multiple_values_set());
823 assert
!(a
.is_takes_value_set());
824 assert
!(a
.is_required_set());
825 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
829 fn create_option_usage_both5() {
830 let a
= Arg
::from_usage("[option]... -o --opt [option] 'some help info'");
831 assert_eq
!(a
.name
, "option");
832 assert_eq
!(a
.long
.unwrap(), "opt");
833 assert_eq
!(a
.short
.unwrap(), 'o'
);
834 assert_eq
!(a
.help
.unwrap(), "some help info");
835 assert
!(a
.is_multiple_occurrences_set());
836 assert
!(!a
.is_multiple_values_set());
837 assert
!(a
.is_takes_value_set());
838 assert
!(!a
.is_required_set());
839 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
843 fn create_option_usage_both6() {
844 let a
= Arg
::from_usage("-o --opt [option]... 'some help info'");
845 assert_eq
!(a
.name
, "opt");
846 assert_eq
!(a
.long
.unwrap(), "opt");
847 assert_eq
!(a
.short
.unwrap(), 'o'
);
848 assert_eq
!(a
.help
.unwrap(), "some help info");
849 assert
!(a
.is_multiple_occurrences_set());
850 assert
!(a
.is_multiple_values_set());
851 assert
!(a
.is_takes_value_set());
852 assert
!(!a
.is_required_set());
853 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
857 fn create_option_usage_both7() {
858 let a
= Arg
::from_usage("<option>... -o --opt <opt> 'some help info'");
859 assert_eq
!(a
.name
, "option");
860 assert_eq
!(a
.long
.unwrap(), "opt");
861 assert_eq
!(a
.short
.unwrap(), 'o'
);
862 assert_eq
!(a
.help
.unwrap(), "some help info");
863 assert
!(a
.is_multiple_occurrences_set());
864 assert
!(!a
.is_multiple_values_set());
865 assert
!(a
.is_takes_value_set());
866 assert
!(a
.is_required_set());
867 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
871 fn create_option_usage_both8() {
872 let a
= Arg
::from_usage("-o --opt <option>... 'some help info'");
873 assert_eq
!(a
.name
, "opt");
874 assert_eq
!(a
.long
.unwrap(), "opt");
875 assert_eq
!(a
.short
.unwrap(), 'o'
);
876 assert_eq
!(a
.help
.unwrap(), "some help info");
877 assert
!(a
.is_multiple_occurrences_set());
878 assert
!(a
.is_multiple_values_set());
879 assert
!(a
.is_takes_value_set());
880 assert
!(a
.is_required_set());
881 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
885 fn create_option_usage_both_equals1() {
886 let a
= Arg
::from_usage("[option] -o --opt=[option] 'some help info'");
887 assert_eq
!(a
.name
, "option");
888 assert_eq
!(a
.long
.unwrap(), "opt");
889 assert_eq
!(a
.short
.unwrap(), 'o'
);
890 assert_eq
!(a
.help
.unwrap(), "some help info");
891 assert
!(!a
.is_multiple_occurrences_set());
892 assert
!(!a
.is_multiple_values_set());
893 assert
!(a
.is_takes_value_set());
894 assert
!(!a
.is_required_set());
895 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
899 fn create_option_usage_both_equals2() {
900 let a
= Arg
::from_usage("-o --opt=[option] 'some help info'");
901 assert_eq
!(a
.name
, "opt");
902 assert_eq
!(a
.long
.unwrap(), "opt");
903 assert_eq
!(a
.short
.unwrap(), 'o'
);
904 assert_eq
!(a
.help
.unwrap(), "some help info");
905 assert
!(!a
.is_multiple_occurrences_set());
906 assert
!(!a
.is_multiple_values_set());
907 assert
!(a
.is_takes_value_set());
908 assert
!(!a
.is_required_set());
909 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
913 fn create_option_usage_both_equals3() {
914 let a
= Arg
::from_usage("<option> -o --opt=<opt> 'some help info'");
915 assert_eq
!(a
.name
, "option");
916 assert_eq
!(a
.long
.unwrap(), "opt");
917 assert_eq
!(a
.short
.unwrap(), 'o'
);
918 assert_eq
!(a
.help
.unwrap(), "some help info");
919 assert
!(!a
.is_multiple_occurrences_set());
920 assert
!(!a
.is_multiple_values_set());
921 assert
!(a
.is_takes_value_set());
922 assert
!(a
.is_required_set());
923 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
927 fn create_option_usage_both_equals4() {
928 let a
= Arg
::from_usage("-o --opt=<option> 'some help info'");
929 assert_eq
!(a
.name
, "opt");
930 assert_eq
!(a
.long
.unwrap(), "opt");
931 assert_eq
!(a
.short
.unwrap(), 'o'
);
932 assert_eq
!(a
.help
.unwrap(), "some help info");
933 assert
!(!a
.is_multiple_occurrences_set());
934 assert
!(!a
.is_multiple_values_set());
935 assert
!(a
.is_takes_value_set());
936 assert
!(a
.is_required_set());
937 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
941 fn create_option_usage_both_equals5() {
942 let a
= Arg
::from_usage("[option]... -o --opt=[option] 'some help info'");
943 assert_eq
!(a
.name
, "option");
944 assert_eq
!(a
.long
.unwrap(), "opt");
945 assert_eq
!(a
.short
.unwrap(), 'o'
);
946 assert_eq
!(a
.help
.unwrap(), "some help info");
947 assert
!(a
.is_multiple_occurrences_set());
948 assert
!(!a
.is_multiple_values_set());
949 assert
!(a
.is_takes_value_set());
950 assert
!(!a
.is_required_set());
951 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
955 fn create_option_usage_both_equals6() {
956 let a
= Arg
::from_usage("-o --opt=[option]... 'some help info'");
957 assert_eq
!(a
.name
, "opt");
958 assert_eq
!(a
.long
.unwrap(), "opt");
959 assert_eq
!(a
.short
.unwrap(), 'o'
);
960 assert_eq
!(a
.help
.unwrap(), "some help info");
961 assert
!(a
.is_multiple_occurrences_set());
962 assert
!(a
.is_multiple_values_set());
963 assert
!(a
.is_takes_value_set());
964 assert
!(!a
.is_required_set());
965 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
969 fn create_option_usage_both_equals7() {
970 let a
= Arg
::from_usage("<option>... -o --opt=<opt> 'some help info'");
971 assert_eq
!(a
.name
, "option");
972 assert_eq
!(a
.long
.unwrap(), "opt");
973 assert_eq
!(a
.short
.unwrap(), 'o'
);
974 assert_eq
!(a
.help
.unwrap(), "some help info");
975 assert
!(a
.is_multiple_occurrences_set());
976 assert
!(!a
.is_multiple_values_set());
977 assert
!(a
.is_takes_value_set());
978 assert
!(a
.is_required_set());
979 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"opt"]);
983 fn create_option_usage_both_equals8() {
984 let a
= Arg
::from_usage("-o --opt=<option>... 'some help info'");
985 assert_eq
!(a
.name
, "opt");
986 assert_eq
!(a
.long
.unwrap(), "opt");
987 assert_eq
!(a
.short
.unwrap(), 'o'
);
988 assert_eq
!(a
.help
.unwrap(), "some help info");
989 assert
!(a
.is_multiple_occurrences_set());
990 assert
!(a
.is_multiple_values_set());
991 assert
!(a
.is_takes_value_set());
992 assert
!(a
.is_required_set());
993 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"option"]);
997 fn create_option_with_vals1() {
998 let a
= Arg
::from_usage("-o <file> <mode> 'some help info'");
999 assert_eq
!(a
.name
, "o");
1000 assert
!(a
.long
.is_none());
1001 assert_eq
!(a
.short
.unwrap(), 'o'
);
1002 assert_eq
!(a
.help
.unwrap(), "some help info");
1003 assert
!(!a
.is_multiple_occurrences_set());
1004 assert
!(!a
.is_multiple_values_set());
1005 assert
!(a
.is_takes_value_set());
1006 assert
!(a
.is_required_set());
1007 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"file", &"mode"]);
1011 fn create_option_with_vals2() {
1012 let a
= Arg
::from_usage("-o <file> <mode>... 'some help info'");
1013 assert_eq
!(a
.name
, "o");
1014 assert
!(a
.long
.is_none());
1015 assert_eq
!(a
.short
.unwrap(), 'o'
);
1016 assert_eq
!(a
.help
.unwrap(), "some help info");
1017 assert
!(a
.is_multiple_occurrences_set());
1018 assert
!(a
.is_multiple_values_set());
1019 assert
!(a
.is_takes_value_set());
1020 assert
!(a
.is_required_set());
1021 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"file", &"mode"]);
1025 fn create_option_with_vals3() {
1026 let a
= Arg
::from_usage("--opt <file> <mode>... 'some help info'");
1027 assert_eq
!(a
.name
, "opt");
1028 assert
!(a
.short
.is_none());
1029 assert_eq
!(a
.long
.unwrap(), "opt");
1030 assert_eq
!(a
.help
.unwrap(), "some help info");
1031 assert
!(a
.is_multiple_occurrences_set());
1032 assert
!(a
.is_multiple_values_set());
1033 assert
!(a
.is_takes_value_set());
1034 assert
!(a
.is_required_set());
1035 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"file", &"mode"]);
1039 fn create_option_with_vals4() {
1040 let a
= Arg
::from_usage("[myopt] --opt <file> <mode> 'some help info'");
1041 assert_eq
!(a
.name
, "myopt");
1042 assert
!(a
.short
.is_none());
1043 assert_eq
!(a
.long
.unwrap(), "opt");
1044 assert_eq
!(a
.help
.unwrap(), "some help info");
1045 assert
!(!a
.is_multiple_occurrences_set());
1046 assert
!(!a
.is_multiple_values_set());
1047 assert
!(a
.is_takes_value_set());
1048 assert
!(!a
.is_required_set());
1049 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"file", &"mode"]);
1053 fn create_option_with_vals5() {
1054 let a
= Arg
::from_usage("--opt <file> <mode> 'some help info'");
1055 assert_eq
!(a
.name
, "opt");
1056 assert
!(a
.short
.is_none());
1057 assert_eq
!(a
.long
.unwrap(), "opt");
1058 assert_eq
!(a
.help
.unwrap(), "some help info");
1059 assert
!(!a
.is_multiple_occurrences_set());
1060 assert
!(!a
.is_multiple_values_set());
1061 assert
!(a
.is_takes_value_set());
1062 assert
!(a
.is_required_set());
1066 fn create_positional_usage() {
1067 let a
= Arg
::from_usage("[pos] 'some help info'");
1068 assert_eq
!(a
.name
, "pos");
1069 assert_eq
!(a
.help
.unwrap(), "some help info");
1070 assert
!(!a
.is_multiple_occurrences_set());
1071 assert
!(!a
.is_multiple_values_set());
1072 assert
!(!a
.is_required_set());
1073 assert
!(a
.val_names
.is_empty());
1077 fn create_positional_usage0() {
1078 let a
= Arg
::from_usage("<pos> 'some help info'");
1079 assert_eq
!(a
.name
, "pos");
1080 assert_eq
!(a
.help
.unwrap(), "some help info");
1081 assert
!(!a
.is_multiple_occurrences_set());
1082 assert
!(!a
.is_multiple_values_set());
1083 assert
!(a
.is_required_set());
1084 assert
!(a
.val_names
.is_empty());
1088 fn pos_mult_help() {
1089 let a
= Arg
::from_usage("[pos]... 'some help info'");
1090 assert_eq
!(a
.name
, "pos");
1091 assert_eq
!(a
.help
.unwrap(), "some help info");
1092 assert
!(a
.is_multiple_occurrences_set());
1093 assert
!(!a
.is_multiple_values_set());
1094 assert
!(!a
.is_required_set());
1095 assert
!(a
.val_names
.is_empty());
1099 fn pos_help_lit_single_quote() {
1100 let a
= Arg
::from_usage("[pos]... 'some help\' info'");
1101 assert_eq
!(a
.name
, "pos");
1102 assert_eq
!(a
.help
.unwrap(), "some help' info");
1103 assert
!(a
.is_multiple_occurrences_set());
1104 assert
!(!a
.is_multiple_values_set());
1105 assert
!(!a
.is_required_set());
1106 assert
!(a
.val_names
.is_empty());
1110 fn pos_help_double_lit_single_quote() {
1111 let a
= Arg
::from_usage("[pos]... 'some \'help\' info'");
1112 assert_eq
!(a
.name
, "pos");
1113 assert_eq
!(a
.help
.unwrap(), "some 'help' info");
1114 assert
!(a
.is_multiple_occurrences_set());
1115 assert
!(!a
.is_multiple_values_set());
1116 assert
!(!a
.is_required_set());
1117 assert
!(a
.val_names
.is_empty());
1121 fn pos_help_newline() {
1122 let a
= Arg
::from_usage(
1123 "[pos]... 'some help{n}\
1126 assert_eq
!(a
.name
, "pos");
1127 assert_eq
!(a
.help
.unwrap(), "some help{n}info");
1128 assert
!(a
.is_multiple_occurrences_set());
1129 assert
!(!a
.is_multiple_values_set());
1130 assert
!(!a
.is_required_set());
1131 assert
!(a
.val_names
.is_empty());
1135 fn pos_help_newline_lit_sq() {
1136 let a
= Arg
::from_usage(
1137 "[pos]... 'some help\' stuff{n}\
1140 assert_eq
!(a
.name
, "pos");
1141 assert_eq
!(a
.help
.unwrap(), "some help' stuff{n}info");
1142 assert
!(a
.is_multiple_occurrences_set());
1143 assert
!(!a
.is_multiple_values_set());
1144 assert
!(!a
.is_required_set());
1145 assert
!(a
.val_names
.is_empty());
1149 fn pos_req_mult_help() {
1150 let a
= Arg
::from_usage("<pos>... 'some help info'");
1151 assert_eq
!(a
.name
, "pos");
1152 assert_eq
!(a
.help
.unwrap(), "some help info");
1153 assert
!(a
.is_multiple_occurrences_set());
1154 assert
!(!a
.is_multiple_values_set());
1155 assert
!(a
.is_required_set());
1156 assert
!(a
.val_names
.is_empty());
1161 let a
= Arg
::from_usage("<pos>");
1162 assert_eq
!(a
.name
, "pos");
1163 assert
!(!a
.is_multiple_occurrences_set());
1164 assert
!(!a
.is_multiple_values_set());
1165 assert
!(a
.is_required_set());
1166 assert
!(a
.val_names
.is_empty());
1171 let a
= Arg
::from_usage("[pos]...");
1172 assert_eq
!(a
.name
, "pos");
1173 assert
!(a
.is_multiple_occurrences_set());
1174 assert
!(!a
.is_multiple_values_set());
1175 assert
!(!a
.is_required_set());
1176 assert
!(a
.val_names
.is_empty());
1180 fn pos_req_mult_def_help() {
1181 let a
= Arg
::from_usage("<pos>... @a 'some help info'");
1182 assert_eq
!(a
.name
, "pos");
1183 assert_eq
!(a
.help
.unwrap(), "some help info");
1184 assert
!(a
.is_multiple_occurrences_set());
1185 assert
!(!a
.is_multiple_values_set());
1186 assert
!(a
.is_required_set());
1187 assert
!(a
.val_names
.is_empty());
1188 assert_eq
!(a
.default_vals
, vec
![std
::ffi
::OsStr
::new("a")]);
1192 fn create_option_with_vals1_def() {
1193 let a
= Arg
::from_usage("-o <file> <mode> @a 'some help info'");
1194 assert_eq
!(a
.name
, "o");
1195 assert
!(a
.long
.is_none());
1196 assert_eq
!(a
.short
.unwrap(), 'o'
);
1197 assert_eq
!(a
.help
.unwrap(), "some help info");
1198 assert
!(!a
.is_multiple_occurrences_set());
1199 assert
!(!a
.is_multiple_values_set());
1200 assert
!(a
.is_takes_value_set());
1201 assert
!(a
.is_required_set());
1202 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"file", &"mode"]);
1203 assert_eq
!(a
.default_vals
, vec
![std
::ffi
::OsStr
::new("a")]);
1207 fn create_option_with_vals4_def() {
1208 let a
= Arg
::from_usage("[myopt] --opt <file> <mode> @a 'some help info'");
1209 assert_eq
!(a
.name
, "myopt");
1210 assert
!(a
.short
.is_none());
1211 assert_eq
!(a
.long
.unwrap(), "opt");
1212 assert_eq
!(a
.help
.unwrap(), "some help info");
1213 assert
!(!a
.is_multiple_occurrences_set());
1214 assert
!(!a
.is_multiple_values_set());
1215 assert
!(a
.is_takes_value_set());
1216 assert
!(!a
.is_required_set());
1217 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"file", &"mode"]);
1218 assert_eq
!(a
.default_vals
, vec
![std
::ffi
::OsStr
::new("a")]);
1223 let a
= Arg
::from_usage("<ASCII> 'üñíčöĐ€'");
1224 assert_eq
!(a
.name
, "ASCII");
1225 assert_eq
!(a
.help
, Some("üñíčöĐ€"));
1226 let a
= Arg
::from_usage("<üñíčöĐ€> 'ASCII'");
1227 assert_eq
!(a
.name
, "üñíčöĐ€");
1228 assert_eq
!(a
.help
, Some("ASCII"));
1229 let a
= Arg
::from_usage("<üñíčöĐ€> 'üñíčöĐ€'");
1230 assert_eq
!(a
.name
, "üñíčöĐ€");
1231 assert_eq
!(a
.help
, Some("üñíčöĐ€"));
1232 let a
= Arg
::from_usage("-ø 'ø'");
1233 assert_eq
!(a
.name
, "ø");
1234 assert_eq
!(a
.short
, Some('ø'
));
1235 assert_eq
!(a
.help
, Some("ø"));
1236 let a
= Arg
::from_usage("--üñíčöĐ€ 'Nōṫ ASCII'");
1237 assert_eq
!(a
.name
, "üñíčöĐ€");
1238 assert_eq
!(a
.long
, Some("üñíčöĐ€"));
1239 assert_eq
!(a
.help
, Some("Nōṫ ASCII"));
1240 let a
= Arg
::from_usage("[ñämê] --ôpt=[üñíčöĐ€] 'hælp'");
1241 assert_eq
!(a
.name
, "ñämê");
1242 assert_eq
!(a
.long
, Some("ôpt"));
1243 assert_eq
!(a
.val_names
.iter().collect
::<Vec
<_
>>(), [&"üñíčöĐ€"]);
1244 assert_eq
!(a
.help
, Some("hælp"));
1248 fn value_names_building_num_vals_from_usage() {
1250 let m
= Command
::new("test")
1251 .arg(Arg
::from_usage("--pos <who> <what> <why>"))
1252 .try_get_matches_from(vec
!["myprog", "--pos", "val1", "val2", "val3"]);
1254 assert
!(m
.is_ok(), "{:?}", m
.unwrap_err().kind());
1258 m
.values_of("pos").unwrap().collect
::<Vec
<_
>>(),
1259 ["val1", "val2", "val3"]
1265 use crate::{error::ErrorKind, Command}
;
1266 // Verify fix for "arg_from_usage(): required values not being enforced when followed by another option"
1267 let res
= Command
::new("tester")
1268 .arg(Arg
::from_usage("-v, --reroll-count=[N] 'Mark the patch series as PATCH vN'"))
1270 Arg
::from_usage("--subject-prefix [Subject-Prefix] 'Use [Subject-Prefix] instead of the standard [PATCH] prefix'")
1271 .setting(ArgSettings
::ForbidEmptyValues
)
1273 .try_get_matches_from(vec
!["test", "--subject-prefix", "-v", "2"]);
1275 assert
!(res
.is_err());
1276 assert_eq
!(res
.unwrap_err().kind(), ErrorKind
::EmptyValue
);