Quellcode durchsuchen

Avoid leaving an error handler dangling

Jordi Boggiano vor 6 Jahren
Ursprung
Commit
0f39561898
1 geänderte Dateien mit 20 neuen und 12 gelöschten Zeilen
  1. 20 12
      tests/Monolog/ErrorHandlerTest.php

+ 20 - 12
tests/Monolog/ErrorHandlerTest.php

@@ -28,18 +28,26 @@ class ErrorHandlerTest extends \PHPUnit\Framework\TestCase
         $logger = new Logger('test', [$handler = new TestHandler]);
         $errHandler = new ErrorHandler($logger);
 
-        $resHandler = $errHandler->registerErrorHandler([E_USER_NOTICE => Logger::EMERGENCY], false);
-        $this->assertSame($errHandler, $resHandler);
-        trigger_error('Foo', E_USER_ERROR);
-        $this->assertCount(1, $handler->getRecords());
-        $this->assertTrue($handler->hasErrorRecords());
-        trigger_error('Foo', E_USER_NOTICE);
-        $this->assertCount(2, $handler->getRecords());
-        $this->assertTrue($handler->hasEmergencyRecords());
-
-        $errHandler->registerErrorHandler([], true);
-        $prop = $this->getPrivatePropertyValue($errHandler, 'previousErrorHandler');
-        $this->assertTrue(is_callable($prop));
+        $phpunitHandler = set_error_handler($prevHandler = function() {});
+
+        try {
+            $errHandler->registerErrorHandler([], true);
+            $prop = $this->getPrivatePropertyValue($errHandler, 'previousErrorHandler');
+            $this->assertTrue(is_callable($prop));
+            $this->assertSame($prevHandler, $prop);
+
+            $resHandler = $errHandler->registerErrorHandler([E_USER_NOTICE => Logger::EMERGENCY], false);
+            $this->assertSame($errHandler, $resHandler);
+            trigger_error('Foo', E_USER_ERROR);
+            $this->assertCount(1, $handler->getRecords());
+            $this->assertTrue($handler->hasErrorRecords());
+            trigger_error('Foo', E_USER_NOTICE);
+            $this->assertCount(2, $handler->getRecords());
+            $this->assertTrue($handler->hasEmergencyRecords());
+        } finally {
+            // restore previous handler
+            set_error_handler($phpunitHandler);
+        }
     }
 
     public function fatalHandlerProvider()