diff --git a/mysql-test/collections/README.experimental b/mysql-test/collections/README.experimental index d06e55f1246..9eee2394423 100644 --- a/mysql-test/collections/README.experimental +++ b/mysql-test/collections/README.experimental @@ -11,7 +11,7 @@ The syntax is as follows: 2) Empty lines and lines starting with a hash (#) are ignored. -3) If any other line contains a black followed by a hash (#), the hash +3) If any other line contains a blank followed by a hash (#), the hash and any subsequent characters are ignored. 4) The full test case name including the suite and execution mode diff --git a/mysql-test/lib/mtr_report.pm b/mysql-test/lib/mtr_report.pm index d1cae6324cb..73401dc4b33 100644 --- a/mysql-test/lib/mtr_report.pm +++ b/mysql-test/lib/mtr_report.pm @@ -109,10 +109,10 @@ sub mtr_report_test ($) { my ($tinfo)= @_; my $test_name = _mtr_report_test_name($tinfo); - my $comment= $tinfo->{'comment'}; - my $logfile= $tinfo->{'logfile'}; - my $warnings= $tinfo->{'warnings'}; - my $result= $tinfo->{'result'}; + my $comment= $tinfo->{'comment'}; + my $logfile= $tinfo->{'logfile'}; + my $warnings= $tinfo->{'warnings'}; + my $result= $tinfo->{'result'}; if ($result eq 'MTR_RES_FAILED'){ @@ -123,14 +123,20 @@ sub mtr_report_test ($) { { # Find out if this test case is an experimental one, so we can treat # the failure as an expected failure instead of a regression. - for my $exp ( @$::opt_experimental ) { + for my $exp ( @$::experimental_test_cases ) { if ( $exp ne $test_name ) { + # if the expression is not the name of this test case, but has + # an asterisk at the end, determine if the characters up to + # but excluding the asterisk are the same if ( $exp ne "" && substr($exp, -1, 1) eq "*" ) { $exp = substr($exp, 0, length($exp) - 1); if ( substr($test_name, 0, length($exp)) ne $exp ) { + # no match, try next entry next; } + # if yes, fall through to set the exp-fail status } else { + # no match, try next entry next; } } diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 8e772279aa3..89a6d89687a 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -170,6 +170,7 @@ my $config; # The currently running config my $current_config_name; # The currently running config file template our $opt_experimental; +our $experimental_test_cases; my $baseport; my $opt_build_thread= $ENV{'MTR_BUILD_THREAD'} || "auto"; @@ -963,24 +964,29 @@ sub command_line_setup { if ( $opt_experimental ) { - if ( open(FILE, "<", $opt_experimental) ) { - mtr_report("Using experimental file: $opt_experimental"); - $opt_experimental = []; - while() { - chomp; - s/( +|^)#.*$//; - s/^ +//; - s/ +$//; - if ( $_ eq "" ) { - next; - } - print " - $_\n"; - push @$opt_experimental, $_; + # read the list of experimental test cases from the file specified on + # the command line + open(FILE, "<", $opt_experimental) or mtr_error("Can't read experimental file: $opt_experimental"); + mtr_report("Using experimental file: $opt_experimental"); + $experimental_test_cases = []; + while() { + chomp; + # remove comments (# foo) at the beginning of the line, or after a + # blank at the end of the line + s/( +|^)#.*$//; + # remove whitespace + s/^ +//; + s/ +$//; + # if nothing left, don't need to remember this line + if ( $_ eq "" ) { + next; } - close FILE; - } else { - mtr_error("Can't read experimental file: $opt_experimental"); + # remember what is left as the name of another test case that should be + # treated as experimental + print " - $_\n"; + push @$experimental_test_cases, $_; } + close FILE; } foreach my $arg ( @ARGV )