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. |