diff --git a/tests/unit/framework/log/LoggerTest.php b/tests/unit/framework/log/LoggerTest.php new file mode 100644 index 0000000..31a4c3b --- /dev/null +++ b/tests/unit/framework/log/LoggerTest.php @@ -0,0 +1,33 @@ + + */ + +namespace yiiunit\framework\log; + + +use yii\debug\LogTarget; +use yii\log\FileTarget; +use yii\log\Logger; +use yiiunit\TestCase; + +class LoggerTest extends TestCase +{ + + public function testLog() + { + $logger = new Logger(); + + $logger->log('test1', Logger::LEVEL_INFO); + $this->assertEquals(1, count($logger->messages)); + $this->assertEquals('test1', $logger->messages[0][0]); + $this->assertEquals(Logger::LEVEL_INFO, $logger->messages[0][1]); + $this->assertEquals('application', $logger->messages[0][2]); + + $logger->log('test2', Logger::LEVEL_ERROR, 'category'); + $this->assertEquals(2, count($logger->messages)); + $this->assertEquals('test2', $logger->messages[1][0]); + $this->assertEquals(Logger::LEVEL_ERROR, $logger->messages[1][1]); + $this->assertEquals('category', $logger->messages[1][2]); + } +} \ No newline at end of file diff --git a/tests/unit/framework/log/TargetTest.php b/tests/unit/framework/log/TargetTest.php new file mode 100644 index 0000000..b4ceb4c --- /dev/null +++ b/tests/unit/framework/log/TargetTest.php @@ -0,0 +1,90 @@ + + */ + +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 = []; + } +} \ No newline at end of file