Example #1
0
 /**
  * Filters stack frames from PHPUnit classes.
  *
  * @param  Exception $e
  * @param  boolean   $filterTests
  * @param  boolean   $asString
  * @return string
  */
 public static function getFilteredStacktrace(Exception $e, $filterTests = TRUE, $asString = TRUE)
 {
     if ($asString === TRUE) {
         $filteredStacktrace = '';
     } else {
         $filteredStacktrace = array();
     }
     $groups = array('DEFAULT');
     if (!defined('PHPUNIT_TESTSUITE')) {
         $groups[] = 'PHPUNIT';
     }
     if ($filterTests) {
         $groups[] = 'TESTS';
     }
     if ($e instanceof PHPUnit_Framework_SyntheticError) {
         $eTrace = $e->getSyntheticTrace();
     } else {
         $eTrace = $e->getTrace();
     }
     if (!self::frameExists($eTrace, $e->getFile(), $e->getLine())) {
         array_unshift($eTrace, array('file' => $e->getFile(), 'line' => $e->getLine()));
     }
     foreach ($eTrace as $frame) {
         if (isset($frame['file']) && is_file($frame['file']) && !PHP_CodeCoverage::getInstance()->filter()->isFiltered($frame['file'], $groups, TRUE)) {
             if ($asString === TRUE) {
                 $filteredStacktrace .= sprintf("%s:%s\n", $frame['file'], isset($frame['line']) ? $frame['line'] : '?');
             } else {
                 $filteredStacktrace[] = $frame;
             }
         }
     }
     return $filteredStacktrace;
 }
 /**
  * Filters stack frames from PHPUnit classes.
  *
  * @param  Exception $e
  * @param  boolean   $asString
  * @return string
  */
 public static function getFilteredStacktrace(Exception $e, $asString = TRUE)
 {
     if (!defined('PHPUNIT_TESTSUITE')) {
         $blacklist = PHPUnit_Util_GlobalState::phpunitFiles();
     } else {
         $blacklist = array();
     }
     if ($asString === TRUE) {
         $filteredStacktrace = '';
     } else {
         $filteredStacktrace = array();
     }
     if ($e instanceof PHPUnit_Framework_SyntheticError) {
         $eTrace = $e->getSyntheticTrace();
         $eFile = $e->getSyntheticFile();
         $eLine = $e->getSyntheticLine();
     } else {
         $eTrace = $e->getTrace();
         $eFile = $e->getFile();
         $eLine = $e->getLine();
     }
     if (!self::frameExists($eTrace, $eFile, $eLine)) {
         array_unshift($eTrace, array('file' => $eFile, 'line' => $eLine));
     }
     foreach ($eTrace as $frame) {
         if (isset($frame['file']) && is_file($frame['file']) && !isset($blacklist[$frame['file']])) {
             if ($asString === TRUE) {
                 $filteredStacktrace .= sprintf("%s:%s\n", $frame['file'], isset($frame['line']) ? $frame['line'] : '?');
             } else {
                 $filteredStacktrace[] = $frame;
             }
         }
     }
     return $filteredStacktrace;
 }
Example #3
0
 /**
  * Filters stack frames from PHPUnit classes.
  *
  * @param  Exception $e
  * @param  boolean   $asString
  * @return string
  */
 public static function getFilteredStacktrace(Exception $e, $asString = TRUE)
 {
     $prefix = FALSE;
     $script = realpath($GLOBALS['_SERVER']['SCRIPT_NAME']);
     if (defined('__PHPUNIT_PHAR__')) {
         $prefix = 'phar://' . __PHPUNIT_PHAR__ . '/';
     }
     if (!defined('PHPUNIT_TESTSUITE')) {
         $blacklist = PHPUnit_Util_GlobalState::phpunitFiles();
     } else {
         $blacklist = array();
     }
     if ($asString === TRUE) {
         $filteredStacktrace = '';
     } else {
         $filteredStacktrace = array();
     }
     if ($e instanceof PHPUnit_Framework_SyntheticError) {
         $eTrace = $e->getSyntheticTrace();
         $eFile = $e->getSyntheticFile();
         $eLine = $e->getSyntheticLine();
     } else {
         if ($e->getPrevious()) {
             $eTrace = $e->getPrevious()->getTrace();
         } else {
             $eTrace = $e->getTrace();
         }
         $eFile = $e->getFile();
         $eLine = $e->getLine();
     }
     if (!self::frameExists($eTrace, $eFile, $eLine)) {
         array_unshift($eTrace, array('file' => $eFile, 'line' => $eLine));
     }
     foreach ($eTrace as $frame) {
         if (isset($frame['file']) && is_file($frame['file']) && !isset($blacklist[$frame['file']]) && ($prefix === FALSE || strpos($frame['file'], $prefix) !== 0) && $frame['file'] !== $script) {
             if ($asString === TRUE) {
                 $filteredStacktrace .= sprintf("%s:%s\n", $frame['file'], isset($frame['line']) ? $frame['line'] : '?');
             } else {
                 $filteredStacktrace[] = $frame;
             }
         }
     }
     return $filteredStacktrace;
 }
Example #4
0
 /**
  * Filters stack frames from PHPUnit classes.
  *
  * @param Exception $e        	
  * @param bool $asString        	
  * @return string
  */
 public static function getFilteredStacktrace(Exception $e, $asString = true)
 {
     $prefix = false;
     $script = realpath($GLOBALS['_SERVER']['SCRIPT_NAME']);
     if (defined('__PHPUNIT_PHAR_ROOT__')) {
         $prefix = __PHPUNIT_PHAR_ROOT__;
     }
     if ($asString === true) {
         $filteredStacktrace = '';
     } else {
         $filteredStacktrace = array();
     }
     if ($e instanceof PHPUnit_Framework_SyntheticError) {
         $eTrace = $e->getSyntheticTrace();
         $eFile = $e->getSyntheticFile();
         $eLine = $e->getSyntheticLine();
     } elseif ($e instanceof PHPUnit_Framework_Exception) {
         $eTrace = $e->getSerializableTrace();
         $eFile = $e->getFile();
         $eLine = $e->getLine();
     } else {
         if ($e->getPrevious()) {
             $e = $e->getPrevious();
         }
         $eTrace = $e->getTrace();
         $eFile = $e->getFile();
         $eLine = $e->getLine();
     }
     if (!self::frameExists($eTrace, $eFile, $eLine)) {
         array_unshift($eTrace, array('file' => $eFile, 'line' => $eLine));
     }
     $blacklist = new PHPUnit_Util_Blacklist();
     foreach ($eTrace as $frame) {
         if (isset($frame['file']) && is_file($frame['file']) && !$blacklist->isBlacklisted($frame['file']) && ($prefix === false || strpos($frame['file'], $prefix) !== 0) && $frame['file'] !== $script) {
             if ($asString === true) {
                 $filteredStacktrace .= sprintf("%s:%s\n", $frame['file'], isset($frame['line']) ? $frame['line'] : '?');
             } else {
                 $filteredStacktrace[] = $frame;
             }
         }
     }
     return $filteredStacktrace;
 }
Example #5
0
 protected function printException($idx, $title, \Exception $ex)
 {
     $indent = str_repeat(' ', strlen("  {$idx}) "));
     if ($ex instanceof \PHPUnit_Framework_SyntheticError) {
         $trace = $ex->getSyntheticTrace();
     } else {
         $trace = $ex->getTrace();
     }
     // Insert exception as first element of the trace
     array_unshift($trace, array('file' => $ex->getFile(), 'line' => $ex->getLine()));
     // Process and filter stack trace
     $last = null;
     $offending = null;
     $stacktrace = array();
     $groups = $this->debug ? array() : array('DEFAULT', 'PHPUNIT');
     $filter = \PHP_CodeCoverage_Filter::getInstance();
     foreach ($trace as $frame) {
         if (isset($frame['file']) && isset($frame['line']) && !$filter->isFiltered($frame['file'], $groups, TRUE)) {
             // Skip duplicated frames
             if (!$this->debug && $last && $last['file'] === $frame['file'] && $last['line'] === $frame['line']) {
                 continue;
             }
             $last = $frame;
             // Skip blacklisted eval frames: /path/to/file(line) : eval()'d code:line
             if (preg_match('/^(.+?)\\([0-9]+\\)\\s:\\seval/', $frame['file'], $m)) {
                 if ($filter->isFiltered($m[1], $groups, TRUE)) {
                     continue;
                 }
             }
             // Check spec files
             if (0 === strpos($frame['file'], Spec::SCHEME . '://')) {
                 $frame['file'] = substr($frame['file'], strlen(Spec::SCHEME . '://'));
                 if (0 !== strpos($frame['file'], '/')) {
                     $frame['file'] = '.' . DIRECTORY_SEPARATOR . $frame['file'];
                 }
                 $lines = file($frame['file']);
                 $offending = trim($lines[$frame['line'] - 1]);
             }
             $stacktrace[] = $frame['file'] . ':' . $frame['line'];
         }
     }
     // Print title
     $this->write("  {$idx}) {$title}" . PHP_EOL);
     // Print exception message
     $msg = str_replace(PHP_EOL, PHP_EOL . $indent, $ex->getMessage());
     $this->write($indent . "{$msg}" . PHP_EOL);
     // Print offending spec line if found
     if ($offending) {
         $ch = $this->colors ? '❯' : '>';
         $this->write($indent . "{$ch} {$offending}" . PHP_EOL);
     }
     $ch = '#';
     foreach ($stacktrace as $frame) {
         $this->write("{$indent}{$ch} {$frame}" . PHP_EOL);
         if (!$this->verbose && !$this->debug) {
             break;
         }
     }
     $this->write(PHP_EOL);
 }