-# 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.
-while (my ($k, $g) = each %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 @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)