• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/perl
2#
3# Copyright (C) 2006 Daniel Berrange
4#
5# This program is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation; either version 2 of the License, or
8# (at your option) any later version.
9#
10# This program is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13# GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program; if not, write to the Free Software
17# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
19
20print <<EOF;
21<html>
22<head>
23<title>Coverage report for $ARGV[0]</title>
24<style type="text/css">
25          span.perfect {
26            background: rgb(0,255,0);
27          }
28          span.terrible {
29            background: rgb(255,0,0);
30          }
31</style>
32</head>
33<body>
34<h1>Coverage report for $ARGV[0]</h1>
35
36<pre>
37EOF
38
39
40while (<>) {
41    s/&/&amp;/g;
42    s/</&lt;/g;
43    s/>/&gt;/g;
44
45    if (/^\s*function (\S+) called (\d+) returned \d+% blocks executed \d+%/) {
46	my $class = $2 > 0 ? "perfect" : "terrible";
47	$_ = "<span class=\"$class\" id=\"" . $1 . "\">$_</span>";
48    } elsif (/^\s*branch\s+\d+\s+taken\s+(\d+)%\s+.*$/) {
49	my $class = $1 > 0 ? "perfect" : "terrible";
50	$_ = "<span class=\"$class\">$_</span>";
51    } elsif (/^\s*branch\s+\d+\s+never executed.*$/) {
52	my $class = "terrible";
53	$_ = "<span class=\"$class\">$_</span>";
54    } elsif (/^\s*call\s+\d+\s+never executed.*$/) {
55	my $class = "terrible";
56	$_ = "<span class=\"$class\">$_</span>";
57    } elsif (/^\s*call\s+\d+\s+returned\s+(\d+)%.*$/) {
58	my $class = $1 > 0 ? "perfect" : "terrible";
59	$_ = "<span class=\"$class\">$_</span>";
60    }
61
62    print;
63}
64
65print <<EOF;
66</pre>
67</body>
68</html>
69EOF
70