| 30 | 30 | | pub shout: bool, |
| 31 | 31 | | /// Whether to lower-case the greeting and end it with `...` (`--whisper`). |
| 32 | 32 | | pub whisper: bool, |
| 33 | + | /// Whether to spell the name backwards (`--reverse`). |
| 34 | + | pub reverse: bool, |
| 33 | 35 | | /// Whether to print the crate version and exit (`--version`). |
| 34 | 36 | | pub version: bool, |
| 35 | 37 | | /// How many times to print the greeting (`--times N`). |
| ⋯ |
| 52 | 54 | | name: None, |
| 53 | 55 | | shout: false, |
| 54 | 56 | | whisper: false, |
| 57 | + | reverse: false, |
| 55 | 58 | | version: false, |
| 56 | 59 | | times: 1, |
| 57 | 60 | | lang: Lang::En, |
| ⋯ |
| 84 | 87 | | } else if arg == "--whisper" { |
| 85 | 88 | | options.whisper = true; |
| 86 | 89 | | options.shout = false; |
| 90 | + | } else if arg == "--reverse" { |
| 91 | + | options.reverse = true; |
| 87 | 92 | | } else if arg == "--version" { |
| 88 | 93 | | options.version = true; |
| 89 | 94 | | } else if arg == "--quiet" { |
| ⋯ |
| 114 | 119 | | Ok(options) |
| 115 | 120 | | } |
| 116 | 121 | | |
| 122 | + | /// `name` spelled backwards. |
| 123 | + | pub fn reverse(name: &str) -> String { |
| 124 | + | name.chars().rev().collect() |
| 125 | + | } |
| 126 | + | |
| 117 | 127 | | /// `text` upper-cased. |
| 118 | 128 | | pub fn shout(text: &str) -> String { |
| 119 | 129 | | text.to_uppercase() |
| ⋯ |
| 349 | 359 | | } |
| 350 | 360 | | |
| 351 | 361 | | #[test] |
| 362 | + | fn parse_args_reverse() { |
| 363 | + | assert!(parse_args(args(&["--reverse", "Ada"])).unwrap().reverse); |
| 364 | + | assert!(!parse_args(args(&["Ada"])).unwrap().reverse); |
| 365 | + | } |
| 366 | + | |
| 367 | + | #[test] |
| 368 | + | fn reverse_spells_backwards() { |
| 369 | + | assert_eq!(hail(&reverse("Ada")), "Hi, adA!"); |
| 370 | + | } |
| 371 | + | |
| 372 | + | #[test] |
| 352 | 373 | | fn greets_by_name() { |
| 353 | 374 | | assert_eq!(hail("Ada"), "Hi, Ada!"); |
| 354 | 375 | | } |