eclipse-testng 离线包
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:math="http://exslt.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="testNgXslt.outputDir"/>
<xsl:param name="testNgXslt.cssFile"/>
<xsl:param name="testNgXslt.showRuntimeTotals"/>
<xsl:param name="testNgXslt.reportTitle"/>
<xsl:param name="testNgXslt.sortTestCaseLinks"/>
<xsl:param
name="testNgXslt.chartScaleFactor"/>
<xsl:param
name="testNgXslt.testDetailsFilter"/>
<xsl:variable name="testDetailsFilter" select="if ($testNgXslt.testDetailsFilter)
then $testNgXslt.testDetailsFilter else 'FAIL,PASS,SKIP'"/>
<xsl:variable name="chartWidth" select="round(600 *
testng:getVariableSafe($testNgXslt.chartScaleFactor, 1))"/>
<xsl:variable name="chartHeight" select="round(200 *
testng:getVariableSafe($testNgXslt.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($testNgXslt.reportTitle, 'TestNG Results')"/>
<xsl:if test="$testNgXslt.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:////', $testNgXslt.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: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($testNgXslt.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($testNgXslt.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="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
Xslt.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
Xslt.showRuntimeTotals, 'true') = 0">
<xsl:value-of
select="$totalDuration"/>
|
xsl:if>
xsl:template>
<
xsl:template name="powered-by">
xsl:template>
xsl:stylesheet>