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

pictcode / lib / Cake / Test / Case / Log / CakeLogTest.php @ 635eef61

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

1 635eef61 spyder1211
<?php
2
/**
3
 * CakeLogTest 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.Log
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('CakeLog', 'Log');
20
App::uses('FileLog', 'Log/Engine');
21
22
/**
23
 * CakeLogTest class
24
 *
25
 * @package       Cake.Test.Case.Log
26
 */
27
class CakeLogTest extends CakeTestCase {
28
29
/**
30
 * Start test callback, clears all streams enabled.
31
 *
32
 * @return void
33
 */
34
        public function setUp() {
35
                parent::setUp();
36
                $streams = CakeLog::configured();
37
                foreach ($streams as $stream) {
38
                        CakeLog::drop($stream);
39
                }
40
        }
41
42
/**
43
 * test importing loggers from app/libs and plugins.
44
 *
45
 * @return void
46
 */
47
        public function testImportingLoggers() {
48
                App::build(array(
49
                        'Lib' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Lib' . DS),
50
                        'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)
51
                ), App::RESET);
52
                CakePlugin::load('TestPlugin');
53
54
                $result = CakeLog::config('libtest', array(
55
                        'engine' => 'TestAppLog'
56
                ));
57
                $this->assertTrue($result);
58
                $this->assertEquals(CakeLog::configured(), array('libtest'));
59
60
                $result = CakeLog::config('plugintest', array(
61
                        'engine' => 'TestPlugin.TestPluginLog'
62
                ));
63
                $this->assertTrue($result);
64
                $this->assertEquals(CakeLog::configured(), array('libtest', 'plugintest'));
65
66
                CakeLog::write(LOG_INFO, 'TestPluginLog is not a BaseLog descendant');
67
68
                App::build();
69
                CakePlugin::unload();
70
        }
71
72
/**
73
 * test all the errors from failed logger imports
74
 *
75
 * @expectedException CakeLogException
76
 * @return void
77
 */
78
        public function testImportingLoggerFailure() {
79
                CakeLog::config('fail', array());
80
        }
81
82
/**
83
 * test config() with valid key name
84
 *
85
 * @return void
86
 */
87
        public function testValidKeyName() {
88
                CakeLog::config('valid', array('engine' => 'File'));
89
                $stream = CakeLog::stream('valid');
90
                $this->assertInstanceOf('FileLog', $stream);
91
                CakeLog::drop('valid');
92
        }
93
94
/**
95
 * test config() with valid key name including the deprecated Log suffix
96
 *
97
 * @return void
98
 */
99
        public function testValidKeyNameLogSuffix() {
100
                CakeLog::config('valid', array('engine' => 'FileLog'));
101
                $stream = CakeLog::stream('valid');
102
                $this->assertInstanceOf('FileLog', $stream);
103
                CakeLog::drop('valid');
104
        }
105
106
/**
107
 * test config() with invalid key name
108
 *
109
 * @expectedException CakeLogException
110
 * @return void
111
 */
112
        public function testInvalidKeyName() {
113
                CakeLog::config('1nv', array('engine' => 'File'));
114
        }
115
116
/**
117
 * test that loggers have to implement the correct interface.
118
 *
119
 * @expectedException CakeLogException
120
 * @return void
121
 */
122
        public function testNotImplementingInterface() {
123
                CakeLog::config('fail', array('engine' => 'stdClass'));
124
        }
125
126
/**
127
 * Test that CakeLog does not auto create logs when no streams are there to listen.
128
 *
129
 * @return void
130
 */
131
        public function testNoStreamListenting() {
132
                if (file_exists(LOGS . 'error.log')) {
133
                        unlink(LOGS . 'error.log');
134
                }
135
                $res = CakeLog::write(LOG_WARNING, 'Test warning');
136
                $this->assertFalse($res);
137
                $this->assertFalse(file_exists(LOGS . 'error.log'));
138
139
                $result = CakeLog::configured();
140
                $this->assertEquals(array(), $result);
141
        }
142
143
/**
144
 * test configuring log streams
145
 *
146
 * @return void
147
 */
148
        public function testConfig() {
149
                CakeLog::config('file', array(
150
                        'engine' => 'File',
151
                        'path' => LOGS
152
                ));
153
                $result = CakeLog::configured();
154
                $this->assertEquals(array('file'), $result);
155
156
                if (file_exists(LOGS . 'error.log')) {
157
                        unlink(LOGS . 'error.log');
158
                }
159
                CakeLog::write(LOG_WARNING, 'Test warning');
160
                $this->assertTrue(file_exists(LOGS . 'error.log'));
161
162
                $result = file_get_contents(LOGS . 'error.log');
163
                $this->assertRegExp('/^2[0-9]{3}-[0-9]+-[0-9]+ [0-9]+:[0-9]+:[0-9]+ Warning: Test warning/', $result);
164
                unlink(LOGS . 'error.log');
165
        }
166
167
/**
168
 * explicit tests for drop()
169
 *
170
 * @return void
171
 */
172
        public function testDrop() {
173
                CakeLog::config('file', array(
174
                        'engine' => 'File',
175
                        'path' => LOGS
176
                ));
177
                $result = CakeLog::configured();
178
                $this->assertEquals(array('file'), $result);
179
180
                CakeLog::drop('file');
181
                $result = CakeLog::configured();
182
                $this->assertSame(array(), $result);
183
        }
184
185
/**
186
 * testLogFileWriting method
187
 *
188
 * @return void
189
 */
190
        public function testLogFileWriting() {
191
                CakeLog::config('file', array(
192
                        'engine' => 'File',
193
                        'path' => LOGS
194
                ));
195
                if (file_exists(LOGS . 'error.log')) {
196
                        unlink(LOGS . 'error.log');
197
                }
198
                $result = CakeLog::write(LOG_WARNING, 'Test warning');
199
                $this->assertTrue($result);
200
                $this->assertTrue(file_exists(LOGS . 'error.log'));
201
                unlink(LOGS . 'error.log');
202
203
                CakeLog::write(LOG_WARNING, 'Test warning 1');
204
                CakeLog::write(LOG_WARNING, 'Test warning 2');
205
                $result = file_get_contents(LOGS . 'error.log');
206
                $this->assertRegExp('/^2[0-9]{3}-[0-9]+-[0-9]+ [0-9]+:[0-9]+:[0-9]+ Warning: Test warning 1/', $result);
207
                $this->assertRegExp('/2[0-9]{3}-[0-9]+-[0-9]+ [0-9]+:[0-9]+:[0-9]+ Warning: Test warning 2$/', $result);
208
                unlink(LOGS . 'error.log');
209
        }
210
211
/**
212
 * test selective logging by level/type
213
 *
214
 * @return void
215
 */
216
        public function testSelectiveLoggingByLevel() {
217
                if (file_exists(LOGS . 'spam.log')) {
218
                        unlink(LOGS . 'spam.log');
219
                }
220
                if (file_exists(LOGS . 'eggs.log')) {
221
                        unlink(LOGS . 'eggs.log');
222
                }
223
                CakeLog::config('spam', array(
224
                        'engine' => 'File',
225
                        'types' => 'debug',
226
                        'file' => 'spam',
227
                ));
228
                CakeLog::config('eggs', array(
229
                        'engine' => 'File',
230
                        'types' => array('eggs', 'debug', 'error', 'warning'),
231
                        'file' => 'eggs',
232
                ));
233
234
                $testMessage = 'selective logging';
235
                CakeLog::write(LOG_WARNING, $testMessage);
236
237
                $this->assertTrue(file_exists(LOGS . 'eggs.log'));
238
                $this->assertFalse(file_exists(LOGS . 'spam.log'));
239
240
                CakeLog::write(LOG_DEBUG, $testMessage);
241
                $this->assertTrue(file_exists(LOGS . 'spam.log'));
242
243
                $contents = file_get_contents(LOGS . 'spam.log');
244
                $this->assertContains('Debug: ' . $testMessage, $contents);
245
                $contents = file_get_contents(LOGS . 'eggs.log');
246
                $this->assertContains('Debug: ' . $testMessage, $contents);
247
248
                if (file_exists(LOGS . 'spam.log')) {
249
                        unlink(LOGS . 'spam.log');
250
                }
251
                if (file_exists(LOGS . 'eggs.log')) {
252
                        unlink(LOGS . 'eggs.log');
253
                }
254
        }
255
256
/**
257
 * test enable
258
 *
259
 * @expectedException CakeLogException
260
 * @return void
261
 */
262
        public function testStreamEnable() {
263
                CakeLog::config('spam', array(
264
                        'engine' => 'File',
265
                        'file' => 'spam',
266
                        ));
267
                $this->assertTrue(CakeLog::enabled('spam'));
268
                CakeLog::drop('spam');
269
                CakeLog::enable('bogus_stream');
270
        }
271
272
/**
273
 * test disable
274
 *
275
 * @expectedException CakeLogException
276
 * @return void
277
 */
278
        public function testStreamDisable() {
279
                CakeLog::config('spam', array(
280
                        'engine' => 'File',
281
                        'file' => 'spam',
282
                        ));
283
                $this->assertTrue(CakeLog::enabled('spam'));
284
                CakeLog::disable('spam');
285
                $this->assertFalse(CakeLog::enabled('spam'));
286
                CakeLog::drop('spam');
287
                CakeLog::enable('bogus_stream');
288
        }
289
290
/**
291
 * test enabled() invalid stream
292
 *
293
 * @expectedException CakeLogException
294
 * @return void
295
 */
296
        public function testStreamEnabledInvalid() {
297
                CakeLog::enabled('bogus_stream');
298
        }
299
300
/**
301
 * test disable invalid stream
302
 *
303
 * @expectedException CakeLogException
304
 * @return void
305
 */
306
        public function testStreamDisableInvalid() {
307
                CakeLog::disable('bogus_stream');
308
        }
309
310
/**
311
 * resets log config
312
 *
313
 * @return void
314
 */
315
        protected function _resetLogConfig() {
316
                CakeLog::config('debug', array(
317
                        'engine' => 'File',
318
                        'types' => array('notice', 'info', 'debug'),
319
                        'file' => 'debug',
320
                ));
321
                CakeLog::config('error', array(
322
                        'engine' => 'File',
323
                        'types' => array('warning', 'error', 'critical', 'alert', 'emergency'),
324
                        'file' => 'error',
325
                ));
326
        }
327
328
/**
329
 * delete logs
330
 *
331
 * @return void
332
 */
333
        protected function _deleteLogs() {
334
                if (file_exists(LOGS . 'shops.log')) {
335
                        unlink(LOGS . 'shops.log');
336
                }
337
                if (file_exists(LOGS . 'error.log')) {
338
                        unlink(LOGS . 'error.log');
339
                }
340
                if (file_exists(LOGS . 'debug.log')) {
341
                        unlink(LOGS . 'debug.log');
342
                }
343
                if (file_exists(LOGS . 'bogus.log')) {
344
                        unlink(LOGS . 'bogus.log');
345
                }
346
                if (file_exists(LOGS . 'spam.log')) {
347
                        unlink(LOGS . 'spam.log');
348
                }
349
                if (file_exists(LOGS . 'eggs.log')) {
350
                        unlink(LOGS . 'eggs.log');
351
                }
352
        }
353
354
/**
355
 * test backward compatible scoped logging
356
 *
357
 * @return void
358
 */
359
        public function testScopedLoggingBC() {
360
                $this->_resetLogConfig();
361
362
                CakeLog::config('shops', array(
363
                        'engine' => 'File',
364
                        'types' => array('info', 'notice', 'warning'),
365
                        'scopes' => array('transactions', 'orders'),
366
                        'file' => 'shops',
367
                ));
368
                $this->_deleteLogs();
369
370
                CakeLog::write('info', 'info message');
371
                $this->assertFalse(file_exists(LOGS . 'error.log'));
372
                $this->assertTrue(file_exists(LOGS . 'debug.log'));
373
374
                $this->_deleteLogs();
375
376
                CakeLog::write('transactions', 'transaction message');
377
                $this->assertTrue(file_exists(LOGS . 'shops.log'));
378
                $this->assertFalse(file_exists(LOGS . 'transactions.log'));
379
                $this->assertFalse(file_exists(LOGS . 'error.log'));
380
                $this->assertFalse(file_exists(LOGS . 'debug.log'));
381
382
                $this->_deleteLogs();
383
384
                CakeLog::write('error', 'error message');
385
                $this->assertTrue(file_exists(LOGS . 'error.log'));
386
                $this->assertFalse(file_exists(LOGS . 'debug.log'));
387
                $this->assertFalse(file_exists(LOGS . 'shops.log'));
388
389
                $this->_deleteLogs();
390
391
                CakeLog::write('orders', 'order message');
392
                $this->assertFalse(file_exists(LOGS . 'error.log'));
393
                $this->assertFalse(file_exists(LOGS . 'debug.log'));
394
                $this->assertFalse(file_exists(LOGS . 'orders.log'));
395
                $this->assertTrue(file_exists(LOGS . 'shops.log'));
396
397
                $this->_deleteLogs();
398
399
                CakeLog::write('warning', 'warning message');
400
                $this->assertTrue(file_exists(LOGS . 'error.log'));
401
                $this->assertFalse(file_exists(LOGS . 'debug.log'));
402
403
                $this->_deleteLogs();
404
405
                CakeLog::drop('shops');
406
        }
407
408
/**
409
 * Test that scopes are exclusive and don't bleed.
410
 *
411
 * @return void
412
 */
413
        public function testScopedLoggingExclusive() {
414
                $this->_deleteLogs();
415
416
                CakeLog::config('shops', array(
417
                        'engine' => 'File',
418
                        'types' => array('info', 'notice', 'warning'),
419
                        'scopes' => array('transactions', 'orders'),
420
                        'file' => 'shops.log',
421
                ));
422
                CakeLog::config('eggs', array(
423
                        'engine' => 'File',
424
                        'types' => array('info', 'notice', 'warning'),
425
                        'scopes' => array('eggs'),
426
                        'file' => 'eggs.log',
427
                ));
428
429
                CakeLog::write('info', 'transactions message', 'transactions');
430
                $this->assertFalse(file_exists(LOGS . 'eggs.log'));
431
                $this->assertTrue(file_exists(LOGS . 'shops.log'));
432
433
                $this->_deleteLogs();
434
435
                CakeLog::write('info', 'eggs message', 'eggs');
436
                $this->assertTrue(file_exists(LOGS . 'eggs.log'));
437
                $this->assertFalse(file_exists(LOGS . 'shops.log'));
438
        }
439
440
/**
441
 * test scoped logging
442
 *
443
 * @return void
444
 */
445
        public function testScopedLogging() {
446
                $this->_resetLogConfig();
447
                $this->_deleteLogs();
448
449
                CakeLog::config('string-scope', array(
450
                        'engine' => 'File',
451
                        'types' => array('info', 'notice', 'warning'),
452
                        'scopes' => 'string-scope',
453
                        'file' => 'string-scope.log'
454
                ));
455
                CakeLog::write('info', 'info message', 'string-scope');
456
                $this->assertTrue(file_exists(LOGS . 'string-scope.log'));
457
458
                CakeLog::drop('string-scope');
459
460
                CakeLog::config('shops', array(
461
                        'engine' => 'File',
462
                        'types' => array('info', 'notice', 'warning'),
463
                        'scopes' => array('transactions', 'orders'),
464
                        'file' => 'shops.log',
465
                ));
466
467
                CakeLog::write('info', 'info message', 'transactions');
468
                $this->assertFalse(file_exists(LOGS . 'error.log'));
469
                $this->assertTrue(file_exists(LOGS . 'shops.log'));
470
                $this->assertTrue(file_exists(LOGS . 'debug.log'));
471
472
                $this->_deleteLogs();
473
474
                CakeLog::write('transactions', 'transaction message', 'orders');
475
                $this->assertTrue(file_exists(LOGS . 'shops.log'));
476
                $this->assertFalse(file_exists(LOGS . 'transactions.log'));
477
                $this->assertFalse(file_exists(LOGS . 'error.log'));
478
                $this->assertFalse(file_exists(LOGS . 'debug.log'));
479
480
                $this->_deleteLogs();
481
482
                CakeLog::write('error', 'error message', 'orders');
483
                $this->assertTrue(file_exists(LOGS . 'error.log'));
484
                $this->assertFalse(file_exists(LOGS . 'debug.log'));
485
                $this->assertFalse(file_exists(LOGS . 'shops.log'));
486
487
                $this->_deleteLogs();
488
489
                CakeLog::write('orders', 'order message', 'transactions');
490
                $this->assertFalse(file_exists(LOGS . 'error.log'));
491
                $this->assertFalse(file_exists(LOGS . 'debug.log'));
492
                $this->assertFalse(file_exists(LOGS . 'orders.log'));
493
                $this->assertTrue(file_exists(LOGS . 'shops.log'));
494
495
                $this->_deleteLogs();
496
497
                CakeLog::write('warning', 'warning message', 'orders');
498
                $this->assertTrue(file_exists(LOGS . 'error.log'));
499
                $this->assertTrue(file_exists(LOGS . 'shops.log'));
500
                $this->assertFalse(file_exists(LOGS . 'debug.log'));
501
502
                $this->_deleteLogs();
503
504
                CakeLog::drop('shops');
505
        }
506
507
/**
508
 * test bogus type and scope
509
 *
510
 * @return void
511
 */
512
        public function testBogusTypeAndScope() {
513
                $this->_resetLogConfig();
514
                $this->_deleteLogs();
515
516
                CakeLog::config('file', array(
517
                        'engine' => 'File',
518
                        'path' => LOGS
519
                ));
520
521
                CakeLog::write('bogus', 'bogus message');
522
                $this->assertTrue(file_exists(LOGS . 'bogus.log'));
523
                $this->assertFalse(file_exists(LOGS . 'error.log'));
524
                $this->assertFalse(file_exists(LOGS . 'debug.log'));
525
                $this->_deleteLogs();
526
527
                CakeLog::write('bogus', 'bogus message', 'bogus');
528
                $this->assertTrue(file_exists(LOGS . 'bogus.log'));
529
                $this->assertFalse(file_exists(LOGS . 'error.log'));
530
                $this->assertFalse(file_exists(LOGS . 'debug.log'));
531
                $this->_deleteLogs();
532
533
                CakeLog::write('error', 'bogus message', 'bogus');
534
                $this->assertFalse(file_exists(LOGS . 'bogus.log'));
535
                $this->assertTrue(file_exists(LOGS . 'error.log'));
536
                $this->assertFalse(file_exists(LOGS . 'debug.log'));
537
                $this->_deleteLogs();
538
        }
539
540
/**
541
 * test scoped logging with convenience methods
542
 *
543
 * @return void
544
 */
545
        public function testConvenienceScopedLogging() {
546
                if (file_exists(LOGS . 'shops.log')) {
547
                        unlink(LOGS . 'shops.log');
548
                }
549
                if (file_exists(LOGS . 'error.log')) {
550
                        unlink(LOGS . 'error.log');
551
                }
552
                if (file_exists(LOGS . 'debug.log')) {
553
                        unlink(LOGS . 'debug.log');
554
                }
555
556
                $this->_resetLogConfig();
557
                CakeLog::config('shops', array(
558
                        'engine' => 'File',
559
                        'types' => array('info', 'debug', 'notice', 'warning'),
560
                        'scopes' => array('transactions', 'orders'),
561
                        'file' => 'shops',
562
                ));
563
564
                CakeLog::info('info message', 'transactions');
565
                $this->assertFalse(file_exists(LOGS . 'error.log'));
566
                $this->assertTrue(file_exists(LOGS . 'shops.log'));
567
                $this->assertTrue(file_exists(LOGS . 'debug.log'));
568
569
                $this->_deleteLogs();
570
571
                CakeLog::error('error message', 'orders');
572
                $this->assertTrue(file_exists(LOGS . 'error.log'));
573
                $this->assertFalse(file_exists(LOGS . 'debug.log'));
574
                $this->assertFalse(file_exists(LOGS . 'shops.log'));
575
576
                $this->_deleteLogs();
577
578
                CakeLog::warning('warning message', 'orders');
579
                $this->assertTrue(file_exists(LOGS . 'error.log'));
580
                $this->assertTrue(file_exists(LOGS . 'shops.log'));
581
                $this->assertFalse(file_exists(LOGS . 'debug.log'));
582
583
                $this->_deleteLogs();
584
585
                CakeLog::drop('shops');
586
        }
587
588
/**
589
 * test convenience methods
590
 *
591
 * @return void
592
 */
593
        public function testConvenienceMethods() {
594
                $this->_deleteLogs();
595
596
                CakeLog::config('debug', array(
597
                        'engine' => 'File',
598
                        'types' => array('notice', 'info', 'debug'),
599
                        'file' => 'debug',
600
                ));
601
                CakeLog::config('error', array(
602
                        'engine' => 'File',
603
                        'types' => array('emergency', 'alert', 'critical', 'error', 'warning'),
604
                        'file' => 'error',
605
                ));
606
607
                $testMessage = 'emergency message';
608
                CakeLog::emergency($testMessage);
609
                $contents = file_get_contents(LOGS . 'error.log');
610
                $this->assertRegExp('/(Emergency|Critical): ' . $testMessage . '/', $contents);
611
                $this->assertFalse(file_exists(LOGS . 'debug.log'));
612
                $this->_deleteLogs();
613
614
                $testMessage = 'alert message';
615
                CakeLog::alert($testMessage);
616
                $contents = file_get_contents(LOGS . 'error.log');
617
                $this->assertRegExp('/(Alert|Critical): ' . $testMessage . '/', $contents);
618
                $this->assertFalse(file_exists(LOGS . 'debug.log'));
619
                $this->_deleteLogs();
620
621
                $testMessage = 'critical message';
622
                CakeLog::critical($testMessage);
623
                $contents = file_get_contents(LOGS . 'error.log');
624
                $this->assertContains('Critical: ' . $testMessage, $contents);
625
                $this->assertFalse(file_exists(LOGS . 'debug.log'));
626
                $this->_deleteLogs();
627
628
                $testMessage = 'error message';
629
                CakeLog::error($testMessage);
630
                $contents = file_get_contents(LOGS . 'error.log');
631
                $this->assertContains('Error: ' . $testMessage, $contents);
632
                $this->assertFalse(file_exists(LOGS . 'debug.log'));
633
                $this->_deleteLogs();
634
635
                $testMessage = 'warning message';
636
                CakeLog::warning($testMessage);
637
                $contents = file_get_contents(LOGS . 'error.log');
638
                $this->assertContains('Warning: ' . $testMessage, $contents);
639
                $this->assertFalse(file_exists(LOGS . 'debug.log'));
640
                $this->_deleteLogs();
641
642
                $testMessage = 'notice message';
643
                CakeLog::notice($testMessage);
644
                $contents = file_get_contents(LOGS . 'debug.log');
645
                $this->assertRegExp('/(Notice|Debug): ' . $testMessage . '/', $contents);
646
                $this->assertFalse(file_exists(LOGS . 'error.log'));
647
                $this->_deleteLogs();
648
649
                $testMessage = 'info message';
650
                CakeLog::info($testMessage);
651
                $contents = file_get_contents(LOGS . 'debug.log');
652
                $this->assertRegExp('/(Info|Debug): ' . $testMessage . '/', $contents);
653
                $this->assertFalse(file_exists(LOGS . 'error.log'));
654
                $this->_deleteLogs();
655
656
                $testMessage = 'debug message';
657
                CakeLog::debug($testMessage);
658
                $contents = file_get_contents(LOGS . 'debug.log');
659
                $this->assertContains('Debug: ' . $testMessage, $contents);
660
                $this->assertFalse(file_exists(LOGS . 'error.log'));
661
                $this->_deleteLogs();
662
        }
663
664
/**
665
 * test levels customization
666
 *
667
 * @return void
668
 */
669
        public function testLevelCustomization() {
670
                $this->skipIf(DIRECTORY_SEPARATOR === '\\', 'Log level tests not supported on Windows.');
671
672
                $levels = CakeLog::defaultLevels();
673
                $this->assertNotEmpty($levels);
674
                $result = array_keys($levels);
675
                $this->assertEquals(array(0, 1, 2, 3, 4, 5, 6, 7), $result);
676
677
                $levels = CakeLog::levels(array('foo', 'bar'));
678
                CakeLog::defaultLevels();
679
                $this->assertEquals('foo', $levels[8]);
680
                $this->assertEquals('bar', $levels[9]);
681
682
                $levels = CakeLog::levels(array(11 => 'spam', 'bar' => 'eggs'));
683
                CakeLog::defaultLevels();
684
                $this->assertEquals('spam', $levels[8]);
685
                $this->assertEquals('eggs', $levels[9]);
686
687
                $levels = CakeLog::levels(array(11 => 'spam', 'bar' => 'eggs'), false);
688
                CakeLog::defaultLevels();
689
                $this->assertEquals(array('spam', 'eggs'), $levels);
690
691
                $levels = CakeLog::levels(array('ham', 9 => 'spam', '12' => 'fam'), false);
692
                CakeLog::defaultLevels();
693
                $this->assertEquals(array('ham', 'spam', 'fam'), $levels);
694
        }
695
696
/**
697
 * Test writing log files with custom levels
698
 *
699
 * @return void
700
 */
701
        public function testCustomLevelWrites() {
702
                $this->_deleteLogs();
703
                $this->_resetLogConfig();
704
705
                CakeLog::levels(array('spam', 'eggs'));
706
707
                $testMessage = 'error message';
708
                CakeLog::write('error', $testMessage);
709
                CakeLog::defaultLevels();
710
                $this->assertTrue(file_exists(LOGS . 'error.log'));
711
                $contents = file_get_contents(LOGS . 'error.log');
712
                $this->assertContains('Error: ' . $testMessage, $contents);
713
714
                CakeLog::config('spam', array(
715
                        'engine' => 'File',
716
                        'file' => 'spam.log',
717
                        'types' => 'spam',
718
                        ));
719
                CakeLog::config('eggs', array(
720
                        'engine' => 'File',
721
                        'file' => 'eggs.log',
722
                        'types' => array('spam', 'eggs'),
723
                        ));
724
725
                $testMessage = 'spam message';
726
                CakeLog::write('spam', $testMessage);
727
                CakeLog::defaultLevels();
728
                $this->assertTrue(file_exists(LOGS . 'spam.log'));
729
                $this->assertTrue(file_exists(LOGS . 'eggs.log'));
730
                $contents = file_get_contents(LOGS . 'spam.log');
731
                $this->assertContains('Spam: ' . $testMessage, $contents);
732
733
                $testMessage = 'egg message';
734
                CakeLog::write('eggs', $testMessage);
735
                CakeLog::defaultLevels();
736
                $contents = file_get_contents(LOGS . 'spam.log');
737
                $this->assertNotContains('Eggs: ' . $testMessage, $contents);
738
                $contents = file_get_contents(LOGS . 'eggs.log');
739
                $this->assertContains('Eggs: ' . $testMessage, $contents);
740
741
                CakeLog::drop('spam');
742
                CakeLog::drop('eggs');
743
744
                $this->_deleteLogs();
745
        }
746
747
}