mirror of
https://github.com/symfony/debug.git
synced 2026-04-25 01:48:17 +02:00
81eca380c1
* 2.8: fixed obsolete getMock() usage fixed obsolete getMock() usage [WebProfilerBundle] Display multiple HTTP headers in WDT do not remove the Twig ExceptionController service removed obsolete condition do not try to register incomplete definitions
133 lines
4.0 KiB
PHP
133 lines
4.0 KiB
PHP
<?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 Symfony\Component\Debug\Tests;
|
|
|
|
use Symfony\Component\Debug\ExceptionHandler;
|
|
use Symfony\Component\Debug\Exception\OutOfMemoryException;
|
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
|
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
|
|
|
|
require_once __DIR__.'/HeaderMock.php';
|
|
|
|
class ExceptionHandlerTest extends \PHPUnit_Framework_TestCase
|
|
{
|
|
protected function setUp()
|
|
{
|
|
testHeader();
|
|
}
|
|
|
|
protected function tearDown()
|
|
{
|
|
testHeader();
|
|
}
|
|
|
|
public function testDebug()
|
|
{
|
|
$handler = new ExceptionHandler(false);
|
|
|
|
ob_start();
|
|
$handler->sendPhpResponse(new \RuntimeException('Foo'));
|
|
$response = ob_get_clean();
|
|
|
|
$this->assertContains('<h1>Whoops, looks like something went wrong.</h1>', $response);
|
|
$this->assertNotContains('<h2 class="block_exception clear_fix">', $response);
|
|
|
|
$handler = new ExceptionHandler(true);
|
|
|
|
ob_start();
|
|
$handler->sendPhpResponse(new \RuntimeException('Foo'));
|
|
$response = ob_get_clean();
|
|
|
|
$this->assertContains('<h1>Whoops, looks like something went wrong.</h1>', $response);
|
|
$this->assertContains('<h2 class="block_exception clear_fix">', $response);
|
|
}
|
|
|
|
public function testStatusCode()
|
|
{
|
|
$handler = new ExceptionHandler(false, 'iso8859-1');
|
|
|
|
ob_start();
|
|
$handler->sendPhpResponse(new NotFoundHttpException('Foo'));
|
|
$response = ob_get_clean();
|
|
|
|
$this->assertContains('Sorry, the page you are looking for could not be found.', $response);
|
|
|
|
$expectedHeaders = array(
|
|
array('HTTP/1.0 404', true, null),
|
|
array('Content-Type: text/html; charset=iso8859-1', true, null),
|
|
);
|
|
|
|
$this->assertSame($expectedHeaders, testHeader());
|
|
}
|
|
|
|
public function testHeaders()
|
|
{
|
|
$handler = new ExceptionHandler(false, 'iso8859-1');
|
|
|
|
ob_start();
|
|
$handler->sendPhpResponse(new MethodNotAllowedHttpException(array('POST')));
|
|
$response = ob_get_clean();
|
|
|
|
$expectedHeaders = array(
|
|
array('HTTP/1.0 405', true, null),
|
|
array('Allow: POST', false, null),
|
|
array('Content-Type: text/html; charset=iso8859-1', true, null),
|
|
);
|
|
|
|
$this->assertSame($expectedHeaders, testHeader());
|
|
}
|
|
|
|
public function testNestedExceptions()
|
|
{
|
|
$handler = new ExceptionHandler(true);
|
|
ob_start();
|
|
$handler->sendPhpResponse(new \RuntimeException('Foo', 0, new \RuntimeException('Bar')));
|
|
$response = ob_get_clean();
|
|
|
|
$this->assertStringMatchesFormat('%A<span class="exception_message">Foo</span>%A<span class="exception_message">Bar</span>%A', $response);
|
|
}
|
|
|
|
public function testHandle()
|
|
{
|
|
$exception = new \Exception('foo');
|
|
|
|
$handler = $this->getMockBuilder('Symfony\Component\Debug\ExceptionHandler')->setMethods(array('sendPhpResponse'))->getMock();
|
|
$handler
|
|
->expects($this->exactly(2))
|
|
->method('sendPhpResponse');
|
|
|
|
$handler->handle($exception);
|
|
|
|
$handler->setHandler(function ($e) use ($exception) {
|
|
$this->assertSame($exception, $e);
|
|
});
|
|
|
|
$handler->handle($exception);
|
|
}
|
|
|
|
public function testHandleOutOfMemoryException()
|
|
{
|
|
$exception = new OutOfMemoryException('foo', 0, E_ERROR, __FILE__, __LINE__);
|
|
|
|
$handler = $this->getMockBuilder('Symfony\Component\Debug\ExceptionHandler')->setMethods(array('sendPhpResponse'))->getMock();
|
|
$handler
|
|
->expects($this->once())
|
|
->method('sendPhpResponse');
|
|
|
|
$handler->setHandler(function ($e) {
|
|
$this->fail('OutOfMemoryException should bypass the handler');
|
|
});
|
|
|
|
$handler->handle($exception);
|
|
}
|
|
}
|