Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00%
0 / 1
0.00%
0 / 6
CRAP
0.00%
0 / 95
CodeCoverageSettings
0.00%
0 / 1
0.00%
0 / 6
992
0.00%
0 / 95
 __construct($phpCoverage)
0.00%
0 / 1
6
0.00%
0 / 7
 setup(\PHP_CodeCoverage $phpCoverage)
0.00%
0 / 1
2
0.00%
0 / 5
 getPhpCodeCoverage()
0.00%
0 / 1
2
0.00%
0 / 4
 filterWhiteList($config)
0.00%
0 / 1
182
0.00%
0 / 32
 filterBlackList($config)
0.00%
0 / 1
132
0.00%
0 / 29
 matchWildcardPattern($pattern)
0.00%
0 / 1
12
0.00%
0 / 18
<?php
namespace Codeception;
use \Symfony\Component\Finder\Finder;
class CodeCoverageSettings
{
/**
* @var \PHP_CodeCoverage
*/
protected $phpCodeCoverage = null;
/**
* @var CodeCoverageSettings
*/
protected static $c3;
/**
* @var \PHP_CodeCoverage_Filter
*/
protected $filter = null;
function __construct($phpCoverage)
{
$this->phpCodeCoverage = $phpCoverage
? $phpCoverage
: new \PHP_CodeCoverage;
$this->filter = $this->phpCodeCoverage->filter();
}
public static function setup(\PHP_CodeCoverage $phpCoverage)
{
self::$c3 = new self($phpCoverage);
return self::$c3;
}
/**
* @return null|\PHP_CodeCoverage
*/
public function getPhpCodeCoverage()
{
return $this->phpCodeCoverage;
}
/**
* @param $config
* @return CodeCoverageSettings
*/
public function filterWhiteList($config)
{
$filter = $this->filter;
if (!isset($config['coverage'])) return $this;
$coverage = $config['coverage'];
if (!isset($coverage['whitelist'])) {
$coverage['whitelist'] = array();
if (isset($coverage['include'])) $coverage['whitelist']['include'] = $coverage['include'];
if (isset($coverage['exclude'])) $coverage['whitelist']['exclude'] = $coverage['exclude'];
}
if (isset($coverage['whitelist']['include'])) {
foreach ($coverage['whitelist']['include'] as $fileOrDir) {
$finder = strpos($fileOrDir, '*') === false
? array($fileOrDir)
: $this->matchWildcardPattern($fileOrDir);
foreach ($finder as $file) {
$filter->addFileToWhitelist($file);
}
}
}
if (isset($coverage['whitelist']['exclude'])) {
foreach ($coverage['whitelist']['exclude'] as $fileOrDir) {
$finder = strpos($fileOrDir, '*') === false
? array($fileOrDir)
: $this->matchWildcardPattern($fileOrDir);
foreach ($finder as $file) {
$filter->removeFileFromWhitelist($file);
}
}
}
return $this;
}
/**
* @param $config
* @return CodeCoverageSettings
*/
public function filterBlackList($config)
{
$filter = $this->filter;
if (!isset($config['coverage'])) return $this;
$coverage = $config['coverage'];
if (isset($coverage['blacklist'])) {
if (isset($coverage['blacklist']['include'])) {
foreach ($coverage['blacklist']['include'] as $fileOrDir) {
$finder = strpos($fileOrDir, '*') === false
? array($fileOrDir)
: $this->matchWildcardPattern($fileOrDir);
foreach ($finder as $file) {
$filter->addFileToBlacklist($file);
}
}
}
if (isset($coverage['blacklist']['exclude'])) {
foreach ($coverage['blacklist']['exclude'] as $fileOrDir) {
$finder = strpos($fileOrDir, '*') === false
? array($fileOrDir)
: $this->matchWildcardPattern($fileOrDir);
foreach ($finder as $file) {
$filter->removeFileFromBlacklist($file);
}
}
}
}
return $this;
}
protected function matchWildcardPattern($pattern)
{
$finder = Finder::create();
$fileOrDir = str_replace('\\', '/', $pattern);
$parts = explode('/', $fileOrDir);
$file = array_pop($parts);
$finder->name($file);
if (count($parts)) {
$last_path = array_pop($parts);
if ($last_path === '*') {
$finder->in(\Codeception\Configuration::projectDir() . implode('/', $parts));
} else {
$finder->in(\Codeception\Configuration::projectDir() . implode('/', $parts) . '/' . $last_path);
}
}
$finder->ignoreVCS(true)->files();
return $finder;
}
}