blob: 3fe124b5c5e48050947ed00a4731cbc9b2dda4ca [file] [log] [blame]
<?xml version="1.0" encoding="utf-8"?>
<!--
#
# Copyright (C) 2006 Daniel Berrange
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="html"/>
<xsl:template match="coverage">
<html>
<head>
<title>Coverage report</title>
<style type="text/css">
tbody tr.odd td.label {
border-top: 1px solid rgb(128,128,128);
border-bottom: 1px solid rgb(128,128,128);
}
tbody tr.odd td.label {
background: rgb(200,200,200);
}
thead, tfoot {
background: rgb(60,60,60);
color: white;
font-weight: bold;
}
tr td.perfect {
background: rgb(0,255,0);
color: black;
}
tr td.excellant {
background: rgb(140,255,140);
color: black;
}
tr td.good {
background: rgb(160,255,0);
color: black;
}
tr td.poor {
background: rgb(255,160,0);
color: black;
}
tr td.bad {
background: rgb(255,140,140);
color: black;
}
tr td.terrible {
background: rgb(255,0,0);
color: black;
}
</style>
</head>
<body>
<h1>Coverage report</h1>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="functions">
<h2>Function coverage</h2>
<xsl:call-template name="content">
<xsl:with-param name="type" select="'function'"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="files">
<h2>File coverage</h2>
<xsl:call-template name="content">
<xsl:with-param name="type" select="'file'"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="content">
<xsl:param name="type"/>
<table>
<thead>
<tr>
<th>Name</th>
<th>Lines</th>
<th>Branches</th>
<th>Conditions</th>
<th>Calls</th>
</tr>
</thead>
<tbody>
<xsl:for-each select="entry">
<xsl:call-template name="entry">
<xsl:with-param name="type" select="$type"/>
<xsl:with-param name="class">
<xsl:choose>
<xsl:when test="position() mod 2">
<xsl:text>odd</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>even</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
</tbody>
<tfoot>
<xsl:for-each select="summary">
<xsl:call-template name="entry">
<xsl:with-param name="type" select="'summary'"/>
<xsl:with-param name="class">
<xsl:choose>
<xsl:when test="position() mod 2">
<xsl:text>odd</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>even</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
</tfoot>
</table>
</xsl:template>
<xsl:template name="entry">
<xsl:param name="type"/>
<xsl:param name="class"/>
<tr class="{$class}">
<xsl:choose>
<xsl:when test="$type = 'function'">
<td class="label"><a href="{@details}.html#{@name}"><xsl:value-of select="@name"/></a></td>
</xsl:when>
<xsl:when test="$type = 'file'">
<td class="label"><a href="{@details}.html"><xsl:value-of select="@name"/></a></td>
</xsl:when>
<xsl:otherwise>
<td class="label">Summary</td>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="count(lines)">
<xsl:apply-templates select="lines"/>
</xsl:if>
<xsl:if test="not(count(lines))">
<xsl:call-template name="missing"/>
</xsl:if>
<xsl:if test="count(branches)">
<xsl:apply-templates select="branches"/>
</xsl:if>
<xsl:if test="not(count(branches))">
<xsl:call-template name="missing"/>
</xsl:if>
<xsl:if test="count(conditions)">
<xsl:apply-templates select="conditions"/>
</xsl:if>
<xsl:if test="not(count(conditions))">
<xsl:call-template name="missing"/>
</xsl:if>
<xsl:if test="count(calls)">
<xsl:apply-templates select="calls"/>
</xsl:if>
<xsl:if test="not(count(calls))">
<xsl:call-template name="missing"/>
</xsl:if>
</tr>
</xsl:template>
<xsl:template match="lines">
<xsl:call-template name="row"/>
</xsl:template>
<xsl:template match="branches">
<xsl:call-template name="row"/>
</xsl:template>
<xsl:template match="conditions">
<xsl:call-template name="row"/>
</xsl:template>
<xsl:template match="calls">
<xsl:call-template name="row"/>
</xsl:template>
<xsl:template name="missing">
<td></td>
</xsl:template>
<xsl:template name="row">
<xsl:variable name="quality">
<xsl:choose>
<xsl:when test="@coverage = 100">
<xsl:text>perfect</xsl:text>
</xsl:when>
<xsl:when test="@coverage >= 80.0">
<xsl:text>excellant</xsl:text>
</xsl:when>
<xsl:when test="@coverage >= 60.0">
<xsl:text>good</xsl:text>
</xsl:when>
<xsl:when test="@coverage >= 40.0">
<xsl:text>poor</xsl:text>
</xsl:when>
<xsl:when test="@coverage >= 20.0">
<xsl:text>bad</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>terrible</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<td class="{$quality}"><xsl:value-of select="@coverage"/>% of <xsl:value-of select="@count"/></td>
</xsl:template>
</xsl:stylesheet>