mageekguy\atoum\report\fields\runner\coverage::handleEvent PHP Method

handleEvent() public method

public handleEvent ( $event, mageekguy\atoum\observable $observable )
$observable mageekguy\atoum\observable
    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;
            }
        }
    }