App-Test-Generator
view release on metacpan or search on metacpan
lib/App/Test/Generator/Template.pm view on Meta::CPAN
PWD
OLDPWD
_
SHLVL
)
};
}
return \%env;
}
diag('Run Fuzz Tests') if($ENV{'TEST_VERBOSE'});
foreach my $case (@{fuzz_inputs()}) {
# my %params;
# lives_ok { %params = get_params(\%input, %$case) } 'Params::Get input check';
# lives_ok { validate_strict(\%input, %params) } 'Params::Validate::Strict input check';
my $input;
if((ref($case) eq 'HASH') && exists($case->{'_input'})) {
$input = $case->{'_input'};
} else {
$input = $case;
}
if(my $line = ($case->{'_LINE'} || $input{'_LINE'})) {
diag("Test case from line number $line") if($ENV{'TEST_VERBOSE'});
}
if(my $description = ($case->{'_DESCRIPTION'} || $input{'_DESCRIPTION'})) {
diag("Test case $description") if($ENV{'TEST_VERBOSE'});
}
{
# local %ENV;
run_test($case, $input, \%output, $positions);
# delete $ENV{'LANG'};
# delete $ENV{'LC_ALL'};
# run_test($case, $input, \%output, $positions);
# $ENV{'LANG'} = 'fr_FR.utf8';
# $ENV{'LC_ALL'} = 'fr_FR.utf8';
# run_test($case, $input, \%output, $positions);
}
}
if(scalar(keys %transforms)) {
diag('Run ', scalar(keys %transforms), ' transform tests');
}
# diag('-' x 60);
# Build the foundation - which is a basic test with sensible defaults in the field
foreach my $transform (keys %transforms) {
my $foundation = _fill_foundation(); # basic set of data with every field filled in with a sensible default value
# The foundation should work
my $case = { _NAME => "basic $transform test", _LINE => __LINE__ };
my $positions = populate_positions(\%input);
run_test($case, $foundation, \%output, $positions);
# Generate transform tests
# Don't generate invalid data, that's all already done,
# this is about verifying the transorms
my @tests;
diag("tests for transform $transform") if($ENV{'TEST_VERBOSE'});
# Now modify the foundation with test code
# BUILD CODE TO CALL FUNCTION
# CALL FUNCTION
# CHECK STATUS CORRECT
# IF STATUS EQ LIVES
# CHECK OUTPUT USING returns_ok
# FI
my $transform_input = $transforms{$transform}{'input'} || {};
foreach my $field (keys %input) {
my $spec = $transform_input->{$field} || {};
my $type = $spec->{type} || 'string';
# If there's a specific value, test that exact value
if (exists $spec->{value}) {
push @tests, {
%{$foundation},
$field => $spec->{value},
_LINE => __LINE__,
_DESCRIPTION => "$transform: $field=$spec->{value}"
};
next;
}
# Generate edge cases based on type and contraints
if($type eq 'integer') {
push @tests, @{_generate_integer_cases($field, $spec, $foundation)};
} elsif(($type eq 'number') || ($type eq 'float')) {
push @tests, @{_generate_float_cases($field, $spec, $foundation, _LINE => __LINE__)};
} elsif($type eq 'string') {
push @tests, @{_generate_string_cases($field, $spec, $foundation)};
} elsif($type eq 'boolean') {
push @tests, @{_generate_boolean_cases($field, $spec, $foundation)};
} elsif ($type eq 'arrayref') {
if(defined $spec->{min}) {
push @tests, { %{$foundation}, ( $field => rand_arrayref($spec->{min} + 1) ) }; # just inside
push @tests, { %{$foundation}, ( $field => rand_arrayref($spec->{min}) ) }; # border
} else {
push @tests, { %{$foundation}, ( $field => rand_arrayref() ) };
}
if(defined $spec->{max}) {
push @tests, { %{$foundation}, ( $field => rand_arrayref($spec->{max} - 1) ) }; # just inside
if((defined $spec->{min}) && ($spec->{'min'} != $spec->{'max'})) {
push @tests, { %{$foundation}, ( $field => rand_arrayref($spec->{max}) ) }; # border
}
}
} else {
die("TODO: transform type $type for test case");
}
}
if($config{dedup}) {
@tests = @{_dedup_cases(\@tests)};
}
( run in 0.942 second using v1.01-cache-2.11-cpan-e1769b4cff6 )