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; | |
} | |
} |