eclipse-testng 离线包
<xsl :stylesheet version="2.0" xmlns:xsl ="http://www.w3.org/1999/XSL /Transform"
xmlns:math="http://exsl t.org/math"
xmlns:testng="http://testng.org">
<xsl :output method="html"
indent="yes" omit-xml-declaration="yes"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl :output name="text" method="text"/>
<xsl :output name="xml" method="xml" indent="yes"/>
<xsl :output name="html" method="html" indent="yes" omit-xml-
declaration="yes"/>
<xsl :output name="xhtml" method="xhtml" indent="yes" omit-xml-declaration="yes"/>
<xsl :param
name="testNgXsl t.outputDir"/>
<xsl :param name="testNgXsl t.cssFile"/>
<xsl :param name="testNgXsl t.showRuntimeTotals"/>
<xsl :param name="testNgXsl t.reportTitle"/>
<xsl :param name="testNgXsl t.sortTestCaseLinks"/>
<xsl :param
name="testNgXsl t.chartScaleFactor"/>
<xsl :param
name="testNgXsl t.testDetailsFilter"/>
<xsl :variable name="testDetailsFilter" select="if ($testNgXsl t.testDetailsFilter)
then $testNgXsl t.testDetailsFilter else 'FAIL,PASS,SKIP'"/>
<xsl :variable name="chartWidth" select="round(600 *
testng:getVariableSafe($testNgXsl t.chartScaleFactor, 1))"/>
<xsl :variable name="chartHeight" select="round(200 *
testng:getVariableSafe($testNgXsl t.chartScaleFactor, 1))"/>
<xsl :template name="writeCssFile">
<xsl :result-
document href="{testng:absolutePath('style.css')}" format="text">
<xsl :choose>
<xsl :when
test="testng:isFilterSelected('CONF') = 'true'">
.testMethodStatusCONF { }
xsl :when>
<xsl :otherwise>
.testMethodStatusCONF { display: none; }
xsl :otherwise>
xsl :choose>
<xsl :choose>
<xsl :when test="testng:isFilterSelected('FAIL') = 'true'">
.testMethodStatusFAIL { background-color: #FFBBBB; }
xsl :when>
<xsl :otherwise>
.testMethodStatusFAIL { background-color: #FFBBBB; display: none; }
xsl :otherwise>
xsl :choose>
<xsl :choose>
<xsl :when test="testng:isFilterSelected
('PASS') = 'true'">
.testMethodStatusPASS { background-color: lightgreen; }
xsl :when>
<xsl :otherwise>
.testMethodStatusPASS { background-color: lightgreen; display: none; }
xsl :otherwise>
xsl :choose>
<xsl :choose>
<xsl :when
test="testng:isFilterSelected('SKIP') = 'true'">
.testMethodStatusSKIP { background-color: #FFFFBB; }
xsl :when>
<xsl :otherwise>
.testMethodStatusSKIP { background-color:
#FFFFBB; display: none; }
xsl :otherwise>
xsl :choose>
xsl :result-document>
xsl :template >
<xsl :template name="writeJsFile">
<xsl :result-document href="{testng:absolutePath('main.js')}"
format="text">
-1)
{
document.styleSheets[i][rules][j].style[element] = value;
break;
}
}
}
}
function closeAllExpandedDetails() {
var node = document.getElementsByTagName("body")[0];
//var re = new RegExp("\
\btestMethodDetailsVisible\\b");
var els = document.getElementsByTagName("div");
for (var i =
0,j = els.length; i < j; i++) {
if (els[i].className == "testMethodDetailsVisible") {
els[i].className = "testMethodDetails";
}
}
}
function
renderSvgEmbedTag(chartWidth, chartHeight) {
var success = false;
var userAgent =
navigator.userAgent;
if (userAgent.indexOf("Firefox") > -1 || userAgent.indexOf("Safari") > -1) {
success = true;
} else if (navigator.mimeTypes != null && navigator.mimeTypes.length > 0) {
if (navigator.mimeTypes["image/svg+xml"] != null) {
success = true;
}
} else if (window.ActiveXObject) {
try {
testObj = new
ActiveXObject("Adobe.SVGCtl");
success = true;
} catch (e) {}
}
var chartContainer = document.getElementById('chart-container');
if (success) {
var chart = document.createElement('embed');
chart.src =
'overview-chart.svg';
chart.type = 'image/svg+xml';
chart.width = chartWidth;
chart.height = chartHeight;
chartContainer.appendChild(chart);
} else {
var message = document.createElement('h4');
var text =
document.createTextNode('SVG Pie Charts are not available. Please install a SVG viewer for your browser.');
message.style.color = 'navy';
message.appendChild(text);
chartContainer.appendChild(message);
}
}
]]>
xsl :result-
document>
xsl :template >
<xsl :template name="htmlHead">
<xsl :value-
of select="testng:getVariableSafe($testNgXsl t.reportTitle, 'TestNG Results')"/>
<xsl :if test="$testNgXsl t.cssFile">
xsl :if>
<script type="text/javascript" src="main.js"/>
xsl :template >
<xsl :function
name="testng:getVariableSafe">
<xsl :param name="testVar"/>
<xsl :param name="defaultValue"/>
<xsl :value-of select="if ($testVar) then $testVar else $defaultValue"/>
xsl :function>
<xsl :function
name="testng:trim">
<xsl :param name="arg"/>
<xsl :sequence select="replace(replace($arg,'\s+$',''),'^\s
+','')"/>
xsl :function>
<xsl :function name="testng:absolutePath">
<xsl :param name="fileName"/>
<xsl :value-of select="concat('file:////', $testNgXsl t.outputDir, '/', $fileName)"/>
xsl :function>
<xsl :function
name="testng:safeFileName">
<xsl :param name="fileName"/>
<xsl :value-of select="translate($fileName, '[]{}`~!
@#$%^*(){};?/\|' , '______________________')"/>
xsl :function>
<xsl :function name="testng:suiteContentFileName">
<xsl :param name="suiteElement"/>
<xsl :value-of select="testng:safeFileName(concat($suiteElement/@name,
'.html'))"/>
xsl :function>
<xsl :function name="testng:suiteGroupsFileName">
<xsl :param name="suiteElement"/>
<xsl :value-of select="testng:safeFileName(concat($suiteElement/@name, '_groups.html'))"/>
xsl :function>
<xsl :function name="testng:testCaseContentFileName">
<xsl :param name="testCaseElement"/>
<xsl :value-of
select="testng:safeFileName(concat($testCaseElement/../@name, '_', $testCaseElement/@name, '.html'))"/>
xsl :function>
<xsl :function name="testng:concatParams">
<xsl :param name="params"/>
<xsl :variable
name="outputString">
<xsl :value-of separator="," select="for $i in ($params) return $i"/>
xsl :variable>
<xsl :value-of select="$outputString"/>
xsl :function>
<xsl :function name="testng:testMethodStatus">
<xsl :param name="testMethodElement"/>
<xsl :variable name="status" select="$testMethodElement/@status"/>
<xsl :variable name="statusClass" select="concat('testMethodStatus', $status)"/>
<xsl :value-of select="if
($testMethodElement/@is-config) then concat($statusClass, ' testMethodStatusCONF') else $statusClass"/>
xsl :function>
<xsl :function name="testng:suiteMethodsCount">
<xsl :param name="testCasesElements"/>
<xsl :param
name="state"/>
<xsl :value-of
select="if ($state = '*') then count($testCasesElements/class/test-
method[not(@is-config)]) else count($testCasesElements/class/test-method[(@status=$state) and (not(@is-config))])"/>
xsl :function>
<xsl :function name="testng:testCaseMethodsCount">
<xsl :param name="testCaseElement"/>
<xsl :param name="state"/>
<xsl :value-of
select="if ($state = '*') then count
($testCaseElement/class/test-method[not(@is-config)]) else count($testCaseElement/class/test-method[(@status=$state) and
(not(@is-config))])"/>
xsl :function>
<xsl :function name="testng:suiteStateClass">
<xsl :param
name="testCaseElements"/>
<xsl :value-of select="if (count($testCaseElements/class/test-method[(@status='FAIL') and
(not(@is-config))]) > 0) then 'suiteStatusFail' else 'suiteStatusPass'"/>
xsl :function>
<xsl :function
name="testng:methodsDuration">
<xsl :param name="testMethods"/>
<xsl :variable name="durationMs" select="sum
($testMethods/@duration-ms)"/>
<xsl :value-of select="testng:formatDuration($durationMs)"/>
xsl :function>
<xsl :function name="testng:formatDuration">
<xsl :param name="durationMs"/>
<xsl :if
test="$durationMs > 86400000">
<xsl :value-of select="format-number($durationMs div 86400000, '#')"/>d
xsl :if>
<xsl :if test="($durationMs > 3600000) and ($durationMs mod 86400000 > 1000)">
<xsl :value-of select="format-number(($durationMs mod 86400000) div 3600000, '#')"/>h
xsl :if>
<xsl :if
test="$durationMs < 86400000">
<xsl :if test="($durationMs > 60000) and ($durationMs
mod 3600000 > 1000)">
<xsl :value-of select="format-number(($durationMs mod 3600000) div 60000, '#')"/>m
xsl :if>
<xsl :if test="($durationMs > 1000) and ($durationMs mod 60000 >
1000)">
<xsl :value-of select="format-number(($durationMs mod 60000) div 1000, '#')"/>s
xsl :if>
xsl :if>
<xsl :if test="$durationMs < 1000">
<xsl :value-of select="$durationMs"/> ms
xsl :if>
xsl :function>
<xsl :function
name="testng:isFilterSelected">
<xsl :param name="filterName"/>
<xsl :value-of select="contains
($testDetailsFilter, $filterName)"/>
xsl :function>
<xsl :template name="formField">
<xsl :param name="label"/>
<xsl :param name="value"/>
<xsl :if test="$value">
<xsl :value-of select="$label"/>:
<xsl :value-of select="$value"/>
xsl :if>
xsl :template >
<xsl :template name="formFieldList">
<xsl :param name="label"/>
<xsl :param
name="value"/>
<xsl :if test="count($value) > 0">
<xsl :value-
of select="$label"/>:
<
xsl :for-each select="$value">
-
<xsl :value-of select="."/>
xsl :for-each>
xsl :if>
xsl :template >
<xsl :template match="/testng-results">
<xsl :call-template name="writeCssFile"/>
<xsl :call-template name="writeJsFile"/>
<xsl :call-template name="htmlHead"/>
<xsl :variable name="suiteElements" select="if (suite/@url) then document(suite/@url)/suite else
suite"/>
<xsl :call-template name="navigationFile">
<xsl :with-param name="suiteElements"
select="$suiteElements"/>
<xsl :with-param name="reporterOutputElement" select="reporter-output"/>
xsl :call-template >
<xsl :result-document href="{testng:absolutePath('overview-
chart.svg')}" format="xml">
<xsl :variable name="testCaseElements" select="
if (suite/@url) then
if (document
(suite/@url)/suite/test/@url)
then document(document(suite/@url)/suite/test/@url)/test
else document(suite/@url)/suite/test
else suite/test"/>
<xsl :variable name="failedCount" select="testng:suiteMethodsCount($testCaseElements, 'FAIL')"/>
<xsl :variable name="passedCount" select="testng:suiteMethodsCount($testCaseElements, 'PASS')"/>
<xsl :variable name="skippedCount" select="testng:suiteMethodsCount($testCaseElements, 'SKIP')"/>
<xsl :variable name="totalCount" select="testng:suiteMethodsCount($testCaseElements, '*')"/>
<xsl :variable name="pi" select="3.141592"/>
<xsl :variable name="radius" select="130"/>
<xsl :variable name="failedPercent" select="format-number($failedCount div $totalCount, '###%')"/>
<xsl :variable name="failedAngle" select="($failedCount div $totalCount) * $pi * 2"/>
<xsl :variable
name="failedX" select="$radius * math:cos($failedAngle)"/>
<xsl :variable name="failedY" select="-1 *
$radius * math:sin($failedAngle)"/>
<xsl :variable name="failedArc" select="if ($failedAngle >= $pi) then
1 else 0"/>
<xsl :variable name="failedAngle_text" select="$failedAngle div 2"/>
<xsl :variable name="failedX_text" select="($radius div 2) * math:cos($failedAngle_text)"/>
<xsl :variable
name="failedY_text" select="(-1 * ($radius div 2) * math:sin($failedAngle_text))"/>
<xsl :variable
name="passPercent" select="format-number($passedCount div $totalCount, '###%')"/>
<xsl :variable
name="passAngle" select="($passedCount div $totalCount) * $pi * 2"/>
<xsl :variable name="passX"
select="$radius * math:cos($passAngle)"/>
<xsl :variable name="passY" select="-1 * $radius * math:sin
($passAngle)"/>
<xsl :variable name="passArc" select="if ($passAngle >= $pi) then 1 else 0"/>
<xsl :variable name="skipPercent" select="format-number($skippedCount div $totalCount, '###%')"/>
<xsl :variable name="skipAngle" select="($skippedCount div $totalCount) * $pi * 2"/>
<xsl :variable
name="skipX" select="$radius * math:cos($skipAngle)"/>
<xsl :variable name="skipY" select="-1 * $radius *
math:sin($skipAngle)"/>
<xsl :variable name="skipArc" select="if ($skipAngle >= $pi) then 1 else 0"/>
Failed (<xsl :value-of select="$failedPercent"/>)
Passed (<xsl :value-of select="$passPercent"/>)
Skipped (<xsl :value-of select="$skipPercent"/>)
<xsl :variable
name="failedRotation" select="(($skippedCount) div $totalCount) * 360"/>
<xsl :if test="($failedCount
div $totalCount) > 0">
xsl :if>
<xsl :variable name="passRotation" select="(($failedCount +
$skippedCount) div $totalCount) * 360"/>
<xsl :if test="($passedCount div $totalCount) > 0">
xsl :if>
<xsl :if test="($skippedCount div $totalCount) > 0">
xsl :if>
xsl :result-document>
<xsl :result-document href="{testng:absolutePath('overview.html')}" format="xhtml">
<xsl :call-template name="htmlHead"/>
Test suites overview
<script type="text/javascript">
renderSvgEmbedTag(<xsl :value-of select="$chartWidth"/>, <xsl :value-of select="$chartHeight"/>);
<
xsl :for-each select="$suiteElements">
<
xsl :variable
name="testCaseElements"
select="if (test/@url) then document(test/@url)/test else
test"/>
<xsl :value-of
select="@name"/>
<xsl :call-template
name="percentageOverview">
<xsl :with-param name="failedCount"
select="testng:suiteMethodsCount($testCaseElements, 'FAIL')"/>
<xsl :with-param name="passedCount"
select="testng:suiteMethodsCount
($testCaseElements, 'PASS')"/>
<xsl :with-param name="skippedCount"
select="testng:suiteMethodsCount($testCaseElements, 'SKIP')"/>
<xsl :with-param name="totalCount"
select="testng:suiteMethodsCount
($testCaseElements, '*')"/>
<xsl :with-param name="totalDuration"
select="testng:methodsDuration($testCaseElements/class/test-method)"/>
xsl :call-template >
<xsl :for-each
select="$testCaseElements">
<xsl :value-of select="@name"/>
<xsl :value-of select="testng:testCaseMethodsCount(., 'FAIL')"/>
<xsl :value-of
select="testng:testCaseMethodsCount(., 'PASS')"/>
<xsl :value-of select="testng:testCaseMethodsCount(.,
'SKIP')"/>
<xsl :value-of select="testng:testCaseMethodsCount(., '*')"/>
<xsl :value-of
select="if (testng:testCaseMethodsCount(., '*') > 0) then
format-number(testng:testCaseMethodsCount(., 'PASS') div testng:testCaseMethodsCount(., '*'), '###%') else '100%'"/>
<xsl :if test="compare($testNgXsl t.showRuntimeTotals,
'true') = 0">
<xsl :value-of select="testng:methodsDuration(./class/test-method)"/>
xsl :if>
xsl :for-each>
xsl :for-each>
<
xsl :call-
template name="powered-by"/>
xsl :result-document>
<
xsl :result-document href="{testng:absolutePath('reporterOutput.html')}" format="xhtml">
<
xsl :call-
template name="htmlHead"/>
Reporter output
<
xsl :for-each select="reporter-output/line">
<xsl :value-of select="."/>
xsl :for-each>
<
xsl :call-
template
name="powered-by"/>
xsl :result-document>
xsl :
template >
<
xsl :
template name="navigationFile">
<
xsl :param name="suiteElements"/>
<
xsl :param
name="reporterOutputElement"/>
<
xsl :result-document href="{testng:absolutePath('navigation.html')}" format="xhtml">
<
xsl :call-
template name="htmlHead"/>
<xsl :value-of
select="testng:getVariableSafe($testNgXsl t.reportTitle, 'TestNG Results')"/>
<xsl :for-each select="$suiteElements">
<xsl :variable
name="testCaseElements"
select="if (test/@url) then document(test/@url)/test else
test"/>
<xsl :call-template name="suiteContentFile">
<xsl :with-param name="suiteElement"
select="."/>
xsl :call-template >
<xsl :call-template
name="suiteGroupsFile">
<xsl :with-param name="suiteElement" select="."/>
xsl :call-template >
<xsl :call-template name="suiteTestCasesLinks">
<xsl :with-param name="testCases" select="$testCaseElements"/>
xsl :call-template >
<xsl :call-template name="suiteTestCasesContentFiles">
<xsl :with-param
name="testCases" select="$testCaseElements"/>
xsl :call-template >
xsl :for-each>
xsl :result-document>
xsl :
template >
<
xsl :
template name="suiteContentFile">
<
xsl :param name="suiteElement"/>
<
xsl :variable
name="testCaseElements" select="if (test/@url) then document(test/@url)/test else test"/>
<
xsl :result-document
href="{testng:absolutePath(testng:suiteContentFileName($suiteElement))}" format="xhtml">
<
xsl :call-
template name="htmlHead"/>
All methods in suite
<xsl :value-of
select="./@name"/>
<xsl :call-template name="percentageOverview">
<xsl :with-param name="failedCount"
select="testng:suiteMethodsCount($testCaseElements, 'FAIL')"/>
<xsl :with-param name="passedCount"
select="testng:suiteMethodsCount
($testCaseElements, 'PASS')"/>
<xsl :with-param name="skippedCount"
select="testng:suiteMethodsCount($testCaseElements, 'SKIP')"/>
<xsl :with-param name="totalCount"
select="testng:suiteMethodsCount
($testCaseElements, '*')"/>
<xsl :with-param name="totalDuration"
select="testng:methodsDuration($testCaseElements/class/test-method)"/>
xsl :call-template >
<
xsl :call-
template
name="testMethods">
<
xsl :with-param name="classes" select="$testCaseElements/class"/>
<
xsl :with-param name="failedMethods" select="$testCaseElements/class/test-method[@status='FAIL']"/>
<
xsl :with-param name="passedMethods" select="$testCaseElements/class/test-method[@status='PASS']"/>
<
xsl :with-param name="skipedMethods" select="$testCaseElements/class/test-method[@status='SKIP']"/>
xsl :call-
template >
<
xsl :call-
template name="powered-by"/>
xsl :result-document>
xsl :
template >
<
xsl :
template name="suiteGroupsFile">
<
xsl :param
name="suiteElement"/>
<
xsl :result-document href="{testng:absolutePath(testng:suiteGroupsFileName($suiteElement))}"
format="xhtml">
<
xsl :call-
template name="htmlHead"/>
Groups for suite:
<xsl :value-of select="$suiteElement/@name"/>
<
xsl :for-each select="$suiteElement/groups/group">
<
xsl :sort order="ascending"
select="@name"/>
<xsl :value-of select="./@name"/>
<xsl :for-each select="method">
<xsl :value-of select="@signature"/>
xsl :for-each>
xsl :for-each>
<
xsl :call-
template name="powered-by"/>
xsl :result-document>
xsl :
template >
<
xsl :
template name="testMethods">
<
xsl :param name="classes"/>
<
xsl :param
name="failedMethods"/>
<
xsl :param name="passedMethods"/>
<
xsl :param name="skipedMethods"/>
<
xsl :param
name="filePrefix"/>
<xsl :if test="testng:isFilterSelected('BY_CLASS') = 'true'">
<xsl :attribute
name="checked" select="true"/>
xsl :if>
Group by class
<xsl :if
test="testng:isFilterSelected('FAIL') = 'true' and testng:isFilterSelected('PASS') = 'true' and testng:isFilterSelected
('SKIP') = 'true' and testng:isFilterSelected('CONF') = 'true'">
<xsl :attribute name="checked"
select="true"/>
xsl :if>
All
<xsl :if test="testng:isFilterSelected('FAIL') = 'true'">
<xsl :attribute name="checked" select="true"/>
xsl :if>
Failed
<xsl :if test="testng:isFilterSelected('PASS') = 'true'">
<xsl :attribute name="checked" select="true"/>
xsl :if>
Passed
<xsl :if test="testng:isFilterSelected('SKIP') = 'true'">
<xsl :attribute name="checked" select="true"/>
xsl :if>
Skipped
<xsl :if test="testng:isFilterSelected('CONF') = 'true'">
<xsl :attribute name="checked" select="true"/>
xsl :if>
Config
<
xsl :if test="testng:isFilterSelected('BY_CLASS') = 'true'">
<
xsl :attribute name="style" select="'display: none;'"/>
xsl :if>
<xsl :call-template name="testMethodsList">
<xsl :with-param name="methodList" select="$failedMethods"/>
<xsl :with-param name="category"
select="'byStatus_failed'"/>
xsl :call-template >
<xsl :call-template name="testMethodsList">
<xsl :with-param name="methodList" select="$passedMethods"/>
<xsl :with-param
name="category" select="'byStatus_passed'"/>
xsl :call-template >
<xsl :call-template
name="testMethodsList">
<xsl :with-param name="methodList" select="$skipedMethods"/>
<xsl :with-param name="category" select="'byStatus_skiped'"/>
xsl :call-template >
<
xsl :if
test="testng:isFilterSelected('BY_CLASS') != 'true'">
<
xsl :attribute name="style" select="'display:
none;'"/>
xsl :if>
<
xsl :for-each select="$classes">
<
xsl :sort order="ascending"
select="@name"/>
<xsl :value-of select="./@name"/>
<xsl :call-template name="testMethodsList">
<xsl :with-
param name="methodList" select="./test-method"/>
<xsl :with-param name="category"
select="'byClass'"/>
<xsl :with-param name="sortByStartTime" select="'true'"/>
xsl :call-template >
xsl :for-each>
xsl :
template >
<
xsl :
template name="testMethodsList">
<
xsl :param name="methodList"/>
<
xsl :param
name="category"/>
<
xsl :param name="sortByStartTime"/>
<
xsl :for-each select="$methodList">
<
xsl :sort order="ascending" select="if (compare($sortByStartTime, 'true') = 0) then @started-at else ''"/>
<
xsl :variable name="methodId" select="concat(../@name, '_', @name, '_', $category, '_', @status, position())"/>
<
xsl :variable name="detailsId" select="concat($methodId, '_details')"/>
<
xsl :variable name="exceptionDetailsId"
select="concat($methodId, '_exception')"/>
<xsl :if test="testng:isFilterSelected(@status) != 'true'">
xsl :if>
<xsl :value-of select="concat(@name, '(', testng:trim(testng:concatParams(./params/param)), ')')"/>
<xsl :value-of select="substring(@started-at, 12,
8)"/>
<xsl :value-of
select="testng:formatDuration(@duration-ms)"/>
<xsl :if test="./exception">
<xsl :value-of select="concat(exception/@class, ': ', exception/message)"/>
xsl :if>
<xsl :call-template name="formField">
<xsl :with-param name="label" select="'Name'"/>
<xsl :with-param name="value"
select="@name"/>
xsl :call-template >
<xsl :call-template name="formField">
<xsl :with-param name="label" select="'Description'"/>
<xsl :with-param
name="value" select="@description"/>
xsl :call-template >
<xsl :call-template
name="formField">
<xsl :with-param name="label" select="'Signature'"/>
<xsl :with-param name="value" select="@signature"/>
xsl :call-template >
<xsl :if test="./params">
<xsl :call-template name="formField">
<xsl :with-param name="label" select="'Parameters'"/>
<xsl :with-param name="value"
select="testng:concatParams(./params/param)"/>
xsl :call-
template >
xsl :if>
<xsl :call-template name="formField">
<xsl :with-param name="label" select="'Start time'"/>
<xsl :with-param name="value"
select="substring(@started-at, 12, 8)"/>
xsl :call-template >
<xsl :call-
template name="formField">
<xsl :with-param name="label" select="'End time'"/>
<xsl :with-param name="value" select="substring(@finished-at, 12, 8)"/>
xsl :call-template >
<xsl :call-template name="formField">
<xsl :with-param name="label"
select="'Duration'"/>
<xsl :with-param name="value" select="testng:formatDuration(@duration-
ms)"/>
xsl :call-template >
<xsl :call-template name="formField">
<xsl :with-param name="label" select="'In groups:'"/>
<xsl :with-param name="value"
select="@groups"/>
xsl :call-template >
<xsl :if test="@depends-on-methods">
<xsl :call-template name="formFieldList">
<xsl :with-param
name="label" select="'Depends on methods'"/>
<xsl :with-param name="value"
select="tokenize(@depends-on-methods, ',')"/>
xsl :call-template >
xsl :if>
<xsl :if test="@depends-on-groups">
<xsl :call-template name="formFieldList">
<xsl :with-param name="label" select="'Depends on
groups'"/>
<xsl :with-param name="value"
select="tokenize(@depends-on-groups, ',')"/>
xsl :call-template >
xsl :if>
<xsl :if
test="exception">
<
xsl :choose>
<
xsl :when test="exception/full-stacktrace">
<xsl :value-of select="testng:trim
(exception/full-stacktrace)"/>
xsl :when>
<
xsl :when test="exception/short-stacktrace and not (exception/full-stacktrace)">
<xsl :value-of
select="testng:trim(exception/short-stacktrace)"/>
xsl :when>
<
xsl :otherwise>
<No stacktrace information>
xsl :otherwise>
xsl :choose>
xsl :if>
xsl :for-each>
xsl :
template >
<
xsl :
template name="suiteTestCasesLinks">
<
xsl :param name="testCases"/>
<
xsl :for-each select="$testCases">
<
xsl :sort order="ascending" select="if (compare
($testNg
Xsl t.sortTestCaseLinks, 'true') = 0) then @name else ''"/>
<
xsl :value-of select="@name"/>
xsl :for-
each>
xsl :
template >
<
xsl :
template name="suiteTestCasesContentFiles">
<
xsl :param name="testCases"/>
<
xsl :for-each select="$testCases">
<
xsl :result-document href="{testng:absolutePath
(testng:testCaseContentFileName(.))}" format="xhtml">
<
xsl :call-
template
name="htmlHead"/>
Test case
<xsl :value-of select="./@name"/>
<xsl :call-template name="percentageOverview">
<xsl :with-param
name="failedCount" select="testng:testCaseMethodsCount(., 'FAIL')"/>
<xsl :with-param
name="passedCount" select="testng:testCaseMethodsCount(., 'PASS')"/>
<xsl :with-param
name="skippedCount"
select="testng:testCaseMethodsCount(., 'SKIP')"/>
<xsl :with-param name="totalCount" select="testng:testCaseMethodsCount(., '*')"/>
<xsl :with-param name="totalDuration"
select="testng:methodsDuration(./class/test-method)"/>
xsl :call-template >
<
xsl :call-
template name="testMethods">
<
xsl :with-param name="classes" select="./class"/>
<
xsl :with-param
name="failedMethods" select="./class/test-method[@status='FAIL']"/>
<
xsl :with-param
name="passedMethods" select="./class/test-method[@status='PASS']"/>
<
xsl :with-param
name="skipedMethods" select="./class/test-method[@status='SKIP']"/>
xsl :call-
template >
<
xsl :call-
template name="powered-by"/>
xsl :result-document>
xsl :for-each>
xsl :
template >
<
xsl :
template name="percentageOverview">
<
xsl :param name="failedCount"/>
<
xsl :param name="passedCount"/>
<
xsl :param name="skippedCount"/>
<
xsl :param name="totalCount"/>
<
xsl :param name="totalDuration"/>
<xsl :value-of
select="$failedCount"/>
<xsl :value-of select="$passedCount"/>
<xsl :value-of select="$skippedCount"/>
<xsl :value-of select="$totalCount"/>
<xsl :value-of
select="if ($totalCount > 0) then format-number($passedCount div $totalCount, '###%') else '100%'"/>
<
xsl :if test="compare($testNg
Xsl t.showRuntimeTotals, 'true') = 0">
<xsl :value-of
select="$totalDuration"/>
xsl :if>
xsl :
template >
<
xsl :
template name="powered-by">
xsl :
template >
xsl :stylesheet>