use strict; use warnings; use Test::More; use Params::Validate qw(validate validate_with); my @testset; # Generate test cases ... BEGIN { my @lower_case_args = ( foo => 1 ); my @upper_case_args = ( FOO => 1 ); my @mixed_case_args = ( FoO => 1 ); my %lower_case_spec = ( foo => 1 ); my %upper_case_spec = ( FOO => 1 ); my %mixed_case_spec = ( FoO => 1 ); my %arglist = ( lower => \@lower_case_args, upper => \@upper_case_args, mixed => \@mixed_case_args ); my %speclist = ( lower => \%lower_case_spec, upper => \%upper_case_spec, mixed => \%mixed_case_spec ); # XXX - make subs such that user gets to see the error message # when a test fails my $ok_sub = sub { if ($@) { print STDERR $@; } !$@; }; my $nok_sub = sub { my $ok = ( $@ =~ /not listed in the validation options/ ); unless ($ok) { print STDERR $@; } $ok; }; # generate testcases on the fly (I'm too lazy) for my $ignore_case (qw( 0 1 )) { for my $args ( keys %arglist ) { for my $spec ( keys %speclist ) { push @testset, { params => $arglist{$args}, spec => $speclist{$spec}, expect => ( $ignore_case ? $ok_sub : $args eq $spec ? $ok_sub : $nok_sub ), ignore_case => $ignore_case }; } } } } plan tests => ( scalar @testset ) * 2; { # XXX - "called" will be all messed up, but what the heck foreach my $case (@testset) { my %args = eval { validate_with( params => $case->{params}, spec => $case->{spec}, ignore_case => $case->{ignore_case} ); }; ok( $case->{expect}->(%args) ); } # XXX - make sure that it works from validation_options() as well foreach my $case (@testset) { Params::Validate::validation_options( ignore_case => $case->{ignore_case} ); my %args = eval { my @args = @{ $case->{params} }; validate( @args, $case->{spec} ); }; ok( $case->{expect}->(%args) ); } }