#!/usr/bin/perl
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
print <<EOD
<html>
<head>
<title>reftest output</title>
<style type=
"text/css">
/* must be in this order */
.PASS { background-color: green; }
.FAIL { background-color: red; }
.XFAIL { background-color:
#999300; }
.WEIRDPASS { background-color:
#00FFED; }
.PASSRANDOM { background-color:
#598930; }
.FAILRANDOM, td.XFAILRANDOM { background-color:
#99402A; }
.FAILIMAGES { }
img { margin: 5px; width: 80px; height: 100px; }
img.testresult { border: 2px solid red; }
img.testref { border: 2px solid green; }
a { color: inherit; }
.always { display: inline ! important; }
</style>
</head>
<body>
<p>
<span class=
"PASS always"><input type=
"checkbox" checked=
"true" onclick=
"var s = document.styleSheets[0].cssRules[0].style; if (s.display == 'none') s.display = null; else s.display = 'none';">PASS</span>
<span class=
"FAIL always"><input type=
"checkbox" checked=
"true" onclick=
"var s = document.styleSheets[0].cssRules[1].style; if (s.display == 'none') s.display = null; else s.display = 'none';">UNEXPECTED FAIL</span>
<span class=
"XFAIL always"><input type=
"checkbox" checked=
"true" onclick=
"var s = document.styleSheets[0].cssRules[2].style; if (s.display == 'none') s.display = null; else s.display = 'none';">KNOWN FAIL</span>
<span class=
"WEIRDPASS always"><input type=
"checkbox" checked=
"true" onclick=
"var s = document.styleSheets[0].cssRules[3].style; if (s.display == 'none') s.display = null; else s.display = 'none';">UNEXPECTED PASS</span>
<span class=
"PASSRANDOM always"><input type=
"checkbox" checked=
"true" onclick=
"var s = document.styleSheets[0].cssRules[4].style; if (s.display == 'none') s.display = null; else s.display = 'none';">PASS (Random)</span>
<span class=
"FAILRANDOM always"><input type=
"checkbox" checked=
"true" onclick=
"var s = document.styleSheets[0].cssRules[5].style; if (s.display == 'none') s.display = null; else s.display = 'none';">FAIL (Random)</span>
</p>
<table>
EOD
;
sub readcleanline {
my $l = <>;
chomp $l;
chop $l
if ($l =~ /\r$/);
return $l;
}
sub do_html {
my ($l) = @_;
$l =~ s,(file:[^ ]*),<a href=
"\1">\1</a>,g;
$l =~ s,(data:[^ ]*),<a href=
"\1">\1</a>,g;
return $l;
}
$l = 0;
while (<>) {
$l++;
next unless /^REFTEST/;
chomp;
chop
if /\r$/;
s/^REFTEST *//;
my $randomresult = 0;
if (/EXPECTED RANDOM/) {
s/\(EXPECTED RANDOM\)//;
$randomresult = 1;
}
if (/^TEST-PASS \| (.*)$/) {
my $class = $randomresult ?
"PASSRANDOM" :
"PASS";
print
'<tr><td class="' . $class .
'">' . do_html($1) .
"</td></tr>\n";
} elsif (/^TEST-UNEXPECTED-(....) \| (.*)$/) {
if ($randomresult) {
die
"Error on line $l: UNEXPECTED with test marked random?!";
}
my $class = ($1 eq
"PASS") ?
"WEIRDPASS" :
"FAIL";
print
'<tr><td class="' . $class .
'">' . do_html($2) .
"</td></tr>\n";
# UNEXPECTED results can be followed by one or two images
$testline = &readcleanline;
print
'<tr><td class="FAILIMAGES">';
if ($testline =~ /REFTEST IMAGE: (data:.*)$/) {
print
'<a href="' . $1 .
'"><img class="testresult" src="' . $1 .
'"></a>';
} elsif ($testline =~ /REFTEST IMAGE 1 \(TEST\): (data:.*)$/) {
$refline = &readcleanline;
print
'<a href="' . $1 .
'"><img class="testresult" src="' . $1 .
'"></a>';
{
die
"Error on line $l" unless $refline =~ /REFTEST IMAGE 2 \(REFERENCE\): (data:.*)$/;
print
'<a href="' . $1 .
'"><img class="testref" src="' . $1 .
'"></a>';
}
}
else {
die
"Error on line $l";
}
print
"</td></tr>\n";
} elsif (/^TEST-KNOWN-FAIL \| (.*$)/) {
my $class = $randomresult ?
"XFAILRANDOM" :
"XFAIL";
print
'<tr><td class="' . $class .
'">' . do_html($1) .
"</td></tr>\n";
}
else {
print STDERR
"Unknown Line: " . $_ .
"\n";
print
"<tr><td><pre>" . $_ .
"</pre></td></tr>\n";
}
}
print <<EOD
</table>
</body>
</html>
EOD
;