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.
14 * @since Class available since Release 2.0.0
16 class PHPUnit_Util_Filter
19 * Filters stack frames from PHPUnit classes.
22 * @param bool $asString
26 public static function getFilteredStacktrace(Exception $e, $asString = true)
29 $script = realpath($GLOBALS['_SERVER']['SCRIPT_NAME']);
31 if (defined('__PHPUNIT_PHAR_ROOT__')) {
32 $prefix = __PHPUNIT_PHAR_ROOT__;
35 if ($asString === true) {
36 $filteredStacktrace = '';
38 $filteredStacktrace = array();
41 if ($e instanceof PHPUnit_Framework_SyntheticError) {
42 $eTrace = $e->getSyntheticTrace();
43 $eFile = $e->getSyntheticFile();
44 $eLine = $e->getSyntheticLine();
45 } elseif ($e instanceof PHPUnit_Framework_Exception) {
46 $eTrace = $e->getSerializableTrace();
47 $eFile = $e->getFile();
48 $eLine = $e->getLine();
50 if ($e->getPrevious()) {
51 $e = $e->getPrevious();
53 $eTrace = $e->getTrace();
54 $eFile = $e->getFile();
55 $eLine = $e->getLine();
58 if (!self::frameExists($eTrace, $eFile, $eLine)) {
61 array('file' => $eFile, 'line' => $eLine)
65 $blacklist = new PHPUnit_Util_Blacklist;
67 foreach ($eTrace as $frame) {
68 if (isset($frame['file']) && is_file($frame['file']) &&
69 !$blacklist->isBlacklisted($frame['file']) &&
70 ($prefix === false || strpos($frame['file'], $prefix) !== 0) &&
71 $frame['file'] !== $script) {
72 if ($asString === true) {
73 $filteredStacktrace .= sprintf(
76 isset($frame['line']) ? $frame['line'] : '?'
79 $filteredStacktrace[] = $frame;
84 return $filteredStacktrace;
94 * @since Method available since Release 3.3.2
96 private static function frameExists(array $trace, $file, $line)
98 foreach ($trace as $frame) {
99 if (isset($frame['file']) && $frame['file'] == $file &&
100 isset($frame['line']) && $frame['line'] == $line) {