Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F5981746
ExceptionWrapper.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
ExceptionWrapper.php
View Options
<?php
declare
(
strict_types
=
1
);
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace
PHPUnit\Framework
;
use
const
PHP_VERSION_ID
;
use
function
array_keys
;
use
function
get_class
;
use
function
spl_object_hash
;
use
PHPUnit\Util\Filter
;
use
Throwable
;
use
WeakReference
;
/**
* Wraps Exceptions thrown by code under test.
*
* Re-instantiates Exceptions thrown by user-space code to retain their original
* class names, properties, and stack traces (but without arguments).
*
* Unlike PHPUnit\Framework\Exception, the complete stack of previous Exceptions
* is processed.
*
* @internal This class is not covered by the backward compatibility promise for PHPUnit
*/
final
class
ExceptionWrapper
extends
Exception
{
/**
* @var string
*/
protected
$className
;
/**
* @var null|ExceptionWrapper
*/
protected
$previous
;
/**
* @var null|WeakReference<Throwable>
*/
private
$originalException
;
public
function
__construct
(
Throwable
$t
)
{
// PDOException::getCode() is a string.
// @see https://php.net/manual/en/class.pdoexception.php#95812
parent
::
__construct
(
$t
->
getMessage
(),
(
int
)
$t
->
getCode
());
$this
->
setOriginalException
(
$t
);
}
public
function
__toString
():
string
{
$string
=
TestFailure
::
exceptionToString
(
$this
);
if
(
$trace
=
Filter
::
getFilteredStacktrace
(
$this
))
{
$string
.=
"
\n
"
.
$trace
;
}
if
(
$this
->
previous
)
{
$string
.=
"
\n
Caused by
\n
"
.
$this
->
previous
;
}
return
$string
;
}
public
function
getClassName
():
string
{
return
$this
->
className
;
}
public
function
getPreviousWrapped
():
?
self
{
return
$this
->
previous
;
}
public
function
setClassName
(
string
$className
):
void
{
$this
->
className
=
$className
;
}
public
function
setOriginalException
(
Throwable
$t
):
void
{
$this
->
originalException
(
$t
);
$this
->
className
=
get_class
(
$t
);
$this
->
file
=
$t
->
getFile
();
$this
->
line
=
$t
->
getLine
();
$this
->
serializableTrace
=
$t
->
getTrace
();
foreach
(
array_keys
(
$this
->
serializableTrace
)
as
$key
)
{
unset
(
$this
->
serializableTrace
[
$key
][
'args'
]);
}
if
(
$t
->
getPrevious
())
{
$this
->
previous
=
new
self
(
$t
->
getPrevious
());
}
}
public
function
getOriginalException
():
?
Throwable
{
return
$this
->
originalException
();
}
/**
* Method to contain static originalException to exclude it from stacktrace to prevent the stacktrace contents,
* which can be quite big, from being garbage-collected, thus blocking memory until shutdown.
*
* Approach works both for var_dump() and var_export() and print_r().
*/
private
function
originalException
(?
Throwable
$exceptionToStore
=
null
):
?
Throwable
{
// drop once PHP 7.3 support is removed
if
(
PHP_VERSION_ID
<
70400
)
{
static
$originalExceptions
;
$instanceId
=
spl_object_hash
(
$this
);
if
(
$exceptionToStore
)
{
$originalExceptions
[
$instanceId
]
=
$exceptionToStore
;
}
return
$originalExceptions
[
$instanceId
]
??
null
;
}
if
(
$exceptionToStore
)
{
$this
->
originalException
=
WeakReference
::
create
(
$exceptionToStore
);
}
return
$this
->
originalException
!==
null
?
$this
->
originalException
->
get
()
:
null
;
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Sat, Oct 3, 22:02 (1 w, 2 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
2a/6b/2b0384c0d456129992b399432913
Default Alt Text
ExceptionWrapper.php (3 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment