You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
364 lines
8.1 KiB
364 lines
8.1 KiB
<?php declare(strict_types=1);
|
|
/*
|
|
* This file is part of PHPUnit.
|
|
*
|
|
* (c) Sebastian Bergmann <sebastian@phpunit.de>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
namespace PHPUnit\TextUI\XmlConfiguration\CodeCoverage;
|
|
|
|
use function count;
|
|
use PHPUnit\TextUI\XmlConfiguration\CodeCoverage\Filter\DirectoryCollection;
|
|
use PHPUnit\TextUI\XmlConfiguration\CodeCoverage\Report\Clover;
|
|
use PHPUnit\TextUI\XmlConfiguration\CodeCoverage\Report\Cobertura;
|
|
use PHPUnit\TextUI\XmlConfiguration\CodeCoverage\Report\Crap4j;
|
|
use PHPUnit\TextUI\XmlConfiguration\CodeCoverage\Report\Html;
|
|
use PHPUnit\TextUI\XmlConfiguration\CodeCoverage\Report\Php;
|
|
use PHPUnit\TextUI\XmlConfiguration\CodeCoverage\Report\Text;
|
|
use PHPUnit\TextUI\XmlConfiguration\CodeCoverage\Report\Xml;
|
|
use PHPUnit\TextUI\XmlConfiguration\Directory;
|
|
use PHPUnit\TextUI\XmlConfiguration\Exception;
|
|
use PHPUnit\TextUI\XmlConfiguration\FileCollection;
|
|
|
|
/**
|
|
* @internal This class is not covered by the backward compatibility promise for PHPUnit
|
|
*
|
|
* @psalm-immutable
|
|
*/
|
|
final class CodeCoverage
|
|
{
|
|
/**
|
|
* @var ?Directory
|
|
*/
|
|
private $cacheDirectory;
|
|
|
|
/**
|
|
* @var DirectoryCollection
|
|
*/
|
|
private $directories;
|
|
|
|
/**
|
|
* @var FileCollection
|
|
*/
|
|
private $files;
|
|
|
|
/**
|
|
* @var DirectoryCollection
|
|
*/
|
|
private $excludeDirectories;
|
|
|
|
/**
|
|
* @var FileCollection
|
|
*/
|
|
private $excludeFiles;
|
|
|
|
/**
|
|
* @var bool
|
|
*/
|
|
private $pathCoverage;
|
|
|
|
/**
|
|
* @var bool
|
|
*/
|
|
private $includeUncoveredFiles;
|
|
|
|
/**
|
|
* @var bool
|
|
*/
|
|
private $processUncoveredFiles;
|
|
|
|
/**
|
|
* @var bool
|
|
*/
|
|
private $ignoreDeprecatedCodeUnits;
|
|
|
|
/**
|
|
* @var bool
|
|
*/
|
|
private $disableCodeCoverageIgnore;
|
|
|
|
/**
|
|
* @var ?Clover
|
|
*/
|
|
private $clover;
|
|
|
|
/**
|
|
* @var ?Cobertura
|
|
*/
|
|
private $cobertura;
|
|
|
|
/**
|
|
* @var ?Crap4j
|
|
*/
|
|
private $crap4j;
|
|
|
|
/**
|
|
* @var ?Html
|
|
*/
|
|
private $html;
|
|
|
|
/**
|
|
* @var ?Php
|
|
*/
|
|
private $php;
|
|
|
|
/**
|
|
* @var ?Text
|
|
*/
|
|
private $text;
|
|
|
|
/**
|
|
* @var ?Xml
|
|
*/
|
|
private $xml;
|
|
|
|
public function __construct(?Directory $cacheDirectory, DirectoryCollection $directories, FileCollection $files, DirectoryCollection $excludeDirectories, FileCollection $excludeFiles, bool $pathCoverage, bool $includeUncoveredFiles, bool $processUncoveredFiles, bool $ignoreDeprecatedCodeUnits, bool $disableCodeCoverageIgnore, ?Clover $clover, ?Cobertura $cobertura, ?Crap4j $crap4j, ?Html $html, ?Php $php, ?Text $text, ?Xml $xml)
|
|
{
|
|
$this->cacheDirectory = $cacheDirectory;
|
|
$this->directories = $directories;
|
|
$this->files = $files;
|
|
$this->excludeDirectories = $excludeDirectories;
|
|
$this->excludeFiles = $excludeFiles;
|
|
$this->pathCoverage = $pathCoverage;
|
|
$this->includeUncoveredFiles = $includeUncoveredFiles;
|
|
$this->processUncoveredFiles = $processUncoveredFiles;
|
|
$this->ignoreDeprecatedCodeUnits = $ignoreDeprecatedCodeUnits;
|
|
$this->disableCodeCoverageIgnore = $disableCodeCoverageIgnore;
|
|
$this->clover = $clover;
|
|
$this->cobertura = $cobertura;
|
|
$this->crap4j = $crap4j;
|
|
$this->html = $html;
|
|
$this->php = $php;
|
|
$this->text = $text;
|
|
$this->xml = $xml;
|
|
}
|
|
|
|
/**
|
|
* @psalm-assert-if-true !null $this->cacheDirectory
|
|
*/
|
|
public function hasCacheDirectory(): bool
|
|
{
|
|
return $this->cacheDirectory !== null;
|
|
}
|
|
|
|
/**
|
|
* @throws Exception
|
|
*/
|
|
public function cacheDirectory(): Directory
|
|
{
|
|
if (!$this->hasCacheDirectory()) {
|
|
throw new Exception(
|
|
'No cache directory has been configured',
|
|
);
|
|
}
|
|
|
|
return $this->cacheDirectory;
|
|
}
|
|
|
|
public function hasNonEmptyListOfFilesToBeIncludedInCodeCoverageReport(): bool
|
|
{
|
|
return count($this->directories) > 0 || count($this->files) > 0;
|
|
}
|
|
|
|
public function directories(): DirectoryCollection
|
|
{
|
|
return $this->directories;
|
|
}
|
|
|
|
public function files(): FileCollection
|
|
{
|
|
return $this->files;
|
|
}
|
|
|
|
public function excludeDirectories(): DirectoryCollection
|
|
{
|
|
return $this->excludeDirectories;
|
|
}
|
|
|
|
public function excludeFiles(): FileCollection
|
|
{
|
|
return $this->excludeFiles;
|
|
}
|
|
|
|
public function pathCoverage(): bool
|
|
{
|
|
return $this->pathCoverage;
|
|
}
|
|
|
|
public function includeUncoveredFiles(): bool
|
|
{
|
|
return $this->includeUncoveredFiles;
|
|
}
|
|
|
|
public function ignoreDeprecatedCodeUnits(): bool
|
|
{
|
|
return $this->ignoreDeprecatedCodeUnits;
|
|
}
|
|
|
|
public function disableCodeCoverageIgnore(): bool
|
|
{
|
|
return $this->disableCodeCoverageIgnore;
|
|
}
|
|
|
|
public function processUncoveredFiles(): bool
|
|
{
|
|
return $this->processUncoveredFiles;
|
|
}
|
|
|
|
/**
|
|
* @psalm-assert-if-true !null $this->clover
|
|
*/
|
|
public function hasClover(): bool
|
|
{
|
|
return $this->clover !== null;
|
|
}
|
|
|
|
/**
|
|
* @throws Exception
|
|
*/
|
|
public function clover(): Clover
|
|
{
|
|
if (!$this->hasClover()) {
|
|
throw new Exception(
|
|
'Code Coverage report "Clover XML" has not been configured',
|
|
);
|
|
}
|
|
|
|
return $this->clover;
|
|
}
|
|
|
|
/**
|
|
* @psalm-assert-if-true !null $this->cobertura
|
|
*/
|
|
public function hasCobertura(): bool
|
|
{
|
|
return $this->cobertura !== null;
|
|
}
|
|
|
|
/**
|
|
* @throws Exception
|
|
*/
|
|
public function cobertura(): Cobertura
|
|
{
|
|
if (!$this->hasCobertura()) {
|
|
throw new Exception(
|
|
'Code Coverage report "Cobertura XML" has not been configured',
|
|
);
|
|
}
|
|
|
|
return $this->cobertura;
|
|
}
|
|
|
|
/**
|
|
* @psalm-assert-if-true !null $this->crap4j
|
|
*/
|
|
public function hasCrap4j(): bool
|
|
{
|
|
return $this->crap4j !== null;
|
|
}
|
|
|
|
/**
|
|
* @throws Exception
|
|
*/
|
|
public function crap4j(): Crap4j
|
|
{
|
|
if (!$this->hasCrap4j()) {
|
|
throw new Exception(
|
|
'Code Coverage report "Crap4J" has not been configured',
|
|
);
|
|
}
|
|
|
|
return $this->crap4j;
|
|
}
|
|
|
|
/**
|
|
* @psalm-assert-if-true !null $this->html
|
|
*/
|
|
public function hasHtml(): bool
|
|
{
|
|
return $this->html !== null;
|
|
}
|
|
|
|
/**
|
|
* @throws Exception
|
|
*/
|
|
public function html(): Html
|
|
{
|
|
if (!$this->hasHtml()) {
|
|
throw new Exception(
|
|
'Code Coverage report "HTML" has not been configured',
|
|
);
|
|
}
|
|
|
|
return $this->html;
|
|
}
|
|
|
|
/**
|
|
* @psalm-assert-if-true !null $this->php
|
|
*/
|
|
public function hasPhp(): bool
|
|
{
|
|
return $this->php !== null;
|
|
}
|
|
|
|
/**
|
|
* @throws Exception
|
|
*/
|
|
public function php(): Php
|
|
{
|
|
if (!$this->hasPhp()) {
|
|
throw new Exception(
|
|
'Code Coverage report "PHP" has not been configured',
|
|
);
|
|
}
|
|
|
|
return $this->php;
|
|
}
|
|
|
|
/**
|
|
* @psalm-assert-if-true !null $this->text
|
|
*/
|
|
public function hasText(): bool
|
|
{
|
|
return $this->text !== null;
|
|
}
|
|
|
|
/**
|
|
* @throws Exception
|
|
*/
|
|
public function text(): Text
|
|
{
|
|
if (!$this->hasText()) {
|
|
throw new Exception(
|
|
'Code Coverage report "Text" has not been configured',
|
|
);
|
|
}
|
|
|
|
return $this->text;
|
|
}
|
|
|
|
/**
|
|
* @psalm-assert-if-true !null $this->xml
|
|
*/
|
|
public function hasXml(): bool
|
|
{
|
|
return $this->xml !== null;
|
|
}
|
|
|
|
/**
|
|
* @throws Exception
|
|
*/
|
|
public function xml(): Xml
|
|
{
|
|
if (!$this->hasXml()) {
|
|
throw new Exception(
|
|
'Code Coverage report "XML" has not been configured',
|
|
);
|
|
}
|
|
|
|
return $this->xml;
|
|
}
|
|
}
|