1 use clap::{error::ErrorKind, Arg, ArgAction, Command};
2
3 #[cfg(feature = "error-context")]
4 use super::utils;
5
6 #[test]
empty_values()7 fn empty_values() {
8 let m = Command::new("config")
9 .arg(Arg::new("config").long("config").action(ArgAction::Set))
10 .try_get_matches_from(["config", "--config", ""])
11 .unwrap();
12 assert_eq!(m.get_one::<String>("config").map(|v| v.as_str()), Some(""));
13 }
14
15 #[test]
empty_values_with_equals()16 fn empty_values_with_equals() {
17 let m = Command::new("config")
18 .arg(Arg::new("config").long("config").action(ArgAction::Set))
19 .try_get_matches_from(["config", "--config="])
20 .unwrap();
21 assert_eq!(m.get_one::<String>("config").map(|v| v.as_str()), Some(""));
22
23 let m = Command::new("config")
24 .arg(Arg::new("config").short('c').action(ArgAction::Set))
25 .try_get_matches_from(["config", "-c="])
26 .unwrap();
27 assert_eq!(m.get_one::<String>("config").map(|v| v.as_str()), Some(""))
28 }
29
30 #[test]
no_empty_values()31 fn no_empty_values() {
32 let m = Command::new("config")
33 .arg(
34 Arg::new("config")
35 .long("config")
36 .action(ArgAction::Set)
37 .value_parser(clap::builder::NonEmptyStringValueParser::new()),
38 )
39 .try_get_matches_from(["config", "--config", ""]);
40 assert!(m.is_err());
41 assert_eq!(m.unwrap_err().kind(), ErrorKind::InvalidValue);
42
43 let m = Command::new("config")
44 .arg(
45 Arg::new("config")
46 .short('c')
47 .action(ArgAction::Set)
48 .value_parser(clap::builder::NonEmptyStringValueParser::new()),
49 )
50 .try_get_matches_from(["config", "-c", ""]);
51 assert!(m.is_err());
52 assert_eq!(m.unwrap_err().kind(), ErrorKind::InvalidValue)
53 }
54
55 #[test]
no_empty_values_with_equals()56 fn no_empty_values_with_equals() {
57 let m = Command::new("config")
58 .arg(
59 Arg::new("config")
60 .long("config")
61 .action(ArgAction::Set)
62 .value_parser(clap::builder::NonEmptyStringValueParser::new()),
63 )
64 .try_get_matches_from(["config", "--config="]);
65 assert!(m.is_err());
66 assert_eq!(m.unwrap_err().kind(), ErrorKind::InvalidValue);
67
68 let m = Command::new("config")
69 .arg(
70 Arg::new("config")
71 .short('c')
72 .action(ArgAction::Set)
73 .value_parser(clap::builder::NonEmptyStringValueParser::new()),
74 )
75 .try_get_matches_from(["config", "-c="]);
76 assert!(m.is_err());
77 assert_eq!(m.unwrap_err().kind(), ErrorKind::InvalidValue);
78 }
79
80 #[test]
no_empty_values_without_equals()81 fn no_empty_values_without_equals() {
82 let m = Command::new("config")
83 .arg(
84 Arg::new("config")
85 .long("config")
86 .action(ArgAction::Set)
87 .value_parser(clap::builder::NonEmptyStringValueParser::new()),
88 )
89 .try_get_matches_from(["config", "--config"]);
90 assert!(m.is_err());
91 assert_eq!(m.unwrap_err().kind(), ErrorKind::InvalidValue);
92
93 let m = Command::new("config")
94 .arg(
95 Arg::new("config")
96 .short('c')
97 .action(ArgAction::Set)
98 .value_parser(clap::builder::NonEmptyStringValueParser::new()),
99 )
100 .try_get_matches_from(["config", "-c"]);
101 assert!(m.is_err());
102 assert_eq!(m.unwrap_err().kind(), ErrorKind::InvalidValue)
103 }
104
105 #[test]
106 #[cfg(feature = "error-context")]
no_empty_values_without_equals_but_requires_equals()107 fn no_empty_values_without_equals_but_requires_equals() {
108 let cmd = Command::new("config").arg(
109 Arg::new("config")
110 .long("config")
111 .action(ArgAction::Set)
112 .value_parser(clap::builder::NonEmptyStringValueParser::new())
113 .require_equals(true),
114 );
115 let m = cmd.clone().try_get_matches_from(["config", "--config"]);
116 // Should error on no equals rather than empty value.
117 assert!(m.is_err());
118 assert_eq!(m.unwrap_err().kind(), ErrorKind::NoEquals);
119
120 static NO_EUQALS_ERROR: &str =
121 "error: equal sign is needed when assigning values to '--config=<config>'
122
123 Usage: config [OPTIONS]
124
125 For more information, try '--help'.
126 ";
127
128 utils::assert_output(cmd, "config --config", NO_EUQALS_ERROR, true);
129 }
130