reftest-to-html.pl (4115B)
1 #!/usr/bin/perl 2 3 # This Source Code Form is subject to the terms of the Mozilla Public 4 # License, v. 2.0. If a copy of the MPL was not distributed with this 5 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 6 7 print <<EOD 8 <html> 9 <head> 10 <title>reftest output</title> 11 <style type="text/css"> 12 /* must be in this order */ 13 .PASS { background-color: green; } 14 .FAIL { background-color: red; } 15 .XFAIL { background-color: #999300; } 16 .WEIRDPASS { background-color: #00FFED; } 17 .PASSRANDOM { background-color: #598930; } 18 .FAILRANDOM, td.XFAILRANDOM { background-color: #99402A; } 19 20 .FAILIMAGES { } 21 img { margin: 5px; width: 80px; height: 100px; } 22 img.testresult { border: 2px solid red; } 23 img.testref { border: 2px solid green; } 24 a { color: inherit; } 25 .always { display: inline ! important; } 26 </style> 27 </head> 28 <body> 29 <p> 30 <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> 31 <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> 32 <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> 33 <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> 34 <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> 35 <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> 36 </p> 37 <table> 38 EOD 39 ; 40 41 sub readcleanline { 42 my $l = <>; 43 chomp $l; 44 chop $l if ($l =~ /\r$/); 45 return $l; 46 } 47 48 sub do_html { 49 my ($l) = @_; 50 51 $l =~ s,(file:[^ ]*),<a href="\1">\1</a>,g; 52 $l =~ s,(data:[^ ]*),<a href="\1">\1</a>,g; 53 54 return $l; 55 } 56 57 $l = 0; 58 59 while (<>) { 60 $l++; 61 next unless /^REFTEST/; 62 63 chomp; 64 chop if /\r$/; 65 66 s/^REFTEST *//; 67 68 my $randomresult = 0; 69 if (/EXPECTED RANDOM/) { 70 s/\(EXPECTED RANDOM\)//; 71 $randomresult = 1; 72 } 73 74 if (/^TEST-PASS \| (.*)$/) { 75 my $class = $randomresult ? "PASSRANDOM" : "PASS"; 76 print '<tr><td class="' . $class . '">' . do_html($1) . "</td></tr>\n"; 77 } elsif (/^TEST-UNEXPECTED-(....) \| (.*)$/) { 78 if ($randomresult) { 79 die "Error on line $l: UNEXPECTED with test marked random?!"; 80 } 81 my $class = ($1 eq "PASS") ? "WEIRDPASS" : "FAIL"; 82 print '<tr><td class="' . $class . '">' . do_html($2) . "</td></tr>\n"; 83 84 # UNEXPECTED results can be followed by one or two images 85 $testline = &readcleanline; 86 87 print '<tr><td class="FAILIMAGES">'; 88 89 if ($testline =~ /REFTEST IMAGE: (data:.*)$/) { 90 print '<a href="' . $1 . '"><img class="testresult" src="' . $1 . '"></a>'; 91 } elsif ($testline =~ /REFTEST IMAGE 1 \(TEST\): (data:.*)$/) { 92 $refline = &readcleanline; 93 print '<a href="' . $1 . '"><img class="testresult" src="' . $1 . '"></a>'; 94 { 95 die "Error on line $l" unless $refline =~ /REFTEST IMAGE 2 \(REFERENCE\): (data:.*)$/; 96 print '<a href="' . $1 . '"><img class="testref" src="' . $1 . '"></a>'; 97 } 98 99 } else { 100 die "Error on line $l"; 101 } 102 103 print "</td></tr>\n"; 104 } elsif (/^TEST-KNOWN-FAIL \| (.*$)/) { 105 my $class = $randomresult ? "XFAILRANDOM" : "XFAIL"; 106 print '<tr><td class="' . $class . '">' . do_html($1) . "</td></tr>\n"; 107 } else { 108 print STDERR "Unknown Line: " . $_ . "\n"; 109 print "<tr><td><pre>" . $_ . "</pre></td></tr>\n"; 110 } 111 } 112 113 print <<EOD 114 </table> 115 </body> 116 </html> 117 EOD 118 ;