Kevin K | f17e150 | 2016-01-25 20:56:37 | [diff] [blame] | 1 | use clap::{App, Arg, ArgSettings}; |
Alexander Kuvaev | 0cfecd3 | 2015-08-27 21:03:45 | [diff] [blame] | 2 | |
| 3 | #[test] |
| 4 | fn flag_using_short() { |
| 5 | let m = App::new("flag") |
Kevin K | 0031d78 | 2016-01-21 06:48:30 | [diff] [blame] | 6 | .args(&[ |
Corentin Henry | 4f602b7 | 2018-04-21 18:59:19 | [diff] [blame] | 7 | Arg::from("-f, --flag 'some flag'"), |
| 8 | Arg::from("-c, --color 'some other flag'"), |
Kevin K | 1ab1027 | 2018-01-25 04:05:05 | [diff] [blame] | 9 | ]) |
Kevin K | f17e150 | 2016-01-25 20:56:37 | [diff] [blame] | 10 | .get_matches_from(vec!["", "-f", "-c"]); |
Alexander Kuvaev | 0cfecd3 | 2015-08-27 21:03:45 | [diff] [blame] | 11 | assert!(m.is_present("flag")); |
| 12 | assert!(m.is_present("color")); |
| 13 | } |
| 14 | |
| 15 | #[test] |
Kevin K | 07dfdd0 | 2016-02-02 12:43:53 | [diff] [blame] | 16 | fn lots_o_flags_sep() { |
| 17 | let r = App::new("opts") |
Corentin Henry | 4f602b7 | 2018-04-21 18:59:19 | [diff] [blame] | 18 | .arg(Arg::from("-o... 'some flag'")) |
Kevin K | 0333380 | 2018-10-19 20:42:13 | [diff] [blame] | 19 | .try_get_matches_from(vec![ |
Kevin K | 1ab1027 | 2018-01-25 04:05:05 | [diff] [blame] | 20 | "", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 21 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 22 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 23 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 24 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 25 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 26 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 27 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 28 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 29 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 30 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 31 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 32 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 33 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 34 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 35 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 36 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 37 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 38 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 39 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 40 | "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", "-o", |
| 41 | "-o", "-o", "-o", |
| 42 | ]); |
Kevin K | 97fd3f1 | 2018-01-31 20:15:01 | [diff] [blame] | 43 | assert!(r.is_ok(), "{:?}", r.unwrap_err().kind); |
Kevin K | 07dfdd0 | 2016-02-02 12:43:53 | [diff] [blame] | 44 | let m = r.unwrap(); |
| 45 | assert!(m.is_present("o")); |
| 46 | assert_eq!(m.occurrences_of("o"), 297); // i.e. more than u8 |
| 47 | } |
| 48 | |
| 49 | #[test] |
| 50 | fn lots_o_flags_combined() { |
| 51 | let r = App::new("opts") |
Corentin Henry | 4f602b7 | 2018-04-21 18:59:19 | [diff] [blame] | 52 | .arg(Arg::from("-o... 'some flag'")) |
Kevin K | 0333380 | 2018-10-19 20:42:13 | [diff] [blame] | 53 | .try_get_matches_from(vec![ |
Kevin K | 1ab1027 | 2018-01-25 04:05:05 | [diff] [blame] | 54 | "", |
Kevin K | 07dfdd0 | 2016-02-02 12:43:53 | [diff] [blame] | 55 | "-oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", |
| 56 | "-oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", |
| 57 | "-oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", |
| 58 | "-oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo", |
| 59 | "-ooooooooooooooooooooooooooooooooooooooooo", |
Kevin K | 1ab1027 | 2018-01-25 04:05:05 | [diff] [blame] | 60 | ]); |
Kevin K | 97fd3f1 | 2018-01-31 20:15:01 | [diff] [blame] | 61 | assert!(r.is_ok(), "{:?}", r.unwrap_err().kind); |
Kevin K | 07dfdd0 | 2016-02-02 12:43:53 | [diff] [blame] | 62 | let m = r.unwrap(); |
| 63 | assert!(m.is_present("o")); |
| 64 | assert_eq!(m.occurrences_of("o"), 297); // i.e. more than u8 |
| 65 | } |
| 66 | |
| 67 | #[test] |
Alexander Kuvaev | 0cfecd3 | 2015-08-27 21:03:45 | [diff] [blame] | 68 | fn flag_using_long() { |
| 69 | let m = App::new("flag") |
Kevin K | 0031d78 | 2016-01-21 06:48:30 | [diff] [blame] | 70 | .args(&[ |
Corentin Henry | 4f602b7 | 2018-04-21 18:59:19 | [diff] [blame] | 71 | Arg::from("--flag 'some flag'"), |
| 72 | Arg::from("--color 'some other flag'"), |
Kevin K | 1ab1027 | 2018-01-25 04:05:05 | [diff] [blame] | 73 | ]) |
Kevin K | f17e150 | 2016-01-25 20:56:37 | [diff] [blame] | 74 | .get_matches_from(vec!["", "--flag", "--color"]); |
Alexander Kuvaev | 0cfecd3 | 2015-08-27 21:03:45 | [diff] [blame] | 75 | assert!(m.is_present("flag")); |
| 76 | assert!(m.is_present("color")); |
| 77 | } |
| 78 | |
| 79 | #[test] |
| 80 | fn flag_using_mixed() { |
| 81 | let m = App::new("flag") |
Kevin K | 0031d78 | 2016-01-21 06:48:30 | [diff] [blame] | 82 | .args(&[ |
Corentin Henry | 4f602b7 | 2018-04-21 18:59:19 | [diff] [blame] | 83 | Arg::from("-f, --flag 'some flag'"), |
| 84 | Arg::from("-c, --color 'some other flag'"), |
Kevin K | 1ab1027 | 2018-01-25 04:05:05 | [diff] [blame] | 85 | ]) |
Kevin K | f17e150 | 2016-01-25 20:56:37 | [diff] [blame] | 86 | .get_matches_from(vec!["", "-f", "--color"]); |
Alexander Kuvaev | 0cfecd3 | 2015-08-27 21:03:45 | [diff] [blame] | 87 | assert!(m.is_present("flag")); |
| 88 | assert!(m.is_present("color")); |
| 89 | |
| 90 | let m = App::new("flag") |
Kevin K | 0031d78 | 2016-01-21 06:48:30 | [diff] [blame] | 91 | .args(&[ |
Corentin Henry | 4f602b7 | 2018-04-21 18:59:19 | [diff] [blame] | 92 | Arg::from("-f, --flag 'some flag'"), |
| 93 | Arg::from("-c, --color 'some other flag'"), |
Kevin K | 1ab1027 | 2018-01-25 04:05:05 | [diff] [blame] | 94 | ]) |
Kevin K | f17e150 | 2016-01-25 20:56:37 | [diff] [blame] | 95 | .get_matches_from(vec!["", "--flag", "-c"]); |
Alexander Kuvaev | 0cfecd3 | 2015-08-27 21:03:45 | [diff] [blame] | 96 | assert!(m.is_present("flag")); |
| 97 | assert!(m.is_present("color")); |
| 98 | } |
| 99 | |
| 100 | #[test] |
| 101 | fn multiple_flags_in_single() { |
| 102 | let m = App::new("multe_flags") |
Kevin K | 0031d78 | 2016-01-21 06:48:30 | [diff] [blame] | 103 | .args(&[ |
Corentin Henry | 4f602b7 | 2018-04-21 18:59:19 | [diff] [blame] | 104 | Arg::from("-f, --flag 'some flag'"), |
| 105 | Arg::from("-c, --color 'some other flag'"), |
| 106 | Arg::from("-d, --debug 'another other flag'"), |
Kevin K | 1ab1027 | 2018-01-25 04:05:05 | [diff] [blame] | 107 | ]) |
Kevin K | f17e150 | 2016-01-25 20:56:37 | [diff] [blame] | 108 | .get_matches_from(vec!["", "-fcd"]); |
Alexander Kuvaev | 0cfecd3 | 2015-08-27 21:03:45 | [diff] [blame] | 109 | assert!(m.is_present("flag")); |
| 110 | assert!(m.is_present("color")); |
| 111 | assert!(m.is_present("debug")); |
| 112 | } |
| 113 | |
| 114 | #[test] |
Alexander Kuvaev | 0cfecd3 | 2015-08-27 21:03:45 | [diff] [blame] | 115 | fn short_flag_misspel() { |
Corentin Henry | 4f602b7 | 2018-04-21 18:59:19 | [diff] [blame] | 116 | let a = Arg::from("-f1, --flag 'some flag'"); |
Kevin K | efb3b28 | 2018-01-25 02:08:14 | [diff] [blame] | 117 | assert_eq!(a.name, "flag"); |
| 118 | assert_eq!(a.short.unwrap(), 'f'); |
| 119 | assert_eq!(a.long.unwrap(), "flag"); |
| 120 | assert_eq!(a.help.unwrap(), "some flag"); |
Kevin K | 97fd3f1 | 2018-01-31 20:15:01 | [diff] [blame] | 121 | assert!(!a.is_set(ArgSettings::MultipleOccurrences)); |
Kevin K | efb3b28 | 2018-01-25 02:08:14 | [diff] [blame] | 122 | assert!(a.val_names.is_none()); |
| 123 | assert!(a.num_vals.is_none()); |
Alexander Kuvaev | 0cfecd3 | 2015-08-27 21:03:45 | [diff] [blame] | 124 | } |
| 125 | |
| 126 | #[test] |
Alexander Kuvaev | 0cfecd3 | 2015-08-27 21:03:45 | [diff] [blame] | 127 | fn short_flag_name_missing() { |
Corentin Henry | 4f602b7 | 2018-04-21 18:59:19 | [diff] [blame] | 128 | let a = Arg::from("-f 'some flag'"); |
Kevin K | efb3b28 | 2018-01-25 02:08:14 | [diff] [blame] | 129 | assert_eq!(a.name, "f"); |
| 130 | assert_eq!(a.short.unwrap(), 'f'); |
| 131 | assert!(a.long.is_none()); |
| 132 | assert_eq!(a.help.unwrap(), "some flag"); |
Kevin K | 97fd3f1 | 2018-01-31 20:15:01 | [diff] [blame] | 133 | assert!(!a.is_set(ArgSettings::MultipleOccurrences)); |
Kevin K | efb3b28 | 2018-01-25 02:08:14 | [diff] [blame] | 134 | assert!(a.val_names.is_none()); |
| 135 | assert!(a.num_vals.is_none()); |
Kevin K | f17e150 | 2016-01-25 20:56:37 | [diff] [blame] | 136 | } |