parse_data(); $this->browser = $_SERVER['HTTP_USER_AGENT']; $this->date = time(); } protected function parse_data() { $this->result = $_POST['result']; // failed || passed $this->totalTime = $_POST['totalTime']; $this->numTestPasses = $_POST['numTestPasses']; $this->numTestFailures = $_POST['numTestFailures']; $this->numCommandPasses = $_POST['numCommandPasses']; $this->numCommandFailures = $_POST['numCommandFailures']; $this->numCommandErrors = $_POST['numCommandErrors']; foreach($_POST['tests'] as $test) { $case = new SeleniumTestCaseResult(); $case->name = $test['testcase']; $case->commands = $test['commands']; for($i = 0; $i < count($case->commands); $i++) { $trace = $case->commands[$i]['trace']; $trace = html_entity_decode($trace); $case->commands[$i]['trace'] = @unserialize($trace); if($case->commands[$i]['result'] == 'failed') { $case->result = 'failed'; array_push($case->failures, $case->commands[$i]); } } $this->suites[$case->name] = $case; } } } class SeleniumHtmlReporter { protected $test; public function __construct($result) { $this->test = $result; } protected function renderHeader() { $contents = << Functional Test Results EOD; return $contents; } public function render() { echo $this->renderHeader(); echo $this->renderBody(); echo $this->renderFooter(); } protected function renderBody() { /* SeleniumTestResult */ $test = $this->test; $total = count($test->suites); $date = @strftime('%Y-%m-%d %H:%M',$test->date); $contents = <<Functional Test Results
{$total} test cases completed, {$test->numTestPasses} passes ({$test->numCommandPasses} commands), and {$test->numTestFailures} fails ({$test->numCommandErrors} commands).
{$date}, {$test->browser}
EOD; $count = 1; foreach($test->suites as $suite) { foreach($suite->failures as $error) $contents .= $this->getErrorMsg($error, $count++); } return $contents; } protected function getErrorMsg($info, $count) { $args = array(); foreach($info['trace']['args'] as $arg) $args[] = "'{$arg}'"; $args = implode(",", $args); $parity = $count%2==0 ? 'even' : 'odd'; $msg = << #{$count}. "{$info['msg']}" in {$info['trace']['class']}::{$info['trace']['function']}({$args}) near {$info['trace']['file']}:({$info['trace']['line']}) EOD; return $msg; } protected function renderFooter() { return ""; } } ?>