File size: 8.12Kb
<?php declare(strict_types=1);
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <[email protected]>
*
* 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;
}
}