Removing 'group tests' PHPUnit implements them as testsuites, which do not need to be handled differently than test cases.

This commit is contained in:
mark_story 2010-06-26 12:58:03 -04:00
parent a166ea78cb
commit 206d4d4722
6 changed files with 13 additions and 219 deletions

View file

@ -31,7 +31,6 @@ class CakeTestSuiteDispatcher {
*/ */
public $params = array( public $params = array(
'codeCoverage' => false, 'codeCoverage' => false,
'group' => null,
'case' => null, 'case' => null,
'app' => false, 'app' => false,
'plugin' => null, 'plugin' => null,
@ -96,14 +95,10 @@ class CakeTestSuiteDispatcher {
$this->_checkPHPUnit(); $this->_checkPHPUnit();
$this->_parseParams(); $this->_parseParams();
if ($this->params['group']) { if ($this->params['case']) {
$this->_runGroupTest();
} elseif ($this->params['case']) {
$this->_runTestCase(); $this->_runTestCase();
} elseif (isset($_GET['show']) && $_GET['show'] == 'cases') {
$this->_testCaseList();
} else { } else {
$this->_groupTestList(); $this->_testCaseList();
} }
$output = ob_get_clean(); $output = ob_get_clean();
@ -170,19 +165,6 @@ class CakeTestSuiteDispatcher {
$Reporter->paintDocumentEnd(); $Reporter->paintDocumentEnd();
} }
/**
* Generates a page containing a list of group tests that could be run.
*
* @return void
*/
function _groupTestList() {
$Reporter =& $this->getReporter();
$Reporter->paintDocumentStart();
$Reporter->paintTestMenu();
$Reporter->groupTestList();
$Reporter->paintDocumentEnd();
}
/** /**
* Sets the Manager to use for the request. * Sets the Manager to use for the request.
* *
@ -243,20 +225,6 @@ class CakeTestSuiteDispatcher {
$this->getManager(); $this->getManager();
} }
/**
* Runs the group test case.
*
* @return void
*/
function _runGroupTest() {
$Reporter = CakeTestSuiteDispatcher::getReporter();
if ('all' == $this->params['group']) {
$this->Manager->runAllTests($Reporter);
} else {
$this->Manager->runGroupTest(ucfirst($this->params['group']), $Reporter, $this->params['codeCoverage']);
}
}
/** /**
* Runs a test case file. * Runs a test case file.
* *

View file

@ -44,13 +44,6 @@ abstract class BaseCoverageReport {
*/ */
public $pluginTest = false; public $pluginTest = false;
/**
* is the test a group test?
*
* @var string
*/
public $groupTest = false;
/** /**
* Array of test case file names. Used to do basename() matching with * Array of test case file names. Used to do basename() matching with
* files that have coverage to decide which results to show on page load. * files that have coverage to decide which results to show on page load.
@ -81,9 +74,6 @@ abstract class BaseCoverageReport {
if ($reporter->params['app']) { if ($reporter->params['app']) {
$this->appTest = true; $this->appTest = true;
} }
if ($reporter->params['group']) {
$this->groupTest = true;
}
if ($reporter->params['plugin']) { if ($reporter->params['plugin']) {
$this->pluginTest = Inflector::underscore($reporter->params['plugin']); $this->pluginTest = Inflector::underscore($reporter->params['plugin']);
} }

View file

@ -94,34 +94,6 @@ class CakeBaseReporter implements PHPUnit_Framework_TestListener {
$this->params = $params; $this->params = $params;
} }
/**
* Signals / Paints the beginning of a TestSuite executing.
* Starts the timer for the TestSuite execution time.
*
* @param string $test_name Name of the test that is being run.
* @param integer $size
* @return void
*/
public function paintGroupStart($test_name, $size) {
if (empty($this->_timeStart)) {
$this->_timeStart = microtime(true);
}
parent::paintGroupStart($test_name, $size);
}
/**
* Signals/Paints the end of a TestSuite. All test cases have run
* and timers are stopped.
*
* @param string $test_name Name of the test that is being run.
* @return void
*/
public function paintGroupEnd($test_name) {
$this->_timeEnd = microtime(true);
$this->_timeDuration = $this->_timeEnd - $this->_timeStart;
parent::paintGroupEnd($test_name);
}
/** /**
* Retrieves a list of test cases from the active Manager class, * Retrieves a list of test cases from the active Manager class,
* displaying it in the correct format for the reporter subclass * displaying it in the correct format for the reporter subclass
@ -133,17 +105,6 @@ class CakeBaseReporter implements PHPUnit_Framework_TestListener {
return $testList; return $testList;
} }
/**
* Retrieves a list of group test cases from the active Manager class
* displaying it in the correct format for the reporter subclass.
*
* @return void
*/
public function groupTestList() {
$testList = TestManager::getGroupTestList($this->params);
return $testList;
}
/** /**
* Paints the start 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.

View file

@ -61,7 +61,6 @@ class CakeHtmlReporter extends CakeBaseReporter {
* @return void * @return void
*/ */
public function paintTestMenu() { public function paintTestMenu() {
$groups = $this->baseUrl() . '?show=groups';
$cases = $this->baseUrl() . '?show=cases'; $cases = $this->baseUrl() . '?show=cases';
$plugins = App::objects('plugin'); $plugins = App::objects('plugin');
sort($plugins); sort($plugins);
@ -93,7 +92,7 @@ class CakeHtmlReporter extends CakeBaseReporter {
} }
foreach ($testCases as $testCaseFile => $testCase) { foreach ($testCases as $testCaseFile => $testCase) {
$title = explode(strpos($testCase, '\\') ? '\\' : '/', str_replace('.test.php', '', $testCase)); $title = explode(DS, 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->baseUrl() . "?case=" . urlencode($testCase) . $urlExtra ."'>" . $title . "</a></li>\n";
@ -102,35 +101,6 @@ class CakeHtmlReporter extends CakeBaseReporter {
echo $buffer; echo $buffer;
} }
/**
* Retrieves and paints the list of group tests in an HTML format.
*
* @return void
*/
public function 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;
}
/** /**
* Send the headers necessary to ensure the page is * Send the headers necessary to ensure the page is
* reloaded on every request. Otherwise you could be * reloaded on every request. Otherwise you could be
@ -201,9 +171,7 @@ class CakeHtmlReporter extends CakeBaseReporter {
*/ */
protected function _paintLinks() { protected function _paintLinks() {
$show = $query = array(); $show = $query = array();
if (!empty($this->params['group'])) { if (!empty($this->params['case'])) {
$show['show'] = 'groups';
} elseif (!empty($this->params['case'])) {
$show['show'] = 'cases'; $show['show'] = 'cases';
} }
@ -215,9 +183,7 @@ class CakeHtmlReporter extends CakeBaseReporter {
} }
if (!empty($this->params['case'])) { if (!empty($this->params['case'])) {
$query['case'] = $this->params['case']; $query['case'] = $this->params['case'];
} elseif (!empty($this->params['group'])) { }
$query['group'] = $this->params['group'];
}
$show = $this->_queryString($show); $show = $this->_queryString($show);
$query = $this->_queryString($query); $query = $this->_queryString($query);

View file

@ -23,8 +23,7 @@
<li> <li>
<span style="font-size: 18px">App</span> <span style="font-size: 18px">App</span>
<ul> <ul>
<li><a href='<?php echo $groups;?>&amp;app=true'>Test Groups</a></li> <li><a href='<?php echo $cases;?>&amp;app=true'>Tests</a></li>
<li><a href='<?php echo $cases;?>&amp;app=true'>Test Cases</a></li>
</ul> </ul>
</li> </li>
<?php <?php
@ -39,8 +38,7 @@ if (!empty($plugins)):
<li style="padding-top: 10px"> <li style="padding-top: 10px">
<span style="font-size: 18px"><?php echo $plugin;?></span> <span style="font-size: 18px"><?php echo $plugin;?></span>
<ul> <ul>
<li><a href='<?php echo $groups;?>&amp;plugin=<?php echo $pluginPath; ?>'>Test Groups</a></li> <li><a href='<?php echo $cases;?>&amp;plugin=<?php echo $pluginPath; ?>'>Tests</a></li>
<li><a href='<?php echo $cases;?>&amp;plugin=<?php echo $pluginPath; ?>'>Test Cases</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -49,8 +47,7 @@ if (!empty($plugins)):
<li style="padding-top: 10px"> <li style="padding-top: 10px">
<span style="font-size: 18px">Core</span> <span style="font-size: 18px">Core</span>
<ul> <ul>
<li><a href='<?php echo $groups;?>'>Test Groups</a></li> <li><a href='<?php echo $cases;?>'>Tests</a></li>
<li><a href='<?php echo $cases;?>'>Test Cases</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>

View file

@ -40,13 +40,6 @@ class TestManager {
*/ */
protected static $_testExtension = '.test.php'; protected static $_testExtension = '.test.php';
/**
* Extension suffix for group test case files.
*
* @var string
*/
protected static $_groupExtension = '.group.php';
/** /**
* Is this test an AppTest? * Is this test an AppTest?
* *
@ -148,35 +141,6 @@ class TestManager {
return $this->run($reporter, $codeCoverage); return $this->run($reporter, $codeCoverage);
} }
/**
* Runs a specific group test file
*
* @param string $groupTestName GroupTest that you want to run.
* @param PHPUnit_Framework_TestListener $reporter Reporter instance to use with the group test being run.
* @throws InvalidArgumentException if it was not possible to locate the filename for $groupTestName
* @return mixed Results of group test being run.
*/
public function runGroupTest($groupTestName, $reporter, $codeCoverage = false) {
$filePath = $this->_getTestsPath($reporter->params) . DS . strtolower($groupTestName) . $this->getExtension('group');
if (!file_exists($filePath) || strpos($filePath, '..')) {
throw new InvalidArgumentException(sprintf(
__('Group test %s cannot be found at %s', true),
htmlentities($groupTestName),
htmlentities($filePath)
)
);
}
require_once $filePath;
$class = basename($groupTestName);
$suite = $this->getTestSuite(sprintf(__('%s group test', true), $class));
$groupClassName = Inflector::classify($class) . 'GroupTest';
$suite->addTestSuite($groupClassName);
return $this->run($reporter, $codeCoverage);
}
/** /**
* Runs the main testSuite and attaches to it a reporter * Runs the main testSuite and attaches to it a reporter
* *
@ -260,35 +224,6 @@ class TestManager {
return $return; return $return;
} }
/**
* Returns a list of group tests found in the current valid test case path
*
* @access public
* @static
*/
public static function getGroupTestList($params) {
$directory = self::_getTestsPath($params);
$fileList = self::_getTestGroupFileList($directory);
$groupTests = array();
foreach ($fileList as $groupTestFile) {
$groupTests[$groupTestFile] = str_replace(self::$_groupExtension, '', basename($groupTestFile));
}
sort($groupTests);
return $groupTests;
}
/**
* Returns a list of group test files from a given directory
*
* @param string $directory The directory to get group test files from.
* @static
*/
protected static function &_getTestGroupFileList($directory = '.') {
$return = self::_getRecursiveFileList($directory, array('self', '_isTestGroupFile'));
return $return;
}
/** /**
* Gets a recursive list of files from a given directory and matches then against * Gets a recursive list of files from a given directory and matches then against
* a given fileTestFunction, like isTestCaseFile() * a given fileTestFunction, like isTestCaseFile()
@ -329,17 +264,6 @@ class TestManager {
return self::_hasExpectedExtension($file, self::$_testExtension); return self::_hasExpectedExtension($file, self::$_testExtension);
} }
/**
* Tests if a file has the correct group test extension
*
* @param string $file
* @return boolean Whether $file is a group
* @static
*/
protected static function _isTestGroupFile($file) {
return self::_hasExpectedExtension($file, self::$_groupExtension);
}
/** /**
* Check if a file has a specific extension * Check if a file has a specific extension
* *
@ -353,7 +277,7 @@ class TestManager {
} }
/** /**
* Returns the given path to the test files depending on a given type of tests (cases, group, ..) * Returns the given path to the test files depending on a given type of tests (core, app, plugin)
* *
* @param array $params Array of parameters for getting test paths. * @param array $params Array of parameters for getting test paths.
* Can contain app, type, and plugin params. * Can contain app, type, and plugin params.
@ -363,24 +287,12 @@ class TestManager {
protected static function _getTestsPath($params) { protected static function _getTestsPath($params) {
$result = null; $result = null;
if (!empty($params['app'])) { if (!empty($params['app'])) {
if ($params['show'] == 'cases' || !empty($params['case'])) { $result = APP_TEST_CASES;
$result = APP_TEST_CASES;
} else if ($params['show'] == 'groups') {
$result = APP_TEST_GROUPS;
}
} else if (!empty($params['plugin'])) { } else if (!empty($params['plugin'])) {
$_pluginBasePath = APP . 'plugins/' . $params['plugin'] . '/tests';
$pluginPath = App::pluginPath($params['plugin']); $pluginPath = App::pluginPath($params['plugin']);
if (file_exists($pluginPath . DS . 'tests')) { $result = $pluginPath . 'tests' . DS . 'cases';
$_pluginBasePath = $pluginPath . DS . 'tests'; } else {
} $result = CORE_TEST_CASES;
$result = $_pluginBasePath . DS . $type;
} elseif (!empty($params['show'])) {
if ($params['show'] == 'cases' || !empty($params['case'])) {
$result = CORE_TEST_CASES;
} else if ($params['show'] == 'groups') {
$result = CORE_TEST_GROUPS;
}
} }
return $result; return $result;
} }