public function __construct() { parent::__construct(); $this->styleSheet .= <<<END_OF_STYLE_SHEET <xsl:output method="text" /> <xsl:template match="/testresults"> <xsl:text> ****************************************************************************** * * * TEST REPORT * * * ****************************************************************************** +----------------------------------------------------------------------------+ | SUMMARY | +----------------------------------------------------------------------------+ </xsl:text> <xsl:for-each select="testcase"> <xsl:text> Name: </xsl:text><xsl:value-of select="name"/> <xsl:text> Test ID: </xsl:text><xsl:value-of select="id"/> <xsl:text> Description: </xsl:text> <xsl:value-of select="description"/> <xsl:text> Test Passed: </xsl:text> <xsl:if test="passed='Yes'">Passed</xsl:if> <xsl:if test="passed='No'">Failed</xsl:if> </xsl:for-each> <xsl:text> +----------------------------------------------------------------------------+ | DETAILS | +----------------------------------------------------------------------------+ </xsl:text> <xsl:for-each select="testcase"> <xsl:text> Name: </xsl:text> <xsl:value-of select="name"/> <xsl:text> Test ID: </xsl:text> <xsl:value-of select="id"/> <xsl:text> Test Passed: </xsl:text> <xsl:if test="passed='Yes'"><xsl:text>Passed</xsl:text></xsl:if> <xsl:if test="passed='No'"><xsl:text>Failed</xsl:text></xsl:if> <xsl:text> TEST EVENTS ----------- </xsl:text> <xsl:for-each select="listOfEvents/event"> <xsl:text> </xsl:text> <xsl:value-of select="time" /> <xsl:text> </xsl:text> <xsl:choose> <xsl:when test="type='PASS'"> <xsl:text>Test step success Reason: </xsl:text> <xsl:value-of select="reason" /> <xsl:text> Message: </xsl:text> <xsl:value-of select="message" /> <xsl:text> Actual value type: </xsl:text> <xsl:value-of select="actual/type" /> <xsl:text> Actual value: </xsl:text> <xsl:value-of select="actual/value" /> <xsl:text> Comparison value type: </xsl:text> <xsl:value-of select="comparison/type" /> <xsl:text> Comparison value: </xsl:text> <xsl:value-of select="comparison/value" /> <xsl:text> File: </xsl:text> <xsl:value-of select="file" /> <xsl:text> at line </xsl:text> <xsl:value-of select="line" /> <xsl:text> </xsl:text> </xsl:when> <xsl:when test="type='PASS_MSG'"> <xsl:text>Test step success Message: </xsl:text> <xsl:value-of select="message" /> <xsl:text> File: </xsl:text> <xsl:value-of select="file" /> <xsl:text> at line </xsl:text> <xsl:value-of select="line" /> <xsl:text> </xsl:text> </xsl:when> <xsl:when test="type='FAIL'"> <xsl:text>Test step failed Reason: </xsl:text> <xsl:value-of select="reason" /> <xsl:text> Message: </xsl:text> <xsl:value-of select="message" /> <xsl:text> Actual value type: </xsl:text> <xsl:value-of select="actual/type" /> <xsl:text> Actual value: </xsl:text> <xsl:value-of select="actual/value" /> <xsl:text> Comparison value type: </xsl:text> <xsl:value-of select="comparison/type" /> <xsl:text> Comparison value: </xsl:text> <xsl:value-of select="comparison/value" /> <xsl:text> File: </xsl:text> <xsl:value-of select="file" /> <xsl:text> at line </xsl:text> <xsl:value-of select="line" /> <xsl:text> </xsl:text> </xsl:when> <xsl:when test="type='FAIL_MSG'"> <xsl:text>Test step failed Message: </xsl:text> <xsl:value-of select="message" /> <xsl:text> File: </xsl:text> <xsl:value-of select="file" /> <xsl:text> at line </xsl:text> <xsl:value-of select="line" /> <xsl:text> </xsl:text> </xsl:when> <xsl:when test="type='ERROR'"> <xsl:text>Test step in error Reason: </xsl:text> <xsl:value-of select="reason" /> <xsl:text> Message: </xsl:text> <xsl:value-of select="message" /> <xsl:text> Actual value type: </xsl:text> <xsl:value-of select="actual/type" /> <xsl:text> Actual value: </xsl:text> <xsl:value-of select="actual/value" /> <xsl:text> Comparison value type: </xsl:text> <xsl:value-of select="comparison/type" /> <xsl:text> Comparison value: </xsl:text> <xsl:value-of select="comparison/value" /> <xsl:text> File: </xsl:text> <xsl:value-of select="file" /> <xsl:text>at line </xsl:text> <xsl:value-of select="line" /> <xsl:text> </xsl:text> </xsl:when> <xsl:when test="type='USER_MSG'"> <xsl:text>Message: </xsl:text> <xsl:value-of select="message" /> <xsl:text> File: </xsl:text> <xsl:value-of select="file" /> <xsl:text> at line </xsl:text> <xsl:value-of select="line" /> <xsl:text> </xsl:text> </xsl:when> <xsl:when test="type='SYS_MSG'"> <xsl:value-of select="reason" /><xsl:text> </xsl:text> </xsl:when> <xsl:when test="type='EXCEPTION_THROWN'"> <xsl:text>Exception occured at: </xsl:text> <xsl:value-of select="message" /> <xsl:text> Exceptions details: </xsl:text> <xsl:value-of select="reason" /> <xsl:text> File: </xsl:text> <xsl:value-of select="file" /> <xsl:text> at line </xsl:text> <xsl:value-of select="line" /> <xsl:text> </xsl:text> </xsl:when> <xsl:when test="type='START_SETUP'"> <xsl:text>Set up phase started. </xsl:text> </xsl:when> <xsl:when test="type='END_SETUP'"> <xsl:text>Set up phase finished. </xsl:text> </xsl:when> <xsl:when test="type='START_RUN'"> <xsl:text>Run phase started. </xsl:text> </xsl:when> <xsl:when test="type='END_RUN'"> <xsl:text>Run phase finished. </xsl:text> </xsl:when> <xsl:when test="type='START_TEAR_DOWN'"> <xsl:text>Tear down phase started. </xsl:text> </xsl:when> <xsl:when test="type='END_TEAR_DOWN'"> <xsl:text>Tear down phase finished. </xsl:text> </xsl:when> </xsl:choose> </xsl:for-each> <xsl:text> ============================================================================== </xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet> END_OF_STYLE_SHEET; }
public function __construct() { parent::__construct(); $this->styleSheet .= <<<END_OF_STYLE_SHEET <xsl:output method="xml" indent="yes"/> <xsl:template match="/testresults"> <xsl:text disable-output-escaping="yes"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> </xsl:text> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta http-equiv="content-type" content="application/xhtml+xml; charset=US-ASCII" /> <title>Test Case Report</title> <style type="text/css"> /* http://meyerweb.com/eric/tools/css/reset/ */ /* v1.0 | 20080212 */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td { margin: 0; padding: 0; border: 0; outline: 0; font-size: 100%; vertical-align: baseline; background: transparent; } body { line-height: 1; } /* tables still need 'cellspacing="0"' in the markup */ table { border-collapse: collapse; border-spacing: 0; } /* END OF THE RESET BIT */ /* Stylesheet for the page */ html { background-color: #ECFAFF; } body { margin: 10px auto 10px auto; width: 980px; } h1 { margin-bottom: 5px; background-color: #BAEEA8; color: #BA21E0; font: bold 24px "Comic Sans MS", cursive; text-align: center; } h2 { font: 18px Impact, Charcoal, sans-serif; color: Black; margin-bottom: 12px; margin-top: 12px; } h3 { font: 14px "Arial Black", Gadget, sans-serif; color: #BA21E0; margin-top: 12px; margin-bottom: 12px; padding-top: 2px; padding-bottom: 2px; } a { text-decoration: none; color: inherit; } tr { color: Black; border: solid 1px black } td, th { border: solid 1px black; padding: 2px 2px 2px 2px; font: 12px Arial, Helvetica, sans-serif; } th { font-weight: bold; border-bottom-width: 2px; background-color: #A8E4FF; color: Black; border: solid 1px black } p { font: 12px Arial, Helvetica, sans-serif; margin-top: 10px; margin-bottom: 10px; } ul { margin-left: 15px; margin-top: 12px; font: 12px Arial, Helvetica, sans-serif; list-style: none; } strong { font-weight: bold; } .pass { background-color: #008000; color: White; } .passHeading { background-color: #008000; color: White; padding-left: 6px; padding-top: 2px; padding-bottom: 2px; } .fail { background-color: #900000; color: White; } .failHeading { background-color: #900000; color: White; padding-left: 6px; padding-top: 2px; padding-bottom: 2px; } .footnote { vertical-align: super; color: Black; } .centre { text-align: center; } .detailsTable { width: 980px; } .dateAndTimeColumn { width: 180px; } .eventColumn { width: 70px; text-align: center; } .reasonColumn { width: 170px; } .messageColumn { width: 170px; } .blankMessageColumn { width: 170px; text-align: center; } .detailsHeadingColumn { width: 105px; color: Yellow; } .testCaseIDColumn { width: 120px; } .nameColumn { width: 200px; } .descriptionColumn { width: 400px; } .hasPassedColumn { width: 60px; } .testCaseIDColumn { width: 120px; } .nameColumn { width: 200px; } .descriptionColumn { width: 400px; } .hasPassedColumn { width: 60px; text-align: center; } </style> </head> <body> <h1>Test Case Report</h1> <h2>Summary</h2> <table cellspacing="0" title="Summary of tests" summary="A list of tests carried out and if they passed or failed"> <thead> <tr> <th class="testCaseIDColumn">Test case ID</th> <th class="nameColumn">Name</th> <th class="descriptionColumn">Description</th> <th class="hasPassedColumn">Passed?</th> </tr> </thead> <tbody> <xsl:for-each select="testcase"> <xsl:if test="passed = 'Yes'"> <tr class="pass"> <td class="testCaseIDColumn"> <a href="#{generate-id(id)}"> <xsl:value-of select="id"/> </a> </td> <td class="nameColumn"><xsl:value-of select="name"/></td> <td class="descriptionColumn"><xsl:value-of select="description"/></td> <td class="hasPassedColumn"><xsl:value-of select="passed"/></td> </tr> </xsl:if> <xsl:if test="passed != 'Yes'"> <tr class="fail"> <td class="testCaseIDColumn"> <a href="#{generate-id(id)}"> <xsl:value-of select="id"/> </a> </td> <td class="nameColumn"><xsl:value-of select="name"/></td> <td class="descriptionColumn"><xsl:value-of select="description"/></td> <td class="hasPassedColumn"><xsl:value-of select="passed"/></td> </tr> </xsl:if> </xsl:for-each> </tbody> </table> <h2>Details</h2> <xsl:for-each select="testcase"> <xsl:if test="passed = 'Yes'"> <h3 class="passHeading"> <a id="{generate-id(id)}"> <xsl:value-of select="id"/> - <xsl:value-of select="name"/> </a> </h3> </xsl:if> <xsl:if test="passed != 'Yes'"> <h3 class="failHeading"> <a id="{generate-id(id)}"> <xsl:value-of select="id"/> - <xsl:value-of select="name"/> </a> </h3> </xsl:if> <p><xsl:value-of select="description"/></p> <table cellspacing="0" class="detailsTable" title="Test events" summary="A list of events that occurred during the test"> <thead> <tr> <th class="dateAndTimeColumn">Date & Time</th> <th class="eventColumn">Event<a href="#eventsKey" class="footnote">1</a></th> <th class="reasonColumn">Reason</th> <th class="messageColumn">Message</th> <th class="detailsColumn" colspan="2">Details</th> </tr> </thead> <tbody> <xsl:for-each select="listOfEvents/event"> <xsl:choose> <xsl:when test="type = 'PASS'"> <tr class="pass"> <td rowspan="6" class="dateAndTimeColumn"><xsl:value-of select="time"/></td> <td rowspan="6" class="eventColumn">PASS</td> <td rowspan="6" class="reasonColumn"><xsl:value-of select="reason"/></td> <td rowspan="6" class="messageColumn"><xsl:value-of select="message"/></td> <td class="detailsHeadingColumn">File:</td> <td><xsl:value-of select="file"/></td> </tr> <tr class="pass"> <td class="detailsHeadingColumn">Line:</td> <td><xsl:value-of select="line"/></td> </tr> <tr class="pass"> <td class="detailsHeadingColumn">Actual Type:</td> <td><pre><xsl:value-of select="actual/type"/></pre></td> </tr> <tr class="pass"> <td class="detailsHeadingColumn">Actual:</td> <td><pre><xsl:value-of select="actual/value"/></pre></td> </tr> <tr class="pass"> <td class="detailsHeadingColumn">Comparison Type:</td> <td><pre><xsl:value-of select="comparison/type"/></pre></td> </tr> <tr class="pass"> <td class="detailsHeadingColumn">Comparison:</td> <td><pre><xsl:value-of select="comparison/value"/></pre></td> </tr> </xsl:when> <xsl:when test="type = 'PASS_MSG'"> <tr class="pass"> <td rowspan="2" class="dateAndTimeColumn"><xsl:value-of select="time"/></td> <td rowspan="2" class="eventColumn">PASS_MSG</td> <td rowspan="2" class="reasonColumn">Users pass message</td> <td rowspan="2" class="messageColumn"><xsl:value-of select="message"/></td> <td class="detailsHeadingColumn">File:</td> <td><xsl:value-of select="file"/></td> </tr> <tr class="pass"> <td class="detailsHeadingColumn">Line:</td> <td><xsl:value-of select="line"/></td> </tr> </xsl:when> <xsl:when test="type = 'FAIL'"> <tr class="fail"> <td rowspan="6" class="dateAndTimeColumn"><xsl:value-of select="time"/></td> <td rowspan="6" class="eventColumn">FAIL</td> <td rowspan="6" class="reasonColumn"><xsl:value-of select="reason"/></td> <td rowspan="6" class="messageColumn"><xsl:value-of select="message"/></td> <td class="detailsHeadingColumn">File:</td> <td><xsl:value-of select="file"/></td> </tr> <tr class="fail"> <td class="detailsHeadingColumn">Line:</td> <td><xsl:value-of select="line"/></td> </tr> <tr class="fail"> <td class="detailsHeadingColumn">Actual Type:</td> <td><pre><xsl:value-of select="actual/type"/></pre></td> </tr> <tr class="fail"> <td class="detailsHeadingColumn">Actual:</td> <td><pre><xsl:value-of select="actual/value"/></pre></td> </tr> <tr class="fail"> <td class="detailsHeadingColumn">Comparison Type:</td> <td><pre><xsl:value-of select="comparison/type"/></pre></td> </tr> <tr class="fail"> <td class="detailsHeadingColumn">Comparison:</td> <td><pre><xsl:value-of select="comparison/value"/></pre></td> </tr> </xsl:when> <xsl:when test="type = 'FAIL_MSG'"> <tr class="fail"> <td rowspan="2" class="dateAndTimeColumn"><xsl:value-of select="time"/></td> <td rowspan="2" class="eventColumn">FAIL_MSG</td> <td rowspan="2" class="reasonColumn">Users fail message</td> <td rowspan="2" class="messageColumn"><xsl:value-of select="message"/></td> <td class="detailsHeadingColumn">File:</td> <td><xsl:value-of select="file"/></td> </tr> <tr class="fail"> <td class="detailsHeadingColumn">Line:</td> <td><xsl:value-of select="line"/></td> </tr> </xsl:when> <xsl:when test="type = 'ERROR'"> <tr class="fail"> <td rowspan="6" class="dateAndTimeColumn"><xsl:value-of select="time"/></td> <td rowspan="6" class="eventColumn">ERROR</td> <td rowspan="6" class="reasonColumn"><xsl:value-of select="reason"/></td> <td rowspan="6" class="messageColumn"><xsl:value-of select="message"/></td> <td class="detailsHeadingColumn">File:</td> <td><xsl:value-of select="file"/></td> </tr> <tr class="fail"> <td class="detailsHeadingColumn">Line:</td> <td><xsl:value-of select="line"/></td> </tr> <tr class="fail"> <td class="detailsHeadingColumn">Actual Type:</td> <td><pre><xsl:value-of select="actual/type"/></pre></td> </tr> <tr class="fail"> <td class="detailsHeadingColumn">Actual:</td> <td><pre><xsl:value-of select="actual/value"/></pre></td> </tr> <tr class="fail"> <td class="detailsHeadingColumn">Comparison Type:</td> <td><pre><xsl:value-of select="comparison/type"/></pre></td> </tr> <tr class="fail"> <td class="detailsHeadingColumn">Comparison:</td> <td><pre><xsl:value-of select="comparison/value"/></pre></td> </tr> </xsl:when> <xsl:when test="type = 'USER_MSG'"> <tr> <td class="dateAndTimeColumn"><xsl:value-of select="time"/></td> <td class="eventColumn">USER MSG</td> <td class="reasonColumn">User message</td> <td class="messageColumn"><xsl:value-of select="message"/></td> <td colspan="2" class="centre">-</td> </tr> </xsl:when> <xsl:when test="type = 'SYS_MSG'"> <tr> <td class="dateAndTimeColumn"><xsl:value-of select="time"/></td> <td class="eventColumn">SYS MSG</td> <td class="reasonColumn"><xsl:value-of select="reason"/></td> <td class="blankMessageColumn">-</td> <td colspan="2" class="centre">-</td> </tr> </xsl:when> <xsl:when test="type = 'EXCEPTION_THROWN'"> <tr class="fail"> <td rowspan="2" class="dateAndTimeColumn"><xsl:value-of select="time"/></td> <td rowspan="2" class="eventColumn">EXCEPTION</td> <td rowspan="2" class="reasonColumn"><xsl:value-of select="reason"/></td> <td rowspan="2" class="messageColumn"><xsl:value-of select="message"/></td> <td class="detailsHeadingColumn">File:</td> <td><xsl:value-of select="file"/></td> </tr> <tr class="fail"> <td class="detailsHeadingColumn">Line:</td> <td><xsl:value-of select="line"/></td> </tr> </xsl:when> <xsl:when test="type = 'START_SETUP'"> <tr> <td class="dateAndTimeColumn"><xsl:value-of select="time"/></td> <td class="eventColumn">TS</td> <td class="reasonColumn">'SetUp' started</td> <td class="blankMessageColumn">-</td> <td colspan="2" class="centre">-</td> </tr> </xsl:when> <xsl:when test="type = 'END_SETUP'"> <tr> <td class="dateAndTimeColumn"><xsl:value-of select="time"/></td> <td class="eventColumn">TS</td> <td class="reasonColumn">'SetUp' finished</td> <td class="blankMessageColumn">-</td> <td colspan="2" class="centre">-</td> </tr> </xsl:when> <xsl:when test="type = 'START_RUN'"> <tr> <td class="dateAndTimeColumn"><xsl:value-of select="time"/></td> <td class="eventColumn">TS</td> <td class="reasonColumn">'Run' started</td> <td class="blankMessageColumn">-</td> <td colspan="2" class="centre">-</td> </tr> </xsl:when> <xsl:when test="type = 'END_RUN'"> <tr> <td class="dateAndTimeColumn"><xsl:value-of select="time"/></td> <td class="eventColumn">TS</td> <td class="reasonColumn">'Run' finished</td> <td class="blankMessageColumn">-</td> <td colspan="2" class="centre">-</td> </tr> </xsl:when> <xsl:when test="type = 'START_TEAR_DOWN'"> <tr> <td class="dateAndTimeColumn"><xsl:value-of select="time"/></td> <td class="eventColumn">TS</td> <td class="reasonColumn">'TearDown' started</td> <td class="blankMessageColumn">-</td> <td colspan="2" class="centre">-</td> </tr> </xsl:when> <xsl:when test="type = 'END_TEAR_DOWN'"> <tr> <td class="dateAndTimeColumn"><xsl:value-of select="time"/></td> <td class="eventColumn">TS</td> <td class="reasonColumn">'TearDown' finished</td> <td class="blankMessageColumn">-</td> <td colspan="2" class="centre">-</td> </tr> </xsl:when> </xsl:choose> </xsl:for-each> </tbody> </table> </xsl:for-each> <h2><a id="eventsKey">Events key</a></h2> <p>A list of events that can occur in a test along with their meaning:</p> <ul> <li><strong>PASS</strong> - An assertion has passed successfully</li> <li><strong>PASS_MSG</strong> - A users pass message</li> <li><strong>FAIL</strong> - An assertion has failed</li> <li><strong>FAIL_MSG</strong> - A users fail message</li> <li><strong>ERROR</strong> - An assertion could not be carried out - need to fix the code!</li> <li><strong>USER MSG</strong> - A user message, for comentary</li> <li><strong>SYS MSG</strong> - A test system message</li> <li><strong>EXCEPTION</strong> - An exception has thrown and uncaught - need to fix the code!</li> <li><strong>TS</strong> - A time stamp marker</li> </ul> </body> </html> </xsl:template> </xsl:stylesheet> END_OF_STYLE_SHEET; }