summaryrefslogtreecommitdiff
path: root/vendor/phpunit/phpunit/src/Util/ErrorHandler.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpunit/phpunit/src/Util/ErrorHandler.php')
-rw-r--r--vendor/phpunit/phpunit/src/Util/ErrorHandler.php156
1 files changed, 156 insertions, 0 deletions
diff --git a/vendor/phpunit/phpunit/src/Util/ErrorHandler.php b/vendor/phpunit/phpunit/src/Util/ErrorHandler.php
new file mode 100644
index 000000000..f8566347e
--- /dev/null
+++ b/vendor/phpunit/phpunit/src/Util/ErrorHandler.php
@@ -0,0 +1,156 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of PHPUnit.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace PHPUnit\Util;
+
+use const E_DEPRECATED;
+use const E_NOTICE;
+use const E_STRICT;
+use const E_USER_DEPRECATED;
+use const E_USER_NOTICE;
+use const E_USER_WARNING;
+use const E_WARNING;
+use function error_reporting;
+use function restore_error_handler;
+use function set_error_handler;
+use PHPUnit\Framework\Error\Deprecated;
+use PHPUnit\Framework\Error\Error;
+use PHPUnit\Framework\Error\Notice;
+use PHPUnit\Framework\Error\Warning;
+
+/**
+ * @internal This class is not covered by the backward compatibility promise for PHPUnit
+ */
+final class ErrorHandler
+{
+ /**
+ * @var bool
+ */
+ private $convertDeprecationsToExceptions;
+
+ /**
+ * @var bool
+ */
+ private $convertErrorsToExceptions;
+
+ /**
+ * @var bool
+ */
+ private $convertNoticesToExceptions;
+
+ /**
+ * @var bool
+ */
+ private $convertWarningsToExceptions;
+
+ /**
+ * @var bool
+ */
+ private $registered = false;
+
+ public static function invokeIgnoringWarnings(callable $callable)
+ {
+ set_error_handler(
+ static function ($errorNumber, $errorString)
+ {
+ if ($errorNumber === E_WARNING) {
+ return;
+ }
+
+ return false;
+ }
+ );
+
+ $result = $callable();
+
+ restore_error_handler();
+
+ return $result;
+ }
+
+ public function __construct(bool $convertDeprecationsToExceptions, bool $convertErrorsToExceptions, bool $convertNoticesToExceptions, bool $convertWarningsToExceptions)
+ {
+ $this->convertDeprecationsToExceptions = $convertDeprecationsToExceptions;
+ $this->convertErrorsToExceptions = $convertErrorsToExceptions;
+ $this->convertNoticesToExceptions = $convertNoticesToExceptions;
+ $this->convertWarningsToExceptions = $convertWarningsToExceptions;
+ }
+
+ public function __invoke(int $errorNumber, string $errorString, string $errorFile, int $errorLine): bool
+ {
+ /*
+ * Do not raise an exception when the error suppression operator (@) was used.
+ *
+ * @see https://github.com/sebastianbergmann/phpunit/issues/3739
+ */
+ if (!($errorNumber & error_reporting())) {
+ return false;
+ }
+
+ switch ($errorNumber) {
+ case E_NOTICE:
+ case E_USER_NOTICE:
+ case E_STRICT:
+ if (!$this->convertNoticesToExceptions) {
+ return false;
+ }
+
+ throw new Notice($errorString, $errorNumber, $errorFile, $errorLine);
+
+ case E_WARNING:
+ case E_USER_WARNING:
+ if (!$this->convertWarningsToExceptions) {
+ return false;
+ }
+
+ throw new Warning($errorString, $errorNumber, $errorFile, $errorLine);
+
+ case E_DEPRECATED:
+ case E_USER_DEPRECATED:
+ if (!$this->convertDeprecationsToExceptions) {
+ return false;
+ }
+
+ throw new Deprecated($errorString, $errorNumber, $errorFile, $errorLine);
+
+ default:
+ if (!$this->convertErrorsToExceptions) {
+ return false;
+ }
+
+ throw new Error($errorString, $errorNumber, $errorFile, $errorLine);
+ }
+ }
+
+ public function register(): void
+ {
+ if ($this->registered) {
+ return;
+ }
+
+ $oldErrorHandler = set_error_handler($this);
+
+ if ($oldErrorHandler !== null) {
+ restore_error_handler();
+
+ return;
+ }
+
+ $this->registered = true;
+ }
+
+ public function unregister(): void
+ {
+ if (!$this->registered) {
+ return;
+ }
+
+ restore_error_handler();
+ }
+}