Protocole du CppUnit-test sur un browser (xsl)
Salut, cher developpeurs!
Je viens à vous, question d'aide s'agissant la representation d'un CppUnit-test sur un browser, l'ayant transformer avec le langage xsl.
En fait, j'ai pu generer un rapport en XML et directement utiliser le le fichier un fichier XSL pour le transformer et l'ouvrir sous forme de HTML.
Voici le code utilisé:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
ofstream outputFile("BasemathTest.xml");
#pragma omp parallel num_threads(numThreads)
{
....
....
....
// Specify XML output and inform the test runner of this format.
CppUnit::XmlOutputter *outputter =
new CppUnit::XmlOutputter(&runner.result(), outputFile);
// Transform the xml-file
outputter->setStyleSheet("CppUnitFormatter.xsl"); |
Voici une partie du fichier XML généré:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
<?xml version="1.0" encoding='ISO-8859-1' standalone='yes' ?>
<?xml-stylesheet type="text/xsl" href="CppUnitFormatter_test.xsl"?>
<TestRun>
<FailedTests></FailedTests>
<SuccessfulTests>
<Test id="1">
<Name>AffineMap3Test::AffineMap3_test1</Name>
</Test>
<Test id="2">
<Name>AffineMap3Test::AffineMap3_test2</Name>
</Test>
<Test id="3">
<Name>AffineMap3Test::AffineMap3_test3</Name>
</Test>
<Test id="4">
<Name>AffineMap3Test::apply_test</Name>
</Test>
</SuccessfulTests>
<Statistics>
<Tests>9</Tests>
<FailuresTotal>0</FailuresTotal>
<Errors>0</Errors>
<Failures>0</Failures>
</Statistics>
</TestRun> |
A noter que j'ai dejà un fichier XSL (CppUnitFormater.xsl) avec lequel je transforme le fichier BasemathTest.xml.
Mon probleme, j'aimerais que les protocole du CppUnit soit les même (à l'aide d'un code utilisant probablement la classe XmlOutputterHook pour ajouter d'autres informations sur le protocole) que les protocoles du NUnit-test donc voici un exemple:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<?xml-stylesheet type='text/xsl' href='NUnitFormatter.xsl'?>
<!--This file represents the results of running a test suite-->
<test-results name="API\Fransoft.DAO.Interface.Tests.dll" total="5" failures="3" not-run="0" date="2009-01-23" time="14:35:28">
<environment nunit-version="2.4.3.0" clr-version="2.0.50727.3053" os-version="Microsoft Windows NT 5.1.2600 Service Pack 3"
platform="Win32NT" cwd="d:\usr3\hiDAO3_1403_1\install\exe_release" machine-name="ENTW077M" user="Grunwald" user-domain="INT" />
<culture-info current-culture="de-DE" current-uiculture="de-DE" />
<test-suite name="API\Fransoft.DAO.Interface.Tests.dll" success="False" time="5.391" asserts="0">
<results>
<test-suite name="Fransoft" success="False" time="5.391" asserts="0">
<results>
<test-suite name="DAO" success="False" time="5.391" asserts="0">
<results>
<test-suite name="Interface" success="False" time="5.391" asserts="0">
<results>
<test-suite name="Tests" success="False" time="5.391" asserts="0">
<results>
<test-suite name="InputFilePath" success="True" time="0.000" asserts="0">
<results />
</test-suite>
<test-suite name="PointTriplePartPlacingTests" description="Unit tests for class PointTriplePartPlacing"
success="False" time="5.391" asserts="0">
<results>
<test-case name="Fransoft.DAO.Interface.Tests.PointTriplePartPlacingTests.TestDestinationFailPlacing"
executed="True" success="True" time="0.969" asserts="0" />
<test-case name="Fransoft.DAO.Interface.Tests.PointTriplePartPlacingTests.TestDestinationMissingPlacing"
executed="True" success="True" time="1.344" asserts="0" />
<test-case name="Fransoft.DAO.Interface.Tests.PointTriplePartPlacingTests.TestLinearPlacing" executed="True"
success="False" time="1.063" asserts="0">
<failure>
<message>
<![CDATA[System.ArgumentException : Axis vectors must be orthogonal!]]>
</message>
<stack-trace>
<![CDATA[ bei Fransoft.DAO.Data.CoordinateSystem.Create(Point3D anOrigin, NormVector3D aXAxis, NormVector3D aYAxis)
in d:\usr3\hiDAO3_1403_1\Source\Projekte\API\Fransoft.DAO.Data\CoordinateSystem.cs:Zeile 250.
bei Fransoft.DAO.Data.CoordinateSystem..ctor(Point3D anOrigin, NormVector3D aXAxis, NormVector3D aYAxis)
in d:\usr3\hiDAO3_1403_1\Source\Projekte\API\Fransoft.DAO.Data\CoordinateSystem.cs:Zeile 63.
bei HiDAO.Interface.PointTriplePartPlacingStrategyImpl.SetDestination(Part aPart, String aFirst, String aSecond,
String aThird) in d:\usr3\hiDAO3_1403_1\source\projekte\api\hiDAO.interface\pointtriplepartplacingstrategy.cpp:Zeile 85.
bei Fransoft.DAO.Interface.Tests.PointTriplePartPlacingTests.TestLinearPlacing() in
d:\usr3\hiDAO3_1403_1\Source\Projekte\API\Fransoft.DAO.Interface\Fransoft.DAO.Interface.Tests\PointTriplePlacingTests.cs:Zeile 69.
]]>
</stack-trace>
</failure>
</test-case>
<test-case name="Fransoft.DAO.Interface.Tests.PointTriplePartPlacingTests.TestRotatePlacing" executed="True"
success="False" time="1.000" asserts="0">
<failure>
<message>
<![CDATA[System.ArgumentException : Axis vectors must be orthogonal!]]>
</message>
<stack-trace>
</stack-trace>
</failure>
</test-case>
<test-case name="Fransoft.DAO.Interface.Tests.PointTriplePartPlacingTests.TestSourceMissingPlacing" executed="True"
success="False" time="1.000" asserts="0">
<failure>
<message><![CDATA[An unexpected exception type was thrown Expected: Fransoft.BaseTypes.InvalidValueException
but was: System.ArgumentException]]>
</message>
</failure>
</test-case>
</results>
</test-suite>
<test-suite name="Util" success="True" time="0.000" asserts="0">
<results />
</test-suite>
</results>
</test-suite>
</results>
</test-suite>
</results>
</test-suite>
</results>
</test-suite>
</results>
</test-suite>
</test-results> |
Le fichier transformant le protocole ci-dessus est le NUnitFormater.xsl suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
|
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="test-results">
<html>
<head>
<script language="javascript">
function toggleDiv(divid)
{
if(document.getElementById(divid).style.display == 'none')
{
document.getElementById(divid).style.display = 'block';
}
else
{
document.getElementById(divid).style.display = 'none';
}
}
</script>
</head>
<body>
<h1 name="top">Unittests
<em>
<xsl:value-of select="@name"/>
</em>,
generated <xsl:value-of select="@date"/>,
<xsl:value-of select="@time"/>
</h1>
<p>
<b>Found <xsl:value-of select="@total"/> tests, <xsl:value-of select="@failures"/> failures,
<xsl:value-of select="@not-run"/> tests ignored</b>
</p>
<xsl:for-each select="environment">
<xsl:call-template name="EnvironTempl"/>
</xsl:for-each>
<xsl:for-each select="test-suite">
<xsl:call-template name="TestSuiteTempl"/>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template name="EnvironTempl">
<div style="font-size:8pt;">
NUnit <xsl:value-of select="@nunit-version"/> on CLR version
<xsl:value-of select="@clr-version"/> running on <xsl:value-of select="@os-version"/>
</div>
</xsl:template>
<xsl:template name="TestSuiteTempl">
<h2> Testsuite <xsl:value-of select="@name"/>, </h2>
<p>Success: <xsl:value-of select="@success"/>, took <xsl:value-of select="@time"/> seconds to run, <xsl:value-of select="@asserts"/> assertions tested.</p>
<xsl:for-each select="results">
<xsl:for-each select="test-suite">
<xsl:for-each select="results">
<xsl:for-each select="test-suite">
<xsl:call-template name="TestFixtureTempl"/>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
<xsl:template name="TestFixtureTempl">
<xsl:variable name="name" select="@name"/>
<xsl:variable name="call" select="concat('toggleDiv("',$name,'");')"/>
<xsl:choose>
<xsl:when test="@time='0.000'">
<div align="block" style="width:100%">
<a href="javascript:;" onmousedown="{$call}">[-+]</a><![CDATA[...]]>
<span style="font-size:125%;font-weight:bold">Test fixture <xsl:value-of select="@name"/> (IGNORED!)</span>
<![CDATA[...]]><a href="#top">[To top]</a>
</div>
</xsl:when>
<xsl:otherwise>
<div align="block" style="width:100%">
<a href="javascript:;" onmousedown="{$call}">[-+]</a><![CDATA[...]]>
<span style="font-size:125%;font-weight:bold">Test fixture <xsl:value-of select="@name"/> (<xsl:value-of select="@description"/>) [<xsl:value-of select="@time"/> secs]</span>
<![CDATA[...]]><a href="#top">[To top]</a>
</div>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="@success='False'">
<xsl:variable name="visible" select="'margin-left:30px;display:block'"/>
<div style="{$visible}" id="{$name}">
<xsl:for-each select="results">
<xsl:for-each select="test-case">
<xsl:call-template name="TestCaseTempl" />
</xsl:for-each>
<xsl:for-each select="test-suite">
<xsl:call-template name="TestFixtureTempl"/>
</xsl:for-each>
</xsl:for-each>
</div>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="visible" select="'margin-left:30px;display:none'"/>
<div style="{$visible}" id="{$name}">
<xsl:for-each select="results">
<xsl:for-each select="test-case">
<xsl:call-template name="TestCaseTempl" />
</xsl:for-each>
<xsl:for-each select="test-suite">
<xsl:call-template name="TestFixtureTempl"/>
</xsl:for-each>
</xsl:for-each>
</div>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="TestCaseTempl">
<div style="margin-left:10;display:block">
<p>
<table border="1" width="80%" style="border-width:1;border-style:solid;border-color:black;text-align:center">
<tr><td colspan="4"><b>Test case <xsl:value-of select="@name"/></b></td></tr>
<xsl:choose>
<xsl:when test="@executed='False'">
<xsl:variable name="tableCellColor" select="'background-color:yellow'"/>
<tr style="{$tableCellColor}">
<td>Time</td>
<td>Assertions</td>
</tr>
<tr style="{$tableCellColor}">
<td></td>
<td></td>
</tr>
</xsl:when>
<xsl:when test="@success='False'">
<xsl:variable name="tableCellColor" select="'background-color:red'"/>
<tr style="{$tableCellColor}">
<td>Time</td>
<td><xsl:value-of select="@time"/></td>
<td>Assertions</td>
<td><xsl:value-of select="@asserts"/></td>
</tr>
</xsl:when>
<xsl:when test = "@success='True'">
<xsl:variable name="tableCellColor" select="'background-color:lightgreen'"/>
<tr style="{$tableCellColor}">
<td>Time</td>
<td><xsl:value-of select="@time"/></td>
<td>Assertions</td>
<td><xsl:value-of select="@asserts"/></td>
</tr>
</xsl:when>
</xsl:choose>
<xsl:for-each select="failure">
<tr><td colspan="4"><xsl:value-of select="."/></td></tr>
</xsl:for-each>
<xsl:for-each select="reason">
<tr><td colspan="4"><xsl:value-of select="."/></td></tr>
</xsl:for-each>
</table>
</p>
<!--<xsl:choose>
<xsl:when test="@success='True'">
</div>
</xsl:when>
<xsl:otherwise>
</div>
</xsl:otherwise>
</xsl:choose>-->
</div>
</xsl:template>
</xsl:stylesheet> |
Priere de tester et de voir l'effet que ca fait. Je suis completement perdu à ce niveau et je ne sais pas par ou commencer pour que le protocole plus-haut ressemble á celui plus bas.
Comment puis-je m'en prendre?? Quelqu'un a-t-il une idée qui puisse m'aider?
Merci d'avance
Merlin