2008-08-23 17:28:08 +00:00
|
|
|
<?php
|
|
|
|
/* SVN FILE: $Id$ */
|
|
|
|
/**
|
|
|
|
* CakeTestCase TestCase
|
|
|
|
*
|
|
|
|
* Test Case for CakeTestCase Class
|
|
|
|
*
|
|
|
|
* PHP versions 4 and 5
|
|
|
|
*
|
2008-10-30 17:30:26 +00:00
|
|
|
* CakePHP : Rapid Development Framework (http://www.cakephp.org)
|
2008-08-23 17:28:08 +00:00
|
|
|
* Copyright 2006-2008, Cake Software Foundation, Inc.
|
|
|
|
*
|
|
|
|
* Licensed under The MIT License
|
|
|
|
* Redistributions of files must retain the above copyright notice.
|
|
|
|
*
|
|
|
|
* @filesource
|
2008-10-30 17:30:26 +00:00
|
|
|
* @copyright Copyright 2006-2008, Cake Software Foundation, Inc.
|
|
|
|
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
|
|
|
|
* @package cake
|
|
|
|
* @subpackage cake.cake.libs.
|
|
|
|
* @since CakePHP v 1.2.0.4487
|
|
|
|
* @version $Revision$
|
|
|
|
* @modifiedby $LastChangedBy$
|
|
|
|
* @lastmodified $Date$
|
|
|
|
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
|
2008-08-23 17:28:08 +00:00
|
|
|
*/
|
|
|
|
App::import('Core', 'CakeTestCase');
|
2008-09-05 17:27:20 +00:00
|
|
|
App::import('Core', 'AppController');
|
2008-08-23 17:28:08 +00:00
|
|
|
|
|
|
|
Mock::generate('CakeHtmlReporter');
|
|
|
|
Mock::generate('CakeTestCase', 'CakeDispatcherMockTestCase');
|
|
|
|
|
|
|
|
SimpleTest::ignore('SubjectCakeTestCase');
|
|
|
|
SimpleTest::ignore('CakeDispatcherMockTestCase');
|
|
|
|
|
|
|
|
/**
|
|
|
|
* SubjectCakeTestCase
|
|
|
|
*
|
2008-10-30 17:30:26 +00:00
|
|
|
* @package cake.tests
|
|
|
|
* @subpackage cake.tests.cases.libs
|
2008-08-23 17:28:08 +00:00
|
|
|
*/
|
|
|
|
class SubjectCakeTestCase extends CakeTestCase {
|
|
|
|
/**
|
|
|
|
* Feed a Mocked Reporter to the subject case
|
|
|
|
* prevents its pass/fails from affecting the real test
|
|
|
|
*
|
2008-10-15 19:14:11 +00:00
|
|
|
* @param string $reporter
|
2008-08-23 17:28:08 +00:00
|
|
|
* @access public
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
function setReporter(&$reporter) {
|
|
|
|
$this->_reporter = &$reporter;
|
2008-10-15 19:14:11 +00:00
|
|
|
}
|
|
|
|
|
2008-08-23 17:28:08 +00:00
|
|
|
function testDummy() {
|
2008-10-15 19:14:11 +00:00
|
|
|
|
2008-08-23 17:28:08 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* CakeTestCaseTest
|
|
|
|
*
|
2008-10-30 17:30:26 +00:00
|
|
|
* @package cake.tests
|
|
|
|
* @subpackage cake.tests.cases.libs
|
2008-08-23 17:28:08 +00:00
|
|
|
**/
|
|
|
|
class CakeTestCaseTest extends CakeTestCase {
|
|
|
|
/**
|
|
|
|
* setUp
|
2008-10-15 19:14:11 +00:00
|
|
|
*
|
2008-08-23 17:28:08 +00:00
|
|
|
* @access public
|
|
|
|
* @return void
|
2008-10-15 19:14:11 +00:00
|
|
|
*/
|
2008-08-23 17:28:08 +00:00
|
|
|
function setUp() {
|
|
|
|
$this->Case =& new SubjectCakeTestCase();
|
|
|
|
$reporter =& new MockCakeHtmlReporter();
|
|
|
|
$this->Case->setReporter($reporter);
|
|
|
|
$this->Reporter = $reporter;
|
|
|
|
}
|
|
|
|
/**
|
2008-10-15 19:14:11 +00:00
|
|
|
* testAssertGoodTags
|
2008-08-23 17:28:08 +00:00
|
|
|
*
|
|
|
|
* @access public
|
|
|
|
* @return void
|
2008-10-15 19:14:11 +00:00
|
|
|
*/
|
2008-08-23 17:28:08 +00:00
|
|
|
function testAssertGoodTags() {
|
|
|
|
$this->Reporter->expectAtLeastOnce('paintPass');
|
|
|
|
$this->Reporter->expectNever('paintFail');
|
2008-10-15 19:14:11 +00:00
|
|
|
|
2008-08-23 17:28:08 +00:00
|
|
|
$input = '<p>Text</p>';
|
|
|
|
$pattern = array(
|
|
|
|
'<p',
|
|
|
|
'Text',
|
|
|
|
'/p',
|
|
|
|
);
|
|
|
|
$this->assertTrue($this->Case->assertTags($input, $pattern));
|
2008-10-15 19:14:11 +00:00
|
|
|
|
2008-08-23 17:28:08 +00:00
|
|
|
$input = '<a href="/test.html" class="active">My link</a>';
|
|
|
|
$pattern = array(
|
|
|
|
'a' => array('href' => '/test.html', 'class' => 'active'),
|
|
|
|
'My link',
|
|
|
|
'/a'
|
|
|
|
);
|
|
|
|
$this->assertTrue($this->Case->assertTags($input, $pattern));
|
|
|
|
|
|
|
|
$pattern = array(
|
|
|
|
'a' => array('class' => 'active', 'href' => '/test.html'),
|
|
|
|
'My link',
|
|
|
|
'/a'
|
|
|
|
);
|
|
|
|
$this->assertTrue($this->Case->assertTags($input, $pattern));
|
2008-10-15 19:14:11 +00:00
|
|
|
|
2008-08-23 17:28:08 +00:00
|
|
|
$input = "<a href=\"/test.html\"\t\n\tclass=\"active\"\tid=\"primary\">\t<span>My link</span></a>";
|
|
|
|
$pattern = array(
|
|
|
|
'a' => array('id' => 'primary', 'href' => '/test.html', 'class' => 'active'),
|
|
|
|
'<span',
|
|
|
|
'My link',
|
|
|
|
'/span',
|
|
|
|
'/a'
|
|
|
|
);
|
|
|
|
$this->assertTrue($this->Case->assertTags($input, $pattern));
|
2008-10-15 19:14:11 +00:00
|
|
|
|
2008-08-23 17:28:08 +00:00
|
|
|
$input = '<p class="info"><a href="/test.html" class="active"><strong onClick="alert(\'hey\');">My link</strong></a></p>';
|
|
|
|
$pattern = array(
|
|
|
|
'p' => array('class' => 'info'),
|
|
|
|
'a' => array('class' => 'active', 'href' => '/test.html' ),
|
|
|
|
'strong' => array('onClick' => 'alert(\'hey\');'),
|
|
|
|
'My link',
|
|
|
|
'/strong',
|
|
|
|
'/a',
|
|
|
|
'/p'
|
|
|
|
);
|
|
|
|
$this->assertTrue($this->Case->assertTags($input, $pattern));
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* testBadAssertTags
|
2008-10-15 19:14:11 +00:00
|
|
|
*
|
2008-08-23 17:28:08 +00:00
|
|
|
* @access public
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
function testBadAssertTags() {
|
|
|
|
$this->Reporter->expectAtLeastOnce('paintFail');
|
|
|
|
$this->Reporter->expectNever('paintPass');
|
2008-10-15 19:14:11 +00:00
|
|
|
|
2008-08-23 17:28:08 +00:00
|
|
|
$input = '<a href="/test.html" class="active">My link</a>';
|
|
|
|
$pattern = array(
|
|
|
|
'a' => array('hRef' => '/test.html', 'clAss' => 'active'),
|
|
|
|
'My link',
|
|
|
|
'/a'
|
|
|
|
);
|
|
|
|
$this->assertFalse($this->Case->assertTags($input, $pattern));
|
2008-10-15 19:14:11 +00:00
|
|
|
|
2008-08-23 17:28:08 +00:00
|
|
|
$input = '<a href="/test.html" class="active">My link</a>';
|
|
|
|
$pattern = array(
|
|
|
|
'<a' => array('href' => '/test.html', 'class' => 'active'),
|
|
|
|
'My link',
|
|
|
|
'/a'
|
|
|
|
);
|
|
|
|
$this->assertFalse($this->Case->assertTags($input, $pattern));
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* testBefore
|
2008-10-15 19:14:11 +00:00
|
|
|
*
|
2008-08-23 17:28:08 +00:00
|
|
|
* @access public
|
|
|
|
* @return void
|
2008-10-15 19:14:11 +00:00
|
|
|
*/
|
2008-08-23 17:28:08 +00:00
|
|
|
function testBefore() {
|
|
|
|
$this->Case->before('testDummy');
|
|
|
|
$this->assertFalse(isset($this->Case->db));
|
2008-10-15 19:14:11 +00:00
|
|
|
|
2008-08-23 17:28:08 +00:00
|
|
|
$this->Case->fixtures = array('core.post');
|
|
|
|
$this->Case->before('start');
|
|
|
|
$this->assertTrue(isset($this->Case->db));
|
|
|
|
$this->assertTrue(isset($this->Case->_fixtures['core.post']));
|
|
|
|
$this->assertTrue(is_a($this->Case->_fixtures['core.post'], 'CakeTestFixture'));
|
2008-10-15 19:14:11 +00:00
|
|
|
$this->assertEqual($this->Case->_fixtureClassMap['Post'], 'core.post');
|
2008-08-23 17:28:08 +00:00
|
|
|
}
|
|
|
|
/**
|
|
|
|
* testAfter
|
2008-10-15 19:14:11 +00:00
|
|
|
*
|
2008-08-23 17:28:08 +00:00
|
|
|
* @access public
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
function testAfter() {
|
|
|
|
$this->Case->after('testDummy');
|
|
|
|
$this->assertFalse($this->Case->__truncated);
|
|
|
|
|
|
|
|
$this->Case->fixtures = array('core.post');
|
|
|
|
$this->Case->before('start');
|
|
|
|
$this->Case->start();
|
|
|
|
$this->Case->after('testDummy');
|
|
|
|
$this->assertTrue($this->Case->__truncated);
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* testLoadFixtures
|
|
|
|
*
|
|
|
|
* @access public
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
function testLoadFixtures() {
|
|
|
|
$this->Case->fixtures = array('core.post');
|
|
|
|
$this->Case->autoFixtures = false;
|
|
|
|
$this->Case->before('start');
|
|
|
|
$this->expectError();
|
|
|
|
$this->Case->loadFixtures('Wrong!');
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* testGetTests Method
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
* @access public
|
|
|
|
*/
|
|
|
|
function testGetTests() {
|
|
|
|
$result = $this->Case->getTests();
|
|
|
|
$this->assertEqual(array_slice($result, 0, 2), array('start', 'startCase'));
|
|
|
|
$this->assertEqual(array_slice($result, -2), array('endCase', 'end'));
|
|
|
|
}
|
2008-10-15 19:14:11 +00:00
|
|
|
|
2008-08-23 17:28:08 +00:00
|
|
|
/**
|
|
|
|
* TestTestAction
|
|
|
|
*
|
|
|
|
* @access public
|
|
|
|
* @return void
|
|
|
|
**/
|
|
|
|
function testTestAction() {
|
2008-09-09 05:41:56 +00:00
|
|
|
$_back = array(
|
|
|
|
'controller' => Configure::read('controllerPaths'),
|
|
|
|
'view' => Configure::read('viewPaths'),
|
2008-10-15 19:14:11 +00:00
|
|
|
'model' => Configure::read('modelPaths'),
|
2008-09-09 05:41:56 +00:00
|
|
|
'plugin' => Configure::read('pluginPaths')
|
|
|
|
);
|
2008-08-23 17:28:08 +00:00
|
|
|
Configure::write('controllerPaths', array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'controllers' . DS));
|
|
|
|
Configure::write('viewPaths', array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS));
|
2008-10-15 19:14:11 +00:00
|
|
|
Configure::write('modelPaths', array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'models' . DS));
|
2008-08-23 17:28:08 +00:00
|
|
|
Configure::write('pluginPaths', array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS));
|
2008-10-15 19:14:11 +00:00
|
|
|
|
2008-08-23 17:28:08 +00:00
|
|
|
$result = $this->Case->testAction('/tests_apps/index', array('return' => 'view'));
|
|
|
|
$this->assertPattern('/This is the TestsAppsController index view/', $result);
|
2008-09-09 05:36:18 +00:00
|
|
|
|
2008-08-23 17:28:08 +00:00
|
|
|
$result = $this->Case->testAction('/tests_apps/index', array('return' => 'contents'));
|
|
|
|
$this->assertPattern('/This is the TestsAppsController index view/', $result);
|
|
|
|
$this->assertPattern('/<html/', $result);
|
|
|
|
$this->assertPattern('/<\/html>/', $result);
|
2008-09-09 05:36:18 +00:00
|
|
|
|
2008-08-23 17:28:08 +00:00
|
|
|
$result = $this->Case->testAction('/tests_apps/some_method', array('return' => 'result'));
|
|
|
|
$this->assertEqual($result, 5);
|
2008-10-15 19:14:11 +00:00
|
|
|
|
2008-08-23 17:28:08 +00:00
|
|
|
$result = $this->Case->testAction('/tests_apps/set_action', array('return' => 'vars'));
|
|
|
|
$this->assertEqual($result, array('var' => 'string'));
|
2008-09-09 05:36:18 +00:00
|
|
|
|
|
|
|
$result = $this->Case->testAction('/tests_apps_posts/add', array('return' => 'vars'));
|
2008-09-09 05:41:56 +00:00
|
|
|
$this->assertTrue(array_key_exists('posts', $result));
|
|
|
|
$this->assertEqual(count($result['posts']), 1);
|
2008-10-15 19:14:11 +00:00
|
|
|
|
2008-09-09 16:48:52 +00:00
|
|
|
$result = $this->Case->testAction('/tests_apps_posts/url_var/var1:value1/var2:val2', array(
|
|
|
|
'return' => 'vars',
|
|
|
|
'method' => 'get',
|
|
|
|
));
|
2008-10-04 16:35:53 +00:00
|
|
|
$this->assertTrue(isset($result['params']['url']['url']));
|
|
|
|
$this->assertTrue(isset($result['params']['url']['output']));
|
2008-09-09 16:48:52 +00:00
|
|
|
$this->assertEqual(array_keys($result['params']['named']), array('var1', 'var2'));
|
2008-10-15 19:14:11 +00:00
|
|
|
|
2008-09-09 16:48:52 +00:00
|
|
|
$result = $this->Case->testAction('/tests_apps_posts/url_var/gogo/val2', array(
|
|
|
|
'return' => 'vars',
|
|
|
|
'method' => 'get',
|
|
|
|
));
|
|
|
|
$this->assertEqual($result['params']['pass'], array('gogo', 'val2'));
|
2008-10-15 19:14:11 +00:00
|
|
|
|
2008-09-09 16:48:52 +00:00
|
|
|
$result = $this->Case->testAction('/tests_apps_posts/url_var', array(
|
|
|
|
'return' => 'vars',
|
|
|
|
'method' => 'get',
|
|
|
|
'data' => array(
|
|
|
|
'red' => 'health',
|
|
|
|
'blue' => 'mana'
|
|
|
|
)
|
|
|
|
));
|
2008-10-04 16:35:53 +00:00
|
|
|
$this->assertTrue(isset($result['params']['url']['output']));
|
|
|
|
$this->assertTrue(isset($result['params']['url']['red']));
|
|
|
|
$this->assertTrue(isset($result['params']['url']['blue']));
|
|
|
|
$this->assertTrue(isset($result['params']['url']['url']));
|
2008-10-15 19:14:11 +00:00
|
|
|
|
2008-09-09 16:48:52 +00:00
|
|
|
$result = $this->Case->testAction('/tests_apps_posts/post_var', array(
|
|
|
|
'return' => 'vars',
|
|
|
|
'method' => 'post',
|
|
|
|
'data' => array(
|
|
|
|
'name' => 'is jonas',
|
|
|
|
'pork' => 'and beans',
|
|
|
|
)
|
|
|
|
));
|
|
|
|
$this->assertEqual(array_keys($result['data']), array('name', 'pork'));
|
2008-09-09 05:41:56 +00:00
|
|
|
|
2008-10-17 16:39:39 +00:00
|
|
|
$db =& ConnectionManager::getDataSource('test_suite');
|
|
|
|
|
|
|
|
$_backPrefix = $db->config['prefix'];
|
|
|
|
$db->config['prefix'] = 'cake_testaction_test_suite_';
|
|
|
|
|
|
|
|
$config = $db->config;
|
|
|
|
$config['prefix'] = 'cake_testcase_test_';
|
|
|
|
|
|
|
|
ConnectionManager::create('cake_test_case', $config);
|
|
|
|
$db =& ConnectionManager::getDataSource('cake_test_case');
|
|
|
|
$fixture =& new PostFixture($db);
|
|
|
|
$fixture->create($db);
|
|
|
|
$fixture->insert($db);
|
|
|
|
|
|
|
|
$result = $this->Case->testAction('/tests_apps_posts/fixtured', array(
|
|
|
|
'return' => 'vars',
|
|
|
|
'fixturize' => true,
|
|
|
|
'connection' => 'cake_test_case',
|
|
|
|
));
|
|
|
|
$this->assertTrue(isset($result['posts']));
|
|
|
|
$this->assertEqual(count($result['posts']), 3);
|
|
|
|
|
|
|
|
$fixture->drop($db);
|
|
|
|
|
|
|
|
$db =& ConnectionManager::getDataSource('test_suite');
|
|
|
|
$db->config['prefix'] = $_backPrefix;
|
|
|
|
$fixture->drop($db);
|
|
|
|
|
2008-10-15 19:14:11 +00:00
|
|
|
Configure::write('modelPaths', $_back['model']);
|
2008-09-09 05:41:56 +00:00
|
|
|
Configure::write('controllerPaths', $_back['controller']);
|
|
|
|
Configure::write('viewPaths', $_back['view']);
|
|
|
|
Configure::write('pluginPaths', $_back['plugin']);
|
2008-09-09 05:36:18 +00:00
|
|
|
}
|
2008-08-23 17:28:08 +00:00
|
|
|
/**
|
|
|
|
* testSkipIf
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
**/
|
|
|
|
function testSkipIf() {
|
|
|
|
$this->assertTrue($this->Case->skipIf(true));
|
|
|
|
$this->assertFalse($this->Case->skipIf(false));
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* testTestDispatcher
|
|
|
|
*
|
|
|
|
* @access public
|
|
|
|
* @return void
|
2008-09-09 05:36:18 +00:00
|
|
|
*/
|
2008-08-23 17:28:08 +00:00
|
|
|
function testTestDispatcher() {
|
|
|
|
$_back = array(
|
|
|
|
'controller' => Configure::read('controllerPaths'),
|
|
|
|
'view' => Configure::read('viewPaths'),
|
|
|
|
'plugin' => Configure::read('pluginPaths')
|
|
|
|
);
|
|
|
|
Configure::write('controllerPaths', array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'controllers' . DS));
|
|
|
|
Configure::write('viewPaths', array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS));
|
|
|
|
Configure::write('pluginPaths', array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS));
|
2008-10-15 19:14:11 +00:00
|
|
|
|
2008-08-23 17:28:08 +00:00
|
|
|
$Dispatcher =& new CakeTestDispatcher();
|
|
|
|
$Case =& new CakeDispatcherMockTestCase();
|
2008-10-15 19:14:11 +00:00
|
|
|
|
2008-08-23 17:28:08 +00:00
|
|
|
$Case->expectOnce('startController');
|
|
|
|
$Case->expectOnce('endController');
|
2008-10-15 19:14:11 +00:00
|
|
|
|
2008-08-23 17:28:08 +00:00
|
|
|
$Dispatcher->testCase($Case);
|
|
|
|
$this->assertTrue(isset($Dispatcher->testCase));
|
2008-10-15 19:14:11 +00:00
|
|
|
|
2008-08-23 17:28:08 +00:00
|
|
|
$return = $Dispatcher->dispatch('/tests_apps/index', array('autoRender' => 0, 'return' => 1, 'requested' => 1));
|
2008-09-09 05:41:56 +00:00
|
|
|
|
2008-08-23 17:28:08 +00:00
|
|
|
Configure::write('controllerPaths', $_back['controller']);
|
|
|
|
Configure::write('viewPaths', $_back['view']);
|
|
|
|
Configure::write('pluginPaths', $_back['plugin']);
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* tearDown
|
|
|
|
*
|
|
|
|
* @access public
|
|
|
|
* @return void
|
2008-10-15 19:14:11 +00:00
|
|
|
*/
|
2008-08-23 17:28:08 +00:00
|
|
|
function tearDown() {
|
|
|
|
unset($this->Case);
|
|
|
|
unset($this->Reporter);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
?>
|