public function handleEvent($event, observable $observable)
{
if (parent::handleEvent($event, $observable) === false) {
return false;
} else {
if ($observable->codeCoverageIsEnabled() === true) {
$this->coverage = $observable->getScore()->getCoverage();
if ($this->adapter->extension_loaded('xdebug') === true) {
$phpCode = '<?php ' . 'ob_start();' . 'require \'' . \mageekguy\atoum\directory . '/classes/autoloader.php\';';
$autoloaderFile = $observable->getAutoloaderFile();
if ($autoloaderFile !== null) {
$phpCode .= '$includer = new mageekguy\\atoum\\includer();' . 'try { $includer->includePath(\'' . $autoloaderFile . '\'); }' . 'catch (mageekguy\\atoum\\includer\\exception $exception)' . '{ die(\'Unable to include autoloader file \\\'' . $autoloaderFile . '\\\'\'); }';
}
$bootstrapFile = $observable->getBootstrapFile();
if ($bootstrapFile !== null) {
$phpCode .= '$includer = new mageekguy\\atoum\\includer();' . 'try { $includer->includePath(\'' . $bootstrapFile . '\'); }' . 'catch (mageekguy\\atoum\\includer\\exception $exception)' . '{ die(\'Unable to include bootstrap file \\\'' . $bootstrapFile . '\\\'\'); }';
}
$phpCode .= '$data = array(\'classes\' => get_declared_classes());' . 'ob_start();' . 'xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE' . ($observable->branchesAndPathsCoverageIsEnabled() === true ? ' | XDEBUG_CC_BRANCH_CHECK' : '') . ');' . 'require_once \'%s\';' . '$data[\'coverage\'] = xdebug_get_code_coverage();' . 'xdebug_stop_code_coverage();' . 'ob_end_clean();' . '$data[\'classes\'] = array_diff(get_declared_classes(), $data[\'classes\']);' . 'echo serialize($data);';
foreach ($this->getSrcDirectoryIterators() as $srcDirectoryIterator) {
foreach ($srcDirectoryIterator as $file) {
if (in_array($file->getPathname(), $this->adapter->get_included_files()) === false) {
if ($this->php->reset()->run(sprintf($phpCode, $file->getPathname()))->getExitCode() > 0) {
throw new runtime('Unable to get default code coverage for file \'' . $file->getPathname() . '\': ' . $this->php->getStderr());
}
$data = unserialize($this->php->getStdOut());
foreach ($data['classes'] as $class) {
$this->coverage->addXdebugDataForClass($class, $data['coverage']);
}
}
}
}
}
return true;
}
}
}