| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 | <?phpnamespace mindplay\test\lib\ResultPrinter;use mindplay\test\lib\xTest;use mindplay\test\lib\xTestRunner;class WebResultPrinter extends ResultPrinter{    /**     * Prints the header before the test output.     *     * @param xTestRunner $testRunner Test runner.     * @param string      $pattern    Test filename pattern.     * @return void     */    public function suiteHeader(xTestRunner $testRunner, $pattern)    {        echo '<html>                   <head>                       <title>Unit Tests</title>                       <style type="text/css">                           table { border-collapse:collapse; }                           td, th { text-align:left; padding:2px 6px; border:solid 1px #aaa; }                       </style>                   </head>                   <body>                       <h2>Unit Tests</h2>';        echo '<h4>Codebase: ' . $testRunner->getRootPath() . '</h4>';        echo '<h4>Test Suite: ' . $pattern . '</h4>';    }    /**     * Prints the footer after the test output.     *     * @param xTestRunner $testRunner Test runner.     * @return void     */    public function suiteFooter(xTestRunner $testRunner)    {        echo '</body></html>';    }    /**     * Creates code coverage report.     *     * @param \PHP_CodeCoverage $coverage Code coverage collector.     * @return void     */    public function createCodeCoverageReport(\PHP_CodeCoverage $coverage = null)    {        if (!isset($coverage)) {            echo '<h3>Code coverage analysis unavailable</h3><p>To enable code coverage, the xdebug php module must be installed and enabled.</p>';            return;        }        $writer = new \PHP_CodeCoverage_Report_HTML;        $writer->process($coverage, FULL_PATH . '/test/runtime/coverage');        echo '<a href="runtime/coverage" target="_blank">Code coverage report</a>';    }    /**     * Prints test header.     *     * @param xTest $test Test.     * @return void     */    public function testHeader(xTest $test)    {        $class = get_class($test);        echo '<h3>Test Class: ' . htmlspecialchars($class) . '</h3>';        echo '<table id="' . $class . '-results"><tr><th>Test</th><th>Result</th></tr>';    }    /**     * Test case result.     *     * @param \ReflectionMethod $testCaseMethod Test case method.     * @param string            $resultColor    Result color.     * @param string            $resultMessage  Result message.     * @return void     */    public function testCaseResult(\ReflectionMethod $testCaseMethod, $resultColor, $resultMessage)    {        echo '<tr style="color:white; background:' . $resultColor . '"><td>(' . $testCaseMethod->getStartLine() . ') ';        echo '<a style="color:white" href="?' . $this->getTestCaseName($testCaseMethod) . '">' . $this->getTestCaseName($testCaseMethod, true) . '</a>';        echo '</td><td><pre>' . htmlspecialchars($resultMessage) . '</pre></td></tr>';    }    /**     * Prints test footer.     *     * @param xTest   $test   Test.     * @param integer $total  Total test case count.     * @param integer $passed Passed test case count.     * @return void     */    public function testFooter(xTest $test, $total, $passed)    {        echo '<tr style="background-color:gray; color:white"><tr><th>' . $total . ' Tests</th><th>';        if ($passed == $total) {            echo 'All Tests Passed' . PHP_EOL;        } else {            echo ($total - $passed) . ' Tests Failed' . PHP_EOL;        }        echo '</th></tr></table>';        if ($passed == $total) {            $class = get_class($test);            echo '<h4 id="' . $class . '-toggle" style="cursor:pointer" onclick="' . "document.getElementById('{$class}-results').style.display='table'; document.getElementById('{$class}-toggle').style.display='none'; return false;" . '">» All Tests Passed</h4><script type="text/javascript">document.getElementById("' . $class . '-results").style.display="none";</script>';        }    }}
 |