From a053a1aa7cfb70a8c82b07987461065f4a5778db Mon Sep 17 00:00:00 2001 From: "mariano.iglesias" Date: Tue, 17 Apr 2007 04:27:43 +0000 Subject: [PATCH] Added new callbacks and ability to execute CakePHP URLs from CakeTestCase git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@4863 3807eeeb-6ff5-0310-8944-8be069107fe0 --- cake/tests/lib/cake_test_case.php | 164 ++++++++++++++++++++++-------- 1 file changed, 121 insertions(+), 43 deletions(-) diff --git a/cake/tests/lib/cake_test_case.php b/cake/tests/lib/cake_test_case.php index ace4d4548..33e7410d5 100644 --- a/cake/tests/lib/cake_test_case.php +++ b/cake/tests/lib/cake_test_case.php @@ -36,13 +36,88 @@ vendor('simpletest'.DS.'unit_tester'); * @subpackage cake.cake.tests.lib */ class CakeTestCase extends UnitTestCase { -/** - * Announces the start of a test. - * - * @param string $method Test method just started. - * - * @access public - */ + /** + * Methods used internally. + * + * @var array + * @access private + */ + var $methods = array('start', 'end', 'startcase', 'endcase', 'starttest', 'endtest'); + /** + * Called when a test case (group of methods) is about to start (to be overriden when needed.) + * + * @param string $method Test method about to get executed. + * + * @access protected + */ + function startCase() { + } + /** + * Called when a test case (group of methods) has been executed (to be overriden when needed.) + * + * @param string $method Test method about that was executed. + * + * @access protected + */ + function endCase() { + } + /** + * Called when a test case method is about to start (to be overriden when needed.) + * + * @param string $method Test method about to get executed. + * + * @access protected + */ + function startTest($method) { + } + /** + * Called when a test case method has been executed (to be overriden when needed.) + * + * @param string $method Test method about that was executed. + * + * @access protected + */ + function endTest($method) { + } + /** + * Executes a Cake URL, optionally getting the view rendering or what is returned + * when params['requested'] is set. + * + * @param string $url Cake URL to execute (e.g: /articles/view/455) + * @param string $requested Set to true if params['requested'] should be set, false otherwise + * @param array $data Data that will be sent to controller. E.g: array('Article' => array('id'=>4)) + * @param string $method Method to simulate posting of data to controller ('get' or 'post') + * + * @return mixed What is returned from action (if $requested is true), or view rendered html + * + * @access protected + */ + function requestAction($url, $requested = true, $data = null, $method = 'post') { + $params = array(); + + if (!$requested) { + $params['return'] = true; + } + + if (is_array($data) && !empty($data)) { + $data = array('data' => $data); + + if (low($method) == 'get') { + $_GET = $data; + } else { + $_POST = $data; + } + } + + return @Object::requestAction($url, $params); + } + /** + * Announces the start of a test. + * + * @param string $method Test method just started. + * + * @access public + */ function before($method) { parent::before($method); @@ -90,12 +165,16 @@ class CakeTestCase extends UnitTestCase { } } } + + if (!in_array(low($method), $this->methods)) { + $this->startTest($method); + } } -/** - * Runs as first test to create tables. - * - * @access public - */ + /** + * Runs as first test to create tables. + * + * @access public + */ function start() { if (isset($this->_fixtures) && isset($this->db)) { foreach($this->_fixtures as $fixture) { @@ -107,11 +186,11 @@ class CakeTestCase extends UnitTestCase { } } } -/** - * Runs as last test to drop tables. - * - * @access public - */ + /** + * Runs as last test to drop tables. + * + * @access public + */ function end() { if (isset($this->_fixtures) && isset($this->db)) { foreach(array_reverse($this->_fixtures) as $fixture) { @@ -123,14 +202,13 @@ class CakeTestCase extends UnitTestCase { } } } - -/** - * Announces the end of a test. - * - * @param string $method Test method just finished. - * - * @access public - */ + /** + * Announces the end of a test. + * + * @param string $method Test method just finished. + * + * @access public + */ function after($method) { if (isset($this->_fixtures) && isset($this->db) && !in_array(low($method), array('start', 'end'))) { foreach($this->_fixtures as $fixture) { @@ -141,31 +219,31 @@ class CakeTestCase extends UnitTestCase { } } } + + if (!in_array(low($method), $this->methods)) { + $this->endTest($method); + } parent::after($method); } -/** - * Gets a list of test names. Normally that will be all internal methods that start with the - * name "test". This method should be overridden if you want a different rule. - * - * @return array List of test names. - * - * @access public - */ + /** + * Gets a list of test names. Normally that will be all internal methods that start with the + * name "test". This method should be overridden if you want a different rule. + * + * @return array List of test names. + * + * @access public + */ function getTests() { - $methods = parent::getTests(); - - if (isset($this->fixtures)) { - $methods = am(am(array('start'), $methods), array('end')); - } + $methods = am(am(array('start', 'startCase'), parent::getTests()), array('endCase', 'end')); return $methods; } -/** - * Load fixtures specified in var $fixtures. - * - * @access private - */ + /** + * Load fixtures specified in var $fixtures. + * + * @access private + */ function _loadFixtures() { if (!isset($this->fixtures) || empty($this->fixtures)) { return;