clm5.0/bld/unit_testers/xFail/wrapClmTests.pl
2025-01-12 20:48:10 +08:00

129 lines
3.7 KiB
Perl
Executable File

#!/usr/bin/env perl
#-# =========================================================================================
=head1 wrapClmTest.pl
=head1 Overview
This is a wrapper script that is called from test_driver.sh for either interactive or batch
tests. It calls the CTOR for the xFail::expectedFail.pm module and also parses the td*.status
file to create a new file with xFails listed.
It takes the following arguments:
numberOfTests -> number of tests from test_driver.sh
statusFile -> name of the td.<pid>.status file
callingScript -> name of script calling this. For test_driver.sh it may be one of:
1) test_driver.sh-i for interactive tests
2) test_driver.sh for batch tests
=head1 Notes
This script may be run standalone which is useful for testing purposes.
=cut
#-# =========================================================================================
use strict;
use Getopt::Long;
use English;
use Cwd;
use Scalar::Util qw(looks_like_number);
my $DEBUG=0;
sub usage {
die <<EOF;
SYNOPSIS
wrapClmTests [options]
Usually called from test_driver.sh. Scans the td.*.status file and checks for expected test failures.
OPTIONS
-help [or -h] Print usage to STDOUT.
-numberOfTests "numberOfTests"
-statusFile "statusFile" Name of status file
-callingScript "callingScript" Name of calling script
EOF
}
#
# Process command-line options.
#
my %opts = ( help => 0,
numberOfTests => undef,
statusFile => undef,
callingScript => undef,
);
GetOptions(
"h|help" => \$opts{'help'},
"numberOfTests=s" => \$opts{'numberOfTests'},
"statusFile=s" => \$opts{'statusFile'},
"callingScript=s" => \$opts{'callingScript'},
) or usage();
# Give usage message.
usage() if $opts{'help'};
my $statFoo = undef;
my $nTests = undef;
my $script= undef;
if (defined($opts{'statusFile'})) {
$statFoo = $opts{'statusFile'};
}
if (defined($opts{'numberOfTests'})) {
$nTests = $opts{'numberOfTests'};
}
if (defined($opts{'callingScript'})) {
$script = $opts{'callingScript'};
}
my ( $self ) = @_;
#Figure out where configure directory is and where can use the XML/Lite module from
my $ProgName;
($ProgName = $PROGRAM_NAME) =~ s!(.*)/!!; # name of program
my $ProgDir = $1; # name of directory where program lives
my $cwd = getcwd(); # current working directory
my $cfgdir;
if ($ProgDir) { $cfgdir = $ProgDir; }
else { $cfgdir = $cwd; }
#-----------------------------------------------------------------------------------------------
# Add $cfgdir to the list of paths that Perl searches for modules
#-----------------------------------------------------------------------------------------------
my @dirs = ( $cfgdir,
"$cfgdir/../",
"$cfgdir/../../../../../cime/utils/perl5lib");
unshift @INC, @dirs;
my $result = eval "require expectedFail";
if ( ! defined($result) ) {
die <<"EOF";
** Cannot find perl module \"xFail/expectedFail.pm\" from directories: @dirs **
EOF
}
#_# ====================================
#_# setup work complete. Now parse file
#_# ====================================
if ($DEBUG) {
print (" wrapClmTests.pl:: calling script $script \n");
print (" wrapClmTests.pl:: number of tests $nTests \n");
print (" wrapClmTests.pl:: processing $statFoo \n");
}
#_# compGen not used for CLM batch or interactive tests, but we use "compare" as the default in this case
my $compGen="compare";
my $xFail = xFail::expectedFail->new($script,$compGen,$nTests);
$xFail->parseOutputCLM($statFoo);
exit(0);