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é:
Voici une partie du fichier XML généré:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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");
A noter que j'ai dejà un fichier XSL (CppUnitFormater.xsl) avec lequel je transforme le fichier BasemathTest.xml.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
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:
Le fichier transformant le protocole ci-dessus est le NUnitFormater.xsl suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
Comment puis-je m'en prendre?? Quelqu'un a-t-il une idée qui puisse m'aider?
Merci d'avance
Merlin
Partager