3
* This file is part of PHPUnit.
5
* (c) Sebastian Bergmann <sebastian@phpunit.de>
7
* For the full copyright and license information, please view the LICENSE
8
* file that was distributed with this source code.
12
* Utility class for code filtering.
16
* @author Sebastian Bergmann <sebastian@phpunit.de>
17
* @copyright Sebastian Bergmann <sebastian@phpunit.de>
18
* @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
19
* @link http://www.phpunit.de/
20
* @since Class available since Release 2.0.0
22
class PHPUnit_Util_Filter
25
* Filters stack frames from PHPUnit classes.
28
* @param boolean $asString
31
public static function getFilteredStacktrace(Exception $e, $asString = true)
34
$script = realpath($GLOBALS['_SERVER']['SCRIPT_NAME']);
36
if (defined('__PHPUNIT_PHAR_ROOT__')) {
37
$prefix = __PHPUNIT_PHAR_ROOT__;
40
if ($asString === true) {
41
$filteredStacktrace = '';
43
$filteredStacktrace = array();
46
if ($e instanceof PHPUnit_Framework_SyntheticError) {
47
$eTrace = $e->getSyntheticTrace();
48
$eFile = $e->getSyntheticFile();
49
$eLine = $e->getSyntheticLine();
50
} elseif ($e instanceof PHPUnit_Framework_Exception) {
51
$eTrace = $e->getSerializableTrace();
52
$eFile = $e->getFile();
53
$eLine = $e->getLine();
55
if ($e->getPrevious()) {
56
$e = $e->getPrevious();
58
$eTrace = $e->getTrace();
59
$eFile = $e->getFile();
60
$eLine = $e->getLine();
63
if (!self::frameExists($eTrace, $eFile, $eLine)) {
65
$eTrace, array('file' => $eFile, 'line' => $eLine)
69
$blacklist = new PHPUnit_Util_Blacklist;
71
foreach ($eTrace as $frame) {
72
if (isset($frame['file']) && is_file($frame['file']) &&
73
!$blacklist->isBlacklisted($frame['file']) &&
74
($prefix === false || strpos($frame['file'], $prefix) !== 0) &&
75
$frame['file'] !== $script) {
76
if ($asString === true) {
77
$filteredStacktrace .= sprintf(
80
isset($frame['line']) ? $frame['line'] : '?'
83
$filteredStacktrace[] = $frame;
88
return $filteredStacktrace;
96
* @since Method available since Release 3.3.2
98
private static function frameExists(array $trace, $file, $line)
100
foreach ($trace as $frame) {
101
if (isset($frame['file']) && $frame['file'] == $file &&
102
isset($frame['line']) && $frame['line'] == $line) {