| <?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 renderers | |
| * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 | |
| * @link http://logging.apache.org/log4php | |
| */ | |
| /** Renders everything as 'foo'. */ | |
| class FooRenderer implements LoggerRenderer { | |
| public function render($input) { | |
| return 'foo'; | |
| } | |
| } | |
| class InvalidCostumObjectRenderer { } | |
| class Fruit3 { | |
| public $test1 = 'test1'; | |
| public $test2 = 'test2'; | |
| public $test3 = 'test3'; | |
| } | |
| class Fruit3Descendant extends Fruit3 { | |
| } | |
| class FruitRenderer3 implements LoggerRenderer { | |
| public function render($fruit) { | |
| return $fruit->test1 . ',' . $fruit->test2 . ',' . $fruit->test3; | |
| } | |
| } | |
| class SampleObject { | |
| } | |
| /** | |
| * @group renderers | |
| */ | |
| class LoggerRendererMapTest extends PHPUnit_Framework_TestCase { | |
| public function testDefaults() { | |
| $map = new LoggerRendererMap(); | |
| $actual = $map->getByClassName('Exception'); | |
| self::assertInstanceOf('LoggerRendererException', $actual); | |
| // Check non-configured objects return null | |
| self::assertNull($map->getByObject(new stdClass())); | |
| self::assertNull($map->getByClassName('stdClass')); | |
| } | |
| public function testClear() | |
| { | |
| $map = new LoggerRendererMap(); | |
| $map->clear(); // This should clear the map and remove default renderers | |
| self::assertNull($map->getByClassName('Exception')); | |
| } | |
| public function testFindAndRender() | |
| { | |
| $map = new LoggerRendererMap(); | |
| $map->addRenderer('Fruit3', 'FruitRenderer3'); | |
| $fruit = new Fruit3(); | |
| $descendant = new Fruit3Descendant(); | |
| // Check rendering of fruit | |
| $actual = $map->findAndRender($fruit); | |
| $expected = 'test1,test2,test3'; | |
| self::assertSame($expected, $actual); | |
| $actual = $map->getByObject($fruit); | |
| self::assertInstanceOf('FruitRenderer3', $actual); | |
| // Check rendering of fruit's descendant | |
| $actual = $map->findAndRender($descendant); | |
| $expected = 'test1,test2,test3'; | |
| self::assertSame($expected, $actual); | |
| $actual = $map->getByObject($descendant); | |
| self::assertInstanceOf('FruitRenderer3', $actual); | |
| // Test rendering null returns null | |
| self::assertNull($map->findAndRender(null)); | |
| } | |
| /** | |
| * Try adding a non-existant class as renderer. | |
| * @expectedException PHPUnit_Framework_Error | |
| * @expectedExceptionMessage Failed adding renderer. Rendering class [DoesNotExist] not found. | |
| */ | |
| public function testAddRendererError1() | |
| { | |
| $map = new LoggerRendererMap(); | |
| $map->addRenderer('Fruit3', 'DoesNotExist'); | |
| } | |
| /** | |
| * Try adding a class which does not implement LoggerRenderer as renderer. | |
| * @expectedException PHPUnit_Framework_Error | |
| * @expectedExceptionMessage Failed adding renderer. Rendering class [stdClass] does not implement the LoggerRenderer interface. | |
| */ | |
| public function testAddRendererError2() | |
| { | |
| $map = new LoggerRendererMap(); | |
| $map->addRenderer('Fruit3', 'stdClass'); | |
| } | |
| public function testAddRendererError3() | |
| { | |
| $map = new LoggerRendererMap(); | |
| @$map->addRenderer('Fruit3', 'stdClass'); | |
| self::assertNull($map->getByClassName('Fruit3')); | |
| @$map->addRenderer('Fruit3', 'DoesNotExist'); | |
| self::assertNull($map->getByClassName('Fruit3')); | |
| } | |
| /** | |
| * Try setting a non-existant class as default renderer. | |
| * @expectedException PHPUnit_Framework_Error | |
| * @expectedExceptionMessage Failed setting default renderer. Rendering class [DoesNotExist] not found. | |
| */ | |
| public function testSetDefaultRendererError1() | |
| { | |
| $map = new LoggerRendererMap(); | |
| $map->setDefaultRenderer('DoesNotExist'); | |
| } | |
| /** | |
| * Try setting a class which does not implement LoggerRenderer as default renderer. | |
| * @expectedException PHPUnit_Framework_Error | |
| * @expectedExceptionMessage Failed setting default renderer. Rendering class [stdClass] does not implement the LoggerRenderer interface. | |
| */ | |
| public function testSetDefaultRendererError2() | |
| { | |
| $map = new LoggerRendererMap(); | |
| $map->setDefaultRenderer('stdClass'); | |
| } | |
| public function testSetDefaultRendererError3() | |
| { | |
| $map = new LoggerRendererMap(); | |
| $expected = $map->getDefaultRenderer(); | |
| @$map->setDefaultRenderer('stdClass'); | |
| $actual = $map->getDefaultRenderer(); | |
| self::assertSame($expected, $actual); | |
| @$map->setDefaultRenderer('DoesNotExist'); | |
| $actual = $map->getDefaultRenderer(); | |
| self::assertSame($expected, $actual); | |
| } | |
| public function testFetchingRenderer() | |
| { | |
| $map = new LoggerRendererMap(); | |
| $map->addRenderer('Fruit3', 'FruitRenderer3'); | |
| } | |
| public function testDefaultRenderer() | |
| { | |
| $fruit = new Fruit3(); | |
| $map = new LoggerRendererMap(); | |
| $actual = $map->findAndRender($fruit); | |
| $defaultRenderer = new LoggerRendererDefault(); | |
| $expected = $defaultRenderer->render($fruit); | |
| self::assertSame($expected, $actual); | |
| } | |
| public function testOverrideDefaultRenderer() | |
| { | |
| $map = new LoggerRendererMap(); | |
| $default = $map->getDefaultRenderer(); | |
| $array = array(1, 2, 3); | |
| $actual = $map->findAndRender($array); | |
| $expected = print_r($array, true); | |
| self::assertSame($actual, $expected); | |
| // Now switch the default renderer | |
| $map->setDefaultRenderer('FooRenderer'); | |
| $actual = $map->findAndRender($array); | |
| $expected = 'foo'; | |
| self::assertSame($actual, $expected); | |
| } | |
| public function testGetByObjectCrap() | |
| { | |
| $map = new LoggerRendererMap(); | |
| // Non object input should always return null | |
| self::assertNull($map->getByObject(null)); | |
| self::assertNull($map->getByObject(array())); | |
| self::assertNull($map->getByObject('sdasda')); | |
| } | |
| public function testXMLConfig() | |
| { | |
| $map = Logger::getHierarchy()->getRendererMap(); | |
| Logger::resetConfiguration(); | |
| self::assertInstanceOf('LoggerRendererDefault', $map->getDefaultRenderer()); | |
| Logger::configure(PHPUNIT_CONFIG_DIR . '/renderers/config_default_renderer.xml'); | |
| self::assertInstanceOf('FruitRenderer3', $map->getDefaultRenderer()); | |
| Logger::resetConfiguration(); | |
| self::assertInstanceOf('LoggerRendererDefault', $map->getDefaultRenderer()); | |
| } | |
| public function testExceptionRenderer() | |
| { | |
| $ex = new LoggerException("This is a test"); | |
| $map = new LoggerRendererMap(); | |
| $actual = $map->findAndRender($ex); | |
| $expected = (string) $ex; | |
| self::assertSame($expected, $actual); | |
| } | |
| } |