mirror of
https://git.savannah.gnu.org/git/coreutils.git
synced 2025-08-08 18:22:09 +03:00
New keywords, ENV and ENV_DEL, to support tests/misc/date.
This commit is contained in:
@@ -9,14 +9,15 @@ use FileHandle;
|
|||||||
use File::Compare qw(compare);
|
use File::Compare qw(compare);
|
||||||
|
|
||||||
@ISA = qw(Exporter);
|
@ISA = qw(Exporter);
|
||||||
($VERSION = '$Revision: 1.1 $ ') =~ tr/[0-9].//cd;
|
($VERSION = '$Revision: 1.2 $ ') =~ tr/[0-9].//cd;
|
||||||
@EXPORT = qw (run_tests);
|
@EXPORT = qw (run_tests);
|
||||||
|
|
||||||
my $debug = $ENV{DEBUG};
|
my $debug = $ENV{DEBUG};
|
||||||
|
|
||||||
my @Types = qw (IN OUT ERR AUX CMP EXIT PRE POST OUT_SUBST ERR_SUBST);
|
my @Types = qw (IN OUT ERR AUX CMP EXIT PRE POST OUT_SUBST ERR_SUBST ENV ENV_DEL);
|
||||||
my %Types = map {$_ => 1} @Types;
|
my %Types = map {$_ => 1} @Types;
|
||||||
my %Zero_one_type = map {$_ => 1} qw (OUT ERR EXIT PRE POST OUT_SUBST ERR_SUBST);
|
my %Zero_one_type = map {$_ => 1}
|
||||||
|
qw (OUT ERR EXIT PRE POST OUT_SUBST ERR_SUBST ENV);
|
||||||
my $srcdir = $ENV{srcdir};
|
my $srcdir = $ENV{srcdir};
|
||||||
my $Global_count = 1;
|
my $Global_count = 1;
|
||||||
|
|
||||||
@@ -61,6 +62,11 @@ defined $ENV{DJDIR}
|
|||||||
# For example, in rm/fail-2eperm, we have to account for three different
|
# For example, in rm/fail-2eperm, we have to account for three different
|
||||||
# diagnostics: Operation not permitted, Not owner, and Permission denied.
|
# diagnostics: Operation not permitted, Not owner, and Permission denied.
|
||||||
# {EXIT => N} expect exit status of cmd to be N
|
# {EXIT => N} expect exit status of cmd to be N
|
||||||
|
# {ENV => 'VAR=val ...'}
|
||||||
|
# Prepend 'VAR=val ...' to the command that we execute via `system'.
|
||||||
|
# {ENV_DEL => 'VAR'}
|
||||||
|
# Remove VAR from the environment just before running the corresponding
|
||||||
|
# command, and restore any value just afterwards.
|
||||||
#
|
#
|
||||||
# There may be many input file specs. File names from the input specs
|
# There may be many input file specs. File names from the input specs
|
||||||
# are concatenated in order on the command line.
|
# are concatenated in order on the command line.
|
||||||
@@ -253,6 +259,8 @@ sub run_tests ($$$$$)
|
|||||||
my @args;
|
my @args;
|
||||||
my $io_spec;
|
my $io_spec;
|
||||||
my %seen_type;
|
my %seen_type;
|
||||||
|
my @env_delete;
|
||||||
|
my $env_prefix = '';
|
||||||
foreach $io_spec (@$t)
|
foreach $io_spec (@$t)
|
||||||
{
|
{
|
||||||
if (!ref $io_spec)
|
if (!ref $io_spec)
|
||||||
@@ -272,7 +280,7 @@ sub run_tests ($$$$$)
|
|||||||
die "$program_name: $test_name: invalid key `$type' in test spec\n"
|
die "$program_name: $test_name: invalid key `$type' in test spec\n"
|
||||||
if ! $Types{$type};
|
if ! $Types{$type};
|
||||||
|
|
||||||
# Make sure there's no more than one of OUT, ERR, EXIT.
|
# Make sure there's no more than one of OUT, ERR, EXIT, etc.
|
||||||
die "$program_name: $test_name: more than one $type spec\n"
|
die "$program_name: $test_name: more than one $type spec\n"
|
||||||
if $Zero_one_type{$type} and $seen_type{$type}++;
|
if $Zero_one_type{$type} and $seen_type{$type}++;
|
||||||
|
|
||||||
@@ -340,6 +348,18 @@ sub run_tests ($$$$$)
|
|||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($type eq 'ENV')
|
||||||
|
{
|
||||||
|
$env_prefix = "$val ";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($type eq 'ENV_DEL')
|
||||||
|
{
|
||||||
|
push @env_delete, $val;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
my $file = _process_file_spec ($program_name, $test_name, $val,
|
my $file = _process_file_spec ($program_name, $test_name, $val,
|
||||||
$type, \@junk_files);
|
$type, \@junk_files);
|
||||||
|
|
||||||
@@ -390,9 +410,27 @@ sub run_tests ($$$$$)
|
|||||||
$actual{ERR} = "$test_name.E";
|
$actual{ERR} = "$test_name.E";
|
||||||
push @junk_files, $actual{OUT}, $actual{ERR};
|
push @junk_files, $actual{OUT}, $actual{ERR};
|
||||||
my @cmd = ($prog, @args, "> $actual{OUT}", "2> $actual{ERR}");
|
my @cmd = ($prog, @args, "> $actual{OUT}", "2> $actual{ERR}");
|
||||||
my $cmd_str = join ' ', @cmd;
|
my $cmd_str = $env_prefix . join (' ', @cmd);
|
||||||
|
|
||||||
|
# Delete from the environment any symbols specified by syntax
|
||||||
|
# like this: {ENV_DEL => 'TZ'}.
|
||||||
|
my %pushed_env;
|
||||||
|
foreach my $env_sym (@env_delete)
|
||||||
|
{
|
||||||
|
my $val = delete $ENV{$env_sym};
|
||||||
|
defined $val
|
||||||
|
and $pushed_env{$env_sym} = $val;
|
||||||
|
}
|
||||||
|
|
||||||
warn "Running command: `$cmd_str'\n" if $debug;
|
warn "Running command: `$cmd_str'\n" if $debug;
|
||||||
my $rc = 0xffff & system $cmd_str;
|
my $rc = 0xffff & system $cmd_str;
|
||||||
|
|
||||||
|
# Restore any environment setting we changed via a deletion.
|
||||||
|
foreach my $env_sym (keys %pushed_env)
|
||||||
|
{
|
||||||
|
$ENV{$env_sym} = $pushed_env{$env_sym};
|
||||||
|
}
|
||||||
|
|
||||||
if ($rc == 0xff00)
|
if ($rc == 0xff00)
|
||||||
{
|
{
|
||||||
warn "$program_name: test $test_name failed: command failed:\n"
|
warn "$program_name: test $test_name failed: command failed:\n"
|
||||||
|
Reference in New Issue
Block a user