]> Dogcows Code - chaz/p5-CGI-Ex/blob - t/1_validate_05_types.t
CGI::Ex 2.00
[chaz/p5-CGI-Ex] / t / 1_validate_05_types.t
1 # -*- Mode: Perl; -*-
2
3 =head1 NAME
4
5 1_validate_05_types.t - Test CGI::Ex::Validate's ability to do multitudinous types of validate
6
7 =cut
8
9 use strict;
10 use Test::More tests => 104;
11
12 use_ok('CGI::Ex::Validate');
13
14 my $v;
15 my $e;
16
17 sub validate { scalar &CGI::Ex::Validate::validate(@_) }
18
19 ### required
20 $v = {foo => {required => 1}};
21 $e = validate({}, $v);
22 ok($e);
23
24 $e = validate({foo => 1}, $v);
25 ok(! $e);
26
27 ### validate_if
28 $v = {foo => {required => 1, validate_if => 'bar'}};
29 $e = validate({}, $v);
30 ok(! $e);
31
32 $e = validate({bar => 1}, $v);
33 ok($e);
34
35 ### required_if
36 $v = {foo => {required_if => 'bar'}};
37 $e = validate({}, $v);
38 ok(! $e);
39
40 $e = validate({bar => 1}, $v);
41 ok($e);
42
43 ### max_values
44 $v = {foo => {required => 1}};
45 $e = validate({foo => [1,2]}, $v);
46 ok($e);
47
48 $v = {foo => {max_values => 2}};
49 $e = validate({}, $v);
50 ok(! $e);
51
52 $e = validate({foo => "str"}, $v);
53 ok(! $e);
54
55 $e = validate({foo => [1]}, $v);
56 ok(! $e);
57
58 $e = validate({foo => [1,2]}, $v);
59 ok(! $e);
60
61 $e = validate({foo => [1,2,3]}, $v);
62 ok($e);
63
64 ### min_values
65 $v = {foo => {min_values => 3, max_values => 10}};
66 $e = validate({foo => [1,2,3]}, $v);
67 ok(! $e);
68
69 $e = validate({foo => [1,2,3,4]}, $v);
70 ok(! $e);
71
72 $e = validate({foo => [1,2]}, $v);
73 ok($e);
74
75 $e = validate({foo => "str"}, $v);
76 ok($e);
77
78 $e = validate({}, $v);
79 ok($e);
80
81 ### enum
82 $v = {foo => {enum => [1, 2, 3]}, bar => {enum => "1 || 2||3"}};
83 $e = validate({}, $v);
84 ok($e);
85
86 $e = validate({foo => 1, bar => 1}, $v);
87 ok(! $e);
88
89 $e = validate({foo => 1, bar => 2}, $v);
90 ok(! $e);
91
92 $e = validate({foo => 1, bar => 3}, $v);
93 ok(! $e);
94
95 $e = validate({foo => 1, bar => 4}, $v);
96 ok($e);
97
98 # equals
99 $v = {foo => {equals => 'bar'}};
100 $e = validate({}, $v);
101 ok(! $e);
102
103 $e = validate({foo => 1}, $v);
104 ok($e);
105
106 $e = validate({bar => 1}, $v);
107 ok($e);
108
109 $e = validate({foo => 1, bar => 2}, $v);
110 ok($e);
111
112 $e = validate({foo => 1, bar => 1}, $v);
113 ok(! $e);
114
115 $v = {foo => {equals => '"bar"'}};
116 $e = validate({foo => 1, bar => 1}, $v);
117 ok($e);
118
119 $e = validate({foo => 'bar', bar => 1}, $v);
120 ok(! $e);
121
122 ### min_len
123 $v = {foo => {min_len => 10}};
124 $e = validate({}, $v);
125 ok($e);
126
127 $e = validate({foo => ""}, $v);
128 ok($e);
129
130 $e = validate({foo => "123456789"}, $v);
131 ok($e);
132
133 $e = validate({foo => "1234567890"}, $v);
134 ok(! $e);
135
136 ### max_len
137 $v = {foo => {max_len => 10}};
138 $e = validate({}, $v);
139 ok(! $e);
140
141 $e = validate({foo => ""}, $v);
142 ok(! $e);
143
144 $e = validate({foo => "1234567890"}, $v);
145 ok(! $e);
146
147 $e = validate({foo => "12345678901"}, $v);
148 ok($e);
149
150 ### match
151 $v = {foo => {match => qr/^\w+$/}};
152 $e = validate({foo => "abc"}, $v);
153 ok(! $e);
154
155 $e = validate({foo => "abc."}, $v);
156 ok($e);
157
158 $v = {foo => {match => [qr/^\w+$/, qr/^[a-z]+$/]}};
159 $e = validate({foo => "abc"}, $v);
160 ok(! $e);
161
162 $e = validate({foo => "abc1"}, $v);
163 ok($e);
164
165 $v = {foo => {match => 'm/^\w+$/'}};
166 $e = validate({foo => "abc"}, $v);
167 ok(! $e);
168
169 $e = validate({foo => "abc."}, $v);
170 ok($e);
171
172 $v = {foo => {match => 'm/^\w+$/ || m/^[a-z]+$/'}};
173 $e = validate({foo => "abc"}, $v);
174 ok(! $e);
175
176 $e = validate({foo => "abc1"}, $v);
177 ok($e);
178
179 $v = {foo => {match => '! m/^\w+$/'}};
180 $e = validate({foo => "abc"}, $v);
181 ok($e);
182
183 $e = validate({foo => "abc."}, $v);
184 ok(! $e);
185
186 $v = {foo => {match => 'm/^\w+$/'}};
187 $e = validate({}, $v);
188 ok($e);
189
190 $v = {foo => {match => '! m/^\w+$/'}};
191 $e = validate({}, $v);
192 ok(! $e);
193
194 ### compare
195 $v = {foo => {compare => '> 0'}};
196 $e = validate({}, $v);
197 ok($e);
198 $v = {foo => {compare => '== 0'}};
199 $e = validate({}, $v);
200 ok(! $e);
201 $v = {foo => {compare => '< 0'}};
202 $e = validate({}, $v);
203 ok($e);
204
205 $v = {foo => {compare => '> 10'}};
206 $e = validate({foo => 11}, $v);
207 ok(! $e);
208 $e = validate({foo => 10}, $v);
209 ok($e);
210
211 $v = {foo => {compare => '== 10'}};
212 $e = validate({foo => 11}, $v);
213 ok($e);
214 $e = validate({foo => 10}, $v);
215 ok(! $e);
216
217 $v = {foo => {compare => '< 10'}};
218 $e = validate({foo => 9}, $v);
219 ok(! $e);
220 $e = validate({foo => 10}, $v);
221 ok($e);
222
223 $v = {foo => {compare => '>= 10'}};
224 $e = validate({foo => 10}, $v);
225 ok(! $e);
226 $e = validate({foo => 9}, $v);
227 ok($e);
228
229 $v = {foo => {compare => '!= 10'}};
230 $e = validate({foo => 10}, $v);
231 ok($e);
232 $e = validate({foo => 9}, $v);
233 ok(! $e);
234
235 $v = {foo => {compare => '<= 10'}};
236 $e = validate({foo => 11}, $v);
237 ok($e);
238 $e = validate({foo => 10}, $v);
239 ok(! $e);
240
241
242 $v = {foo => {compare => 'gt ""'}};
243 $e = validate({}, $v);
244 ok($e);
245 $v = {foo => {compare => 'eq ""'}};
246 $e = validate({}, $v);
247 ok(! $e);
248 $v = {foo => {compare => 'lt ""'}};
249 $e = validate({}, $v);
250 ok($e); # 68
251
252 $v = {foo => {compare => 'gt "c"'}};
253 $e = validate({foo => 'd'}, $v);
254 ok(! $e);
255 $e = validate({foo => 'c'}, $v);
256 ok($e);
257
258 $v = {foo => {compare => 'eq c'}};
259 $e = validate({foo => 'd'}, $v);
260 ok($e);
261 $e = validate({foo => 'c'}, $v);
262 ok(! $e);
263
264 $v = {foo => {compare => 'lt c'}};
265 $e = validate({foo => 'b'}, $v);
266 ok(! $e);
267 $e = validate({foo => 'c'}, $v);
268 ok($e);
269
270 $v = {foo => {compare => 'ge c'}};
271 $e = validate({foo => 'c'}, $v);
272 ok(! $e);
273 $e = validate({foo => 'b'}, $v);
274 ok($e);
275
276 $v = {foo => {compare => 'ne c'}};
277 $e = validate({foo => 'c'}, $v);
278 ok($e);
279 $e = validate({foo => 'b'}, $v);
280 ok(! $e);
281
282 $v = {foo => {compare => 'le c'}};
283 $e = validate({foo => 'd'}, $v);
284 ok($e);
285 $e = validate({foo => 'c'}, $v);
286 ok(! $e); # 80
287
288 ### sql
289 ### can't really do anything here without prompting for a db connection
290
291 ### custom
292 my $n = 1;
293 $v = {foo => {custom => $n}};
294 $e = validate({}, $v);
295 ok(! $e);
296 $e = validate({foo => "str"}, $v);
297 ok(! $e);
298
299 $n = 0;
300 $v = {foo => {custom => $n}};
301 $e = validate({}, $v);
302 ok($e);
303 $e = validate({foo => "str"}, $v);
304 ok($e);
305
306 $n = sub { my ($key, $val) = @_; return defined($val) ? 1 : 0};
307 $v = {foo => {custom => $n}};
308 $e = validate({}, $v);
309 ok($e);
310 $e = validate({foo => "str"}, $v);
311 ok(! $e);
312
313 ### type checks
314 $v = {foo => {type => 'ip'}};
315 $e = validate({foo => '209.108.25'}, $v);
316 ok($e);
317 $e = validate({foo => '209.108.25.111'}, $v);
318 ok(! $e);
319
320 ### min_in_set checks
321 $v = {foo => {min_in_set => '2 of foo bar baz', max_values => 5}};
322 $e = validate({foo => 1}, $v);
323 ok($e);
324 $e = validate({foo => 1, bar => 1}, $v);
325 ok(! $e);
326 $e = validate({foo => 1, bar => ''}, $v); # empty string doesn't count as value
327 ok($e);
328 $e = validate({foo => 1, bar => 0}, $v);
329 ok(! $e);
330 $e = validate({foo => [1, 2]}, $v);
331 ok(! $e);
332 $e = validate({foo => [1]}, $v);
333 ok($e);
334 $v = {foo => {min_in_set => '2 foo bar baz', max_values => 5}};
335 $e = validate({foo => 1, bar => 1}, $v);
336 ok(! $e);
337
338 ### max_in_set checks
339 $v = {foo => {max_in_set => '2 of foo bar baz', max_values => 5}};
340 $e = validate({foo => 1}, $v);
341 ok(! $e);
342 $e = validate({foo => 1, bar => 1}, $v);
343 ok(! $e);
344 $e = validate({foo => 1, bar => 1, baz => 1}, $v);
345 ok($e);
346 $e = validate({foo => [1, 2]}, $v);
347 ok(! $e);
348 $e = validate({foo => [1, 2, 3]}, $v);
349 ok($e);
350
351 ### validate_if revisited (but negated - uses max_in_set)
352 $v = {foo => {required => 1, validate_if => '! bar'}};
353 $e = validate({}, $v);
354 ok($e);
355
356 $e = validate({bar => 1}, $v);
357 ok(! $e);
358
359 ### default value
360 my $f = {};
361 $v = {foo => {required => 1, default => 'hmmmm'}};
362 $e = validate($f, $v);
363 ok(! $e);
364
365 ok($f->{foo} && $f->{foo} eq 'hmmmm');
366
This page took 0.043163 seconds and 4 git commands to generate.