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

pictcode / lib / Cake / Test / Case / Configure / IniReaderTest.php @ master

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

1 635eef61 spyder1211
<?php
2
/**
3
 * IniReaderTest
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.Configure
15
 * @since         CakePHP(tm) v 2.0
16
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
17
 */
18
19
App::uses('IniReader', 'Configure');
20
21
/**
22
 * Class IniReaderTest
23
 *
24
 * @package       Cake.Test.Case.Configure
25
 */
26
class IniReaderTest extends CakeTestCase {
27
28
/**
29
 * Test data to serialize and unserialize.
30
 *
31
 * @var array
32
 */
33
        public $testData = array(
34
                'One' => array(
35
                        'two' => 'value',
36
                        'three' => array(
37
                                'four' => 'value four'
38
                        ),
39
                        'is_null' => null,
40
                        'bool_false' => false,
41
                        'bool_true' => true,
42
                ),
43
                'Asset' => array(
44
                        'timestamp' => 'force'
45
                ),
46
        );
47
48
/**
49
 * setup
50
 *
51
 * @return void
52
 */
53
        public function setUp() {
54
                parent::setUp();
55
                $this->path = CAKE . 'Test' . DS . 'test_app' . DS . 'Config' . DS;
56
        }
57
58
/**
59
 * test construct
60
 *
61
 * @return void
62
 */
63
        public function testConstruct() {
64
                $reader = new IniReader($this->path);
65
                $config = $reader->read('acl.ini');
66
67
                $this->assertTrue(isset($config['admin']));
68
                $this->assertTrue(isset($config['paul']['groups']));
69
                $this->assertEquals('ads', $config['admin']['deny']);
70
        }
71
72
/**
73
 * Test reading files.
74
 *
75
 * @return void
76
 */
77
        public function testRead() {
78
                $reader = new IniReader($this->path);
79
                $config = $reader->read('nested');
80
                $this->assertTrue($config['bools']['test_on']);
81
82
                $config = $reader->read('nested.ini');
83
                $this->assertTrue($config['bools']['test_on']);
84
        }
85
86
/**
87
 * No other sections should exist.
88
 *
89
 * @return void
90
 */
91
        public function testReadOnlyOneSection() {
92
                $reader = new IniReader($this->path, 'admin');
93
                $config = $reader->read('acl.ini');
94
95
                $this->assertTrue(isset($config['groups']));
96
                $this->assertEquals('administrators', $config['groups']);
97
        }
98
99
/**
100
 * Test reading acl.ini.php.
101
 *
102
 * @return void
103
 */
104
        public function testReadSpecialAclIniPhp() {
105
                $reader = new IniReader($this->path);
106
                $config = $reader->read('acl.ini.php');
107
108
                $this->assertTrue(isset($config['admin']));
109
                $this->assertTrue(isset($config['paul']['groups']));
110
                $this->assertEquals('ads', $config['admin']['deny']);
111
        }
112
113
/**
114
 * Test without section.
115
 *
116
 * @return void
117
 */
118
        public function testReadWithoutSection() {
119
                $reader = new IniReader($this->path);
120
                $config = $reader->read('no_section.ini');
121
122
                $expected = array(
123
                        'some_key' => 'some_value',
124
                        'bool_key' => true
125
                );
126
                $this->assertEquals($expected, $config);
127
        }
128
129
/**
130
 * Test that names with .'s get exploded into arrays.
131
 *
132
 * @return void
133
 */
134
        public function testReadValuesWithDots() {
135
                $reader = new IniReader($this->path);
136
                $config = $reader->read('nested.ini');
137
138
                $this->assertTrue(isset($config['database']['db']['username']));
139
                $this->assertEquals('mark', $config['database']['db']['username']);
140
                $this->assertEquals(3, $config['nesting']['one']['two']['three']);
141
                $this->assertFalse(isset($config['database.db.username']));
142
                $this->assertFalse(isset($config['database']['db.username']));
143
        }
144
145
/**
146
 * Test boolean reading.
147
 *
148
 * @return void
149
 */
150
        public function testBooleanReading() {
151
                $reader = new IniReader($this->path);
152
                $config = $reader->read('nested.ini');
153
154
                $this->assertTrue($config['bools']['test_on']);
155
                $this->assertFalse($config['bools']['test_off']);
156
157
                $this->assertTrue($config['bools']['test_yes']);
158
                $this->assertFalse($config['bools']['test_no']);
159
160
                $this->assertTrue($config['bools']['test_true']);
161
                $this->assertFalse($config['bools']['test_false']);
162
163
                $this->assertFalse($config['bools']['test_null']);
164
        }
165
166
/**
167
 * Test an exception is thrown by reading files that exist without .ini extension.
168
 *
169
 * @expectedException ConfigureException
170
 * @return void
171
 */
172
        public function testReadWithExistentFileWithoutExtension() {
173
                $reader = new IniReader($this->path);
174
                $reader->read('no_ini_extension');
175
        }
176
177
/**
178
 * Test an exception is thrown by reading files that don't exist.
179
 *
180
 * @expectedException ConfigureException
181
 * @return void
182
 */
183
        public function testReadWithNonExistentFile() {
184
                $reader = new IniReader($this->path);
185
                $reader->read('fake_values');
186
        }
187
188
/**
189
 * Test reading an empty file.
190
 *
191
 * @return void
192
 */
193
        public function testReadEmptyFile() {
194
                $reader = new IniReader($this->path);
195
                $config = $reader->read('empty');
196
                $this->assertEquals(array(), $config);
197
        }
198
199
/**
200
 * Test reading keys with ../ doesn't work.
201
 *
202
 * @expectedException ConfigureException
203
 * @return void
204
 */
205
        public function testReadWithDots() {
206
                $reader = new IniReader($this->path);
207
                $reader->read('../empty');
208
        }
209
210
/**
211
 * Test reading from plugins.
212
 *
213
 * @return void
214
 */
215
        public function testReadPluginValue() {
216
                App::build(array(
217
                        'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)
218
                ), App::RESET);
219
                CakePlugin::load('TestPlugin');
220
                $reader = new IniReader($this->path);
221
                $result = $reader->read('TestPlugin.nested');
222
223
                $this->assertTrue(isset($result['database']['db']['username']));
224
                $this->assertEquals('bar', $result['database']['db']['username']);
225
                $this->assertFalse(isset($result['database.db.username']));
226
                $this->assertFalse(isset($result['database']['db.username']));
227
228
                $result = $reader->read('TestPlugin.nested.ini');
229
                $this->assertEquals('foo', $result['database']['db']['password']);
230
                CakePlugin::unload();
231
        }
232
233
/**
234
 * Test reading acl.ini.php from plugins.
235
 *
236
 * @return void
237
 */
238
        public function testReadPluginSpecialAclIniPhpValue() {
239
                App::build(array(
240
                        'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)
241
                ), App::RESET);
242
                CakePlugin::load('TestPlugin');
243
                $reader = new IniReader($this->path);
244
                $result = $reader->read('TestPlugin.acl.ini.php');
245
246
                $this->assertTrue(isset($result['admin']));
247
                $this->assertTrue(isset($result['paul']['groups']));
248
                $this->assertEquals('ads', $result['admin']['deny']);
249
                CakePlugin::unload();
250
        }
251
252
/**
253
 * Test dump method.
254
 *
255
 * @return void
256
 */
257
        public function testDump() {
258
                $reader = new IniReader(TMP);
259
                $result = $reader->dump('test.ini', $this->testData);
260
                $this->assertTrue($result > 0);
261
262
                $expected = <<<INI
263
[One]
264
two = value
265
three.four = value four
266
is_null = null
267
bool_false = false
268
bool_true = true
269

270
[Asset]
271
timestamp = force
272
INI;
273
                $file = TMP . 'test.ini';
274
                $result = file_get_contents($file);
275
                unlink($file);
276
277
                $this->assertTextEquals($expected, $result);
278
279
                $result = $reader->dump('test', $this->testData);
280
                $this->assertTrue($result > 0);
281
282
                $contents = file_get_contents($file);
283
                $this->assertTextEquals($expected, $contents);
284
                unlink($file);
285
        }
286
287
/**
288
 * Test that dump() makes files read() can read.
289
 *
290
 * @return void
291
 */
292
        public function testDumpRead() {
293
                $reader = new IniReader(TMP);
294
                $reader->dump('test.ini', $this->testData);
295
                $result = $reader->read('test.ini');
296
                unlink(TMP . 'test.ini');
297
298
                $expected = $this->testData;
299
                $expected['One']['is_null'] = false;
300
301
                $this->assertEquals($expected, $result);
302
        }
303
304
}