Be sure to remove all the code that is no longer required because of these changes.
(Note the script continues onto the next page.)
#! /usr/bin/perl -w
# run a collection of tests on a specified program from a file of test data
# syntax is: driver progname testfile
# or: prove driver :: progname testfile
# the expected format of the test data file is as follows
# each test case is on a line of its own , whitespace delimited, consisting of
# the arguments to the program,
# the comparison type to be used in the test
# the expected return value
# the expected output (cannot contain whitespace)
# the name of the test case
use strict;
use Switch;
my $args; # command line arguments to be sent to the program under test
my $progname; # name of the program to test
my $testfile; # name of the file containing the test cases
my @productTestSet; # array of test cases (to be filled from the testfile)
my $numTests; # total number of tests (twice the array size)
# process the command line arguments sent to the test driver,
# if valid then read the test cases from the file
BEGIN {
$args = scalar @ARGV;
if ($args != 2) {
print "Expected use $0 programName testFile\n";
exit 0;
}
$progname = $ARGV[0];
$testfile = $ARGV[1];
open (my $fptr, "<", "$testfile")
or die "unable to open data file $testfile\n";
while (my $line = <$fptr>) {
chomp $line; # drop the newline
# split the line into words (assumes space delimited),
my @tcase = split(/\s+/, $line);
# add the test case to the end of the array of test cases
push (@productTestSet, \@tcase);
}
close($fptr);
# compute the total number of test cases, two per array case
$numTests = scalar @productTestSet;
$numTests = 2 * $numTests;
}
use Test::More tests => $numTests;
print "$numTests tests\n";
# process each test case in turn
foreach my $testCase (@productTestSet) {
my $testname = pop @$testCase;
my $exp = pop @$testCase;
my $expret = pop @$testCase;
my $ttype = pop @$testCase;
my $output = `$progname @$testCase`;
my $return = $?;
if ($return == -1) {
print "Diagnostic: failed to execute\n";
} elsif (($return & 128) > 0) {
$return = $return & 127;
print "Diagnostic: core dumped, status $return\n";
} else {
$return = ($return >> 8);
}
my $outp = chomp($output); # strip \n (if any) off the output
switch ($ttype) {
case "ok" { ok($output, $testname); }
case "is" { is($output, $exp, $testname); }
case "isnt" { isnt($output, $exp, $testname); }
case "like" { like($output, qr/$exp/, $testname); }
case "unlike" { unlike($output, qr/$exp/, $testname); }
else { cmp_ok($output, $ttype, $exp, $testname); }
}
is($return, $expret, $testname);
} |