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

pictcode / lib / Cake / Test / Case / Utility / ClassRegistryTest.php @ 0b1b8047

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

1 635eef61 spyder1211
<?php
2
/**
3
 * ClassRegistryTest 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.Utility
15
 * @since         CakePHP(tm) v 1.2.0.5432
16
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
17
 */
18
19
App::uses('ClassRegistry', 'Utility');
20
21
/**
22
 * ClassRegisterModel class
23
 *
24
 * @package       Cake.Test.Case.Utility
25
 */
26
class ClassRegisterModel extends CakeTestModel {
27
28
/**
29
 * useTable property
30
 *
31
 * @var bool
32
 */
33
        public $useTable = false;
34
}
35
36
/**
37
 * RegisterArticle class
38
 *
39
 * @package       Cake.Test.Case.Utility
40
 */
41
class RegisterArticle extends ClassRegisterModel {
42
}
43
44
/**
45
 * RegisterArticleFeatured class
46
 *
47
 * @package       Cake.Test.Case.Utility
48
 */
49
class RegisterArticleFeatured extends ClassRegisterModel {
50
}
51
52
/**
53
 * RegisterArticleTag class
54
 *
55
 * @package       Cake.Test.Case.Utility
56
 */
57
class RegisterArticleTag extends ClassRegisterModel {
58
}
59
60
/**
61
 * RegistryPluginAppModel class
62
 *
63
 * @package       Cake.Test.Case.Utility
64
 */
65
class RegistryPluginAppModel extends ClassRegisterModel {
66
67
/**
68
 * tablePrefix property
69
 *
70
 * @var string
71
 */
72
        public $tablePrefix = 'something_';
73
}
74
75
/**
76
 * TestRegistryPluginModel class
77
 *
78
 * @package       Cake.Test.Case.Utility
79
 */
80
class TestRegistryPluginModel extends RegistryPluginAppModel {
81
}
82
83
/**
84
 * RegisterCategory class
85
 *
86
 * @package       Cake.Test.Case.Utility
87
 */
88
class RegisterCategory extends ClassRegisterModel {
89
}
90
/**
91
 * RegisterPrefixedDs class
92
 *
93
 * @package       Cake.Test.Case.Utility
94
 */
95
class RegisterPrefixedDs extends ClassRegisterModel {
96
97
/**
98
 * useDbConfig property
99
 *
100
 * @var string
101
 */
102
        public $useDbConfig = 'doesnotexist';
103
}
104
105
/**
106
 * Abstract class for testing ClassRegistry.
107
 */
108
abstract class ClassRegistryAbstractModel extends ClassRegisterModel {
109
110
        public abstract function doSomething();
111
112
}
113
114
/**
115
 * Interface for testing ClassRegistry
116
 */
117
interface ClassRegistryInterfaceTest {
118
119
        public function doSomething();
120
121
}
122
123
/**
124
 * ClassRegistryTest class
125
 *
126
 * @package       Cake.Test.Case.Utility
127
 */
128
class ClassRegistryTest extends CakeTestCase {
129
130
/**
131
 * testAddModel method
132
 *
133
 * @return void
134
 */
135
        public function testAddModel() {
136
                $Tag = ClassRegistry::init('RegisterArticleTag');
137
                $this->assertInstanceOf('RegisterArticleTag', $Tag);
138
139
                $TagCopy = ClassRegistry::isKeySet('RegisterArticleTag');
140
                $this->assertTrue($TagCopy);
141
142
                $Tag->name = 'SomeNewName';
143
144
                $TagCopy = ClassRegistry::getObject('RegisterArticleTag');
145
146
                $this->assertInstanceOf('RegisterArticleTag', $TagCopy);
147
                $this->assertSame($Tag, $TagCopy);
148
149
                $NewTag = ClassRegistry::init(array('class' => 'RegisterArticleTag', 'alias' => 'NewTag'));
150
                $this->assertInstanceOf('RegisterArticleTag', $Tag);
151
152
                $NewTagCopy = ClassRegistry::init(array('class' => 'RegisterArticleTag', 'alias' => 'NewTag'));
153
154
                $this->assertNotSame($Tag, $NewTag);
155
                $this->assertSame($NewTag, $NewTagCopy);
156
157
                $NewTag->name = 'SomeOtherName';
158
                $this->assertNotSame($Tag, $NewTag);
159
                $this->assertSame($NewTag, $NewTagCopy);
160
161
                $Tag->name = 'SomeOtherName';
162
                $this->assertNotSame($Tag, $NewTag);
163
164
                $this->assertTrue($TagCopy->name === 'SomeOtherName');
165
166
                $User = ClassRegistry::init(array('class' => 'RegisterUser', 'alias' => 'User', 'table' => false));
167
                $this->assertInstanceOf('AppModel', $User);
168
169
                $UserCopy = ClassRegistry::init(array('class' => 'RegisterUser', 'alias' => 'User', 'table' => false));
170
                $this->assertInstanceOf('AppModel', $UserCopy);
171
                $this->assertEquals($User, $UserCopy);
172
173
                $Category = ClassRegistry::init(array('class' => 'RegisterCategory'));
174
                $this->assertInstanceOf('RegisterCategory', $Category);
175
176
                $ParentCategory = ClassRegistry::init(array('class' => 'RegisterCategory', 'alias' => 'ParentCategory'));
177
                $this->assertInstanceOf('RegisterCategory', $ParentCategory);
178
                $this->assertNotSame($Category, $ParentCategory);
179
180
                $this->assertNotEquals($Category->alias, $ParentCategory->alias);
181
                $this->assertEquals('RegisterCategory', $Category->alias);
182
                $this->assertEquals('ParentCategory', $ParentCategory->alias);
183
        }
184
185
/**
186
 * testClassRegistryFlush method
187
 *
188
 * @return void
189
 */
190
        public function testClassRegistryFlush() {
191
                ClassRegistry::init('RegisterArticleTag');
192
193
                $ArticleTag = ClassRegistry::getObject('RegisterArticleTag');
194
                $this->assertInstanceOf('RegisterArticleTag', $ArticleTag);
195
                ClassRegistry::flush();
196
197
                $NoArticleTag = ClassRegistry::isKeySet('RegisterArticleTag');
198
                $this->assertFalse($NoArticleTag);
199
                $this->assertInstanceOf('RegisterArticleTag', $ArticleTag);
200
        }
201
202
/**
203
 * testAddMultipleModels method
204
 *
205
 * @return void
206
 */
207
        public function testAddMultipleModels() {
208
                $Article = ClassRegistry::isKeySet('Article');
209
                $this->assertFalse($Article);
210
211
                $Featured = ClassRegistry::isKeySet('Featured');
212
                $this->assertFalse($Featured);
213
214
                $Tag = ClassRegistry::isKeySet('Tag');
215
                $this->assertFalse($Tag);
216
217
                $models = array(array('class' => 'RegisterArticle', 'alias' => 'Article'),
218
                                array('class' => 'RegisterArticleFeatured', 'alias' => 'Featured'),
219
                                array('class' => 'RegisterArticleTag', 'alias' => 'Tag'));
220
221
                $added = ClassRegistry::init($models);
222
                $this->assertTrue($added);
223
224
                $Article = ClassRegistry::isKeySet('Article');
225
                $this->assertTrue($Article);
226
227
                $Featured = ClassRegistry::isKeySet('Featured');
228
                $this->assertTrue($Featured);
229
230
                $Tag = ClassRegistry::isKeySet('Tag');
231
                $this->assertTrue($Tag);
232
233
                $Article = ClassRegistry::getObject('Article');
234
                $this->assertInstanceOf('RegisterArticle', $Article);
235
236
                $Featured = ClassRegistry::getObject('Featured');
237
                $this->assertInstanceOf('RegisterArticleFeatured', $Featured);
238
239
                $Tag = ClassRegistry::getObject('Tag');
240
                $this->assertInstanceOf('RegisterArticleTag', $Tag);
241
        }
242
243
/**
244
 * testPluginAppModel method
245
 *
246
 * @return void
247
 */
248
        public function testPluginAppModel() {
249
                $TestRegistryPluginModel = ClassRegistry::isKeySet('TestRegistryPluginModel');
250
                $this->assertFalse($TestRegistryPluginModel);
251
252
                //Faking a plugin
253
                CakePlugin::load('RegistryPlugin', array('path' => '/fake/path'));
254
                $TestRegistryPluginModel = ClassRegistry::init('RegistryPlugin.TestRegistryPluginModel');
255
                $this->assertInstanceOf('TestRegistryPluginModel', $TestRegistryPluginModel);
256
257
                $this->assertEquals('something_', $TestRegistryPluginModel->tablePrefix);
258
259
                $PluginUser = ClassRegistry::init(array('class' => 'RegistryPlugin.RegisterUser', 'alias' => 'RegistryPluginUser', 'table' => false));
260
                $this->assertInstanceOf('RegistryPluginAppModel', $PluginUser);
261
262
                $PluginUserCopy = ClassRegistry::getObject('RegistryPluginUser');
263
                $this->assertInstanceOf('RegistryPluginAppModel', $PluginUserCopy);
264
                $this->assertSame($PluginUser, $PluginUserCopy);
265
                CakePlugin::unload();
266
        }
267
268
/**
269
 * Tests prefixed datasource names for test purposes
270
 *
271
 * @return void
272
 */
273
        public function testPrefixedTestDatasource() {
274
                ClassRegistry::config(array('testing' => true));
275
                $Model = ClassRegistry::init('RegisterPrefixedDs');
276
                $this->assertEquals('test', $Model->useDbConfig);
277
                ClassRegistry::removeObject('RegisterPrefixedDs');
278
279
                $testConfig = ConnectionManager::getDataSource('test')->config;
280
                ConnectionManager::create('test_doesnotexist', $testConfig);
281
282
                $Model = ClassRegistry::init('RegisterArticle');
283
                $this->assertEquals('test', $Model->useDbConfig);
284
                $Model = ClassRegistry::init('RegisterPrefixedDs');
285
                $this->assertEquals('test_doesnotexist', $Model->useDbConfig);
286
        }
287
288
/**
289
 * Tests that passing the string parameter to init() will return false if the model does not exists
290
 *
291
 * @return void
292
 */
293
        public function testInitStrict() {
294
                $this->assertFalse(ClassRegistry::init('NonExistent', true));
295
        }
296
297
/**
298
 * Test that you cannot init() an abstract class. An exception will be raised.
299
 *
300
 * @expectedException CakeException
301
 * @return void
302
 */
303
        public function testInitAbstractClass() {
304
                ClassRegistry::init('ClassRegistryAbstractModel');
305
        }
306
307
/**
308
 * Test that you cannot init() an abstract class. A exception will be raised.
309
 *
310
 * @expectedException CakeException
311
 * @return void
312
 */
313
        public function testInitInterface() {
314
                ClassRegistry::init('ClassRegistryInterfaceTest');
315
        }
316
}