#!/usr/bin/perl # # Copyright © 2005 Mozilla Corporation # # Permission to use, copy, modify, distribute, and sell this software # and its documentation for any purpose is hereby granted without # fee, provided that the above copyright notice appear in all copies # and that both that copyright notice and this permission notice # appear in supporting documentation, and that the name of # Mozilla Corporation not be used in advertising or publicity pertaining to # distribution of the software without specific, written prior # permission. Mozilla Corporation makes no representations about the # suitability of this software for any purpose. It is provided "as # is" without express or implied warranty. # # MOZILLA CORPORTAION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS # SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND # FITNESS, IN NO EVENT SHALL MOZILLA CORPORATION BE LIABLE FOR ANY SPECIAL, # INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER # RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION # OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR # IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # Author: Vladimir Vukicevic # ## ## Takes all the *.log files in the current directory and spits out ## html to stdout that can be used to view all the test results at once. ## # some config options: # show reference images my $config_show_ref = 0; # show fail images my $config_show_fail = 1; # show all results, even passes my $config_show_all = 0; # end of config options my $tests = {}; my $teststats = {}; foreach (<*.log>) { (open LOG, "$_") || next; while () { next unless /^TEST: (.*) TARGET: (.*) FORMAT: (.*) RESULT: (.*)$/; $tests->{$1} = {} unless $tests->{$1}; $tests->{$1}->{$2} = {} unless $tests->{$1}->{$2}; $tests->{$1}->{$2}->{$3} = $4; $teststats->{$2} = {"PASS" => 0, "FAIL" => 0, "XFAIL" => 0, "UNTESTED" => 0} unless $teststats->{$2}; ($teststats->{$2}->{$4})++; } close LOG; } my $targeth = {}; my $formath = {}; foreach my $testname (sort(keys %$tests)) { my $v0 = $tests->{$testname}; foreach my $targetname (sort(keys %$v0)) { my $v1 = $v0->{$targetname}; $targeth->{$targetname} = 1; foreach my $formatname (sort(keys %$v1)) { $formath->{$formatname} = 1; } } } my @targets = sort(keys %$targeth); my @formats = sort(keys %$formath); sub printl { print @_, "\n"; } printl ''; printl 'Cairo Test Results'; printl ''; printl ''; printl ''; print ''; print '' if $config_show_ref; foreach my $target (@targets) { print ''; } printl ''; print ''; print '' if $config_show_ref; foreach my $target (@targets) { print ''; } printl ''; sub testref { my ($test, $format, $rest) = @_; my $fmtstr = ""; if ($format eq "rgb24") { $fmtstr = "-rgb24"; } return "$test$fmtstr-ref.png"; } sub testfiles { my ($test, $target, $format, $rest) = @_; my $fmtstr = ""; if ($format eq "rgb24") { $fmtstr = "-rgb24"; } elsif ($format eq "argb32") { $fmtstr = "-argb32"; } return ("out" => "$test-$target$fmtstr-out.png", "diff" => "$test-$target$fmtstr-diff.png"); } foreach my $test (sort(keys %$tests)) { foreach my $format (@formats) { my $testline = ""; my $num_failed = 0; foreach my $target (@targets) { my $tgtdata = $tests->{$test}->{$target}; if ($tgtdata) { my $testres = $tgtdata->{$format}; if ($testres) { my %testfiles = testfiles($test, $target, $format); $testline .= ""; } else { $testline .= ''; } } else { $testline .= ''; } } my $testref = testref($test, $format); print ''; if ($config_show_ref) { print ""; } print $testline; print "\n"; } } print "
TestRef', $target, '
'; print '', $teststats->{$target}->{"PASS"}, '/'; print '', $teststats->{$target}->{"FAIL"}, '/'; print '', $teststats->{$target}->{"XFAIL"}, '/'; print '', $teststats->{$target}->{"UNTESTED"}; ''; print '
"; $stats{$target}{$testres}++; if ($testres eq "PASS") { if ($config_show_all) { $testline .= ""; } } elsif ($testres eq "FAIL") { $num_failed++; if ($config_show_fail || $config_show_all) { $testline .= ""; $testline .= "
"; $testline .= ""; } } elsif ($testres eq "XFAIL") { #nothing if ($config_show_all) { $testline .= ""; $testline .= "
"; $testline .= ""; } } $testline .= "
', "", $test, ' (', $format, ')
\n";