From c0b75c03892e72d491dcbe448ff95c3ead43ff8b Mon Sep 17 00:00:00 2001 From: Jean Delvare Date: Fri, 20 Dec 2013 22:36:29 +0100 Subject: test/run: Fix variable substitution Variable substitution on command lines was happening too early so setting a variable only took effect with the second next line of the test case. Additionally, there was no check that the environment variable was actually set. This resulted in perl warnings during the test suite if a variable is ever used before having been set. Fix both issues. Also add a test case for this feature, to avoid a future breakage. Some of the tester script features are tricky and easy to get wrong, so test them independently of quilt in a dedicated test case. --- test/run | 16 +++++++++++----- test/tester.test | 25 +++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 test/tester.test (limited to 'test') diff --git a/test/run b/test/run index 2d1fe9a..64279ec 100755 --- a/test/run +++ b/test/run @@ -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 = )) { $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 = )) { # Substitute %{?} with the last command's status $line =~ s[%{\?}][$last_status]eg; - $prog = [ map { s/\\(.)/$1/g; $_ } split /(? +$ 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 -- cgit