summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorJean Delvare <jdelvare@suse.de>2013-12-20 22:36:29 +0100
committerJean Delvare <jdelvare@suse.de>2013-12-20 22:36:29 +0100
commitc0b75c03892e72d491dcbe448ff95c3ead43ff8b (patch)
treedc5fcf1fcc9e4cde647def5503224a68eae839e0 /test
parent0b191eec5dd6cdb8b74d92a34bd5f0d0261b0009 (diff)
downloadquilt-c0b75c03892e72d491dcbe448ff95c3ead43ff8b.tar.gz
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.
Diffstat (limited to 'test')
-rwxr-xr-xtest/run16
-rw-r--r--test/tester.test25
2 files changed, 36 insertions, 5 deletions
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 = <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