class PHP_CodeCoverage_Driver_PHPDBG in Zircon Profile 8.0
Same name and namespace in other branches
- 8 vendor/phpunit/php-code-coverage/src/CodeCoverage/Driver/PHPDBG.php \PHP_CodeCoverage_Driver_PHPDBG
 
Driver for PHPDBG's code coverage functionality.
@since Class available since Release 2.2.0 @codeCoverageIgnore
Hierarchy
- class \PHP_CodeCoverage_Driver_PHPDBG implements PHP_CodeCoverage_Driver
 
Expanded class hierarchy of PHP_CodeCoverage_Driver_PHPDBG
File
- vendor/
phpunit/ php-code-coverage/ src/ CodeCoverage/ Driver/ PHPDBG.php, line 17  
View source
class PHP_CodeCoverage_Driver_PHPDBG implements PHP_CodeCoverage_Driver {
  /**
   * Constructor.
   */
  public function __construct() {
    if (PHP_SAPI !== 'phpdbg') {
      throw new PHP_CodeCoverage_Exception('This driver requires the PHPDBG SAPI');
    }
    if (!function_exists('phpdbg_start_oplog')) {
      throw new PHP_CodeCoverage_Exception('This build of PHPDBG does not support code coverage');
    }
  }
  /**
   * Start collection of code coverage information.
   */
  public function start() {
    phpdbg_start_oplog();
  }
  /**
   * Stop collection of code coverage information.
   *
   * @return array
   */
  public function stop() {
    static $fetchedLines = array();
    $dbgData = phpdbg_end_oplog();
    if ($fetchedLines == array()) {
      $sourceLines = phpdbg_get_executable();
    }
    else {
      $newFiles = array_diff(get_included_files(), array_keys($fetchedLines));
      if ($newFiles) {
        $sourceLines = phpdbg_get_executable(array(
          'files' => $newFiles,
        ));
      }
      else {
        $sourceLines = array();
      }
    }
    foreach ($sourceLines as $file => $lines) {
      foreach ($lines as $lineNo => $numExecuted) {
        $sourceLines[$file][$lineNo] = self::LINE_NOT_EXECUTED;
      }
    }
    $fetchedLines = array_merge($fetchedLines, $sourceLines);
    return $this
      ->detectExecutedLines($fetchedLines, $dbgData);
  }
  /**
   * Convert phpdbg based data into the format CodeCoverage expects
   *
   * @param  array $sourceLines
   * @param  array $dbgData
   * @return array
   */
  private function detectExecutedLines(array $sourceLines, array $dbgData) {
    foreach ($dbgData as $file => $coveredLines) {
      foreach ($coveredLines as $lineNo => $numExecuted) {
        // phpdbg also reports $lineNo=0 when e.g. exceptions get thrown.
        // make sure we only mark lines executed which are actually executable.
        if (isset($sourceLines[$file][$lineNo])) {
          $sourceLines[$file][$lineNo] = self::LINE_EXECUTED;
        }
      }
    }
    return $sourceLines;
  }
}Members
| 
            Name | 
                  Modifiers | Type | Description | Overrides | 
|---|---|---|---|---|
| 
            PHP_CodeCoverage_Driver:: | 
                  constant | |||
| 
            PHP_CodeCoverage_Driver:: | 
                  constant | |||
| 
            PHP_CodeCoverage_Driver:: | 
                  constant | |||
| 
            PHP_CodeCoverage_Driver_PHPDBG:: | 
                  private | function | Convert phpdbg based data into the format CodeCoverage expects | |
| 
            PHP_CodeCoverage_Driver_PHPDBG:: | 
                  public | function | 
            Start collection of code coverage information. Overrides PHP_CodeCoverage_Driver:: | 
                  |
| 
            PHP_CodeCoverage_Driver_PHPDBG:: | 
                  public | function | 
            Stop collection of code coverage information. Overrides PHP_CodeCoverage_Driver:: | 
                  |
| 
            PHP_CodeCoverage_Driver_PHPDBG:: | 
                  public | function | Constructor. |