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