Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F624306
junit-noframes.xsl
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Authored By
Unknown
Size
19 KB
Referenced Files
None
Subscribers
None
junit-noframes.xsl
View Options
<xsl:stylesheet
xmlns:xsl=
"http://www.w3.org/1999/XSL/Transform"
version=
"1.0"
>
<xsl:output
method=
"html"
indent=
"yes"
encoding=
"US-ASCII"
doctype-public=
"-//W3C//DTD HTML 4.01 Transitional//EN"
/>
<xsl:decimal-format
decimal-separator=
"."
grouping-separator=
","
/>
<!--
The Apache Software License, Version 1.1
Copyright (c) 2001-2002 The Apache Software Foundation. All rights
reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
3. The end-user documentation included with the redistribution, if
any, must include the following acknowlegement:
"This product includes software developed by the
Apache Software Foundation (http://www.apache.org/)."
Alternately, this acknowlegement may appear in the software itself,
if and wherever such third-party acknowlegements normally appear.
4. The names "The Jakarta Project", "Ant", and "Apache Software
Foundation" must not be used to endorse or promote products derived
from this software without prior written permission. For written
permission, please contact apache@apache.org.
5. Products derived from this software may not be called "Apache"
nor may "Apache" appear in their names without prior written
permission of the Apache Group.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
====================================================================
This software consists of voluntary contributions made by many
individuals on behalf of the Apache Software Foundation. For more
information on the Apache Software Foundation, please see
<http://www.apache.org/>.
-->
<!--
Sample stylesheet to be used with An JUnitReport output.
It creates a non-framed report that can be useful to send via
e-mail or such.
@author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
@author Erik Hatcher <a href="mailto:ehatcher@apache.org"/>
-->
<xsl:template
match=
"testsuites"
>
<html>
<head>
<title>
Unit
Test
Results
</title>
<style
type=
"text/css"
>
body
{
font:normal
68%
verdana,arial,helvetica;
color:#000000;
}
table
tr
td,
table
tr
th
{
font-size:
68%;
}
table.details
tr
th{
font-weight:
bold;
text-align:left;
background:#a6caf0;
}
table.details
tr
td{
background:#eeeee0;
}
p
{
line-height:1.5em;
margin-top:0.5em;
margin-bottom:1.0em;
}
h1
{
margin:
0px
0px
5px;
font:
165%
verdana,arial,helvetica
}
h2
{
margin-top:
1em;
margin-bottom:
0.5em;
font:
bold
125%
verdana,arial,helvetica
}
h3
{
margin-bottom:
0.5em;
font:
bold
115%
verdana,arial,helvetica
}
h4
{
margin-bottom:
0.5em;
font:
bold
100%
verdana,arial,helvetica
}
h5
{
margin-bottom:
0.5em;
font:
bold
100%
verdana,arial,helvetica
}
h6
{
margin-bottom:
0.5em;
font:
bold
100%
verdana,arial,helvetica
}
.Error
{
font-weight:bold;
color:red;
}
.Failure
{
font-weight:bold;
color:purple;
}
.Properties
{
text-align:right;
}
</style>
<script
type=
"text/javascript"
language=
"JavaScript"
>
var
TestCases
=
new
Array();
var
cur;
<xsl:for-each
select=
"./testsuite"
>
<xsl:apply-templates
select=
"properties"
/>
</xsl:for-each>
</script>
<script
type=
"text/javascript"
language=
"JavaScript"
>
<![CDATA[
function displayProperties (name) {
var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
var doc = win.document.open();
doc.write("<html><head><title>Properties of " + name + "</title>");
doc.write("<style>")
doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
doc.write("table tr td, table tr th { font-size: 68%; }");
doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
doc.write("</style>");
doc.write("</head><body>");
doc.write("<h3>Properties of " + name + "</h3>");
doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
doc.write("<table class='properties'>");
doc.write("<tr><th>Name</th><th>Value</th></tr>");
for (prop in TestCases[name]) {
doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
}
doc.write("</table>");
doc.write("</body></html>");
doc.close();
win.focus();
}
]]>
</script>
</head>
<body>
<a
name=
"top"
></a>
<xsl:call-template
name=
"pageHeader"
/>
<!-- Summary part -->
<xsl:call-template
name=
"summary"
/>
<hr
size=
"1"
width=
"95%"
align=
"left"
/>
<!-- Package List part -->
<xsl:call-template
name=
"packagelist"
/>
<hr
size=
"1"
width=
"95%"
align=
"left"
/>
<!-- For each package create its part -->
<xsl:call-template
name=
"packages"
/>
<hr
size=
"1"
width=
"95%"
align=
"left"
/>
<!-- For each class create the part -->
<xsl:call-template
name=
"classes"
/>
</body>
</html>
</xsl:template>
<!-- ================================================================== -->
<!-- Write a list of all packages with an hyperlink to the anchor of -->
<!-- of the package name. -->
<!-- ================================================================== -->
<xsl:template
name=
"packagelist"
>
<h2>
Packages
</h2>
Note:
package
statistics
are
not
computed
recursively,
they
only
sum
up
all
of
its
testsuites
numbers.
<table
class=
"details"
border=
"0"
cellpadding=
"5"
cellspacing=
"2"
width=
"95%"
>
<xsl:call-template
name=
"testsuite.test.header"
/>
<!-- list all packages recursively -->
<xsl:for-each
select=
"./testsuite[not(./@package = preceding-sibling::testsuite/@package)]"
>
<xsl:sort
select=
"@package"
/>
<xsl:variable
name=
"testsuites-in-package"
select=
"/testsuites/testsuite[./@package = current()/@package]"
/>
<xsl:variable
name=
"testCount"
select=
"sum($testsuites-in-package/@tests)"
/>
<xsl:variable
name=
"errorCount"
select=
"sum($testsuites-in-package/@errors)"
/>
<xsl:variable
name=
"failureCount"
select=
"sum($testsuites-in-package/@failures)"
/>
<xsl:variable
name=
"timeCount"
select=
"sum($testsuites-in-package/@time)"
/>
<!-- write a summary for the package -->
<tr
valign=
"top"
>
<!-- set a nice color depending if there is an error/failure -->
<xsl:attribute
name=
"class"
>
<xsl:choose
>
<xsl:when
test=
"$failureCount > 0"
>
Failure
</xsl:when>
<xsl:when
test=
"$errorCount > 0"
>
Error
</xsl:when>
</xsl:choose>
</xsl:attribute>
<td><a
href=
"#{@package}"
>
<xsl:value-of
select=
"@package"
/></a></td>
<td>
<xsl:value-of
select=
"$testCount"
/></td>
<td>
<xsl:value-of
select=
"$errorCount"
/></td>
<td>
<xsl:value-of
select=
"$failureCount"
/></td>
<td>
<xsl:call-template
name=
"display-time"
>
<xsl:with-param
name=
"value"
select=
"$timeCount"
/>
</xsl:call-template>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
<!-- ================================================================== -->
<!-- Write a package level report -->
<!-- It creates a table with values from the document: -->
<!-- Name | Tests | Errors | Failures | Time -->
<!-- ================================================================== -->
<xsl:template
name=
"packages"
>
<!-- create an anchor to this package name -->
<xsl:for-each
select=
"/testsuites/testsuite[not(./@package = preceding-sibling::testsuite/@package)]"
>
<xsl:sort
select=
"@package"
/>
<a
name=
"{@package}"
></a>
<h3>
Package
<xsl:value-of
select=
"@package"
/></h3>
<table
class=
"details"
border=
"0"
cellpadding=
"5"
cellspacing=
"2"
width=
"95%"
>
<xsl:call-template
name=
"testsuite.test.header"
/>
<!-- match the testsuites of this package -->
<xsl:apply-templates
select=
"/testsuites/testsuite[./@package = current()/@package]"
mode=
"print.test"
/>
</table>
<a
href=
"#top"
>
Back
to
top
</a>
<p/>
<p/>
</xsl:for-each>
</xsl:template>
<xsl:template
name=
"classes"
>
<xsl:for-each
select=
"testsuite"
>
<xsl:sort
select=
"@name"
/>
<!-- create an anchor to this class name -->
<a
name=
"{@name}"
></a>
<h3>
TestCase
<xsl:value-of
select=
"@name"
/></h3>
<table
class=
"details"
border=
"0"
cellpadding=
"5"
cellspacing=
"2"
width=
"95%"
>
<xsl:call-template
name=
"testcase.test.header"
/>
<!--
test can even not be started at all (failure to load the class)
so report the error directly
-->
<xsl:if
test=
"./error"
>
<tr
class=
"Error"
>
<td
colspan=
"4"
>
<xsl:apply-templates
select=
"./error"
/></td>
</tr>
</xsl:if>
<xsl:apply-templates
select=
"./testcase"
mode=
"print.test"
/>
</table>
<div
class=
"Properties"
>
<a>
<xsl:attribute
name=
"href"
>
javascript:displayProperties('
<xsl:value-of
select=
"@package"
/>
.
<xsl:value-of
select=
"@name"
/>
');
</xsl:attribute>
Properties
»
</a>
</div>
<p/>
<a
href=
"#top"
>
Back
to
top
</a>
</xsl:for-each>
</xsl:template>
<xsl:template
name=
"summary"
>
<h2>
Summary
</h2>
<xsl:variable
name=
"testCount"
select=
"sum(testsuite/@tests)"
/>
<xsl:variable
name=
"errorCount"
select=
"sum(testsuite/@errors)"
/>
<xsl:variable
name=
"failureCount"
select=
"sum(testsuite/@failures)"
/>
<xsl:variable
name=
"timeCount"
select=
"sum(testsuite/@time)"
/>
<xsl:variable
name=
"successRate"
select=
"($testCount - $failureCount - $errorCount) div $testCount"
/>
<table
class=
"details"
border=
"0"
cellpadding=
"5"
cellspacing=
"2"
width=
"95%"
>
<tr
valign=
"top"
>
<th>
Tests
</th>
<th>
Failures
</th>
<th>
Errors
</th>
<th>
Success
rate
</th>
<th>
Time
</th>
</tr>
<tr
valign=
"top"
>
<xsl:attribute
name=
"class"
>
<xsl:choose
>
<xsl:when
test=
"$failureCount > 0"
>
Failure
</xsl:when>
<xsl:when
test=
"$errorCount > 0"
>
Error
</xsl:when>
</xsl:choose>
</xsl:attribute>
<td>
<xsl:value-of
select=
"$testCount"
/></td>
<td>
<xsl:value-of
select=
"$failureCount"
/></td>
<td>
<xsl:value-of
select=
"$errorCount"
/></td>
<td>
<xsl:call-template
name=
"display-percent"
>
<xsl:with-param
name=
"value"
select=
"$successRate"
/>
</xsl:call-template>
</td>
<td>
<xsl:call-template
name=
"display-time"
>
<xsl:with-param
name=
"value"
select=
"$timeCount"
/>
</xsl:call-template>
</td>
</tr>
</table>
<table
border=
"0"
width=
"95%"
>
<tr>
<td
style=
"text-align: justify;"
>
Note:
<i>
failures
</i>
are
anticipated
and
checked
for
with
assertions
while
<i>
errors
</i>
are
unanticipated.
</td>
</tr>
</table>
</xsl:template>
<!--
Write properties into a JavaScript data structure.
This is based on the original idea by Erik Hatcher (ehatcher@apache.org)
-->
<xsl:template
match=
"properties"
>
cur
=
TestCases['
<xsl:value-of
select=
"../@package"
/>
.
<xsl:value-of
select=
"../@name"
/>
']
=
new
Array();
<xsl:for-each
select=
"property"
>
<xsl:sort
select=
"@name"
/>
cur['
<xsl:value-of
select=
"@name"
/>
']
=
'
<xsl:call-template
name=
"JS-escape"
>
<xsl:with-param
name=
"string"
select=
"@value"
/>
</xsl:call-template>
';
</xsl:for-each>
</xsl:template>
<!-- Page HEADER -->
<xsl:template
name=
"pageHeader"
>
<h1>
Unit
Test
Results
</h1>
<table
width=
"100%"
>
<tr>
<td
align=
"left"
></td>
<td
align=
"right"
>
Designed
for
use
with
<a
href=
'http://www.junit.org'
>
JUnit
</a>
and
<a
href=
'http://jakarta.apache.org/ant'
>
Ant
</a>
.
</td>
</tr>
</table>
<hr
size=
"1"
/>
</xsl:template>
<xsl:template
match=
"testsuite"
mode=
"header"
>
<tr
valign=
"top"
>
<th
width=
"80%"
>
Name
</th>
<th>
Tests
</th>
<th>
Errors
</th>
<th>
Failures
</th>
<th
nowrap=
"nowrap"
>
Time(s)
</th>
</tr>
</xsl:template>
<!-- class header -->
<xsl:template
name=
"testsuite.test.header"
>
<tr
valign=
"top"
>
<th
width=
"80%"
>
Name
</th>
<th>
Tests
</th>
<th>
Errors
</th>
<th>
Failures
</th>
<th
nowrap=
"nowrap"
>
Time(s)
</th>
</tr>
</xsl:template>
<!-- method header -->
<xsl:template
name=
"testcase.test.header"
>
<tr
valign=
"top"
>
<th>
Name
</th>
<th>
Status
</th>
<th
width=
"80%"
>
Type
</th>
<th
nowrap=
"nowrap"
>
Time(s)
</th>
</tr>
</xsl:template>
<!-- class information -->
<xsl:template
match=
"testsuite"
mode=
"print.test"
>
<tr
valign=
"top"
>
<!-- set a nice color depending if there is an error/failure -->
<xsl:attribute
name=
"class"
>
<xsl:choose
>
<xsl:when
test=
"@failures[.> 0]"
>
Failure
</xsl:when>
<xsl:when
test=
"@errors[.> 0]"
>
Error
</xsl:when>
</xsl:choose>
</xsl:attribute>
<!-- print testsuite information -->
<td><a
href=
"#{@name}"
>
<xsl:value-of
select=
"@name"
/></a></td>
<td>
<xsl:value-of
select=
"@tests"
/></td>
<td>
<xsl:value-of
select=
"@errors"
/></td>
<td>
<xsl:value-of
select=
"@failures"
/></td>
<td>
<xsl:call-template
name=
"display-time"
>
<xsl:with-param
name=
"value"
select=
"@time"
/>
</xsl:call-template>
</td>
</tr>
</xsl:template>
<xsl:template
match=
"testcase"
mode=
"print.test"
>
<tr
valign=
"top"
>
<xsl:attribute
name=
"class"
>
<xsl:choose
>
<xsl:when
test=
"failure | error"
>
Error
</xsl:when>
</xsl:choose>
</xsl:attribute>
<td>
<xsl:value-of
select=
"@name"
/></td>
<xsl:choose
>
<xsl:when
test=
"failure"
>
<td>
Failure
</td>
<td>
<xsl:apply-templates
select=
"failure"
/></td>
</xsl:when>
<xsl:when
test=
"error"
>
<td>
Error
</td>
<td>
<xsl:apply-templates
select=
"error"
/></td>
</xsl:when>
<xsl:otherwise
>
<td>
Success
</td>
<td></td>
</xsl:otherwise>
</xsl:choose>
<td>
<xsl:call-template
name=
"display-time"
>
<xsl:with-param
name=
"value"
select=
"@time"
/>
</xsl:call-template>
</td>
</tr>
</xsl:template>
<xsl:template
match=
"failure"
>
<xsl:call-template
name=
"display-failures"
/>
</xsl:template>
<xsl:template
match=
"error"
>
<xsl:call-template
name=
"display-failures"
/>
</xsl:template>
<!-- Style for the error and failure in the tescase template -->
<xsl:template
name=
"display-failures"
>
<xsl:choose
>
<xsl:when
test=
"not(@message)"
>
N/A
</xsl:when>
<xsl:otherwise
>
<xsl:value-of
select=
"@message"
/>
</xsl:otherwise>
</xsl:choose>
<!-- display the stacktrace -->
<code>
<br/><br/>
<xsl:call-template
name=
"br-replace"
>
<xsl:with-param
name=
"word"
select=
"."
/>
</xsl:call-template>
</code>
<!-- the later is better but might be problematic for non-21" monitors... -->
<!--pre><xsl:value-of select="."/></pre-->
</xsl:template>
<xsl:template
name=
"JS-escape"
>
<xsl:param
name=
"string"
/>
<xsl:choose
>
<xsl:when
test=
"contains($string,"'")"
>
<xsl:value-of
select=
"substring-before($string,"'")"
/>
\
'
<xsl:call-template
name=
"JS-escape"
>
<xsl:with-param
name=
"string"
select=
"substring-after($string,"'")"
/>
</xsl:call-template>
</xsl:when>
<xsl:when
test=
"contains($string,'\')"
>
<xsl:value-of
select=
"substring-before($string,'\')"
/>
\\
<xsl:call-template
name=
"JS-escape"
>
<xsl:with-param
name=
"string"
select=
"substring-after($string,'\')"
/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise
>
<xsl:value-of
select=
"$string"
/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!--
template that will convert a carriage return into a br tag
@param word the text from which to convert CR to BR tag
-->
<xsl:template
name=
"br-replace"
>
<xsl:param
name=
"word"
/>
<xsl:choose
>
<xsl:when
test=
"contains($word,'
')"
>
<xsl:value-of
select=
"substring-before($word,'
')"
/>
<br/>
<xsl:call-template
name=
"br-replace"
>
<xsl:with-param
name=
"word"
select=
"substring-after($word,'
')"
/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise
>
<xsl:value-of
select=
"$word"
/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template
name=
"display-time"
>
<xsl:param
name=
"value"
/>
<xsl:value-of
select=
"format-number($value,'0.000')"
/>
</xsl:template>
<xsl:template
name=
"display-percent"
>
<xsl:param
name=
"value"
/>
<xsl:value-of
select=
"format-number($value,'0.00%')"
/>
</xsl:template>
</xsl:stylesheet>
File Metadata
Details
Attached
Mime Type
text/html
Expires
Sat, Nov 14, 10:12 PM (1 d, 6 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
136924
Default Alt Text
junit-noframes.xsl (19 KB)
Attached To
Mode
R21 OOP Examples
Attached
Detach File
Event Timeline