Mercurial > hg > Members > shoshi > webvirt
diff cake/tests/cases/libs/controller/controller_merge_vars.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/controller/controller_merge_vars.test.php Sun Jul 24 21:08:31 2011 +0900 @@ -0,0 +1,257 @@ +<?php +/** + * Controller Merge vars Test file + * + * Isolated from the Controller and Component test as to not pollute their AppController class + * + * 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.controller + * @since CakePHP(tm) v 1.2.3 + * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License + */ +if (!class_exists('AppController')) { + +/** + * Test case AppController + * + * @package cake + * @subpackage cake.tests.cases.libs.controller + */ + class AppController extends Controller { + +/** + * components + * + * @var array + */ + var $components = array('MergeVar' => array('flag', 'otherFlag', 'redirect' => false)); +/** + * helpers + * + * @var array + */ + var $helpers = array('MergeVar' => array('format' => 'html', 'terse')); + } +} elseif (!defined('APP_CONTROLLER_EXISTS')) { + define('APP_CONTROLLER_EXISTS', true); +} + +/** + * MergeVar Component + * + * @package cake.tests.cases.libs.controller + */ +class MergeVarComponent extends Object { + +} + +/** + * Additional controller for testing + * + * @package cake.tests.cases.libs.controller + */ +class MergeVariablesController extends AppController { + +/** + * name + * + * @var string + */ + var $name = 'MergeVariables'; + +/** + * uses + * + * @var arrays + */ + var $uses = array(); +} + +/** + * MergeVarPlugin App Controller + * + * @package cake.tests.cases.libs.controller + */ +class MergeVarPluginAppController extends AppController { + +/** + * components + * + * @var array + */ + var $components = array('Auth' => array('setting' => 'val', 'otherVal')); + +/** + * helpers + * + * @var array + */ + var $helpers = array('Javascript'); +} + +/** + * MergePostsController + * + * @package cake.tests.cases.libs.controller + */ +class MergePostsController extends MergeVarPluginAppController { + +/** + * name + * + * @var string + */ + var $name = 'MergePosts'; + +/** + * uses + * + * @var array + */ + var $uses = array(); +} + + +/** + * Test Case for Controller Merging of Vars. + * + * @package cake.tests.cases.libs.controller + */ +class ControllerMergeVarsTestCase extends CakeTestCase { +/** + * Skips the case if APP_CONTROLLER_EXISTS is defined + * + * @return void + */ + function skip() { + $this->skipIf(defined('APP_CONTROLLER_EXISTS'), 'APP_CONTROLLER_EXISTS cannot run. %s'); + } +/** + * end test + * + * @return void + */ + function endTest() { + ClassRegistry::flush(); + } + +/** + * test that component settings are not duplicated when merging component settings + * + * @return void + */ + function testComponentParamMergingNoDuplication() { + $Controller =& new MergeVariablesController(); + $Controller->constructClasses(); + + $expected = array('MergeVar' => array('flag', 'otherFlag', 'redirect' => false)); + $this->assertEqual($Controller->components, $expected, 'Duplication of settings occured. %s'); + } + +/** + * test component merges with redeclared components + * + * @return void + */ + function testComponentMergingWithRedeclarations() { + $Controller =& new MergeVariablesController(); + $Controller->components['MergeVar'] = array('remote', 'redirect' => true); + $Controller->constructClasses(); + + $expected = array('MergeVar' => array('flag', 'otherFlag', 'redirect' => true, 'remote')); + $this->assertEqual($Controller->components, $expected, 'Merging of settings is wrong. %s'); + } + +/** + * test merging of helpers array, ensure no duplication occurs + * + * @return void + */ + function testHelperSettingMergingNoDuplication() { + $Controller =& new MergeVariablesController(); + $Controller->constructClasses(); + + $expected = array('MergeVar' => array('format' => 'html', 'terse')); + $this->assertEqual($Controller->helpers, $expected, 'Duplication of settings occured. %s'); + } + +/** + * Test that helpers declared in appcontroller come before those in the subclass + * orderwise + * + * @return void + */ + function testHelperOrderPrecedence() { + $Controller =& new MergeVariablesController(); + $Controller->helpers = array('Custom', 'Foo' => array('something')); + $Controller->constructClasses(); + + $expected = array( + 'MergeVar' => array('format' => 'html', 'terse'), + 'Custom' => null, + 'Foo' => array('something') + ); + $this->assertIdentical($Controller->helpers, $expected, 'Order is incorrect. %s'); + } + +/** + * test merging of vars with plugin + * + * @return void + */ + function testMergeVarsWithPlugin() { + $Controller =& new MergePostsController(); + $Controller->components = array('Email' => array('ports' => 'open')); + $Controller->plugin = 'MergeVarPlugin'; + $Controller->constructClasses(); + + $expected = array( + 'MergeVar' => array('flag', 'otherFlag', 'redirect' => false), + 'Auth' => array('setting' => 'val', 'otherVal'), + 'Email' => array('ports' => 'open') + ); + $this->assertEqual($Controller->components, $expected, 'Components are unexpected %s'); + + $expected = array( + 'MergeVar' => array('format' => 'html', 'terse'), + 'Javascript' => null + ); + $this->assertEqual($Controller->helpers, $expected, 'Helpers are unexpected %s'); + + $Controller =& new MergePostsController(); + $Controller->components = array(); + $Controller->plugin = 'MergeVarPlugin'; + $Controller->constructClasses(); + + $expected = array( + 'MergeVar' => array('flag', 'otherFlag', 'redirect' => false), + 'Auth' => array('setting' => 'val', 'otherVal'), + ); + $this->assertEqual($Controller->components, $expected, 'Components are unexpected %s'); + } + +/** + * Ensure that __mergeVars is not being greedy and merging with + * AppController when you make an instance of Controller + * + * @return void + */ + function testMergeVarsNotGreedy() { + $Controller =& new Controller(); + $Controller->components = array(); + $Controller->uses = array(); + $Controller->constructClasses(); + + $this->assertFalse(isset($Controller->Session)); + } +}