Вход Регистрация
Файл: gapps/vendor/symfony/http-kernel/Tests/EventListener/ExceptionListenerTest.php
Строк: 242
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyComponentHttpKernelTestsEventListener;

use 
SymfonyComponentHttpKernelHttpKernelInterface;
use 
SymfonyComponentHttpKernelEventListenerExceptionListener;
use 
SymfonyComponentHttpKernelLogDebugLoggerInterface;
use 
SymfonyComponentHttpKernelEventGetResponseForExceptionEvent;
use 
SymfonyComponentHttpFoundationRequest;
use 
SymfonyComponentHttpFoundationResponse;
use 
SymfonyComponentHttpKernelTestsLogger;

/**
 * ExceptionListenerTest.
 *
 * @author Robert Schönthal <seroscho@googlemail.com>
 *
 * @group time-sensitive
 */
class ExceptionListenerTest extends PHPUnit_Framework_TestCase
{
    public function 
testConstruct()
    {
        
$logger = new TestLogger();
        
$l = new ExceptionListener('foo'$logger);

        
$_logger = new ReflectionProperty(get_class($l), 'logger');
        
$_logger->setAccessible(true);
        
$_controller = new ReflectionProperty(get_class($l), 'controller');
        
$_controller->setAccessible(true);

        
$this->assertSame($logger$_logger->getValue($l));
        
$this->assertSame('foo'$_controller->getValue($l));
    }

    
/**
     * @dataProvider provider
     */
    
public function testHandleWithoutLogger($event$event2)
    {
        
$this->iniSet('error_log'file_exists('/dev/null') ? '/dev/null' 'nul');

        
$l = new ExceptionListener('foo');
        
$l->onKernelException($event);

        
$this->assertEquals(new Response('foo'), $event->getResponse());

        try {
            
$l->onKernelException($event2);
            
$this->fail('RuntimeException expected');
        } catch (
RuntimeException $e) {
            
$this->assertSame('bar'$e->getMessage());
            
$this->assertSame('foo'$e->getPrevious()->getMessage());
        }
    }

    
/**
     * @dataProvider provider
     */
    
public function testHandleWithLogger($event$event2)
    {
        
$logger = new TestLogger();

        
$l = new ExceptionListener('foo'$logger);
        
$l->onKernelException($event);

        
$this->assertEquals(new Response('foo'), $event->getResponse());

        try {
            
$l->onKernelException($event2);
            
$this->fail('RuntimeException expected');
        } catch (
RuntimeException $e) {
            
$this->assertSame('bar'$e->getMessage());
            
$this->assertSame('foo'$e->getPrevious()->getMessage());
        }

        
$this->assertEquals(3$logger->countErrors());
        
$this->assertCount(3$logger->getLogs('critical'));
    }

    public function 
provider()
    {
        if (!
class_exists('SymfonyComponentHttpFoundationRequest')) {
            return array(array(
nullnull));
        }

        
$request = new Request();
        
$exception = new Exception('foo');
        
$event = new GetResponseForExceptionEvent(new TestKernel(), $request'foo'$exception);
        
$event2 = new GetResponseForExceptionEvent(new TestKernelThatThrowsException(), $request'foo'$exception);

        return array(
            array(
$event$event2),
        );
    }

    public function 
testSubRequestFormat()
    {
        
$listener = new ExceptionListener('foo'$this->getMock('PsrLogLoggerInterface'));

        
$kernel $this->getMock('SymfonyComponentHttpKernelHttpKernelInterface');
        
$kernel->expects($this->once())->method('handle')->will($this->returnCallback(function (Request $request) {
            return new 
Response($request->getRequestFormat());
        }));

        
$request Request::create('/');
        
$request->setRequestFormat('xml');

        
$event = new GetResponseForExceptionEvent($kernel$request'foo', new Exception('foo'));
        
$listener->onKernelException($event);

        
$response $event->getResponse();
        
$this->assertEquals('xml'$response->getContent());
    }
}

class 
TestLogger extends Logger implements DebugLoggerInterface
{
    public function 
countErrors()
    {
        return 
count($this->logs['critical']);
    }
}

class 
TestKernel implements HttpKernelInterface
{
    public function 
handle(Request $request$type self::MASTER_REQUEST$catch true)
    {
        return new 
Response('foo');
    }
}

class 
TestKernelThatThrowsException implements HttpKernelInterface
{
    public function 
handle(Request $request$type self::MASTER_REQUEST$catch true)
    {
        throw new 
RuntimeException('bar');
    }
}
Онлайн: 4
Реклама