7 ### determine number of tests
9 my $prog = join "", <DATA>;
10 my @tests = ($prog =~ /&print_ok\(/g);
14 require CGI::Ex::Validate;
16 my ($N, $v, $e, $ok) = (0);
19 return scalar &CGI::Ex::Validate::validate(@_);
24 warn "Test failed at line ".(caller)[2]."\n" if ! $ok;
25 print "" . ($ok ? "" : "not ") . "ok $N\n";
31 $v = {foo => {required => 1}};
32 $e = &validate({}, $v);
35 $e = &validate({foo => 1}, $v);
39 $v = {foo => {required => 1, validate_if => 'bar'}};
40 $e = &validate({}, $v);
43 $e = &validate({bar => 1}, $v);
47 $v = {foo => {required_if => 'bar'}};
48 $e = &validate({}, $v);
51 $e = &validate({bar => 1}, $v);
55 $v = {foo => {required => 1}};
56 $e = &validate({foo => [1,2]}, $v);
59 $v = {foo => {max_values => 2}};
60 $e = &validate({}, $v);
63 $e = &validate({foo => "str"}, $v);
66 $e = &validate({foo => [1]}, $v);
69 $e = &validate({foo => [1,2]}, $v);
72 $e = &validate({foo => [1,2,3]}, $v);
76 $v = {foo => {min_values => 3, max_values => 10}};
77 $e = &validate({foo => [1,2,3]}, $v);
80 $e = &validate({foo => [1,2,3,4]}, $v);
83 $e = &validate({foo => [1,2]}, $v);
86 $e = &validate({foo => "str"}, $v);
89 $e = &validate({}, $v);
93 $v = {foo => {enum => [1, 2, 3]}, bar => {enum => "1 || 2||3"}};
94 $e = &validate({}, $v);
97 $e = &validate({foo => 1, bar => 1}, $v);
100 $e = &validate({foo => 1, bar => 2}, $v);
103 $e = &validate({foo => 1, bar => 3}, $v);
106 $e = &validate({foo => 1, bar => 4}, $v);
110 $v = {foo => {equals => 'bar'}};
111 $e = &validate({}, $v);
114 $e = &validate({foo => 1}, $v);
117 $e = &validate({bar => 1}, $v);
120 $e = &validate({foo => 1, bar => 2}, $v);
123 $e = &validate({foo => 1, bar => 1}, $v);
126 $v = {foo => {equals => '"bar"'}};
127 $e = &validate({foo => 1, bar => 1}, $v);
130 $e = &validate({foo => 'bar', bar => 1}, $v);
134 $v = {foo => {min_len => 10}};
135 $e = &validate({}, $v);
138 $e = &validate({foo => ""}, $v);
141 $e = &validate({foo => "123456789"}, $v);
144 $e = &validate({foo => "1234567890"}, $v);
148 $v = {foo => {max_len => 10}};
149 $e = &validate({}, $v);
152 $e = &validate({foo => ""}, $v);
155 $e = &validate({foo => "1234567890"}, $v);
158 $e = &validate({foo => "12345678901"}, $v);
162 $v = {foo => {match => qr/^\w+$/}};
163 $e = &validate({foo => "abc"}, $v);
166 $e = &validate({foo => "abc."}, $v);
169 $v = {foo => {match => [qr/^\w+$/, qr/^[a-z]+$/]}};
170 $e = &validate({foo => "abc"}, $v);
173 $e = &validate({foo => "abc1"}, $v);
176 $v = {foo => {match => 'm/^\w+$/'}};
177 $e = &validate({foo => "abc"}, $v);
180 $e = &validate({foo => "abc."}, $v);
183 $v = {foo => {match => 'm/^\w+$/ || m/^[a-z]+$/'}};
184 $e = &validate({foo => "abc"}, $v);
187 $e = &validate({foo => "abc1"}, $v);
190 $v = {foo => {match => '! m/^\w+$/'}};
191 $e = &validate({foo => "abc"}, $v);
194 $e = &validate({foo => "abc."}, $v);
197 $v = {foo => {match => 'm/^\w+$/'}};
198 $e = &validate({}, $v);
201 $v = {foo => {match => '! m/^\w+$/'}};
202 $e = &validate({}, $v);
206 $v = {foo => {compare => '> 0'}};
207 $e = &validate({}, $v);
209 $v = {foo => {compare => '== 0'}};
210 $e = &validate({}, $v);
212 $v = {foo => {compare => '< 0'}};
213 $e = &validate({}, $v);
216 $v = {foo => {compare => '> 10'}};
217 $e = &validate({foo => 11}, $v);
219 $e = &validate({foo => 10}, $v);
222 $v = {foo => {compare => '== 10'}};
223 $e = &validate({foo => 11}, $v);
225 $e = &validate({foo => 10}, $v);
228 $v = {foo => {compare => '< 10'}};
229 $e = &validate({foo => 9}, $v);
231 $e = &validate({foo => 10}, $v);
234 $v = {foo => {compare => '>= 10'}};
235 $e = &validate({foo => 10}, $v);
237 $e = &validate({foo => 9}, $v);
240 $v = {foo => {compare => '!= 10'}};
241 $e = &validate({foo => 10}, $v);
243 $e = &validate({foo => 9}, $v);
246 $v = {foo => {compare => '<= 10'}};
247 $e = &validate({foo => 11}, $v);
249 $e = &validate({foo => 10}, $v);
253 $v = {foo => {compare => 'gt ""'}};
254 $e = &validate({}, $v);
256 $v = {foo => {compare => 'eq ""'}};
257 $e = &validate({}, $v);
259 $v = {foo => {compare => 'lt ""'}};
260 $e = &validate({}, $v);
263 $v = {foo => {compare => 'gt "c"'}};
264 $e = &validate({foo => 'd'}, $v);
266 $e = &validate({foo => 'c'}, $v);
269 $v = {foo => {compare => 'eq c'}};
270 $e = &validate({foo => 'd'}, $v);
272 $e = &validate({foo => 'c'}, $v);
275 $v = {foo => {compare => 'lt c'}};
276 $e = &validate({foo => 'b'}, $v);
278 $e = &validate({foo => 'c'}, $v);
281 $v = {foo => {compare => 'ge c'}};
282 $e = &validate({foo => 'c'}, $v);
284 $e = &validate({foo => 'b'}, $v);
287 $v = {foo => {compare => 'ne c'}};
288 $e = &validate({foo => 'c'}, $v);
290 $e = &validate({foo => 'b'}, $v);
293 $v = {foo => {compare => 'le c'}};
294 $e = &validate({foo => 'd'}, $v);
296 $e = &validate({foo => 'c'}, $v);
297 &print_ok(! $e); # 80
300 ### can't really do anything here without prompting for a db connection
304 $v = {foo => {custom => $n}};
305 $e = &validate({}, $v);
307 $e = &validate({foo => "str"}, $v);
311 $v = {foo => {custom => $n}};
312 $e = &validate({}, $v);
314 $e = &validate({foo => "str"}, $v);
317 $n = sub { my ($key, $val) = @_; return defined($val) ? 1 : 0};
318 $v = {foo => {custom => $n}};
319 $e = &validate({}, $v);
321 $e = &validate({foo => "str"}, $v);
325 $v = {foo => {type => 'ip'}};
326 $e = &validate({foo => '209.108.25'}, $v);
328 $e = &validate({foo => '209.108.25.111'}, $v);
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);
335 $e = &validate({foo => 1, bar => 1}, $v);
337 $e = &validate({foo => 1, bar => ''}, $v); # empty string doesn't count as value
339 $e = &validate({foo => 1, bar => 0}, $v);
341 $e = &validate({foo => [1, 2]}, $v);
343 $e = &validate({foo => [1]}, $v);
345 $v = {foo => {min_in_set => '2 foo bar baz', max_values => 5}};
346 $e = &validate({foo => 1, bar => 1}, $v);
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);
353 $e = &validate({foo => 1, bar => 1}, $v);
355 $e = &validate({foo => 1, bar => 1, baz => 1}, $v);
357 $e = &validate({foo => [1, 2]}, $v);
359 $e = &validate({foo => [1, 2, 3]}, $v);
362 ### validate_if revisited (but negated - uses max_in_set)
363 $v = {foo => {required => 1, validate_if => '! bar'}};
364 $e = &validate({}, $v);
367 $e = &validate({bar => 1}, $v);
372 $v = {foo => {required => 1, default => 'hmmmm'}};
373 $e = &validate($f, $v);
376 &print_ok($f->{foo} && $f->{foo} eq 'hmmmm');