You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					90 lines
				
				2.8 KiB
			
		
		
			
		
	
	
					90 lines
				
				2.8 KiB
			| 
								 
											12 years ago
										 
									 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @author Carsten Brandt <mail@cebe.cc>
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace yiiunit\framework\log;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use yii\debug\LogTarget;
							 | 
						||
| 
								 | 
							
								use yii\log\FileTarget;
							 | 
						||
| 
								 | 
							
								use yii\log\Logger;
							 | 
						||
| 
								 | 
							
								use yii\log\Target;
							 | 
						||
| 
								 | 
							
								use yiiunit\TestCase;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class TargetTest extends TestCase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									public static $messages;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function filters()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return [
							 | 
						||
| 
								 | 
							
											[[], ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']],
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											[['levels' => 0], ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']],
							 | 
						||
| 
								 | 
							
											[
							 | 
						||
| 
								 | 
							
												['levels' => Logger::LEVEL_INFO | Logger::LEVEL_WARNING | Logger::LEVEL_ERROR | Logger::LEVEL_TRACE],
							 | 
						||
| 
								 | 
							
												['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
							 | 
						||
| 
								 | 
							
											],
							 | 
						||
| 
								 | 
							
											[['levels' => ['error']], ['B', 'G', 'H']],
							 | 
						||
| 
								 | 
							
											[['levels' => Logger::LEVEL_ERROR], ['B', 'G', 'H']],
							 | 
						||
| 
								 | 
							
											[['levels' => ['error', 'warning']], ['B', 'C', 'G', 'H']],
							 | 
						||
| 
								 | 
							
											[['levels' => Logger::LEVEL_ERROR | Logger::LEVEL_WARNING], ['B', 'C', 'G', 'H']],
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											[['categories' => ['application']], ['A', 'B', 'C', 'D', 'E']],
							 | 
						||
| 
								 | 
							
											[['categories' => ['application*']], ['A', 'B', 'C', 'D', 'E', 'F']],
							 | 
						||
| 
								 | 
							
											[['categories' => ['application.*']], ['F']],
							 | 
						||
| 
								 | 
							
											[['categories' => ['application.components']], []],
							 | 
						||
| 
								 | 
							
											[['categories' => ['application.components.Test']], ['F']],
							 | 
						||
| 
								 | 
							
											[['categories' => ['application.components.*']], ['F']],
							 | 
						||
| 
								 | 
							
											[['categories' => ['application.*', 'yii.db.*']], ['F', 'G', 'H']],
							 | 
						||
| 
								 | 
							
											[['categories' => ['application.*', 'yii.db.*'], 'except' => ['yii.db.Command.*']], ['F', 'G']],
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											[['categories' => ['application', 'yii.db.*'], 'levels' => Logger::LEVEL_ERROR], ['B', 'G', 'H']],
							 | 
						||
| 
								 | 
							
											[['categories' => ['application'], 'levels' => Logger::LEVEL_ERROR], ['B']],
							 | 
						||
| 
								 | 
							
											[['categories' => ['application'], 'levels' => Logger::LEVEL_ERROR | Logger::LEVEL_WARNING], ['B', 'C']],
							 | 
						||
| 
								 | 
							
										];
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * @dataProvider filters
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function testFilter($filter, $expected)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										static::$messages = [];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										$logger = new Logger([
							 | 
						||
| 
								 | 
							
											'targets' => [new TestTarget(array_merge($filter, ['logVars' => []]))],
							 | 
						||
| 
								 | 
							
											'flushInterval' => 1,
							 | 
						||
| 
								 | 
							
										]);
							 | 
						||
| 
								 | 
							
										$logger->log('testA', Logger::LEVEL_INFO);
							 | 
						||
| 
								 | 
							
										$logger->log('testB', Logger::LEVEL_ERROR);
							 | 
						||
| 
								 | 
							
										$logger->log('testC', Logger::LEVEL_WARNING);
							 | 
						||
| 
								 | 
							
										$logger->log('testD', Logger::LEVEL_TRACE);
							 | 
						||
| 
								 | 
							
										$logger->log('testE', Logger::LEVEL_INFO, 'application');
							 | 
						||
| 
								 | 
							
										$logger->log('testF', Logger::LEVEL_INFO, 'application.components.Test');
							 | 
						||
| 
								 | 
							
										$logger->log('testG', Logger::LEVEL_ERROR, 'yii.db.Command');
							 | 
						||
| 
								 | 
							
										$logger->log('testH', Logger::LEVEL_ERROR, 'yii.db.Command.whatever');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										$this->assertEquals(count($expected), count(static::$messages));
							 | 
						||
| 
								 | 
							
										$i = 0;
							 | 
						||
| 
								 | 
							
										foreach($expected as $e) {
							 | 
						||
| 
								 | 
							
											$this->assertEquals('test' . $e, static::$messages[$i++][0]);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class TestTarget extends Target
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									public $exportInterval = 1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Exports log [[messages]] to a specific destination.
							 | 
						||
| 
								 | 
							
									 * Child classes must implement this method.
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function export()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										TargetTest::$messages = array_merge(TargetTest::$messages, $this->messages);
							 | 
						||
| 
								 | 
							
										$this->messages = [];
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |