|
12 | 12 | namespace Symfony\Component\Debug\Tests; |
13 | 13 |
|
14 | 14 | use PHPUnit\Framework\TestCase; |
| 15 | +use Psr\Log\LoggerInterface; |
15 | 16 | use Psr\Log\LogLevel; |
| 17 | +use Psr\Log\NullLogger; |
16 | 18 | use Symfony\Component\Debug\BufferingLogger; |
17 | 19 | use Symfony\Component\Debug\ErrorHandler; |
18 | 20 | use Symfony\Component\Debug\Exception\SilencedErrorContext; |
| 21 | +use Symfony\Component\Debug\Tests\Fixtures\LoggerThatSetAnErrorHandler; |
19 | 22 |
|
20 | 23 | /** |
21 | 24 | * ErrorHandlerTest. |
@@ -321,6 +324,8 @@ public function testHandleDeprecation() |
321 | 324 | $handler = new ErrorHandler(); |
322 | 325 | $handler->setDefaultLogger($logger); |
323 | 326 | @$handler->handleError(E_USER_DEPRECATED, 'Foo deprecation', __FILE__, __LINE__, []); |
| 327 | + |
| 328 | + restore_error_handler(); |
324 | 329 | } |
325 | 330 |
|
326 | 331 | /** |
@@ -583,4 +588,43 @@ public function testCustomExceptionHandler() |
583 | 588 |
|
584 | 589 | $handler->handleException(new \Exception()); |
585 | 590 | } |
| 591 | + |
| 592 | + /** |
| 593 | + * @dataProvider errorHandlerIsNotLostWhenLoggingProvider |
| 594 | + */ |
| 595 | + public function testErrorHandlerIsNotLostWhenLogging($customErrorHandlerHasBeenPreviouslyDefined, LoggerInterface $logger) |
| 596 | + { |
| 597 | + try { |
| 598 | + if ($customErrorHandlerHasBeenPreviouslyDefined) { |
| 599 | + set_error_handler('count'); |
| 600 | + } |
| 601 | + |
| 602 | + $handler = ErrorHandler::register(); |
| 603 | + $handler->setDefaultLogger($logger); |
| 604 | + |
| 605 | + @trigger_error('foo', E_USER_DEPRECATED); |
| 606 | + @trigger_error('bar', E_USER_DEPRECATED); |
| 607 | + |
| 608 | + $this->assertSame([$handler, 'handleError'], set_error_handler('var_dump')); |
| 609 | + |
| 610 | + restore_error_handler(); |
| 611 | + |
| 612 | + if ($customErrorHandlerHasBeenPreviouslyDefined) { |
| 613 | + restore_error_handler(); |
| 614 | + } |
| 615 | + } finally { |
| 616 | + restore_error_handler(); |
| 617 | + restore_exception_handler(); |
| 618 | + } |
| 619 | + } |
| 620 | + |
| 621 | + public function errorHandlerIsNotLostWhenLoggingProvider() |
| 622 | + { |
| 623 | + return [ |
| 624 | + [false, new NullLogger()], |
| 625 | + [true, new NullLogger()], |
| 626 | + [false, new LoggerThatSetAnErrorHandler()], |
| 627 | + [true, new LoggerThatSetAnErrorHandler()], |
| 628 | + ]; |
| 629 | + } |
586 | 630 | } |
0 commit comments