Added: logging/log4php/trunk/src/test/php/pattern/LoggerPatternConverterTest.php URL: http://svn.apache.org/viewvc/logging/log4php/trunk/src/test/php/pattern/LoggerPatternConverterTest.php?rev=1294503&view=auto ============================================================================== --- logging/log4php/trunk/src/test/php/pattern/LoggerPatternConverterTest.php (added) +++ logging/log4php/trunk/src/test/php/pattern/LoggerPatternConverterTest.php Tue Feb 28 07:49:21 2012 @@ -0,0 +1,357 @@ +<?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 filters + * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 + * @version SVN: $Id$ + * @link http://logging.apache.org/log4php + */ + +/** Converter referencing non-existant superglobal variable. */ +class LoggerInvalidSuperglobalConverter extends LoggerPatternConverterSuperglobal { + protected $name = '_FOO'; +} + +/** + * @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); + + // 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 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); + } + + /** + * @expectedException PHPUnit_Framework_Error + * @expectedExceptionMessage log4php: LoggerInvalidSuperglobalConverter: Cannot find superglobal variable $_FOO + */ + public function testNonexistantSuperglobal() { + $converter = new LoggerInvalidSuperglobalConverter($this->info); + $actual = $converter->convert($this->event); + } + + 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); + } +}
