From 71af1261712492225c7cb846f3224834fd1df640 Mon Sep 17 00:00:00 2001 From: mark_story <mark@mark-story.com> Date: Wed, 14 Jul 2010 22:58:42 -0400 Subject: [PATCH] Changing HtmlReporter to print out testname and stack trace instead of trying to guess where things went wrong. --- .../tests/lib/reporter/cake_base_reporter.php | 4 +- .../tests/lib/reporter/cake_html_reporter.php | 42 ++++++++++--------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/cake/tests/lib/reporter/cake_base_reporter.php b/cake/tests/lib/reporter/cake_base_reporter.php index c7d7a7648..7f1eea9d7 100644 --- a/cake/tests/lib/reporter/cake_base_reporter.php +++ b/cake/tests/lib/reporter/cake_base_reporter.php @@ -159,7 +159,7 @@ class CakeBaseReporter implements PHPUnit_Framework_TestListener { * @param float $time */ public function addError(PHPUnit_Framework_Test $test, Exception $e, $time) { - $this->paintException($e); + $this->paintException($e, $test); } /** @@ -170,7 +170,7 @@ class CakeBaseReporter implements PHPUnit_Framework_TestListener { * @param float $time */ public function addFailure(PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e, $time) { - $this->paintFail($e); + $this->paintFail($e, $test); } /** diff --git a/cake/tests/lib/reporter/cake_html_reporter.php b/cake/tests/lib/reporter/cake_html_reporter.php index 27a482a87..e8c51e69e 100755 --- a/cake/tests/lib/reporter/cake_html_reporter.php +++ b/cake/tests/lib/reporter/cake_html_reporter.php @@ -227,29 +227,16 @@ class CakeHtmlReporter extends CakeBaseReporter { * the context of the other tests. * @return void */ - public function paintFail($message) { - $context = $message->getTrace(); - $realContext = $context[3]; - $class = new ReflectionClass($realContext['class']); - - $deeper = false; - if ($class->getParentClass()) { - $deeper = $class->getParentClass()->getName() === 'PHPUnit_Framework_TestCase'; - } - $deeper = $deeper || !$class->isSubclassOf('PHPUnit_Framework_TestCase'); - if ($deeper) { - $realContext = $context[4]; - $context = $context[3]; - } else { - $context = $context[2]; - } + public function paintFail($message, $test) { + $trace = $this->_getStackTrace($message); + $testName = get_class($test) . '(' . $test->getName() . ')'; echo "<li class='fail'>\n"; echo "<span>Failed</span>"; echo "<div class='msg'><pre>" . $this->_htmlEntities($message->toString()) . "</pre></div>\n"; - echo "<div class='msg'>" . sprintf(__('File: %s'), $context['file']) . "</div>\n"; - echo "<div class='msg'>" . sprintf(__('Method: %s'), $realContext['function']) . "</div>\n"; - echo "<div class='msg'>" . sprintf(__('Line: %s'), $context['line']) . "</div>\n"; + + echo "<div class='msg'>" . sprintf(__('Test case: %s'), $testName) . "</div>\n"; + echo "<div class='msg'>" . __('Stack trace:') . '<br />' . $trace . "</div>\n"; echo "</li>\n"; } @@ -278,7 +265,7 @@ class CakeHtmlReporter extends CakeBaseReporter { * @param Exception $exception Exception to display. * @return void */ - public function paintException($exception) { + public function paintException($exception, $test) { echo "<li class='fail'>\n"; echo "<span>Exception</span>"; $message = 'Unexpected exception of type [' . get_class($exception) . @@ -323,6 +310,21 @@ class CakeHtmlReporter extends CakeBaseReporter { return htmlentities($message, ENT_COMPAT, $this->_characterSet); } +/** + * Gets a formatted stack trace. + * + * @param Exception $e Exception to get a stack trace for. + * @return string Generated stack trace. + */ + protected function _getStackTrace(Exception $e) { + $trace = $e->getTrace(); + $out = array(); + foreach ($trace as $frame) { + $out[] = $frame['file'] . ' : ' . $frame['line']; + } + return implode('<br />', $out); + } + /** * A test suite started. *