Project

General

Profile

Download (17.9 KB) Statistics
| Branch: | Revision:

git_sitools_idoc / flarecast / cots / ant / apache-ant-1.8.1 / etc / junit-noframes.xsl @ d2a8c3fd

1
<?xml version="1.0"?>
2
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
3
        xmlns:lxslt="http://xml.apache.org/xslt"
4
        xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils">
5
<xsl:output method="html" indent="yes" encoding="US-ASCII"
6
  doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" />
7
<xsl:decimal-format decimal-separator="." grouping-separator="," />
8
<!--
9
   Licensed to the Apache Software Foundation (ASF) under one or more
10
   contributor license agreements.  See the NOTICE file distributed with
11
   this work for additional information regarding copyright ownership.
12
   The ASF licenses this file to You under the Apache License, Version 2.0
13
   (the "License"); you may not use this file except in compliance with
14
   the License.  You may obtain a copy of the License at
15

    
16
       http://www.apache.org/licenses/LICENSE-2.0
17

    
18
   Unless required by applicable law or agreed to in writing, software
19
   distributed under the License is distributed on an "AS IS" BASIS,
20
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21
   See the License for the specific language governing permissions and
22
   limitations under the License.
23
 -->
24

    
25
<xsl:param name="TITLE">Unit Test Results.</xsl:param>
26

    
27
<!--
28

    
29
 Sample stylesheet to be used with Ant JUnitReport output.
30

    
31
 It creates a non-framed report that can be useful to send via
32
 e-mail or such.
33

    
34
-->
35
<xsl:template match="testsuites">
36
    <html>
37
        <head>
38
            <title><xsl:value-of select="$TITLE"/></title>
39
    <style type="text/css">
40
      body {
41
        font:normal 68% verdana,arial,helvetica;
42
        color:#000000;
43
      }
44
      table tr td, table tr th {
45
          font-size: 68%;
46
      }
47
      table.details tr th{
48
        font-weight: bold;
49
        text-align:left;
50
        background:#a6caf0;
51
      }
52
      table.details tr td{
53
        background:#eeeee0;
54
      }
55

    
56
      p {
57
        line-height:1.5em;
58
        margin-top:0.5em; margin-bottom:1.0em;
59
      }
60
      h1 {
61
        margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
62
      }
63
      h2 {
64
        margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
65
      }
66
      h3 {
67
        margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
68
      }
69
      h4 {
70
        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
71
      }
72
      h5 {
73
        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
74
      }
75
      h6 {
76
        margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
77
      }
78
      .Error {
79
        font-weight:bold; color:red;
80
      }
81
      .Failure {
82
        font-weight:bold; color:purple;
83
      }
84
      .Properties {
85
        text-align:right;
86
      }
87
      </style>
88
      <script type="text/javascript" language="JavaScript">
89
        var TestCases = new Array();
90
        var cur;
91
        <xsl:for-each select="./testsuite">
92
            <xsl:apply-templates select="properties"/>
93
        </xsl:for-each>
94

    
95
       </script>
96
       <script type="text/javascript" language="JavaScript"><![CDATA[
97
        function displayProperties (name) {
98
          var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
99
          var doc = win.document;
100
          doc.open();
101
          doc.write("<html><head><title>Properties of " + name + "</title>");
102
          doc.write("<style>")
103
          doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
104
          doc.write("table tr td, table tr th { font-size: 68%; }");
105
          doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
106
          doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
107
          doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
108
          doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
109
          doc.write("</style>");
110
          doc.write("</head><body>");
111
          doc.write("<h3>Properties of " + name + "</h3>");
112
          doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
113
          doc.write("<table class='properties'>");
114
          doc.write("<tr><th>Name</th><th>Value</th></tr>");
115
          for (prop in TestCases[name]) {
116
            doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
117
          }
118
          doc.write("</table>");
119
          doc.write("</body></html>");
120
          doc.close();
121
          win.focus();
122
        }
123
      ]]>
124
      </script>
125
        </head>
126
        <body>
127
            <a name="top"></a>
128
            <xsl:call-template name="pageHeader"/>
129

    
130
            <!-- Summary part -->
131
            <xsl:call-template name="summary"/>
132
            <hr size="1" width="95%" align="left"/>
133

    
134
            <!-- Package List part -->
135
            <xsl:call-template name="packagelist"/>
136
            <hr size="1" width="95%" align="left"/>
137

    
138
            <!-- For each package create its part -->
139
            <xsl:call-template name="packages"/>
140
            <hr size="1" width="95%" align="left"/>
141

    
142
            <!-- For each class create the  part -->
143
            <xsl:call-template name="classes"/>
144

    
145
        </body>
146
    </html>
147
</xsl:template>
148

    
149

    
150

    
151
    <!-- ================================================================== -->
152
    <!-- Write a list of all packages with an hyperlink to the anchor of    -->
153
    <!-- of the package name.                                               -->
154
    <!-- ================================================================== -->
155
    <xsl:template name="packagelist">
156
        <h2>Packages</h2>
157
        Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers.
158
        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
159
            <xsl:call-template name="testsuite.test.header"/>
160
            <!-- list all packages recursively -->
161
            <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
162
                <xsl:sort select="@package"/>
163
                <xsl:variable name="testsuites-in-package" select="/testsuites/testsuite[./@package = current()/@package]"/>
164
                <xsl:variable name="testCount" select="sum($testsuites-in-package/@tests)"/>
165
                <xsl:variable name="errorCount" select="sum($testsuites-in-package/@errors)"/>
166
                <xsl:variable name="failureCount" select="sum($testsuites-in-package/@failures)"/>
167
                <xsl:variable name="timeCount" select="sum($testsuites-in-package/@time)"/>
168

    
169
                <!-- write a summary for the package -->
170
                <tr valign="top">
171
                    <!-- set a nice color depending if there is an error/failure -->
172
                    <xsl:attribute name="class">
173
                        <xsl:choose>
174
                            <xsl:when test="$failureCount &gt; 0">Failure</xsl:when>
175
                            <xsl:when test="$errorCount &gt; 0">Error</xsl:when>
176
                        </xsl:choose>
177
                    </xsl:attribute>
178
                    <td><a href="#{@package}"><xsl:value-of select="@package"/></a></td>
179
                    <td><xsl:value-of select="$testCount"/></td>
180
                    <td><xsl:value-of select="$errorCount"/></td>
181
                    <td><xsl:value-of select="$failureCount"/></td>
182
                    <td>
183
                    <xsl:call-template name="display-time">
184
                        <xsl:with-param name="value" select="$timeCount"/>
185
                    </xsl:call-template>
186
                    </td>
187
                    <td><xsl:value-of select="$testsuites-in-package/@timestamp"/></td>
188
                    <td><xsl:value-of select="$testsuites-in-package/@hostname"/></td>
189
                </tr>
190
            </xsl:for-each>
191
        </table>
192
    </xsl:template>
193

    
194

    
195
    <!-- ================================================================== -->
196
    <!-- Write a package level report                                       -->
197
    <!-- It creates a table with values from the document:                  -->
198
    <!-- Name | Tests | Errors | Failures | Time                            -->
199
    <!-- ================================================================== -->
200
    <xsl:template name="packages">
201
        <!-- create an anchor to this package name -->
202
        <xsl:for-each select="/testsuites/testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
203
            <xsl:sort select="@package"/>
204
                <a name="{@package}"></a>
205
                <h3>Package <xsl:value-of select="@package"/></h3>
206

    
207
                <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
208
                    <xsl:call-template name="testsuite.test.header"/>
209

    
210
                    <!-- match the testsuites of this package -->
211
                    <xsl:apply-templates select="/testsuites/testsuite[./@package = current()/@package]" mode="print.test"/>
212
                </table>
213
                <a href="#top">Back to top</a>
214
                <p/>
215
                <p/>
216
        </xsl:for-each>
217
    </xsl:template>
218

    
219
    <xsl:template name="classes">
220
        <xsl:for-each select="testsuite">
221
            <xsl:sort select="@name"/>
222
            <!-- create an anchor to this class name -->
223
            <a name="{@name}"></a>
224
            <h3>TestCase <xsl:value-of select="@name"/></h3>
225

    
226
            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
227
              <xsl:call-template name="testcase.test.header"/>
228
              <!--
229
              test can even not be started at all (failure to load the class)
230
              so report the error directly
231
              -->
232
                <xsl:if test="./error">
233
                    <tr class="Error">
234
                        <td colspan="4"><xsl:apply-templates select="./error"/></td>
235
                    </tr>
236
                </xsl:if>
237
                <xsl:apply-templates select="./testcase" mode="print.test"/>
238
            </table>
239
            <div class="Properties">
240
                <a>
241
                    <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
242
                    Properties &#187;
243
                </a>
244
            </div>
245
            <p/>
246

    
247
            <a href="#top">Back to top</a>
248
        </xsl:for-each>
249
    </xsl:template>
250

    
251
    <xsl:template name="summary">
252
        <h2>Summary</h2>
253
        <xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
254
        <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
255
        <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
256
        <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
257
        <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
258
        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
259
        <tr valign="top">
260
            <th>Tests</th>
261
            <th>Failures</th>
262
            <th>Errors</th>
263
            <th>Success rate</th>
264
            <th>Time</th>
265
        </tr>
266
        <tr valign="top">
267
            <xsl:attribute name="class">
268
                <xsl:choose>
269
                    <xsl:when test="$failureCount &gt; 0">Failure</xsl:when>
270
                    <xsl:when test="$errorCount &gt; 0">Error</xsl:when>
271
                </xsl:choose>
272
            </xsl:attribute>
273
            <td><xsl:value-of select="$testCount"/></td>
274
            <td><xsl:value-of select="$failureCount"/></td>
275
            <td><xsl:value-of select="$errorCount"/></td>
276
            <td>
277
                <xsl:call-template name="display-percent">
278
                    <xsl:with-param name="value" select="$successRate"/>
279
                </xsl:call-template>
280
            </td>
281
            <td>
282
                <xsl:call-template name="display-time">
283
                    <xsl:with-param name="value" select="$timeCount"/>
284
                </xsl:call-template>
285
            </td>
286

    
287
        </tr>
288
        </table>
289
        <table border="0" width="95%">
290
        <tr>
291
        <td style="text-align: justify;">
292
        Note: <i>failures</i> are anticipated and checked for with assertions while <i>errors</i> are unanticipated.
293
        </td>
294
        </tr>
295
        </table>
296
    </xsl:template>
297

    
298
  <!--
299
   Write properties into a JavaScript data structure.
300
   This is based on the original idea by Erik Hatcher (ehatcher@apache.org)
301
   -->
302
  <xsl:template match="properties">
303
    cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
304
    <xsl:for-each select="property">
305
    <xsl:sort select="@name"/>
306
        cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
307
    </xsl:for-each>
308
  </xsl:template>
309

    
310
<!-- Page HEADER -->
311
<xsl:template name="pageHeader">
312
    <h1><xsl:value-of select="$TITLE"/></h1>
313
    <table width="100%">
314
    <tr>
315
        <td align="left"></td>
316
        <td align="right">Designed for use with <a href='http://www.junit.org'>JUnit</a> and <a href='http://ant.apache.org/ant'>Ant</a>.</td>
317
    </tr>
318
    </table>
319
    <hr size="1"/>
320
</xsl:template>
321

    
322
<xsl:template match="testsuite" mode="header">
323
    <tr valign="top">
324
        <th width="80%">Name</th>
325
        <th>Tests</th>
326
        <th>Errors</th>
327
        <th>Failures</th>
328
        <th nowrap="nowrap">Time(s)</th>
329
    </tr>
330
</xsl:template>
331

    
332
<!-- class header -->
333
<xsl:template name="testsuite.test.header">
334
    <tr valign="top">
335
        <th width="80%">Name</th>
336
        <th>Tests</th>
337
        <th>Errors</th>
338
        <th>Failures</th>
339
        <th nowrap="nowrap">Time(s)</th>
340
        <th nowrap="nowrap">Time Stamp</th>
341
        <th>Host</th>
342
    </tr>
343
</xsl:template>
344

    
345
<!-- method header -->
346
<xsl:template name="testcase.test.header">
347
    <tr valign="top">
348
        <th>Name</th>
349
        <th>Status</th>
350
        <th width="80%">Type</th>
351
        <th nowrap="nowrap">Time(s)</th>
352
    </tr>
353
</xsl:template>
354

    
355

    
356
<!-- class information -->
357
<xsl:template match="testsuite" mode="print.test">
358
    <tr valign="top">
359
        <!-- set a nice color depending if there is an error/failure -->
360
        <xsl:attribute name="class">
361
            <xsl:choose>
362
                <xsl:when test="@failures[.&gt; 0]">Failure</xsl:when>
363
                <xsl:when test="@errors[.&gt; 0]">Error</xsl:when>
364
            </xsl:choose>
365
        </xsl:attribute>
366

    
367
        <!-- print testsuite information -->
368
        <td><a href="#{@name}"><xsl:value-of select="@name"/></a></td>
369
        <td><xsl:value-of select="@tests"/></td>
370
        <td><xsl:value-of select="@errors"/></td>
371
        <td><xsl:value-of select="@failures"/></td>
372
        <td>
373
            <xsl:call-template name="display-time">
374
                <xsl:with-param name="value" select="@time"/>
375
            </xsl:call-template>
376
        </td>
377
        <td><xsl:apply-templates select="@timestamp"/></td>
378
        <td><xsl:apply-templates select="@hostname"/></td>
379
    </tr>
380
</xsl:template>
381

    
382
<xsl:template match="testcase" mode="print.test">
383
    <tr valign="top">
384
        <xsl:attribute name="class">
385
            <xsl:choose>
386
                <xsl:when test="failure | error">Error</xsl:when>
387
            </xsl:choose>
388
        </xsl:attribute>
389
        <td><xsl:value-of select="@name"/></td>
390
        <xsl:choose>
391
            <xsl:when test="failure">
392
                <td>Failure</td>
393
                <td><xsl:apply-templates select="failure"/></td>
394
            </xsl:when>
395
            <xsl:when test="error">
396
                <td>Error</td>
397
                <td><xsl:apply-templates select="error"/></td>
398
            </xsl:when>
399
            <xsl:otherwise>
400
                <td>Success</td>
401
                <td></td>
402
            </xsl:otherwise>
403
        </xsl:choose>
404
        <td>
405
            <xsl:call-template name="display-time">
406
                <xsl:with-param name="value" select="@time"/>
407
            </xsl:call-template>
408
        </td>
409
    </tr>
410
</xsl:template>
411

    
412

    
413
<xsl:template match="failure">
414
    <xsl:call-template name="display-failures"/>
415
</xsl:template>
416

    
417
<xsl:template match="error">
418
    <xsl:call-template name="display-failures"/>
419
</xsl:template>
420

    
421
<!-- Style for the error and failure in the tescase template -->
422
<xsl:template name="display-failures">
423
    <xsl:choose>
424
        <xsl:when test="not(@message)">N/A</xsl:when>
425
        <xsl:otherwise>
426
            <xsl:value-of select="@message"/>
427
        </xsl:otherwise>
428
    </xsl:choose>
429
    <!-- display the stacktrace -->
430
    <code>
431
        <br/><br/>
432
        <xsl:call-template name="br-replace">
433
            <xsl:with-param name="word" select="."/>
434
        </xsl:call-template>
435
    </code>
436
    <!-- the later is better but might be problematic for non-21" monitors... -->
437
    <!--pre><xsl:value-of select="."/></pre-->
438
</xsl:template>
439

    
440
<xsl:template name="JS-escape">
441
    <xsl:param name="string"/>
442
    <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>
443
    <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),&quot;'&quot;,&quot;\&apos;&quot;)"/>
444
    <xsl:value-of select="$tmp2"/>
445
</xsl:template>
446

    
447

    
448
<!--
449
    template that will convert a carriage return into a br tag
450
    @param word the text from which to convert CR to BR tag
451
-->
452
<xsl:template name="br-replace">
453
    <xsl:param name="word"/>
454
    <xsl:choose>
455
      <xsl:when test="contains($word, '&#xa;')">
456
        <xsl:value-of select="substring-before($word, '&#xa;')"/>
457
        <br/>
458
        <xsl:call-template name="br-replace">
459
          <xsl:with-param name="word" select="substring-after($word, '&#xa;')"/>
460
        </xsl:call-template>
461
      </xsl:when>
462
      <xsl:otherwise>
463
	<xsl:value-of select="$word"/>
464
      </xsl:otherwise>
465
    </xsl:choose>
466
</xsl:template>
467

    
468
<xsl:template name="display-time">
469
    <xsl:param name="value"/>
470
    <xsl:value-of select="format-number($value,'0.000')"/>
471
</xsl:template>
472

    
473
<xsl:template name="display-percent">
474
    <xsl:param name="value"/>
475
    <xsl:value-of select="format-number($value,'0.00%')"/>
476
</xsl:template>
477

    
478
</xsl:stylesheet>