protected function _coverage()
{
return Filter::on($this, 'coverage', [], function ($chain) {
if (!$this->commandLine()->exists('coverage')) {
return;
}
$reporters = $this->reporters();
$driver = null;
if (PHP_SAPI === 'phpdbg') {
$driver = new Phpdbg();
} elseif (extension_loaded('xdebug')) {
$driver = new Xdebug();
} else {
fwrite(STDERR, "ERROR: PHPDBG SAPI has not been detected and Xdebug is not installed, code coverage can't be used.\n");
exit(-1);
}
$srcDirs = $this->commandLine()->get('src');
foreach ($srcDirs as $dir) {
if (!file_exists($dir)) {
fwrite(STDERR, "ERROR: unexisting `{$dir}` directory, use --src option to set a valid one (ex: --src=app).\n");
exit(-1);
}
}
$coverage = new Coverage(['verbosity' => $this->commandLine()->get('coverage') === null ? 1 : $this->commandLine()->get('coverage'), 'driver' => $driver, 'path' => $srcDirs, 'colors' => !$this->commandLine()->get('no-colors')]);
$reporters->add('coverage', $coverage);
});
}