Вход Регистрация
Файл: gapps/vendor/monolog/monolog/tests/Monolog/LoggerTest.php
Строк: 588
<?php

/*
 * This file is part of the Monolog package.
 *
 * (c) Jordi Boggiano <j.boggiano@seld.be>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Monolog;

use 
MonologProcessorWebProcessor;
use 
MonologHandlerTestHandler;

class 
LoggerTest extends PHPUnit_Framework_TestCase
{
    
/**
     * @covers MonologLogger::getName
     */
    
public function testGetName()
    {
        
$logger = new Logger('foo');
        
$this->assertEquals('foo'$logger->getName());
    }

    
/**
     * @covers MonologLogger::getLevelName
     */
    
public function testGetLevelName()
    {
        
$this->assertEquals('ERROR'Logger::getLevelName(Logger::ERROR));
    }

    
/**
     * @covers MonologLogger::withName
     */
    
public function testWithName()
    {
        
$first = new Logger('first', array($handler = new TestHandler()));
        
$second $first->withName('second');

        
$this->assertSame('first'$first->getName());
        
$this->assertSame('second'$second->getName());
        
$this->assertSame($handler$second->popHandler());
    }

    
/**
     * @covers MonologLogger::toMonologLevel
     */
    
public function testConvertPSR3ToMonologLevel()
    {
        
$this->assertEquals(Logger::toMonologLevel('debug'), 100);
        
$this->assertEquals(Logger::toMonologLevel('info'), 200);
        
$this->assertEquals(Logger::toMonologLevel('notice'), 250);
        
$this->assertEquals(Logger::toMonologLevel('warning'), 300);
        
$this->assertEquals(Logger::toMonologLevel('error'), 400);
        
$this->assertEquals(Logger::toMonologLevel('critical'), 500);
        
$this->assertEquals(Logger::toMonologLevel('alert'), 550);
        
$this->assertEquals(Logger::toMonologLevel('emergency'), 600);
    }

    
/**
     * @covers MonologLogger::getLevelName
     * @expectedException InvalidArgumentException
     */
    
public function testGetLevelNameThrows()
    {
        
Logger::getLevelName(5);
    }

    
/**
     * @covers MonologLogger::__construct
     */
    
public function testChannel()
    {
        
$logger = new Logger('foo');
        
$handler = new TestHandler;
        
$logger->pushHandler($handler);
        
$logger->addWarning('test');
        list(
$record) = $handler->getRecords();
        
$this->assertEquals('foo'$record['channel']);
    }

    
/**
     * @covers MonologLogger::addRecord
     */
    
public function testLog()
    {
        
$logger = new Logger(__METHOD__);

        
$handler $this->getMock('MonologHandlerNullHandler', array('handle'));
        
$handler->expects($this->once())
            ->
method('handle');
        
$logger->pushHandler($handler);

        
$this->assertTrue($logger->addWarning('test'));
    }

    
/**
     * @covers MonologLogger::addRecord
     */
    
public function testLogNotHandled()
    {
        
$logger = new Logger(__METHOD__);

        
$handler $this->getMock('MonologHandlerNullHandler', array('handle'), array(Logger::ERROR));
        
$handler->expects($this->never())
            ->
method('handle');
        
$logger->pushHandler($handler);

        
$this->assertFalse($logger->addWarning('test'));
    }

    public function 
testHandlersInCtor()
    {
        
$handler1 = new TestHandler;
        
$handler2 = new TestHandler;
        
$logger = new Logger(__METHOD__, array($handler1$handler2));

        
$this->assertEquals($handler1$logger->popHandler());
        
$this->assertEquals($handler2$logger->popHandler());
    }

    public function 
testProcessorsInCtor()
    {
        
$processor1 = new WebProcessor;
        
$processor2 = new WebProcessor;
        
$logger = new Logger(__METHOD__, array(), array($processor1$processor2));

        
$this->assertEquals($processor1$logger->popProcessor());
        
$this->assertEquals($processor2$logger->popProcessor());
    }

    
/**
     * @covers MonologLogger::pushHandler
     * @covers MonologLogger::popHandler
     * @expectedException LogicException
     */
    
public function testPushPopHandler()
    {
        
$logger = new Logger(__METHOD__);
        
$handler1 = new TestHandler;
        
$handler2 = new TestHandler;

        
$logger->pushHandler($handler1);
        
$logger->pushHandler($handler2);

        
$this->assertEquals($handler2$logger->popHandler());
        
$this->assertEquals($handler1$logger->popHandler());
        
$logger->popHandler();
    }

    
/**
     * @covers MonologLogger::setHandlers
     */
    
public function testSetHandlers()
    {
        
$logger = new Logger(__METHOD__);
        
$handler1 = new TestHandler;
        
$handler2 = new TestHandler;

        
$logger->pushHandler($handler1);
        
$logger->setHandlers(array($handler2));

        
// handler1 has been removed
        
$this->assertEquals(array($handler2), $logger->getHandlers());

        
$logger->setHandlers(array(
            
"AMapKey" => $handler1,
            
"Woop" => $handler2,
        ));

        
// Keys have been scrubbed
        
$this->assertEquals(array($handler1$handler2), $logger->getHandlers());
    }

    
/**
     * @covers MonologLogger::pushProcessor
     * @covers MonologLogger::popProcessor
     * @expectedException LogicException
     */
    
public function testPushPopProcessor()
    {
        
$logger = new Logger(__METHOD__);
        
$processor1 = new WebProcessor;
        
$processor2 = new WebProcessor;

        
$logger->pushProcessor($processor1);
        
$logger->pushProcessor($processor2);

        
$this->assertEquals($processor2$logger->popProcessor());
        
$this->assertEquals($processor1$logger->popProcessor());
        
$logger->popProcessor();
    }

    
/**
     * @covers MonologLogger::pushProcessor
     * @expectedException InvalidArgumentException
     */
    
public function testPushProcessorWithNonCallable()
    {
        
$logger = new Logger(__METHOD__);

        
$logger->pushProcessor(new stdClass());
    }

    
/**
     * @covers MonologLogger::addRecord
     */
    
public function testProcessorsAreExecuted()
    {
        
$logger = new Logger(__METHOD__);
        
$handler = new TestHandler;
        
$logger->pushHandler($handler);
        
$logger->pushProcessor(function ($record) {
            
$record['extra']['win'] = true;

            return 
$record;
        });
        
$logger->addError('test');
        list(
$record) = $handler->getRecords();
        
$this->assertTrue($record['extra']['win']);
    }

    
/**
     * @covers MonologLogger::addRecord
     */
    
public function testProcessorsAreCalledOnlyOnce()
    {
        
$logger = new Logger(__METHOD__);
        
$handler $this->getMock('MonologHandlerHandlerInterface');
        
$handler->expects($this->any())
            ->
method('isHandling')
            ->
will($this->returnValue(true))
        ;
        
$handler->expects($this->any())
            ->
method('handle')
            ->
will($this->returnValue(true))
        ;
        
$logger->pushHandler($handler);

        
$processor $this->getMockBuilder('MonologProcessorWebProcessor')
            ->
disableOriginalConstructor()
            ->
setMethods(array('__invoke'))
            ->
getMock()
        ;
        
$processor->expects($this->once())
            ->
method('__invoke')
            ->
will($this->returnArgument(0))
        ;
        
$logger->pushProcessor($processor);

        
$logger->addError('test');
    }

    
/**
     * @covers MonologLogger::addRecord
     */
    
public function testProcessorsNotCalledWhenNotHandled()
    {
        
$logger = new Logger(__METHOD__);
        
$handler $this->getMock('MonologHandlerHandlerInterface');
        
$handler->expects($this->once())
            ->
method('isHandling')
            ->
will($this->returnValue(false))
        ;
        
$logger->pushHandler($handler);
        
$that $this;
        
$logger->pushProcessor(function ($record) use ($that) {
            
$that->fail('The processor should not be called');
        });
        
$logger->addAlert('test');
    }

    
/**
     * @covers MonologLogger::addRecord
     */
    
public function testHandlersNotCalledBeforeFirstHandling()
    {
        
$logger = new Logger(__METHOD__);

        
$handler1 $this->getMock('MonologHandlerHandlerInterface');
        
$handler1->expects($this->never())
            ->
method('isHandling')
            ->
will($this->returnValue(false))
        ;
        
$handler1->expects($this->once())
            ->
method('handle')
            ->
will($this->returnValue(false))
        ;
        
$logger->pushHandler($handler1);

        
$handler2 $this->getMock('MonologHandlerHandlerInterface');
        
$handler2->expects($this->once())
            ->
method('isHandling')
            ->
will($this->returnValue(true))
        ;
        
$handler2->expects($this->once())
            ->
method('handle')
            ->
will($this->returnValue(false))
        ;
        
$logger->pushHandler($handler2);

        
$handler3 $this->getMock('MonologHandlerHandlerInterface');
        
$handler3->expects($this->once())
            ->
method('isHandling')
            ->
will($this->returnValue(false))
        ;
        
$handler3->expects($this->never())
            ->
method('handle')
        ;
        
$logger->pushHandler($handler3);

        
$logger->debug('test');
    }

    
/**
     * @covers MonologLogger::addRecord
     */
    
public function testHandlersNotCalledBeforeFirstHandlingWithAssocArray()
    {
        
$handler1 $this->getMock('MonologHandlerHandlerInterface');
        
$handler1->expects($this->never())
            ->
method('isHandling')
            ->
will($this->returnValue(false))
        ;
        
$handler1->expects($this->once())
            ->
method('handle')
            ->
will($this->returnValue(false))
        ;

        
$handler2 $this->getMock('MonologHandlerHandlerInterface');
        
$handler2->expects($this->once())
            ->
method('isHandling')
            ->
will($this->returnValue(true))
        ;
        
$handler2->expects($this->once())
            ->
method('handle')
            ->
will($this->returnValue(false))
        ;

        
$handler3 $this->getMock('MonologHandlerHandlerInterface');
        
$handler3->expects($this->once())
            ->
method('isHandling')
            ->
will($this->returnValue(false))
        ;
        
$handler3->expects($this->never())
            ->
method('handle')
        ;

        
$logger = new Logger(__METHOD__, array('last' => $handler3'second' => $handler2'first' => $handler1));

        
$logger->debug('test');
    }

    
/**
     * @covers MonologLogger::addRecord
     */
    
public function testBubblingWhenTheHandlerReturnsFalse()
    {
        
$logger = new Logger(__METHOD__);

        
$handler1 $this->getMock('MonologHandlerHandlerInterface');
        
$handler1->expects($this->any())
            ->
method('isHandling')
            ->
will($this->returnValue(true))
        ;
        
$handler1->expects($this->once())
            ->
method('handle')
            ->
will($this->returnValue(false))
        ;
        
$logger->pushHandler($handler1);

        
$handler2 $this->getMock('MonologHandlerHandlerInterface');
        
$handler2->expects($this->any())
            ->
method('isHandling')
            ->
will($this->returnValue(true))
        ;
        
$handler2->expects($this->once())
            ->
method('handle')
            ->
will($this->returnValue(false))
        ;
        
$logger->pushHandler($handler2);

        
$logger->debug('test');
    }

    
/**
     * @covers MonologLogger::addRecord
     */
    
public function testNotBubblingWhenTheHandlerReturnsTrue()
    {
        
$logger = new Logger(__METHOD__);

        
$handler1 $this->getMock('MonologHandlerHandlerInterface');
        
$handler1->expects($this->any())
            ->
method('isHandling')
            ->
will($this->returnValue(true))
        ;
        
$handler1->expects($this->never())
            ->
method('handle')
        ;
        
$logger->pushHandler($handler1);

        
$handler2 $this->getMock('MonologHandlerHandlerInterface');
        
$handler2->expects($this->any())
            ->
method('isHandling')
            ->
will($this->returnValue(true))
        ;
        
$handler2->expects($this->once())
            ->
method('handle')
            ->
will($this->returnValue(true))
        ;
        
$logger->pushHandler($handler2);

        
$logger->debug('test');
    }

    
/**
     * @covers MonologLogger::isHandling
     */
    
public function testIsHandling()
    {
        
$logger = new Logger(__METHOD__);

        
$handler1 $this->getMock('MonologHandlerHandlerInterface');
        
$handler1->expects($this->any())
            ->
method('isHandling')
            ->
will($this->returnValue(false))
        ;

        
$logger->pushHandler($handler1);
        
$this->assertFalse($logger->isHandling(Logger::DEBUG));

        
$handler2 $this->getMock('MonologHandlerHandlerInterface');
        
$handler2->expects($this->any())
            ->
method('isHandling')
            ->
will($this->returnValue(true))
        ;

        
$logger->pushHandler($handler2);
        
$this->assertTrue($logger->isHandling(Logger::DEBUG));
    }

    
/**
     * @dataProvider logMethodProvider
     * @covers MonologLogger::addDebug
     * @covers MonologLogger::addInfo
     * @covers MonologLogger::addNotice
     * @covers MonologLogger::addWarning
     * @covers MonologLogger::addError
     * @covers MonologLogger::addCritical
     * @covers MonologLogger::addAlert
     * @covers MonologLogger::addEmergency
     * @covers MonologLogger::debug
     * @covers MonologLogger::info
     * @covers MonologLogger::notice
     * @covers MonologLogger::warn
     * @covers MonologLogger::err
     * @covers MonologLogger::crit
     * @covers MonologLogger::alert
     * @covers MonologLogger::emerg
     */
    
public function testLogMethods($method$expectedLevel)
    {
        
$logger = new Logger('foo');
        
$handler = new TestHandler;
        
$logger->pushHandler($handler);
        
$logger->{$method}('test');
        list(
$record) = $handler->getRecords();
        
$this->assertEquals($expectedLevel$record['level']);
    }

    public function 
logMethodProvider()
    {
        return array(
            
// monolog methods
            
array('addDebug',     Logger::DEBUG),
            array(
'addInfo',      Logger::INFO),
            array(
'addNotice',    Logger::NOTICE),
            array(
'addWarning',   Logger::WARNING),
            array(
'addError',     Logger::ERROR),
            array(
'addCritical',  Logger::CRITICAL),
            array(
'addAlert',     Logger::ALERT),
            array(
'addEmergency'Logger::EMERGENCY),

            
// ZF/Sf2 compat methods
            
array('debug',  Logger::DEBUG),
            array(
'info',   Logger::INFO),
            array(
'notice'Logger::NOTICE),
            array(
'warn',   Logger::WARNING),
            array(
'err',    Logger::ERROR),
            array(
'crit',   Logger::CRITICAL),
            array(
'alert',  Logger::ALERT),
            array(
'emerg',  Logger::EMERGENCY),
        );
    }

    
/**
     * @dataProvider setTimezoneProvider
     * @covers MonologLogger::setTimezone
     */
    
public function testSetTimezone($tz)
    {
        
Logger::setTimezone($tz);
        
$logger = new Logger('foo');
        
$handler = new TestHandler;
        
$logger->pushHandler($handler);
        
$logger->info('test');
        list(
$record) = $handler->getRecords();
        
$this->assertEquals($tz$record['datetime']->getTimezone());
    }

    public function 
setTimezoneProvider()
    {
        return 
array_map(
            function (
$tz) { return array(new DateTimeZone($tz)); },
            
DateTimeZone::listIdentifiers()
        );
    }

    
/**
     * @dataProvider useMicrosecondTimestampsProvider
     * @covers MonologLogger::useMicrosecondTimestamps
     * @covers MonologLogger::addRecord
     */
    
public function testUseMicrosecondTimestamps($micro$assert)
    {
        
$logger = new Logger('foo');
        
$logger->useMicrosecondTimestamps($micro);
        
$handler = new TestHandler;
        
$logger->pushHandler($handler);
        
$logger->info('test');
        list(
$record) = $handler->getRecords();
        
$this->{$assert}('000000'$record['datetime']->format('u'));
    }

    public function 
useMicrosecondTimestampsProvider()
    {
        return array(
            
// this has a very small chance of a false negative (1/10^6)
            
'with microseconds' => array(true'assertNotSame'),
            
'without microseconds' => array(falsePHP_VERSION_ID >= 70100 'assertNotSame' 'assertSame'),
        );
    }
}
Онлайн: 0
Реклама