統計
| ブランチ: | リビジョン:

pictcode / lib / Cake / Test / Case / Controller / ControllerMergeVarsTest.php @ 0b1b8047

履歴 | 表示 | アノテート | ダウンロード (6.183 KB)

1 635eef61 spyder1211
<?php
2
/**
3
 * Controller Merge vars Test file
4
 *
5
 * Isolated from the Controller and Component test as to not pollute their AppController class
6
 *
7
 * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
8
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
9
 *
10
 * Licensed under The MIT License
11
 * For full copyright and license information, please see the LICENSE.txt
12
 * Redistributions of files must retain the above copyright notice
13
 *
14
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
15
 * @link          http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
16
 * @package       Cake.Test.Case.Controller
17
 * @since         CakePHP(tm) v 1.2.3
18
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
19
 */
20
21
App::uses('Controller', 'Controller');
22
23
/**
24
 * Test case AppController
25
 *
26
 * @package       Cake.Test.Case.Controller
27
 */
28
class MergeVarsAppController extends Controller {
29
30
/**
31
 * components
32
 *
33
 * @var array
34
 */
35
        public $components = array('MergeVar' => array('flag', 'otherFlag', 'redirect' => false));
36
37
/**
38
 * helpers
39
 *
40
 * @var array
41
 */
42
        public $helpers = array('MergeVar' => array('format' => 'html', 'terse'));
43
}
44
45
/**
46
 * MergeVar Component
47
 *
48
 * @package       Cake.Test.Case.Controller
49
 */
50
class MergeVarComponent extends Object {
51
52
}
53
54
/**
55
 * Additional controller for testing
56
 *
57
 * @package       Cake.Test.Case.Controller
58
 */
59
class MergeVariablesController extends MergeVarsAppController {
60
61
/**
62
 * uses
63
 *
64
 * @var arrays
65
 */
66
        public $uses = array();
67
68
/**
69
 * parent for mergeVars
70
 *
71
 * @var string
72
 */
73
        protected $_mergeParent = 'MergeVarsAppController';
74
}
75
76
/**
77
 * MergeVarPlugin App Controller
78
 *
79
 * @package       Cake.Test.Case.Controller
80
 */
81
class MergeVarPluginAppController extends MergeVarsAppController {
82
83
/**
84
 * components
85
 *
86
 * @var array
87
 */
88
        public $components = array('Auth' => array('setting' => 'val', 'otherVal'));
89
90
/**
91
 * helpers
92
 *
93
 * @var array
94
 */
95
        public $helpers = array('Js');
96
97
/**
98
 * parent for mergeVars
99
 *
100
 * @var string
101
 */
102
        protected $_mergeParent = 'MergeVarsAppController';
103
}
104
105
/**
106
 * MergePostsController
107
 *
108
 * @package       Cake.Test.Case.Controller
109
 */
110
class MergePostsController extends MergeVarPluginAppController {
111
112
/**
113
 * uses
114
 *
115
 * @var array
116
 */
117
        public $uses = array();
118
}
119
120
/**
121
 * Test Case for Controller Merging of Vars.
122
 *
123
 * @package       Cake.Test.Case.Controller
124
 */
125
class ControllerMergeVarsTest extends CakeTestCase {
126
127
/**
128
 * test that component settings are not duplicated when merging component settings
129
 *
130
 * @return void
131
 */
132
        public function testComponentParamMergingNoDuplication() {
133
                $Controller = new MergeVariablesController();
134
                $Controller->constructClasses();
135
136
                $expected = array('MergeVar' => array('flag', 'otherFlag', 'redirect' => false));
137
                $this->assertEquals($expected, $Controller->components, 'Duplication of settings occurred. %s');
138
        }
139
140
/**
141
 * test component merges with redeclared components
142
 *
143
 * @return void
144
 */
145
        public function testComponentMergingWithRedeclarations() {
146
                $Controller = new MergeVariablesController();
147
                $Controller->components['MergeVar'] = array('remote', 'redirect' => true);
148
                $Controller->constructClasses();
149
150
                $expected = array('MergeVar' => array('flag', 'otherFlag', 'redirect' => true, 'remote'));
151
                $this->assertEquals($expected, $Controller->components, 'Merging of settings is wrong. %s');
152
        }
153
154
/**
155
 * test merging of helpers array, ensure no duplication occurs
156
 *
157
 * @return void
158
 */
159
        public function testHelperSettingMergingNoDuplication() {
160
                $Controller = new MergeVariablesController();
161
                $Controller->constructClasses();
162
163
                $expected = array('MergeVar' => array('format' => 'html', 'terse'));
164
                $this->assertEquals($expected, $Controller->helpers, 'Duplication of settings occurred. %s');
165
        }
166
167
/**
168
 * Test that helpers declared in appcontroller come before those in the subclass
169
 * orderwise
170
 *
171
 * @return void
172
 */
173
        public function testHelperOrderPrecedence() {
174
                $Controller = new MergeVariablesController();
175
                $Controller->helpers = array('Custom', 'Foo' => array('something'));
176
                $Controller->constructClasses();
177
178
                $expected = array(
179
                        'MergeVar' => array('format' => 'html', 'terse'),
180
                        'Custom' => null,
181
                        'Foo' => array('something')
182
                );
183
                $this->assertSame($expected, $Controller->helpers, 'Order is incorrect.');
184
        }
185
186
/**
187
 * test merging of vars with plugin
188
 *
189
 * @return void
190
 */
191
        public function testMergeVarsWithPlugin() {
192
                $Controller = new MergePostsController();
193
                $Controller->components = array('Email' => array('ports' => 'open'));
194
                $Controller->plugin = 'MergeVarPlugin';
195
                $Controller->constructClasses();
196
197
                $expected = array(
198
                        'MergeVar' => array('flag', 'otherFlag', 'redirect' => false),
199
                        'Auth' => array('setting' => 'val', 'otherVal'),
200
                        'Email' => array('ports' => 'open')
201
                );
202
                $this->assertEquals($expected, $Controller->components, 'Components are unexpected.');
203
204
                $expected = array(
205
                        'MergeVar' => array('format' => 'html', 'terse'),
206
                        'Js' => null
207
                );
208
                $this->assertEquals($expected, $Controller->helpers, 'Helpers are unexpected.');
209
210
                $Controller = new MergePostsController();
211
                $Controller->components = array();
212
                $Controller->plugin = 'MergeVarPlugin';
213
                $Controller->constructClasses();
214
215
                $expected = array(
216
                        'MergeVar' => array('flag', 'otherFlag', 'redirect' => false),
217
                        'Auth' => array('setting' => 'val', 'otherVal'),
218
                );
219
                $this->assertEquals($expected, $Controller->components, 'Components are unexpected.');
220
        }
221
222
/**
223
 * Ensure that _mergeControllerVars is not being greedy and merging with
224
 * AppController when you make an instance of Controller
225
 *
226
 * @return void
227
 */
228
        public function testMergeVarsNotGreedy() {
229
                $Controller = new Controller();
230
                $Controller->components = array();
231
                $Controller->uses = array();
232
                $Controller->constructClasses();
233
234
                $this->assertFalse(isset($Controller->Session));
235
        }
236
237
/**
238
 * Ensure that $modelClass is correct even when Controller::$uses
239
 * has been iterated, eg: by a Component, or event handlers.
240
 *
241
 * @return void
242
 */
243
        public function testMergeVarsModelClass() {
244
                $Controller = new MergeVariablescontroller();
245
                $Controller->uses = array('Test', 'TestAlias');
246
                $Controller->constructClasses();
247
                $this->assertEquals($Controller->uses[0], $Controller->modelClass);
248
        }
249
250
}