summaryrefslogtreecommitdiff
path: root/vendor/phpunit/phpunit/src/Framework/Exception/Exception.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpunit/phpunit/src/Framework/Exception/Exception.php')
-rw-r--r--vendor/phpunit/phpunit/src/Framework/Exception/Exception.php81
1 files changed, 81 insertions, 0 deletions
diff --git a/vendor/phpunit/phpunit/src/Framework/Exception/Exception.php b/vendor/phpunit/phpunit/src/Framework/Exception/Exception.php
new file mode 100644
index 000000000..0b21e6de3
--- /dev/null
+++ b/vendor/phpunit/phpunit/src/Framework/Exception/Exception.php
@@ -0,0 +1,81 @@
+<?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\Framework;
+
+use function array_keys;
+use function get_object_vars;
+use PHPUnit\Util\Filter;
+use RuntimeException;
+use Throwable;
+
+/**
+ * Base class for all PHPUnit Framework exceptions.
+ *
+ * Ensures that exceptions thrown during a test run do not leave stray
+ * references behind.
+ *
+ * Every Exception contains a stack trace. Each stack frame contains the 'args'
+ * of the called function. The function arguments can contain references to
+ * instantiated objects. The references prevent the objects from being
+ * destructed (until test results are eventually printed), so memory cannot be
+ * freed up.
+ *
+ * With enabled process isolation, test results are serialized in the child
+ * process and unserialized in the parent process. The stack trace of Exceptions
+ * may contain objects that cannot be serialized or unserialized (e.g., PDO
+ * connections). Unserializing user-space objects from the child process into
+ * the parent would break the intended encapsulation of process isolation.
+ *
+ * @see http://fabien.potencier.org/article/9/php-serialization-stack-traces-and-exceptions
+ *
+ * @internal This class is not covered by the backward compatibility promise for PHPUnit
+ */
+class Exception extends RuntimeException implements \PHPUnit\Exception
+{
+ /**
+ * @var array
+ */
+ protected $serializableTrace;
+
+ public function __construct($message = '', $code = 0, Throwable $previous = null)
+ {
+ parent::__construct($message, $code, $previous);
+
+ $this->serializableTrace = $this->getTrace();
+
+ foreach (array_keys($this->serializableTrace) as $key) {
+ unset($this->serializableTrace[$key]['args']);
+ }
+ }
+
+ public function __toString(): string
+ {
+ $string = TestFailure::exceptionToString($this);
+
+ if ($trace = Filter::getFilteredStacktrace($this)) {
+ $string .= "\n" . $trace;
+ }
+
+ return $string;
+ }
+
+ public function __sleep(): array
+ {
+ return array_keys(get_object_vars($this));
+ }
+
+ /**
+ * Returns the serializable trace (without 'args').
+ */
+ public function getSerializableTrace(): array
+ {
+ return $this->serializableTrace;
+ }
+}