pictcode / lib / Cake / Test / Case / Controller / ComponentTest.php @ 0b1b8047
履歴 | 表示 | アノテート | ダウンロード (5.961 KB)
1 | 635eef61 | spyder1211 | <?php
|
---|---|---|---|
2 | /**
|
||
3 | * ComponentTest file
|
||
4 | *
|
||
5 | * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
|
||
6 | * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||
7 | *
|
||
8 | * Licensed under The MIT License
|
||
9 | * For full copyright and license information, please see the LICENSE.txt
|
||
10 | * Redistributions of files must retain the above copyright notice
|
||
11 | *
|
||
12 | * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||
13 | * @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
|
||
14 | * @package Cake.Test.Case.Controller
|
||
15 | * @since CakePHP(tm) v 1.2.0.5436
|
||
16 | * @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||
17 | */
|
||
18 | |||
19 | App::uses('Controller', 'Controller'); |
||
20 | App::uses('Component', 'Controller'); |
||
21 | |||
22 | /**
|
||
23 | * ParamTestComponent
|
||
24 | *
|
||
25 | * @package Cake.Test.Case.Controller
|
||
26 | */
|
||
27 | class ParamTestComponent extends Component { |
||
28 | |||
29 | /**
|
||
30 | * components property
|
||
31 | *
|
||
32 | * @var array
|
||
33 | */
|
||
34 | public $components = array('Banana' => array('config' => 'value')); |
||
35 | } |
||
36 | |||
37 | /**
|
||
38 | * ComponentTestController class
|
||
39 | *
|
||
40 | * @package Cake.Test.Case.Controller
|
||
41 | */
|
||
42 | class ComponentTestController extends Controller { |
||
43 | |||
44 | /**
|
||
45 | * uses property
|
||
46 | *
|
||
47 | * @var array
|
||
48 | */
|
||
49 | public $uses = array(); |
||
50 | |||
51 | } |
||
52 | |||
53 | /**
|
||
54 | * AppleComponent class
|
||
55 | *
|
||
56 | * @package Cake.Test.Case.Controller
|
||
57 | */
|
||
58 | class AppleComponent extends Component { |
||
59 | |||
60 | /**
|
||
61 | * components property
|
||
62 | *
|
||
63 | * @var array
|
||
64 | */
|
||
65 | public $components = array('Orange'); |
||
66 | |||
67 | /**
|
||
68 | * testName property
|
||
69 | *
|
||
70 | * @var mixed
|
||
71 | */
|
||
72 | public $testName = null; |
||
73 | |||
74 | /**
|
||
75 | * startup method
|
||
76 | *
|
||
77 | * @param Controller $controller
|
||
78 | * @return void
|
||
79 | */
|
||
80 | public function startup(Controller $controller) { |
||
81 | $this->testName = $controller->name; |
||
82 | } |
||
83 | |||
84 | } |
||
85 | |||
86 | /**
|
||
87 | * OrangeComponent class
|
||
88 | *
|
||
89 | * @package Cake.Test.Case.Controller
|
||
90 | */
|
||
91 | class OrangeComponent extends Component { |
||
92 | |||
93 | /**
|
||
94 | * components property
|
||
95 | *
|
||
96 | * @var array
|
||
97 | */
|
||
98 | public $components = array('Banana'); |
||
99 | |||
100 | /**
|
||
101 | * initialize method
|
||
102 | *
|
||
103 | * @param Controller $controller
|
||
104 | * @return void
|
||
105 | */
|
||
106 | public function initialize(Controller $controller) { |
||
107 | $this->Controller = $controller; |
||
108 | $this->Banana->testField = 'OrangeField'; |
||
109 | } |
||
110 | |||
111 | /**
|
||
112 | * startup method
|
||
113 | *
|
||
114 | * @param Controller $controller
|
||
115 | * @return string
|
||
116 | */
|
||
117 | public function startup(Controller $controller) { |
||
118 | $controller->foo = 'pass'; |
||
119 | } |
||
120 | |||
121 | } |
||
122 | |||
123 | /**
|
||
124 | * BananaComponent class
|
||
125 | *
|
||
126 | * @package Cake.Test.Case.Controller
|
||
127 | */
|
||
128 | class BananaComponent extends Component { |
||
129 | |||
130 | /**
|
||
131 | * testField property
|
||
132 | *
|
||
133 | * @var string
|
||
134 | */
|
||
135 | public $testField = 'BananaField'; |
||
136 | |||
137 | /**
|
||
138 | * startup method
|
||
139 | *
|
||
140 | * @param Controller $controller
|
||
141 | * @return string
|
||
142 | */
|
||
143 | public function startup(Controller $controller) { |
||
144 | $controller->bar = 'fail'; |
||
145 | } |
||
146 | |||
147 | } |
||
148 | |||
149 | /**
|
||
150 | * MutuallyReferencingOneComponent class
|
||
151 | *
|
||
152 | * @package Cake.Test.Case.Controller
|
||
153 | */
|
||
154 | class MutuallyReferencingOneComponent extends Component { |
||
155 | |||
156 | /**
|
||
157 | * components property
|
||
158 | *
|
||
159 | * @var array
|
||
160 | */
|
||
161 | public $components = array('MutuallyReferencingTwo'); |
||
162 | } |
||
163 | |||
164 | /**
|
||
165 | * MutuallyReferencingTwoComponent class
|
||
166 | *
|
||
167 | * @package Cake.Test.Case.Controller
|
||
168 | */
|
||
169 | class MutuallyReferencingTwoComponent extends Component { |
||
170 | |||
171 | /**
|
||
172 | * components property
|
||
173 | *
|
||
174 | * @var array
|
||
175 | */
|
||
176 | public $components = array('MutuallyReferencingOne'); |
||
177 | } |
||
178 | |||
179 | /**
|
||
180 | * SomethingWithEmailComponent class
|
||
181 | *
|
||
182 | * @package Cake.Test.Case.Controller
|
||
183 | */
|
||
184 | class SomethingWithEmailComponent extends Component { |
||
185 | |||
186 | /**
|
||
187 | * components property
|
||
188 | *
|
||
189 | * @var array
|
||
190 | */
|
||
191 | public $components = array('Email'); |
||
192 | } |
||
193 | |||
194 | /**
|
||
195 | * ComponentTest class
|
||
196 | *
|
||
197 | * @package Cake.Test.Case.Controller
|
||
198 | */
|
||
199 | class ComponentTest extends CakeTestCase { |
||
200 | |||
201 | /**
|
||
202 | * setUp method
|
||
203 | *
|
||
204 | * @return void
|
||
205 | */
|
||
206 | public function setUp() { |
||
207 | parent::setUp();
|
||
208 | $this->_pluginPaths = App::path('plugins'); |
||
209 | App::build(array( |
||
210 | 'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS) |
||
211 | )); |
||
212 | } |
||
213 | |||
214 | /**
|
||
215 | * test accessing inner components.
|
||
216 | *
|
||
217 | * @return void
|
||
218 | */
|
||
219 | public function testInnerComponentConstruction() { |
||
220 | $Collection = new ComponentCollection(); |
||
221 | $Component = new AppleComponent($Collection); |
||
222 | |||
223 | $this->assertInstanceOf('OrangeComponent', $Component->Orange, 'class is wrong'); |
||
224 | } |
||
225 | |||
226 | /**
|
||
227 | * test component loading
|
||
228 | *
|
||
229 | * @return void
|
||
230 | */
|
||
231 | public function testNestedComponentLoading() { |
||
232 | $Collection = new ComponentCollection(); |
||
233 | $Apple = new AppleComponent($Collection); |
||
234 | |||
235 | $this->assertInstanceOf('OrangeComponent', $Apple->Orange, 'class is wrong'); |
||
236 | $this->assertInstanceOf('BananaComponent', $Apple->Orange->Banana, 'class is wrong'); |
||
237 | $this->assertTrue(empty($Apple->Session)); |
||
238 | $this->assertTrue(empty($Apple->Orange->Session)); |
||
239 | } |
||
240 | |||
241 | /**
|
||
242 | * test that component components are not enabled in the collection.
|
||
243 | *
|
||
244 | * @return void
|
||
245 | */
|
||
246 | public function testInnerComponentsAreNotEnabled() { |
||
247 | $Collection = new ComponentCollection(); |
||
248 | $Apple = $Collection->load('Apple'); |
||
249 | |||
250 | $this->assertInstanceOf('OrangeComponent', $Apple->Orange, 'class is wrong'); |
||
251 | $result = $Collection->enabled(); |
||
252 | $this->assertEquals(array('Apple'), $result, 'Too many components enabled.'); |
||
253 | } |
||
254 | |||
255 | /**
|
||
256 | * test a component being used more than once.
|
||
257 | *
|
||
258 | * @return void
|
||
259 | */
|
||
260 | public function testMultipleComponentInitialize() { |
||
261 | $Collection = new ComponentCollection(); |
||
262 | $Banana = $Collection->load('Banana'); |
||
263 | $Orange = $Collection->load('Orange'); |
||
264 | |||
265 | $this->assertSame($Banana, $Orange->Banana, 'Should be references'); |
||
266 | $Banana->testField = 'OrangeField'; |
||
267 | |||
268 | $this->assertSame($Banana->testField, $Orange->Banana->testField, 'References are broken'); |
||
269 | } |
||
270 | |||
271 | /**
|
||
272 | * Test mutually referencing components.
|
||
273 | *
|
||
274 | * @return void
|
||
275 | */
|
||
276 | public function testSomethingReferencingEmailComponent() { |
||
277 | $Controller = new ComponentTestController(); |
||
278 | $Controller->components = array('SomethingWithEmail'); |
||
279 | $Controller->uses = false; |
||
280 | $Controller->constructClasses();
|
||
281 | $Controller->Components->trigger('initialize', array(&$Controller)); |
||
282 | $Controller->beforeFilter();
|
||
283 | $Controller->Components->trigger('startup', array(&$Controller)); |
||
284 | |||
285 | $this->assertInstanceOf('SomethingWithEmailComponent', $Controller->SomethingWithEmail); |
||
286 | $this->assertInstanceOf('EmailComponent', $Controller->SomethingWithEmail->Email); |
||
287 | } |
||
288 | |||
289 | } |