Mercurial > hg > Members > shoshi > webvirt
diff cake/tests/cases/libs/view/theme.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/view/theme.test.php Sun Jul 24 21:08:31 2011 +0900 @@ -0,0 +1,343 @@ +<?php +/** + * ThemeViewTest file + * + * PHP versions 4 and 5 + * + * CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing> + * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The Open Group Test Suite License + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.tests.cases.libs + * @since CakePHP(tm) v 1.2.0.4206 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +App::import('Core', array('Theme', 'Controller')); + +if (!class_exists('ErrorHandler')) { + App::import('Core', array('Error')); +} +if (!defined('CAKEPHP_UNIT_TEST_EXECUTION')) { + define('CAKEPHP_UNIT_TEST_EXECUTION', 1); +} + +/** + * ThemePostsController class + * + * @package cake + * @subpackage cake.tests.cases.libs.view + */ +class ThemePostsController extends Controller { + +/** + * name property + * + * @var string 'ThemePosts' + * @access public + */ + var $name = 'ThemePosts'; + +/** + * index method + * + * @access public + * @return void + */ + function index() { + $this->set('testData', 'Some test data'); + $test2 = 'more data'; + $test3 = 'even more data'; + $this->set(compact('test2', 'test3')); + } +} + +/** + * ThemeViewTestErrorHandler class + * + * @package cake + * @subpackage cake.tests.cases.libs.view + */ +class ThemeViewTestErrorHandler extends ErrorHandler { + +/** + * stop method + * + * @access public + * @return void + */ + function _stop() { + return; + } +} + +/** + * TestThemeView class + * + * @package cake + * @subpackage cake.tests.cases.libs.view + */ +class TestThemeView extends ThemeView { + +/** + * renderElement method + * + * @param mixed $name + * @param array $params + * @access public + * @return void + */ + function renderElement($name, $params = array()) { + return $name; + } + +/** + * getViewFileName method + * + * @param mixed $name + * @access public + * @return void + */ + function getViewFileName($name = null) { + return $this->_getViewFileName($name); + } + +/** + * getLayoutFileName method + * + * @param mixed $name + * @access public + * @return void + */ + function getLayoutFileName($name = null) { + return $this->_getLayoutFileName($name); + } + +/** + * cakeError method + * + * @param mixed $method + * @param mixed $messages + * @access public + * @return void + */ + function cakeError($method, $messages) { + $error =& new ThemeViewTestErrorHandler($method, $messages); + return $error; + } +} + +/** + * ThemeViewTest class + * + * @package cake + * @subpackage cake.tests.cases.libs + */ +class ThemeViewTest extends CakeTestCase { + +/** + * setUp method + * + * @access public + * @return void + */ + function setUp() { + Router::reload(); + $this->Controller =& new Controller(); + $this->PostsController =& new ThemePostsController(); + $this->PostsController->viewPath = 'posts'; + $this->PostsController->index(); + $this->ThemeView =& new ThemeView($this->PostsController); + } + +/** + * tearDown method + * + * @access public + * @return void + */ + function tearDown() { + unset($this->ThemeView); + unset($this->PostsController); + unset($this->Controller); + ClassRegistry::flush(); + } +/** + * test that the theme view can be constructed without going into the registry + * + * @return void + */ + function testConstructionNoRegister() { + ClassRegistry::flush(); + $controller = null; + $Theme =& new ThemeView($controller, false); + $ThemeTwo =& ClassRegistry::getObject('view'); + $this->assertFalse($ThemeTwo); + } + +/** + * startTest + * + * @access public + * @return void + */ + function startTest() { + App::build(array( + 'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS), + 'views' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS) + )); + } + +/** + * endTest + * + * @access public + * @return void + */ + function endTest() { + App::build(); + } + +/** + * testPluginGetTemplate method + * + * @access public + * @return void + */ + function testPluginThemedGetTemplate() { + $this->Controller->plugin = 'test_plugin'; + $this->Controller->name = 'TestPlugin'; + $this->Controller->viewPath = 'tests'; + $this->Controller->action = 'index'; + $this->Controller->theme = 'test_theme'; + + $ThemeView =& new TestThemeView($this->Controller); + $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'themed' . DS . 'test_theme' . DS . 'plugins' . DS . 'test_plugin' . DS . 'tests' . DS .'index.ctp'; + $result = $ThemeView->getViewFileName('index'); + $this->assertEqual($result, $expected); + + $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'themed' . DS . 'test_theme' . DS . 'plugins' . DS . 'test_plugin' . DS . 'layouts' . DS .'plugin_default.ctp'; + $result = $ThemeView->getLayoutFileName('plugin_default'); + $this->assertEqual($result, $expected); + + $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'themed' . DS . 'test_theme' . DS . 'layouts' . DS .'default.ctp'; + $result = $ThemeView->getLayoutFileName('default'); + $this->assertEqual($result, $expected); + } + +/** + * testGetTemplate method + * + * @access public + * @return void + */ + function testGetTemplate() { + $this->Controller->plugin = null; + $this->Controller->name = 'Pages'; + $this->Controller->viewPath = 'pages'; + $this->Controller->action = 'display'; + $this->Controller->params['pass'] = array('home'); + + $ThemeView =& new TestThemeView($this->Controller); + $ThemeView->theme = 'test_theme'; + $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS .'pages' . DS .'home.ctp'; + $result = $ThemeView->getViewFileName('home'); + $this->assertEqual($result, $expected); + + $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'themed' . DS . 'test_theme' . DS . 'posts' . DS .'index.ctp'; + $result = $ThemeView->getViewFileName('/posts/index'); + $this->assertEqual($result, $expected); + + $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'themed' . DS . 'test_theme' . DS . 'layouts' . DS .'default.ctp'; + $result = $ThemeView->getLayoutFileName(); + $this->assertEqual($result, $expected); + + $ThemeView->layoutPath = 'rss'; + $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'layouts' . DS . 'rss' . DS . 'default.ctp'; + $result = $ThemeView->getLayoutFileName(); + $this->assertEqual($result, $expected); + + $ThemeView->layoutPath = 'email' . DS . 'html'; + $expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'layouts' . DS . 'email' . DS . 'html' . DS . 'default.ctp'; + $result = $ThemeView->getLayoutFileName(); + $this->assertEqual($result, $expected); + } + +/** + * testMissingView method + * + * @access public + * @return void + */ + function testMissingView() { + $this->Controller->plugin = null; + $this->Controller->name = 'Pages'; + $this->Controller->viewPath = 'pages'; + $this->Controller->action = 'display'; + $this->Controller->theme = 'my_theme'; + + $this->Controller->params['pass'] = array('home'); + + restore_error_handler(); + $View =& new TestThemeView($this->Controller); + ob_start(); + $result = $View->getViewFileName('does_not_exist'); + $expected = str_replace(array("\t", "\r\n", "\n"), "", ob_get_clean()); + set_error_handler('simpleTestErrorHandler'); + $this->assertPattern("/PagesController::/", $expected); + $this->assertPattern("/views(\/|\\\)themed(\/|\\\)my_theme(\/|\\\)pages(\/|\\\)does_not_exist.ctp/", $expected); + } + +/** + * testMissingLayout method + * + * @access public + * @return void + */ + function testMissingLayout() { + $this->Controller->plugin = null; + $this->Controller->name = 'Posts'; + $this->Controller->viewPath = 'posts'; + $this->Controller->layout = 'whatever'; + $this->Controller->theme = 'my_theme'; + + restore_error_handler(); + $View =& new TestThemeView($this->Controller); + ob_start(); + $result = $View->getLayoutFileName(); + $expected = str_replace(array("\t", "\r\n", "\n"), "", ob_get_clean()); + set_error_handler('simpleTestErrorHandler'); + $this->assertPattern("/Missing Layout/", $expected); + $this->assertPattern("/views(\/|\\\)themed(\/|\\\)my_theme(\/|\\\)layouts(\/|\\\)whatever.ctp/", $expected); + } + +/** + * test memory leaks that existed in _paths at one point. + * + * @return void + */ + function testMemoryLeakInPaths() { + if ($this->skipIf(!function_exists('memory_get_usage'), 'No memory measurement function, cannot test for possible memory leak. %s')) { + return; + } + $this->Controller->plugin = null; + $this->Controller->name = 'Posts'; + $this->Controller->viewPath = 'posts'; + $this->Controller->layout = 'whatever'; + $this->Controller->theme = 'test_theme'; + + $View =& new ThemeView($this->Controller); + $View->element('test_element'); + + $start = memory_get_usage(); + for ($i = 0; $i < 10; $i++) { + $View->element('test_element'); + } + $end = memory_get_usage(); + $this->assertWithinMargin($start, $end, 3500); + } +}