1
+ extern crate clap;
2
+ extern crate regex;
3
+
4
+ include ! ( "../clap-test.rs" ) ;
5
+
6
+ use clap:: { App , Arg } ;
7
+
8
+ #[ test]
9
+ fn opts ( ) {
10
+ let r = App :: new ( "df" )
11
+ . arg ( Arg :: from_usage ( "-o [opt] 'some opt'" )
12
+ . default_value ( "default" ) )
13
+ . get_matches_from_safe ( vec ! [ "" ] ) ;
14
+ assert ! ( r. is_ok( ) ) ;
15
+ let m = r. unwrap ( ) ;
16
+ assert ! ( m. is_present( "o" ) ) ;
17
+ assert_eq ! ( m. value_of( "o" ) . unwrap( ) , "default" ) ;
18
+ }
19
+
20
+ #[ test]
21
+ fn opt_user_override ( ) {
22
+ let r = App :: new ( "df" )
23
+ . arg ( Arg :: from_usage ( "--opt [FILE] 'some arg'" )
24
+ . default_value ( "default" ) )
25
+ . get_matches_from_safe ( vec ! [ "" , "--opt" , "value" ] ) ;
26
+ assert ! ( r. is_ok( ) ) ;
27
+ let m = r. unwrap ( ) ;
28
+ assert ! ( m. is_present( "opt" ) ) ;
29
+ assert_eq ! ( m. value_of( "opt" ) . unwrap( ) , "value" ) ;
30
+ }
31
+
32
+ #[ test]
33
+ fn positionals ( ) {
34
+ let r = App :: new ( "df" )
35
+ . arg ( Arg :: from_usage ( "[arg] 'some opt'" )
36
+ . default_value ( "default" ) )
37
+ . get_matches_from_safe ( vec ! [ "" ] ) ;
38
+ assert ! ( r. is_ok( ) ) ;
39
+ let m = r. unwrap ( ) ;
40
+ assert ! ( m. is_present( "arg" ) ) ;
41
+ assert_eq ! ( m. value_of( "arg" ) . unwrap( ) , "default" ) ;
42
+ }
43
+
44
+ #[ test]
45
+ fn positional_user_override ( ) {
46
+ let r = App :: new ( "df" )
47
+ . arg ( Arg :: from_usage ( "[arg] 'some arg'" )
48
+ . default_value ( "default" ) )
49
+ . get_matches_from_safe ( vec ! [ "" , "value" ] ) ;
50
+ assert ! ( r. is_ok( ) ) ;
51
+ let m = r. unwrap ( ) ;
52
+ assert ! ( m. is_present( "arg" ) ) ;
53
+ assert_eq ! ( m. value_of( "arg" ) . unwrap( ) , "value" ) ;
54
+ }
55
+
56
+ // --- Default if arg is present
57
+
58
+ #[ test]
59
+ fn default_if_arg_present_no_default ( ) {
60
+ let r = App :: new ( "df" )
61
+ . arg ( Arg :: from_usage ( "--opt [FILE] 'some arg'" ) )
62
+ . arg ( Arg :: from_usage ( "[arg] 'some arg'" )
63
+ . default_value_if ( "opt" , None , "default" ) )
64
+ . get_matches_from_safe ( vec ! [ "" , "--opt" , "some" ] ) ;
65
+ assert ! ( r. is_ok( ) ) ;
66
+ let m = r. unwrap ( ) ;
67
+ assert ! ( m. is_present( "arg" ) ) ;
68
+ assert_eq ! ( m. value_of( "arg" ) . unwrap( ) , "default" ) ;
69
+ }
70
+
71
+ #[ test]
72
+ fn default_if_arg_present_no_default_user_override ( ) {
73
+ let r = App :: new ( "df" )
74
+ . arg ( Arg :: from_usage ( "--opt [FILE] 'some arg'" ) )
75
+ . arg ( Arg :: from_usage ( "[arg] 'some arg'" )
76
+ . default_value_if ( "opt" , None , "default" ) )
77
+ . get_matches_from_safe ( vec ! [ "" , "--opt" , "some" , "other" ] ) ;
78
+ assert ! ( r. is_ok( ) ) ;
79
+ let m = r. unwrap ( ) ;
80
+ assert ! ( m. is_present( "arg" ) ) ;
81
+ assert_eq ! ( m. value_of( "arg" ) . unwrap( ) , "other" ) ;
82
+ }
83
+
84
+ #[ test]
85
+ fn default_if_arg_present_no_arg_with_default ( ) {
86
+ let r = App :: new ( "df" )
87
+ . arg ( Arg :: from_usage ( "--opt [FILE] 'some arg'" ) )
88
+ . arg ( Arg :: from_usage ( "[arg] 'some arg'" )
89
+ . default_value ( "first" )
90
+ . default_value_if ( "opt" , None , "default" ) )
91
+ . get_matches_from_safe ( vec ! [ "" ] ) ;
92
+ assert ! ( r. is_ok( ) ) ;
93
+ let m = r. unwrap ( ) ;
94
+ assert ! ( m. is_present( "arg" ) ) ;
95
+ assert_eq ! ( m. value_of( "arg" ) . unwrap( ) , "first" ) ;
96
+ }
97
+
98
+ #[ test]
99
+ fn default_if_arg_present_with_default ( ) {
100
+ let r = App :: new ( "df" )
101
+ . arg ( Arg :: from_usage ( "--opt [FILE] 'some arg'" ) )
102
+ . arg ( Arg :: from_usage ( "[arg] 'some arg'" )
103
+ . default_value ( "first" )
104
+ . default_value_if ( "opt" , None , "default" ) )
105
+ . get_matches_from_safe ( vec ! [ "" , "--opt" , "some" ] ) ;
106
+ assert ! ( r. is_ok( ) ) ;
107
+ let m = r. unwrap ( ) ;
108
+ assert ! ( m. is_present( "arg" ) ) ;
109
+ assert_eq ! ( m. value_of( "arg" ) . unwrap( ) , "default" ) ;
110
+ }
111
+
112
+ #[ test]
113
+ fn default_if_arg_present_with_default_user_override ( ) {
114
+ let r = App :: new ( "df" )
115
+ . arg ( Arg :: from_usage ( "--opt [FILE] 'some arg'" ) )
116
+ . arg ( Arg :: from_usage ( "[arg] 'some arg'" )
117
+ . default_value ( "first" )
118
+ . default_value_if ( "opt" , None , "default" ) )
119
+ . get_matches_from_safe ( vec ! [ "" , "--opt" , "some" , "other" ] ) ;
120
+ assert ! ( r. is_ok( ) ) ;
121
+ let m = r. unwrap ( ) ;
122
+ assert ! ( m. is_present( "arg" ) ) ;
123
+ assert_eq ! ( m. value_of( "arg" ) . unwrap( ) , "other" ) ;
124
+ }
125
+
126
+ #[ test]
127
+ fn default_if_arg_present_no_arg_with_default_user_override ( ) {
128
+ let r = App :: new ( "df" )
129
+ . arg ( Arg :: from_usage ( "--opt [FILE] 'some arg'" ) )
130
+ . arg ( Arg :: from_usage ( "[arg] 'some arg'" )
131
+ . default_value ( "first" )
132
+ . default_value_if ( "opt" , None , "default" ) )
133
+ . get_matches_from_safe ( vec ! [ "" , "other" ] ) ;
134
+ assert ! ( r. is_ok( ) ) ;
135
+ let m = r. unwrap ( ) ;
136
+ assert ! ( m. is_present( "arg" ) ) ;
137
+ assert_eq ! ( m. value_of( "arg" ) . unwrap( ) , "other" ) ;
138
+ }
139
+
140
+ // --- Default if arg with specific value
141
+
142
+ #[ test]
143
+ fn default_if_arg_present_with_value_no_default ( ) {
144
+ let r = App :: new ( "df" )
145
+ . arg ( Arg :: from_usage ( "--opt [FILE] 'some arg'" ) )
146
+ . arg ( Arg :: from_usage ( "[arg] 'some arg'" )
147
+ . default_value_if ( "opt" , Some ( "value" ) , "default" ) )
148
+ . get_matches_from_safe ( vec ! [ "" , "--opt" , "value" ] ) ;
149
+ assert ! ( r. is_ok( ) ) ;
150
+ let m = r. unwrap ( ) ;
151
+ assert ! ( m. is_present( "arg" ) ) ;
152
+ assert_eq ! ( m. value_of( "arg" ) . unwrap( ) , "default" ) ;
153
+ }
154
+
155
+ #[ test]
156
+ fn default_if_arg_present_with_value_no_default_fail ( ) {
157
+ let r = App :: new ( "df" )
158
+ . arg ( Arg :: from_usage ( "--opt [FILE] 'some arg'" ) )
159
+ . arg ( Arg :: from_usage ( "[arg] 'some arg'" )
160
+ . default_value_if ( "opt" , Some ( "value" ) , "default" ) )
161
+ . get_matches_from_safe ( vec ! [ "" , "--opt" , "other" ] ) ;
162
+ assert ! ( r. is_ok( ) ) ;
163
+ let m = r. unwrap ( ) ;
164
+ assert ! ( !m. is_present( "arg" ) ) ;
165
+ //assert_eq!(m.value_of("arg").unwrap(), "default");
166
+ }
167
+
168
+ #[ test]
169
+ fn default_if_arg_present_with_value_no_default_user_override ( ) {
170
+ let r = App :: new ( "df" )
171
+ . arg ( Arg :: from_usage ( "--opt [FILE] 'some arg'" ) )
172
+ . arg ( Arg :: from_usage ( "[arg] 'some arg'" )
173
+ . default_value_if ( "opt" , Some ( "some" ) , "default" ) )
174
+ . get_matches_from_safe ( vec ! [ "" , "--opt" , "some" , "other" ] ) ;
175
+ assert ! ( r. is_ok( ) ) ;
176
+ let m = r. unwrap ( ) ;
177
+ assert ! ( m. is_present( "arg" ) ) ;
178
+ assert_eq ! ( m. value_of( "arg" ) . unwrap( ) , "other" ) ;
179
+ }
180
+
181
+ #[ test]
182
+ fn default_if_arg_present_with_value_no_arg_with_default ( ) {
183
+ let r = App :: new ( "df" )
184
+ . arg ( Arg :: from_usage ( "--opt [FILE] 'some arg'" ) )
185
+ . arg ( Arg :: from_usage ( "[arg] 'some arg'" )
186
+ . default_value ( "first" )
187
+ . default_value_if ( "opt" , Some ( "some" ) , "default" ) )
188
+ . get_matches_from_safe ( vec ! [ "" ] ) ;
189
+ assert ! ( r. is_ok( ) ) ;
190
+ let m = r. unwrap ( ) ;
191
+ assert ! ( m. is_present( "arg" ) ) ;
192
+ assert_eq ! ( m. value_of( "arg" ) . unwrap( ) , "first" ) ;
193
+ }
194
+
195
+ #[ test]
196
+ fn default_if_arg_present_with_value_no_arg_with_default_fail ( ) {
197
+ let r = App :: new ( "df" )
198
+ . arg ( Arg :: from_usage ( "--opt [FILE] 'some arg'" ) )
199
+ . arg ( Arg :: from_usage ( "[arg] 'some arg'" )
200
+ . default_value ( "first" )
201
+ . default_value_if ( "opt" , Some ( "some" ) , "default" ) )
202
+ . get_matches_from_safe ( vec ! [ "" , "--opt" , "other" ] ) ;
203
+ assert ! ( r. is_ok( ) ) ;
204
+ let m = r. unwrap ( ) ;
205
+ assert ! ( m. is_present( "arg" ) ) ;
206
+ assert_eq ! ( m. value_of( "arg" ) . unwrap( ) , "first" ) ;
207
+ }
208
+
209
+ #[ test]
210
+ fn default_if_arg_present_with_value_with_default ( ) {
211
+ let r = App :: new ( "df" )
212
+ . arg ( Arg :: from_usage ( "--opt [FILE] 'some arg'" ) )
213
+ . arg ( Arg :: from_usage ( "[arg] 'some arg'" )
214
+ . default_value ( "first" )
215
+ . default_value_if ( "opt" , Some ( "some" ) , "default" ) )
216
+ . get_matches_from_safe ( vec ! [ "" , "--opt" , "some" ] ) ;
217
+ assert ! ( r. is_ok( ) ) ;
218
+ let m = r. unwrap ( ) ;
219
+ assert ! ( m. is_present( "arg" ) ) ;
220
+ assert_eq ! ( m. value_of( "arg" ) . unwrap( ) , "default" ) ;
221
+ }
222
+
223
+ #[ test]
224
+ fn default_if_arg_present_with_value_with_default_user_override ( ) {
225
+ let r = App :: new ( "df" )
226
+ . arg ( Arg :: from_usage ( "--opt [FILE] 'some arg'" ) )
227
+ . arg ( Arg :: from_usage ( "[arg] 'some arg'" )
228
+ . default_value ( "first" )
229
+ . default_value_if ( "opt" , Some ( "some" ) , "default" ) )
230
+ . get_matches_from_safe ( vec ! [ "" , "--opt" , "some" , "other" ] ) ;
231
+ assert ! ( r. is_ok( ) ) ;
232
+ let m = r. unwrap ( ) ;
233
+ assert ! ( m. is_present( "arg" ) ) ;
234
+ assert_eq ! ( m. value_of( "arg" ) . unwrap( ) , "other" ) ;
235
+ }
236
+
237
+ #[ test]
238
+ fn default_if_arg_present_no_arg_with_value_with_default_user_override ( ) {
239
+ let r = App :: new ( "df" )
240
+ . arg ( Arg :: from_usage ( "--opt [FILE] 'some arg'" ) )
241
+ . arg ( Arg :: from_usage ( "[arg] 'some arg'" )
242
+ . default_value ( "first" )
243
+ . default_value_if ( "opt" , Some ( "some" ) , "default" ) )
244
+ . get_matches_from_safe ( vec ! [ "" , "other" ] ) ;
245
+ assert ! ( r. is_ok( ) ) ;
246
+ let m = r. unwrap ( ) ;
247
+ assert ! ( m. is_present( "arg" ) ) ;
248
+ assert_eq ! ( m. value_of( "arg" ) . unwrap( ) , "other" ) ;
249
+ }
250
+
251
+ #[ test]
252
+ fn default_if_arg_present_no_arg_with_value_with_default_user_override_fail ( ) {
253
+ let r = App :: new ( "df" )
254
+ . arg ( Arg :: from_usage ( "--opt [FILE] 'some arg'" ) )
255
+ . arg ( Arg :: from_usage ( "[arg] 'some arg'" )
256
+ . default_value ( "first" )
257
+ . default_value_if ( "opt" , Some ( "some" ) , "default" ) )
258
+ . get_matches_from_safe ( vec ! [ "" , "--opt" , "value" , "other" ] ) ;
259
+ assert ! ( r. is_ok( ) ) ;
260
+ let m = r. unwrap ( ) ;
261
+ assert ! ( m. is_present( "arg" ) ) ;
262
+ assert_eq ! ( m. value_of( "arg" ) . unwrap( ) , "other" ) ;
263
+ }
264
+
265
+ // Multiple conditions
266
+
267
+ #[ test]
268
+ fn default_ifs_arg_present ( ) {
269
+ let r = App :: new ( "df" )
270
+ . arg ( Arg :: from_usage ( "--opt [FILE] 'some arg'" ) )
271
+ . arg ( Arg :: from_usage ( "--flag 'some arg'" ) )
272
+ . arg ( Arg :: from_usage ( "[arg] 'some arg'" )
273
+ . default_value ( "first" )
274
+ . default_value_ifs ( & [
275
+ ( "opt" , Some ( "some" ) , "default" ) ,
276
+ ( "flag" , None , "flg" ) ,
277
+ ] ) )
278
+ . get_matches_from_safe ( vec ! [ "" , "--flag" ] ) ;
279
+ assert ! ( r. is_ok( ) ) ;
280
+ let m = r. unwrap ( ) ;
281
+ assert ! ( m. is_present( "arg" ) ) ;
282
+ assert_eq ! ( m. value_of( "arg" ) . unwrap( ) , "flg" ) ;
283
+ }
284
+
285
+ #[ test]
286
+ fn default_ifs_arg_present_user_override ( ) {
287
+ let r = App :: new ( "df" )
288
+ . arg ( Arg :: from_usage ( "--opt [FILE] 'some arg'" ) )
289
+ . arg ( Arg :: from_usage ( "--flag 'some arg'" ) )
290
+ . arg ( Arg :: from_usage ( "[arg] 'some arg'" )
291
+ . default_value ( "first" )
292
+ . default_value_ifs ( & [
293
+ ( "opt" , Some ( "some" ) , "default" ) ,
294
+ ( "flag" , None , "flg" ) ,
295
+ ] ) )
296
+ . get_matches_from_safe ( vec ! [ "" , "--flag" , "value" ] ) ;
297
+ assert ! ( r. is_ok( ) ) ;
298
+ let m = r. unwrap ( ) ;
299
+ assert ! ( m. is_present( "arg" ) ) ;
300
+ assert_eq ! ( m. value_of( "arg" ) . unwrap( ) , "value" ) ;
301
+ }
302
+
303
+ #[ test]
304
+ fn default_ifs_arg_present_order ( ) {
305
+ let r = App :: new ( "df" )
306
+ . arg ( Arg :: from_usage ( "--opt [FILE] 'some arg'" ) )
307
+ . arg ( Arg :: from_usage ( "--flag 'some arg'" ) )
308
+ . arg ( Arg :: from_usage ( "[arg] 'some arg'" )
309
+ . default_value ( "first" )
310
+ . default_value_ifs ( & [
311
+ ( "opt" , Some ( "some" ) , "default" ) ,
312
+ ( "flag" , None , "flg" ) ,
313
+ ] ) )
314
+ . get_matches_from_safe ( vec ! [ "" , "--opt=some" , "--flag" ] ) ;
315
+ assert ! ( r. is_ok( ) ) ;
316
+ let m = r. unwrap ( ) ;
317
+ assert ! ( m. is_present( "arg" ) ) ;
318
+ assert_eq ! ( m. value_of( "arg" ) . unwrap( ) , "default" ) ;
319
+ }
0 commit comments