You are here

class PHP_CodeCoverage_Driver_Xdebug in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/phpunit/php-code-coverage/src/CodeCoverage/Driver/Xdebug.php \PHP_CodeCoverage_Driver_Xdebug

Driver for Xdebug's code coverage functionality.

@since Class available since Release 1.0.0 @codeCoverageIgnore

Hierarchy

Expanded class hierarchy of PHP_CodeCoverage_Driver_Xdebug

8 string references to 'PHP_CodeCoverage_Driver_Xdebug'
PHP_CodeCoverageTest::testConstructor in vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverageTest.php
@covers PHP_CodeCoverage::__construct @covers PHP_CodeCoverage::filter
PHP_CodeCoverageTest::testConstructor2 in vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverageTest.php
@covers PHP_CodeCoverage::__construct @covers PHP_CodeCoverage::filter
PHP_CodeCoverageTest::testMerge2 in vendor/phpunit/php-code-coverage/tests/PHP/CodeCoverageTest.php
@covers PHP_CodeCoverage::getData @covers PHP_CodeCoverage::merge
PHP_CodeCoverage_TestCase::getCoverageForBankAccount in vendor/phpunit/php-code-coverage/tests/TestCase.php
PHP_CodeCoverage_TestCase::getCoverageForBankAccountForFirstTwoTests in vendor/phpunit/php-code-coverage/tests/TestCase.php

... See full list

File

vendor/phpunit/php-code-coverage/src/CodeCoverage/Driver/Xdebug.php, line 17

View source
class PHP_CodeCoverage_Driver_Xdebug implements PHP_CodeCoverage_Driver {

  /**
   * Constructor.
   */
  public function __construct() {
    if (!extension_loaded('xdebug')) {
      throw new PHP_CodeCoverage_Exception('This driver requires Xdebug');
    }
    if (version_compare(phpversion('xdebug'), '2.2.0-dev', '>=') && !ini_get('xdebug.coverage_enable')) {
      throw new PHP_CodeCoverage_Exception('xdebug.coverage_enable=On has to be set in php.ini');
    }
  }

  /**
   * Start collection of code coverage information.
   */
  public function start() {
    xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE);
  }

  /**
   * Stop collection of code coverage information.
   *
   * @return array
   */
  public function stop() {
    $data = xdebug_get_code_coverage();
    xdebug_stop_code_coverage();
    return $this
      ->cleanup($data);
  }

  /**
   * @param  array $data
   * @return array
   * @since Method available since Release 2.0.0
   */
  private function cleanup(array $data) {
    foreach (array_keys($data) as $file) {
      unset($data[$file][0]);
      if ($file != 'xdebug://debug-eval' && file_exists($file)) {
        $numLines = $this
          ->getNumberOfLinesInFile($file);
        foreach (array_keys($data[$file]) as $line) {
          if (isset($data[$file][$line]) && $line > $numLines) {
            unset($data[$file][$line]);
          }
        }
      }
    }
    return $data;
  }

  /**
   * @param  string $file
   * @return int
   * @since Method available since Release 2.0.0
   */
  private function getNumberOfLinesInFile($file) {
    $buffer = file_get_contents($file);
    $lines = substr_count($buffer, "\n");
    if (substr($buffer, -1) !== "\n") {
      $lines++;
    }
    return $lines;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
PHP_CodeCoverage_Driver::LINE_EXECUTED constant
PHP_CodeCoverage_Driver::LINE_NOT_EXECUTABLE constant
PHP_CodeCoverage_Driver::LINE_NOT_EXECUTED constant
PHP_CodeCoverage_Driver_Xdebug::cleanup private function @since Method available since Release 2.0.0
PHP_CodeCoverage_Driver_Xdebug::getNumberOfLinesInFile private function @since Method available since Release 2.0.0
PHP_CodeCoverage_Driver_Xdebug::start public function Start collection of code coverage information. Overrides PHP_CodeCoverage_Driver::start 1
PHP_CodeCoverage_Driver_Xdebug::stop public function Stop collection of code coverage information. Overrides PHP_CodeCoverage_Driver::stop
PHP_CodeCoverage_Driver_Xdebug::__construct public function Constructor.