summaryrefslogtreecommitdiffstats
path: root/test/run
diff options
context:
space:
mode:
Diffstat (limited to 'test/run')
-rwxr-xr-xtest/run21
1 files changed, 20 insertions, 1 deletions
diff --git a/test/run b/test/run
index 40b3565..49d1c2d 100755
--- a/test/run
+++ b/test/run
@@ -61,9 +61,22 @@ my $prog_line = 0;
my ($tests, $failed) = (0,0);
my $lineno;
my $width = ($ENV{COLUMNS} || 80) >> 1;
+my $origdir = getcwd;
+my $workdir = "d.$$";
+
+# Create a dedicated working directory
+mkdir $workdir or die;
+chdir $workdir or die;
+$ENV{PWD} = getcwd;
+
+if (defined $ARGV[0]) {
+ open(SOURCE, "$origdir/$ARGV[0]");
+} else {
+ *SOURCE = *STDIN;
+}
for (;;) {
- my $line = <>; $lineno++;
+ my $line = <SOURCE>; $lineno++;
if (defined $line) {
# Substitute %VAR and %{VAR} with environment variables.
$line =~ s[%(\w+)][$ENV{$1}]eg;
@@ -93,6 +106,12 @@ for (;;) {
}
}
+close(SOURCE);
+
+# Clean up the mess
+chdir $origdir or die;
+system "rm -rf $workdir";
+
my $status = sprintf("%d commands (%d passed, %d failed)",
$tests, $tests-$failed, $failed);
if (isatty(fileno(STDOUT))) {