| <?php | |
| /** | |
| * Licensed to the Apache Software Foundation (ASF) under one or more | |
| * contributor license agreements. See the NOTICE file distributed with | |
| * this work for additional information regarding copyright ownership. | |
| * The ASF licenses this file to You under the Apache License, Version 2.0 | |
| * (the "License"); you may not use this file except in compliance with | |
| * the License. You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| * | |
| * @category tests | |
| * @package log4php | |
| * @subpackage pattern | |
| * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 | |
| * @link http://logging.apache.org/log4php | |
| */ | |
| /** | |
| * @group pattern | |
| */ | |
| class LoggerPatternConverterTest extends PHPUnit_Framework_TestCase { | |
| /** | |
| * A logging event for testing. | |
| * @var LoggerLoggingEvent | |
| */ | |
| private $event; | |
| /** | |
| * Fromatting info used with the logging event. | |
| * @var LoggerFormattingInfos | |
| */ | |
| private $info; | |
| public function __construct() { | |
| $this->event = LoggerTestHelper::getInfoEvent('foobar'); | |
| $this->info = new LoggerFormattingInfo(); | |
| } | |
| public function testCookie() { | |
| // Fake a couple of cookies | |
| $_COOKIE['test1'] = 'value1'; | |
| $_COOKIE['test2'] = 'value2'; | |
| $converter = new LoggerPatternConverterCookie($this->info, 'test1'); | |
| $actual = $converter->convert($this->event); | |
| $expected = 'value1'; | |
| self::assertSame($expected, $actual); | |
| $converter = new LoggerPatternConverterCookie($this->info, 'test2'); | |
| $actual = $converter->convert($this->event); | |
| $expected = 'value2'; | |
| self::assertSame($expected, $actual); | |
| $converter = new LoggerPatternConverterCookie($this->info); | |
| $actual = $converter->convert($this->event); | |
| $expected = "test1=value1, test2=value2"; | |
| self::assertSame($expected, $actual); | |
| } | |
| public function testDate() { | |
| $converter = new LoggerPatternConverterDate($this->info, 'c'); | |
| $actual = $converter->convert($this->event); | |
| $expected = date('c', $this->event->getTimeStamp()); | |
| self::assertSame($expected, $actual); | |
| // Format defaults to 'c' | |
| $converter = new LoggerPatternConverterDate($this->info); | |
| $actual = $converter->convert($this->event); | |
| $expected = date('c', $this->event->getTimeStamp()); | |
| self::assertSame($expected, $actual); | |
| $converter = new LoggerPatternConverterDate($this->info, ''); | |
| $actual = $converter->convert($this->event); | |
| $expected = date('c', $this->event->getTimeStamp()); | |
| self::assertSame($expected, $actual); | |
| // Test ABSOLUTE | |
| $converter = new LoggerPatternConverterDate($this->info, 'ABSOLUTE'); | |
| $actual = $converter->convert($this->event); | |
| $expected = date('H:i:s', $this->event->getTimeStamp()); | |
| self::assertSame($expected, $actual); | |
| // Test DATE | |
| $converter = new LoggerPatternConverterDate($this->info, 'DATE'); | |
| $actual = $converter->convert($this->event); | |
| $expected = date('d M Y H:i:s.', $this->event->getTimeStamp()); | |
| $timestamp = $this->event->getTimeStamp(); | |
| $ms = floor(($timestamp - floor($timestamp)) * 1000); | |
| $ms = str_pad($ms, 3, '0', STR_PAD_LEFT); | |
| $expected .= $ms; | |
| self::assertSame($expected, $actual); | |
| } | |
| public function testEnvironment() { | |
| // Fake a couple of environment values | |
| $_ENV['test1'] = 'value1'; | |
| $_ENV['test2'] = 'value2'; | |
| $converter = new LoggerPatternConverterEnvironment($this->info, 'test1'); | |
| $actual = $converter->convert($this->event); | |
| $expected = 'value1'; | |
| self::assertSame($expected, $actual); | |
| $converter = new LoggerPatternConverterEnvironment($this->info, 'test2'); | |
| $actual = $converter->convert($this->event); | |
| $expected = 'value2'; | |
| self::assertSame($expected, $actual); | |
| } | |
| public function testLevel() { | |
| $converter = new LoggerPatternConverterLevel($this->info); | |
| $actual = $converter->convert($this->event); | |
| $expected = $this->event->getLevel()->toString(); | |
| self::assertEquals($expected, $actual); | |
| } | |
| public function testLiteral() { | |
| $converter = new LoggerPatternConverterLiteral('foo bar baz'); | |
| $actual = $converter->convert($this->event); | |
| $expected = 'foo bar baz'; | |
| self::assertEquals($expected, $actual); | |
| } | |
| public function testLoggerWithoutOption() { | |
| $event = LoggerTestHelper::getInfoEvent('foo', 'TestLoggerName'); | |
| $converter = new LoggerPatternConverterLogger($this->info); | |
| $actual = $converter->convert($event); | |
| $expected = 'TestLoggerName'; | |
| self::assertEquals($expected, $actual); | |
| } | |
| public function testLoggerWithOption0() { | |
| $event = LoggerTestHelper::getInfoEvent('foo', 'TestLoggerName'); | |
| $converter = new LoggerPatternConverterLogger($this->info, '0'); | |
| $actual = $converter->convert($event); | |
| $expected = 'TestLoggerName'; | |
| self::assertEquals($expected, $actual); | |
| } | |
| public function testLocation() { | |
| $config = LoggerTestHelper::getEchoPatternConfig("%file:%line:%class:%method"); | |
| Logger::configure($config); | |
| // Test by capturing output. Logging methods of a Logger object must | |
| // be used for the location info to be formed correctly. | |
| ob_start(); | |
| $log = Logger::getLogger('foo'); | |
| $log->info('foo'); $line = __LINE__; // Do NOT move this to next line. | |
| $actual = ob_get_contents(); | |
| ob_end_clean(); | |
| $expected = implode(':', array(__FILE__, $line, __CLASS__, __FUNCTION__)); | |
| self::assertSame($expected, $actual); | |
| Logger::resetConfiguration(); | |
| } | |
| public function testLocation2() { | |
| $config = LoggerTestHelper::getEchoPatternConfig("%location"); | |
| Logger::configure($config); | |
| // Test by capturing output. Logging methods of a Logger object must | |
| // be used for the location info to be formed correctly. | |
| ob_start(); | |
| $log = Logger::getLogger('foo'); | |
| $log->info('foo'); $line = __LINE__; // Do NOT move this to next line. | |
| $actual = ob_get_contents(); | |
| ob_end_clean(); | |
| $class = __CLASS__; | |
| $func = __FUNCTION__; | |
| $file = __FILE__; | |
| $expected = "$class.$func($file:$line)"; | |
| self::assertSame($expected, $actual); | |
| Logger::resetConfiguration(); | |
| } | |
| public function testMessage() { | |
| $expected = "This is a message."; | |
| $event = LoggerTestHelper::getInfoEvent($expected); | |
| $converter = new LoggerPatternConverterMessage($this->info); | |
| $actual = $converter->convert($event); | |
| self::assertSame($expected, $actual); | |
| } | |
| public function testMDC() { | |
| LoggerMDC::put('foo', 'bar'); | |
| LoggerMDC::put('bla', 'tra'); | |
| // Entire context | |
| $converter = new LoggerPatternConverterMDC($this->info); | |
| $actual = $converter->convert($this->event); | |
| $expected = 'foo=bar, bla=tra'; | |
| self::assertSame($expected, $actual); | |
| // Just foo | |
| $converter = new LoggerPatternConverterMDC($this->info, 'foo'); | |
| $actual = $converter->convert($this->event); | |
| $expected = 'bar'; | |
| self::assertSame($expected, $actual); | |
| // Non existant key | |
| $converter = new LoggerPatternConverterMDC($this->info, 'doesnotexist'); | |
| $actual = $converter->convert($this->event); | |
| $expected = ''; | |
| self::assertSame($expected, $actual); | |
| LoggerMDC::clear(); | |
| } | |
| public function testNDC() { | |
| LoggerNDC::push('foo'); | |
| LoggerNDC::push('bar'); | |
| LoggerNDC::push('baz'); | |
| $converter = new LoggerPatternConverterNDC($this->info); | |
| $expected = 'foo bar baz'; | |
| $actual = $converter->convert($this->event); | |
| self::assertEquals($expected, $actual); | |
| } | |
| public function testNewline() { | |
| $converter = new LoggerPatternConverterNewLine($this->info); | |
| $actual = $converter->convert($this->event); | |
| $expected = PHP_EOL; | |
| self::assertSame($expected, $actual); | |
| } | |
| public function testProcess() { | |
| $converter = new LoggerPatternConverterProcess($this->info); | |
| $actual = $converter->convert($this->event); | |
| $expected = getmypid(); | |
| self::assertSame($expected, $actual); | |
| } | |
| public function testRelative() { | |
| $converter = new LoggerPatternConverterRelative($this->info); | |
| $expected = number_format($this->event->getTimeStamp() - $this->event->getStartTime(), 4); | |
| $actual = $converter->convert($this->event); | |
| self::assertSame($expected, $actual); | |
| } | |
| public function testRequest() { | |
| // Fake a couple of request values | |
| $_REQUEST['test1'] = 'value1'; | |
| $_REQUEST['test2'] = 'value2'; | |
| // Entire request | |
| $converter = new LoggerPatternConverterRequest($this->info); | |
| $actual = $converter->convert($this->event); | |
| $expected = 'test1=value1, test2=value2'; | |
| self::assertSame($expected, $actual); | |
| // Just test2 | |
| $converter = new LoggerPatternConverterRequest($this->info, 'test2'); | |
| $actual = $converter->convert($this->event); | |
| $expected = 'value2'; | |
| self::assertSame($expected, $actual); | |
| } | |
| public function testServer() { | |
| // Fake a server value | |
| $_SERVER['test1'] = 'value1'; | |
| $converter = new LoggerPatternConverterServer($this->info, 'test1'); | |
| $actual = $converter->convert($this->event); | |
| $expected = 'value1'; | |
| self::assertSame($expected, $actual); | |
| } | |
| public function testSession() { | |
| // Fake a session value | |
| $_SESSION['test1'] = 'value1'; | |
| $converter = new LoggerPatternConverterSession($this->info, 'test1'); | |
| $actual = $converter->convert($this->event); | |
| $expected = 'value1'; | |
| self::assertSame($expected, $actual); | |
| } | |
| public function testSessionID() { | |
| $converter = new LoggerPatternConverterSessionID($this->info); | |
| $actual = $converter->convert($this->event); | |
| $expected = session_id(); | |
| self::assertSame($expected, $actual); | |
| } | |
| public function testFormattingTrimRight() { | |
| $event = LoggerTestHelper::getInfoEvent('0123456789'); | |
| $info = new LoggerFormattingInfo(); | |
| $info->max = 5; | |
| $converter = new LoggerPatternConverterMessage($info); | |
| $actual = ""; | |
| $converter->format($actual, $event); | |
| $expected = "01234"; | |
| self::assertSame($expected, $actual); | |
| } | |
| public function testFormattingTrimLeft() { | |
| $event = LoggerTestHelper::getInfoEvent('0123456789'); | |
| $info = new LoggerFormattingInfo(); | |
| $info->max = 5; | |
| $info->trimLeft = true; | |
| $converter = new LoggerPatternConverterMessage($info); | |
| $actual = ""; | |
| $converter->format($actual, $event); | |
| $expected = "56789"; | |
| self::assertSame($expected, $actual); | |
| } | |
| public function testFormattingPadEmpty() { | |
| $event = LoggerTestHelper::getInfoEvent(''); | |
| $info = new LoggerFormattingInfo(); | |
| $info->min = 5; | |
| $converter = new LoggerPatternConverterMessage($info); | |
| $actual = ""; | |
| $converter->format($actual, $event); | |
| $expected = " "; | |
| self::assertSame($expected, $actual); | |
| } | |
| public function testFormattingPadLeft() { | |
| $event = LoggerTestHelper::getInfoEvent('0'); | |
| $info = new LoggerFormattingInfo(); | |
| $info->min = 5; | |
| $converter = new LoggerPatternConverterMessage($info); | |
| $actual = ""; | |
| $converter->format($actual, $event); | |
| $expected = " 0"; | |
| self::assertSame($expected, $actual); | |
| } | |
| public function testFormattingPadRight() { | |
| $event = LoggerTestHelper::getInfoEvent('0'); | |
| $info = new LoggerFormattingInfo(); | |
| $info->min = 5; | |
| $info->padLeft = false; | |
| $converter = new LoggerPatternConverterMessage($info); | |
| $actual = ""; | |
| $converter->format($actual, $event); | |
| $expected = "0 "; | |
| self::assertSame($expected, $actual); | |
| } | |
| } |