Archive-Par
view release on metacpan or search on metacpan
=head2 simple_run_test
This is designed to simplify the job of running a program, and testing the
output. It performs 2+n tests; that the command executed without error, that
the n files named in the C<checkfiles> argument are each as expected, and that
no other files exist.
All files in the current directory are wiped after the test in preparation for
the next test.
=over 4
=item ARGUMENTS
The arguments are considered as name/value pairs.
=over 4
=item runargs
B<Mandatory>. This is an arrayref; as for the runargs argument to
L<runcheck|/runcheck>.
=item name
B<Mandatory>. The name to use in error messages.
=item checkfiles
This is an arrayref of files to check. The named files are considered
relative to the working directory, and are checked against files taken
relative to the F<testref> directory of the build. Therefore, absolute file
names are non-sensical, and will raise an exception.
=item errref
A ref to a scalar potentially containing any error output. Typically, the
stderr of the command run is redirected to this by the runargs argument.
=item testref_subdir
A subdirectory of the testref directory in which to find the files to check
against.
=back
=item RETURNS
I<None>
However, 2+n tests are performed, with ok/not ok sent to stdout.
=back
=cut
sub simple_run_test {
my (%arg) = @_;
die sprintf("%s: missing mandatory argument: %s\n", (caller(0))[3], $_)
for grep ! exists $arg{$_}, qw( runargs name );
${$arg{errref}} = ''
if exists $arg{errref};
my $runok = runcheck(@arg{qw(runargs name erref)});
ok $runok, 1, $arg{name};
my $ref_dir = (exists $arg{testref_subdir} ?
catdir(REF_DIR, $arg{testref_subdir}) :
REF_DIR);
if ( exists $arg{checkfiles} ) {
for (@{$arg{checkfiles}}) {
my $target = catfile($ref_dir, $_);
if ( -e $target ) {
ok(compare($_, $target), 0, "$arg{name}: check file $_");
} else {
ok 0, 1, "$arg{name}: missing reference file $_";
}
}
}
ok(only_files($arg{checkfiles}), 1, "$arg{name}: no extra files");
# Clean up files for next test.
opendir my $dir, '.';
unlink grep !/^\.\.?$/, readdir $dir;
closedir $dir;
}
# -------------------------------------
=head2 only_files
=over 4
=item ARGUMENTS
=over 4
=item expect
Arrayref of names of files to expect to exist.
=back
=item RETURNS
=over 4
=item ok
1 if exactly expected files exist, false otherwise.
=back
=back
=cut
( run in 2.270 seconds using v1.01-cache-2.11-cpan-0bb4e1dffa6 )