5 1_validate_05_types.t - Test CGI::Ex::Validate's ability to do multitudinous types of validate
10 use Test::More tests => 104;
12 use_ok('CGI::Ex::Validate');
17 sub validate { scalar &CGI::Ex::Validate::validate(@_) }
20 $v = {foo => {required => 1}};
21 $e = validate({}, $v);
24 $e = validate({foo => 1}, $v);
28 $v = {foo => {required => 1, validate_if => 'bar'}};
29 $e = validate({}, $v);
32 $e = validate({bar => 1}, $v);
36 $v = {foo => {required_if => 'bar'}};
37 $e = validate({}, $v);
40 $e = validate({bar => 1}, $v);
44 $v = {foo => {required => 1}};
45 $e = validate({foo => [1,2]}, $v);
48 $v = {foo => {max_values => 2}};
49 $e = validate({}, $v);
52 $e = validate({foo => "str"}, $v);
55 $e = validate({foo => [1]}, $v);
58 $e = validate({foo => [1,2]}, $v);
61 $e = validate({foo => [1,2,3]}, $v);
65 $v = {foo => {min_values => 3, max_values => 10}};
66 $e = validate({foo => [1,2,3]}, $v);
69 $e = validate({foo => [1,2,3,4]}, $v);
72 $e = validate({foo => [1,2]}, $v);
75 $e = validate({foo => "str"}, $v);
78 $e = validate({}, $v);
82 $v = {foo => {enum => [1, 2, 3]}, bar => {enum => "1 || 2||3"}};
83 $e = validate({}, $v);
86 $e = validate({foo => 1, bar => 1}, $v);
89 $e = validate({foo => 1, bar => 2}, $v);
92 $e = validate({foo => 1, bar => 3}, $v);
95 $e = validate({foo => 1, bar => 4}, $v);
99 $v = {foo => {equals => 'bar'}};
100 $e = validate({}, $v);
103 $e = validate({foo => 1}, $v);
106 $e = validate({bar => 1}, $v);
109 $e = validate({foo => 1, bar => 2}, $v);
112 $e = validate({foo => 1, bar => 1}, $v);
115 $v = {foo => {equals => '"bar"'}};
116 $e = validate({foo => 1, bar => 1}, $v);
119 $e = validate({foo => 'bar', bar => 1}, $v);
123 $v = {foo => {min_len => 10}};
124 $e = validate({}, $v);
127 $e = validate({foo => ""}, $v);
130 $e = validate({foo => "123456789"}, $v);
133 $e = validate({foo => "1234567890"}, $v);
137 $v = {foo => {max_len => 10}};
138 $e = validate({}, $v);
141 $e = validate({foo => ""}, $v);
144 $e = validate({foo => "1234567890"}, $v);
147 $e = validate({foo => "12345678901"}, $v);
151 $v = {foo => {match => qr/^\w+$/}};
152 $e = validate({foo => "abc"}, $v);
155 $e = validate({foo => "abc."}, $v);
158 $v = {foo => {match => [qr/^\w+$/, qr/^[a-z]+$/]}};
159 $e = validate({foo => "abc"}, $v);
162 $e = validate({foo => "abc1"}, $v);
165 $v = {foo => {match => 'm/^\w+$/'}};
166 $e = validate({foo => "abc"}, $v);
169 $e = validate({foo => "abc."}, $v);
172 $v = {foo => {match => 'm/^\w+$/ || m/^[a-z]+$/'}};
173 $e = validate({foo => "abc"}, $v);
176 $e = validate({foo => "abc1"}, $v);
179 $v = {foo => {match => '! m/^\w+$/'}};
180 $e = validate({foo => "abc"}, $v);
183 $e = validate({foo => "abc."}, $v);
186 $v = {foo => {match => 'm/^\w+$/'}};
187 $e = validate({}, $v);
190 $v = {foo => {match => '! m/^\w+$/'}};
191 $e = validate({}, $v);
195 $v = {foo => {compare => '> 0'}};
196 $e = validate({}, $v);
198 $v = {foo => {compare => '== 0'}};
199 $e = validate({}, $v);
201 $v = {foo => {compare => '< 0'}};
202 $e = validate({}, $v);
205 $v = {foo => {compare => '> 10'}};
206 $e = validate({foo => 11}, $v);
208 $e = validate({foo => 10}, $v);
211 $v = {foo => {compare => '== 10'}};
212 $e = validate({foo => 11}, $v);
214 $e = validate({foo => 10}, $v);
217 $v = {foo => {compare => '< 10'}};
218 $e = validate({foo => 9}, $v);
220 $e = validate({foo => 10}, $v);
223 $v = {foo => {compare => '>= 10'}};
224 $e = validate({foo => 10}, $v);
226 $e = validate({foo => 9}, $v);
229 $v = {foo => {compare => '!= 10'}};
230 $e = validate({foo => 10}, $v);
232 $e = validate({foo => 9}, $v);
235 $v = {foo => {compare => '<= 10'}};
236 $e = validate({foo => 11}, $v);
238 $e = validate({foo => 10}, $v);
242 $v = {foo => {compare => 'gt ""'}};
243 $e = validate({}, $v);
245 $v = {foo => {compare => 'eq ""'}};
246 $e = validate({}, $v);
248 $v = {foo => {compare => 'lt ""'}};
249 $e = validate({}, $v);
252 $v = {foo => {compare => 'gt "c"'}};
253 $e = validate({foo => 'd'}, $v);
255 $e = validate({foo => 'c'}, $v);
258 $v = {foo => {compare => 'eq c'}};
259 $e = validate({foo => 'd'}, $v);
261 $e = validate({foo => 'c'}, $v);
264 $v = {foo => {compare => 'lt c'}};
265 $e = validate({foo => 'b'}, $v);
267 $e = validate({foo => 'c'}, $v);
270 $v = {foo => {compare => 'ge c'}};
271 $e = validate({foo => 'c'}, $v);
273 $e = validate({foo => 'b'}, $v);
276 $v = {foo => {compare => 'ne c'}};
277 $e = validate({foo => 'c'}, $v);
279 $e = validate({foo => 'b'}, $v);
282 $v = {foo => {compare => 'le c'}};
283 $e = validate({foo => 'd'}, $v);
285 $e = validate({foo => 'c'}, $v);
289 ### can't really do anything here without prompting for a db connection
293 $v = {foo => {custom => $n}};
294 $e = validate({}, $v);
296 $e = validate({foo => "str"}, $v);
300 $v = {foo => {custom => $n}};
301 $e = validate({}, $v);
303 $e = validate({foo => "str"}, $v);
306 $n = sub { my ($key, $val) = @_; return defined($val) ? 1 : 0};
307 $v = {foo => {custom => $n}};
308 $e = validate({}, $v);
310 $e = validate({foo => "str"}, $v);
314 $v = {foo => {type => 'ip'}};
315 $e = validate({foo => '209.108.25'}, $v);
317 $e = validate({foo => '209.108.25.111'}, $v);
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);
324 $e = validate({foo => 1, bar => 1}, $v);
326 $e = validate({foo => 1, bar => ''}, $v); # empty string doesn't count as value
328 $e = validate({foo => 1, bar => 0}, $v);
330 $e = validate({foo => [1, 2]}, $v);
332 $e = validate({foo => [1]}, $v);
334 $v = {foo => {min_in_set => '2 foo bar baz', max_values => 5}};
335 $e = validate({foo => 1, bar => 1}, $v);
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);
342 $e = validate({foo => 1, bar => 1}, $v);
344 $e = validate({foo => 1, bar => 1, baz => 1}, $v);
346 $e = validate({foo => [1, 2]}, $v);
348 $e = validate({foo => [1, 2, 3]}, $v);
351 ### validate_if revisited (but negated - uses max_in_set)
352 $v = {foo => {required => 1, validate_if => '! bar'}};
353 $e = validate({}, $v);
356 $e = validate({bar => 1}, $v);
361 $v = {foo => {required => 1, default => 'hmmmm'}};
362 $e = validate($f, $v);
365 ok($f->{foo} && $f->{foo} eq 'hmmmm');