Mercurial > hg > Members > shoshi > webvirt
diff cake/tests/cases/libs/cake_test_case.test.php @ 0:261e66bd5a0c
hg init
author | Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 24 Jul 2011 21:08:31 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cake/tests/cases/libs/cake_test_case.test.php Sun Jul 24 21:08:31 2011 +0900 @@ -0,0 +1,502 @@ +<?php +/** + * CakeTestCaseTest file + * + * Test Case for CakeTestCase class + * + * PHP versions 4 and 5 + * + * CakePHP : Rapid Development Framework (http://cakephp.org) + * Copyright 2006-2010, Cake Software Foundation, Inc. + * + * Licensed under The MIT License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2006-2010, Cake Software Foundation, Inc. + * @link http://cakephp.org CakePHP Project + * @package cake + * @subpackage cake.cake.libs. + * @since CakePHP v 1.2.0.4487 + * @license MIT License (http://www.opensource.org/licenses/mit-license.php) + */ +App::import('Core', 'CakeTestCase'); + +if (!class_exists('AppController')) { + require_once LIBS . 'controller' . DS . 'app_controller.php'; +} elseif (!defined('APP_CONTROLLER_EXISTS')) { + define('APP_CONTROLLER_EXISTS', true); +} + +Mock::generate('CakeHtmlReporter'); +Mock::generate('CakeTestCase', 'CakeDispatcherMockTestCase'); + +SimpleTest::ignore('SubjectCakeTestCase'); +SimpleTest::ignore('CakeDispatcherMockTestCase'); + +/** + * SubjectCakeTestCase + * + * @package cake + * @subpackage cake.tests.cases.libs + */ +class SubjectCakeTestCase extends CakeTestCase { + +/** + * Feed a Mocked Reporter to the subject case + * prevents its pass/fails from affecting the real test + * + * @param string $reporter + * @access public + * @return void + */ + function setReporter(&$reporter) { + $this->_reporter = &$reporter; + } + +/** + * testDummy method + * + * @return void + * @access public + */ + function testDummy() { + } +} + +/** + * CakeTestCaseTest + * + * @package cake + * @subpackage cake.tests.cases.libs + */ +class CakeTestCaseTest extends CakeTestCase { + +/** + * setUp + * + * @access public + * @return void + */ + function setUp() { + $this->_debug = Configure::read('debug'); + $this->Case =& new SubjectCakeTestCase(); + $reporter =& new MockCakeHtmlReporter(); + $this->Case->setReporter($reporter); + $this->Reporter = $reporter; + } + +/** + * tearDown + * + * @access public + * @return void + */ + function tearDown() { + Configure::write('debug', $this->_debug); + unset($this->Case); + unset($this->Reporter); + } + +/** + * endTest + * + * @access public + * @return void + */ + function endTest() { + App::build(); + } + +/** + * testAssertGoodTags + * + * @access public + * @return void + */ + function testAssertGoodTags() { + $this->Reporter->expectAtLeastOnce('paintPass'); + $this->Reporter->expectNever('paintFail'); + + $input = '<p>Text</p>'; + $pattern = array( + '<p', + 'Text', + '/p', + ); + $this->assertTrue($this->Case->assertTags($input, $pattern)); + + $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), 'Attributes in wrong order. %s'); + + $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), 'Whitespace consumption %s'); + + $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)); + } + +/** + * test that assertTags knows how to handle correct quoting. + * + * @return void + */ + function testAssertTagsQuotes() { + $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), 'Double quoted attributes %s'); + + $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), 'Single quoted attributes %s'); + + $input = "<a href='/test.html' class='active'>My link</a>"; + $pattern = array( + 'a' => array('href' => 'preg:/.*\.html/', 'class' => 'active'), + 'My link', + '/a' + ); + $this->assertTrue($this->Case->assertTags($input, $pattern), 'Single quoted attributes %s'); + } + +/** + * testNumericValuesInExpectationForAssertTags + * + * @access public + * @return void + */ + function testNumericValuesInExpectationForAssertTags() { + $value = 220985; + + $input = '<p><strong>' . $value . '</strong></p>'; + $pattern = array( + '<p', + '<strong', + $value, + '/strong', + '/p' + ); + $this->assertTrue($this->Case->assertTags($input, $pattern)); + + $input = '<p><strong>' . $value . '</strong></p><p><strong>' . $value . '</strong></p>'; + $pattern = array( + '<p', + '<strong', + $value, + '/strong', + '/p', + '<p', + '<strong', + $value, + '/strong', + '/p', + ); + $this->assertTrue($this->Case->assertTags($input, $pattern)); + + $input = '<p><strong>' . $value . '</strong></p><p id="' . $value . '"><strong>' . $value . '</strong></p>'; + $pattern = array( + '<p', + '<strong', + $value, + '/strong', + '/p', + 'p' => array('id' => $value), + '<strong', + $value, + '/strong', + '/p', + ); + $this->assertTrue($this->Case->assertTags($input, $pattern)); + } + + /** + * testBadAssertTags + * + * @access public + * @return void + */ + function testBadAssertTags() { + $this->Reporter->expectAtLeastOnce('paintFail'); + $this->Reporter->expectNever('paintPass'); + + $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)); + + $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 + * + * @access public + * @return void + */ + function testBefore() { + $this->Case->before('testDummy'); + $this->assertFalse(isset($this->Case->db)); + + $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')); + $this->assertEqual($this->Case->_fixtureClassMap['Post'], 'core.post'); + } + +/** + * testAfter + * + * @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!'); + $this->Case->end(); + } + +/** + * 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')); + } + +/** + * TestTestAction + * + * @access public + * @return void + */ + function testTestAction() { + App::build(array( + 'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS), + 'models' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'models' . DS), + 'views' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS), + 'controllers' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'controllers' . DS) + ), true); + + $result = $this->Case->testAction('/tests_apps/index', array('return' => 'view')); + $this->assertPattern('/^\s*This is the TestsAppsController index view\s*$/i', $result); + + $result = $this->Case->testAction('/tests_apps/index', array('return' => 'contents')); + $this->assertPattern('/\bThis is the TestsAppsController index view\b/i', $result); + $this->assertPattern('/<html/', $result); + $this->assertPattern('/<\/html>/', $result); + + $result = $this->Case->testAction('/tests_apps/some_method', array('return' => 'result')); + $this->assertEqual($result, 5); + + $result = $this->Case->testAction('/tests_apps/set_action', array('return' => 'vars')); + $this->assertEqual($result, array('var' => 'string')); + + $db =& ConnectionManager::getDataSource('test_suite'); + $fixture =& new PostFixture(); + $fixture->create($db); + + $result = $this->Case->testAction('/tests_apps_posts/add', array('return' => 'vars')); + $this->assertTrue(array_key_exists('posts', $result)); + $this->assertEqual(count($result['posts']), 1); + + $result = $this->Case->testAction('/tests_apps_posts/url_var/var1:value1/var2:val2', array( + 'return' => 'vars', + 'method' => 'get', + )); + $this->assertTrue(isset($result['params']['url']['url'])); + $this->assertEqual(array_keys($result['params']['named']), array('var1', 'var2')); + + $result = $this->Case->testAction('/tests_apps_posts/url_var/gogo/val2', array( + 'return' => 'vars', + 'method' => 'get', + )); + $this->assertEqual($result['params']['pass'], array('gogo', 'val2')); + + + $result = $this->Case->testAction('/tests_apps_posts/url_var', array( + 'return' => 'vars', + 'method' => 'get', + 'data' => array( + 'red' => 'health', + 'blue' => 'mana' + ) + )); + $this->assertTrue(isset($result['params']['url']['red'])); + $this->assertTrue(isset($result['params']['url']['blue'])); + $this->assertTrue(isset($result['params']['url']['url'])); + + $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')); + $fixture->drop($db); + + $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); + $db2 =& ConnectionManager::getDataSource('cake_test_case'); + + $fixture =& new PostFixture($db2); + $fixture->create($db2); + $fixture->insert($db2); + + $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); + $tables = $db2->listSources(); + $this->assertFalse(in_array('cake_testaction_test_suite_posts', $tables)); + + $fixture->drop($db2); + + $db =& ConnectionManager::getDataSource('test_suite'); + + //test that drop tables behaves as exepected with testAction + $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); + + $this->Case->dropTables = false; + $result = $this->Case->testAction('/tests_apps_posts/fixtured', array( + 'return' => 'vars', + 'fixturize' => true, + 'connection' => 'cake_test_case', + )); + + $tables = $db->listSources(); + $this->assertTrue(in_array('cake_testaction_test_suite_posts', $tables)); + + $fixture->drop($db); + $db =& ConnectionManager::getDataSource('test_suite'); + $db->config['prefix'] = $_backPrefix; + $fixture->drop($db); + } + +/** + * testSkipIf + * + * @return void + */ + function testSkipIf() { + $this->assertTrue($this->Case->skipIf(true)); + $this->assertFalse($this->Case->skipIf(false)); + } + +/** + * testTestDispatcher + * + * @access public + * @return void + */ + function testTestDispatcher() { + App::build(array( + 'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS), + 'models' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'models' . DS), + 'views' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS), + 'controllers' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'controllers' . DS) + ), true); + + $Dispatcher =& new CakeTestDispatcher(); + $Case =& new CakeDispatcherMockTestCase(); + + $Case->expectOnce('startController'); + $Case->expectOnce('endController'); + + $Dispatcher->testCase($Case); + $this->assertTrue(isset($Dispatcher->testCase)); + + $return = $Dispatcher->dispatch('/tests_apps/index', array('autoRender' => 0, 'return' => 1, 'requested' => 1)); + } +} \ No newline at end of file