Renaming paintDocumentHeader to paintDocumentStart

Renaming paintDocumentFooter to paintDocumentEnd
Moving features from CakeTestMenu, HtmlTestManager, and TextTestManager into the appropriate Reporters.
This commit is contained in:
Mark Story 2010-01-09 11:20:47 -05:00
parent c529d3c6e9
commit bdc84cd5d0
4 changed files with 132 additions and 67 deletions

View file

@ -137,7 +137,7 @@ class CakeTestSuiteDispatcher {
*/ */
function _testCaseList() { function _testCaseList() {
$Reporter =& $this->getReporter(); $Reporter =& $this->getReporter();
$Reporter->paintDocumentHeader(); $Reporter->paintDocumentStart();
$Reporter->paintTestMenu(); $Reporter->paintTestMenu();
$Reporter->testCaseList(); $Reporter->testCaseList();
$Reporter->paintDocumentEnd(); $Reporter->paintDocumentEnd();
@ -150,7 +150,7 @@ class CakeTestSuiteDispatcher {
*/ */
function _groupTestList() { function _groupTestList() {
$Reporter =& $this->getReporter(); $Reporter =& $this->getReporter();
$Reporter->paintDocumentHeader(); $Reporter->paintDocumentStart();
$Reporter->paintTestMenu(); $Reporter->paintTestMenu();
$Reporter->groupTestList(); $Reporter->groupTestList();
$Reporter->paintDocumentEnd(); $Reporter->paintDocumentEnd();

View file

@ -50,6 +50,42 @@ class CakeBaseReporter extends SimpleReporter {
*/ */
var $_timeDuration = 0; var $_timeDuration = 0;
/**
* Array of request parameters. Usually parsed GET params.
*
* @var array
*/
var $params = array();
/**
* Character set for the output of test reporting.
*
* @var string
* @access protected
*/
var $_characterSet;
/**
* Does nothing yet. The first output will
* be sent on the first test start.
*
* ### Params
*
* - show_passes - Should passes be shown
* - plugin - Plugin test being run?
* - app - App test being run.
* - case - The case being run
*
* @param string $charset The character set to output with. Defaults to UTF-8
* @param array $params Array of request parameters the reporter should use. See above.
* @access public
*/
function CakeBaseReporter($charset = 'utf-8', $params = array()) {
$this->SimpleReporter();
$this->_characterSet = $charset;
$this->params = $params;
}
/** /**
* Signals / Paints the beginning of a TestSuite executing. * Signals / Paints the beginning of a TestSuite executing.
* Starts the timer for the TestSuite execution time. * Starts the timer for the TestSuite execution time.
@ -113,24 +149,46 @@ class CakeBaseReporter extends SimpleReporter {
} }
/** /**
* paints the header of the response from the test suite. * Paints the start of the response from the test suite.
* Used to paint things like head elements in an html page. * Used to paint things like head elements in an html page.
* *
* @return void * @return void
*/ */
function paintDocumentHeader() { function paintDocumentStart() {
} }
/** /**
* paints the end of the response from the test suite. * Paints the end of the response from the test suite.
* Used to paint things like </body> in an html page. * Used to paint things like </body> in an html page.
* *
* @return void * @return void
*/ */
function paintDocumentFooter() { function paintDocumentEnd() {
} }
/**
* Paint a list of test sets, core, app, and plugin test sets
* available.
*
* @return void
*/
function paintTestMenu() {
}
/**
* Get the baseUrl if one is available.
*
* @return string The base url for the request.
*/
function baseUrl() {
if (!empty($_SERVER['PHP_SELF'])) {
return $_SERVER['PHP_SELF'];
}
return '';
}
} }
?> ?>

View file

@ -28,51 +28,6 @@ include_once dirname(__FILE__) . DS . 'cake_base_reporter.php';
*/ */
class CakeHtmlReporter extends CakeBaseReporter { class CakeHtmlReporter extends CakeBaseReporter {
/**
* Character set for the output of test reporting.
*
* @var string
* @access protected
*/
var $_character_set;
/**
* Toggle to show passes in output.
*
* @var boolean
* @access protected
*/
var $_show_passes = false;
/**
* Array of request parameters. Usually parsed GET params.
*
* @var array
*/
var $params = array();
/**
* Does nothing yet. The first output will
* be sent on the first test start. For use
* by a web browser.
*
* ### Params
*
* - show_passes - Should passes be shown
* - plugin - Plugin test being run?
* - app - App test being run.
* - case - The case being run
*
* @param string $character_set The character set to output with. Defaults to ISO-8859-1
* @param array $params Array of request parameters the reporter should use. See above.
* @access public
*/
function CakeHtmlReporter($character_set = 'ISO-8859-1', $params = array()) {
$this->SimpleReporter();
$this->_character_set = !empty($character_set) ? $character_set : 'ISO-8859-1';
$this->params = $params;
$this->_url = $_SERVER['PHP_SELF'];
}
/** /**
* Paints the top of the web page setting the * Paints the top of the web page setting the
* title to the name of the starting test. * title to the name of the starting test.
@ -83,18 +38,18 @@ class CakeHtmlReporter extends CakeBaseReporter {
*/ */
function paintHeader($testName) { function paintHeader($testName) {
$this->sendNoCacheHeaders(); $this->sendNoCacheHeaders();
$this->paintDocumentHeader(); $this->paintDocumentStart();
$this->paintTestMenu(); $this->paintTestMenu();
echo "<h2>$testName</h2>\n"; echo "<h2>$testName</h2>\n";
echo "<ul class='tests'>\n"; echo "<ul class='tests'>\n";
} }
/** /**
* Paints the document header contained in header.php * Paints the document start content contained in header.php
* *
* @return void * @return void
*/ */
function paintDocumentHeader() { function paintDocumentStart() {
$baseDir = $this->params['baseDir']; $baseDir = $this->params['baseDir'];
include CAKE_TESTS_LIB . 'templates' . DS . 'header.php'; include CAKE_TESTS_LIB . 'templates' . DS . 'header.php';
} }
@ -106,8 +61,8 @@ class CakeHtmlReporter extends CakeBaseReporter {
* @return void * @return void
*/ */
function paintTestMenu() { function paintTestMenu() {
$groups = $_SERVER['PHP_SELF'] . '?show=groups'; $groups = $this->baseUrl() . '?show=groups';
$cases = $_SERVER['PHP_SELF'] . '?show=cases'; $cases = $this->baseUrl() . '?show=cases';
$plugins = App::objects('plugin'); $plugins = App::objects('plugin');
include CAKE_TESTS_LIB . 'templates' . DS . 'menu.php'; include CAKE_TESTS_LIB . 'templates' . DS . 'menu.php';
} }
@ -134,15 +89,13 @@ class CakeHtmlReporter extends CakeBaseReporter {
if (1 > count($testCases)) { if (1 > count($testCases)) {
$buffer .= "<strong>EMPTY</strong>"; $buffer .= "<strong>EMPTY</strong>";
echo $buffer;
} }
foreach ($testCases as $testCaseFile => $testCase) { foreach ($testCases as $testCaseFile => $testCase) {
$title = explode(strpos($testCase, '\\') ? '\\' : '/', str_replace('.test.php', '', $testCase)); $title = explode(strpos($testCase, '\\') ? '\\' : '/', str_replace('.test.php', '', $testCase));
$title[count($title) - 1] = Inflector::camelize($title[count($title) - 1]); $title[count($title) - 1] = Inflector::camelize($title[count($title) - 1]);
$title = implode(' / ', $title); $title = implode(' / ', $title);
$buffer .= "<li><a href='" . $this->baseUrl() . "?case=" . urlencode($testCase) . $urlExtra ."'>" . $title . "</a></li>\n";
$buffer .= "<li><a href='" . $this->_url . "?case=" . urlencode($testCase) . $urlExtra ."'>" . $title . "</a></li>\n";
} }
$buffer .= "</ul>\n"; $buffer .= "</ul>\n";
echo $buffer; echo $buffer;
@ -154,7 +107,27 @@ class CakeHtmlReporter extends CakeBaseReporter {
* @return void * @return void
*/ */
function groupTestList() { function groupTestList() {
CakeTestMenu::groupTestList(); $groupTests = parent::groupTestList();
$app = $this->params['app'];
$plugin = $this->params['plugin'];
$buffer = "<h3>Core Test Groups:</h3>\n<ul>";
$urlExtra = null;
if ($app) {
$buffer = "<h3>App Test Groups:</h3>\n<ul>";
$urlExtra = '&app=true';
} else if ($plugin) {
$buffer = "<h3>" . Inflector::humanize($plugin) . " Test Groups:</h3>\n<ul>";
$urlExtra = '&plugin=' . $plugin;
}
$buffer .= "<li><a href='" . $this->baseURL() . "?group=all$urlExtra'>All tests</a></li>\n";
foreach ($groupTests as $groupTest) {
$buffer .= "<li><a href='" . $this->baseURL() . "?group={$groupTest}" . "{$urlExtra}'>" . $groupTest . "</a></li>\n";
}
$buffer .= "</ul>\n";
echo $buffer;
} }
/** /**
@ -232,8 +205,8 @@ class CakeHtmlReporter extends CakeBaseReporter {
$show = $this->_queryString($show); $show = $this->_queryString($show);
$query = $this->_queryString($query); $query = $this->_queryString($query);
echo "<p><a href='" . RUN_TEST_LINK . $show . "'>Run more tests</a> | <a href='" . RUN_TEST_LINK . $query . "&show_passes=1'>Show Passes</a> | \n"; echo "<p><a href='" . $this->baseUrl() . $show . "'>Run more tests</a> | <a href='" . RUN_TEST_LINK . $query . "&show_passes=1'>Show Passes</a> | \n";
echo " <a href='" . RUN_TEST_LINK . $query . "&amp;code_coverage=true'>Analyze Code Coverage</a></p>\n"; echo " <a href='" . $this->baseUrl() . $query . "&amp;code_coverage=true'>Analyze Code Coverage</a></p>\n";
} }
/** /**
@ -253,7 +226,7 @@ class CakeHtmlReporter extends CakeBaseReporter {
} }
/** /**
* paints the end of the document html. * Paints the end of the document html.
* *
* @return void * @return void
*/ */
@ -380,7 +353,7 @@ class CakeHtmlReporter extends CakeBaseReporter {
* @access protected * @access protected
*/ */
function _htmlEntities($message) { function _htmlEntities($message) {
return htmlentities($message, ENT_COMPAT, $this->_character_set); return htmlentities($message, ENT_COMPAT, $this->_characterSet);
} }
} }
?> ?>

View file

@ -26,6 +26,7 @@ include_once dirname(__FILE__) . DS . 'cake_base_reporter.php';
* @subpackage cake.tests.lib * @subpackage cake.tests.lib
*/ */
class CakeTextReporter extends CakeBaseReporter { class CakeTextReporter extends CakeBaseReporter {
/** /**
* Paints the end of the test with a summary of * Paints the end of the test with a summary of
* the passes and failures. * the passes and failures.
@ -59,9 +60,7 @@ class CakeTextReporter extends CakeBaseReporter {
* @access public * @access public
*/ */
function paintHeader($test_name) { function paintHeader($test_name) {
if (! SimpleReporter::inCli()) {
header('Content-type: text/plain'); header('Content-type: text/plain');
}
echo "$test_name\n"; echo "$test_name\n";
flush(); flush();
} }
@ -142,5 +141,40 @@ class CakeTextReporter extends CakeBaseReporter {
echo "$message\n"; echo "$message\n";
flush(); flush();
} }
/**
* Generate a test case list in plain text.
* Creates as series of url's for tests that can be run.
* One case per line.
*
* @return void
*/
function testCaseList() {
$testCases = parent::testCaseList();
$app = $this->params['app'];
$plugin = $this->params['plugin'];
$buffer = "Core Test Cases:\n";
$urlExtra = '';
if ($app) {
$buffer = "App Test Cases:\n";
$urlExtra = '&app=true';
} elseif ($plugin) {
$buffer = Inflector::humanize($plugin) . " Test Cases:\n";
$urlExtra = '&plugin=' . $plugin;
}
if (1 > count($testCases)) {
$buffer .= "EMPTY";
echo $buffer;
}
foreach ($testCases as $testCaseFile => $testCase) {
$buffer .= $_SERVER['SERVER_NAME'] . $this->baseUrl() ."?case=" . $testCase . "&output=text"."\n";
}
$buffer .= "\n";
echo $buffer;
}
} }
?> ?>