summaryrefslogtreecommitdiff
path: root/gen-testsuite-part
diff options
context:
space:
mode:
Diffstat (limited to 'gen-testsuite-part')
-rwxr-xr-xgen-testsuite-part52
1 files changed, 35 insertions, 17 deletions
diff --git a/gen-testsuite-part b/gen-testsuite-part
index 57c1c6331..6ed193186 100755
--- a/gen-testsuite-part
+++ b/gen-testsuite-part
@@ -270,37 +270,55 @@ print <<EOF;
EOF
-# FIXME: the following is not really right, since cannot compose wrapping
-# of tests matching more than one condition. Still, there should be no
-# such test at the moment, so the limitation is (temporarily) acceptable.
-foreach my $g (values %test_generators)
+# A test script '$test' can possibly match more than one condition, so
+# for each tests we need to keep a list of generated wrapper tests.
+# Since what defines these wrapper scripts is the set of initializations
+# that are issued before sourcing the original, wrapped tests, these
+# initializations is what we put in our list entries.
+# The list will be saved in the hash entry '$wrapper_setups{$test}'.
+my %wrapper_setups = ();
+foreach my $test (@all_tests)
{
- my @wrapped_tests = grep {
- line_match ($g->{line_matcher}, $_)
- && (!$g->{line_rejecter} || !line_match ($g->{line_rejecter}, $_))
- } @all_tests;
- foreach my $wrapped_test (@wrapped_tests)
+ my @setups = ('');
+ foreach my $x (values %test_generators)
+ {
+ next
+ if not line_match $x->{line_matcher}, $test;
+ next
+ if $x->{line_rejecter} and line_match $x->{line_rejecter}, $test;
+ @setups = map { ($_, "$_\n$x->{shell_setup_code}") } @setups;
+ }
+ @setups = grep { $_ ne '' } @setups;
+ $wrapper_setups{$test} = \@setups if @setups;
+ }
+# And now create all the wrapper tests.
+while (my ($wrapped_test, $setup_list) = each %wrapper_setups)
+ {
+ (my $base = $wrapped_test) =~ s/\.([^.]*)$//;
+ my $suf = $1 or die "$me: test '$wrapped_test' lacks a suffix\n";
+ my $count = 0;
+ foreach my $setup (@$setup_list)
{
- (my $base = $wrapped_test) =~ s/\.([^.]*)$//;
- my $suf = $1 or die "$me: test '$wrapped_test' lacks a suffix\n";
- my $wrapper_test = "$base-w.$suf";
+ $count++;
+ my $wbase = "$base-w" . ($count > 1 ? $count : '');
+ my $wrapper_test = "$wbase.$suf";
# Register wrapper test as "autogenerated".
push @generated_tests, $wrapper_test;
# Create wrapper test.
atomic_write $wrapper_test,
sub { write_wrapper_script $_[0], $wrapped_test,
- $g->{shell_setup_code} },
+ $setup },
0555;
# The generated test works by sourcing the original test, so that
# it has to be re-run every time that changes ...
- print "$base-w.log: $wrapped_test\n";
+ print "$wbase.log: $wrapped_test\n";
# ... but also every time the prerequisites of the wrapped test
# changes. The simpler (although suboptimal) way to do so is to
- # ensure that the wrapped tests runs before the wrappee one (in
- # case it needs to be re-run *at all*.
+ # ensure that the wrapped tests runs before the wrapper one (in
+ # case it needs to be re-run *at all*).
# FIXME: we could maybe refactor the script to find a more
# granular way to express such implicit dependencies.
- print "$base-w.log: $base.log\n";
+ print "$wbase.log: $base.log\n";
}
}