diff options
-rwxr-xr-x | test/run | 16 | ||||
-rw-r--r-- | test/tester.test | 25 |
2 files changed, 36 insertions, 5 deletions
@@ -81,18 +81,24 @@ if (defined $ARGV[0]) { *SOURCE = *STDIN; } +# Substitute %{VAR} with environment variables +sub substitute_vars($) +{ + my ($line) = @_; + $line =~ s[%{(\w+)}][defined $ENV{$1} ? $ENV{$1} : ""]eg; + return $line; +} + while (defined(my $line = <SOURCE>)) { $lineno++; - # Substitute %{VAR} with environment variables - $line =~ s[%{(\w+)}][$ENV{$1}]eg; # Collect input and output for the previous command if ($line =~ s/^\s*< ?//) { - push @$in, $line; + push @$in, substitute_vars($line); next; } if ($line =~ s/^\s*> ?//) { - push @$out, $line; + push @$out, substitute_vars($line); next; } @@ -108,7 +114,7 @@ while (defined(my $line = <SOURCE>)) { # Substitute %{?} with the last command's status $line =~ s[%{\?}][$last_status]eg; - $prog = [ map { s/\\(.)/$1/g; $_ } split /(?<!\\)\s+/, $line ]; + $prog = [ map { s/\\(.)/$1/g; $_ } split /(?<!\\)\s+/, substitute_vars($line) ]; $prog_line = $lineno; $in = []; $out = []; diff --git a/test/tester.test b/test/tester.test new file mode 100644 index 0000000..bc32e32 --- /dev/null +++ b/test/tester.test @@ -0,0 +1,25 @@ +# Test the testing code itself + +# Exported variables should be available immediately after being set +$ echo %{VAR} +> +$ export VAR=foo +$ echo %{VAR} +> foo +$ export VAR=bar +$ echo %{VAR} +> bar + +# Exported variables should survive accross commands and comments +$ true +$ echo %{VAR} +> bar + +# Test multiple use cases +$ echo "A %{VAR}%{VAR}ian walks into a %{VAR}" +> A barbarian walks into a bar + +# Test combined use and set +$ export PLACE=%{VAR}racks +$ echo %{PLACE} +> barracks |