Viewing file: AbstractNode.php (6.36 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php declare(strict_types=1); /* * This file is part of phpunit/php-code-coverage. * * (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 SebastianBergmann\CodeCoverage\Node;
use const DIRECTORY_SEPARATOR; use function array_merge; use function str_replace; use function substr; use Countable; use SebastianBergmann\CodeCoverage\Util\Percentage;
/** * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage */ abstract class AbstractNode implements Countable { /** * @var string */ private $name;
/** * @var string */ private $pathAsString;
/** * @var array */ private $pathAsArray;
/** * @var AbstractNode */ private $parent;
/** * @var string */ private $id;
public function __construct(string $name, ?self $parent = null) { if (substr($name, -1) === DIRECTORY_SEPARATOR) { $name = substr($name, 0, -1); }
$this->name = $name; $this->parent = $parent; }
public function name(): string { return $this->name; }
public function id(): string { if ($this->id === null) { $parent = $this->parent();
if ($parent === null) { $this->id = 'index'; } else { $parentId = $parent->id();
if ($parentId === 'index') { $this->id = str_replace(':', '_', $this->name); } else { $this->id = $parentId . '/' . $this->name; } } }
return $this->id; }
public function pathAsString(): string { if ($this->pathAsString === null) { if ($this->parent === null) { $this->pathAsString = $this->name; } else { $this->pathAsString = $this->parent->pathAsString() . DIRECTORY_SEPARATOR . $this->name; } }
return $this->pathAsString; }
public function pathAsArray(): array { if ($this->pathAsArray === null) { if ($this->parent === null) { $this->pathAsArray = []; } else { $this->pathAsArray = $this->parent->pathAsArray(); }
$this->pathAsArray[] = $this; }
return $this->pathAsArray; }
public function parent(): ?self { return $this->parent; }
public function percentageOfTestedClasses(): Percentage { return Percentage::fromFractionAndTotal( $this->numberOfTestedClasses(), $this->numberOfClasses(), ); }
public function percentageOfTestedTraits(): Percentage { return Percentage::fromFractionAndTotal( $this->numberOfTestedTraits(), $this->numberOfTraits(), ); }
public function percentageOfTestedClassesAndTraits(): Percentage { return Percentage::fromFractionAndTotal( $this->numberOfTestedClassesAndTraits(), $this->numberOfClassesAndTraits(), ); }
public function percentageOfTestedFunctions(): Percentage { return Percentage::fromFractionAndTotal( $this->numberOfTestedFunctions(), $this->numberOfFunctions(), ); }
public function percentageOfTestedMethods(): Percentage { return Percentage::fromFractionAndTotal( $this->numberOfTestedMethods(), $this->numberOfMethods(), ); }
public function percentageOfTestedFunctionsAndMethods(): Percentage { return Percentage::fromFractionAndTotal( $this->numberOfTestedFunctionsAndMethods(), $this->numberOfFunctionsAndMethods(), ); }
public function percentageOfExecutedLines(): Percentage { return Percentage::fromFractionAndTotal( $this->numberOfExecutedLines(), $this->numberOfExecutableLines(), ); }
public function percentageOfExecutedBranches(): Percentage { return Percentage::fromFractionAndTotal( $this->numberOfExecutedBranches(), $this->numberOfExecutableBranches() ); }
public function percentageOfExecutedPaths(): Percentage { return Percentage::fromFractionAndTotal( $this->numberOfExecutedPaths(), $this->numberOfExecutablePaths() ); }
public function numberOfClassesAndTraits(): int { return $this->numberOfClasses() + $this->numberOfTraits(); }
public function numberOfTestedClassesAndTraits(): int { return $this->numberOfTestedClasses() + $this->numberOfTestedTraits(); }
public function classesAndTraits(): array { return array_merge($this->classes(), $this->traits()); }
public function numberOfFunctionsAndMethods(): int { return $this->numberOfFunctions() + $this->numberOfMethods(); }
public function numberOfTestedFunctionsAndMethods(): int { return $this->numberOfTestedFunctions() + $this->numberOfTestedMethods(); }
abstract public function classes(): array;
abstract public function traits(): array;
abstract public function functions(): array;
/** * @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int} */ abstract public function linesOfCode(): array;
abstract public function numberOfExecutableLines(): int;
abstract public function numberOfExecutedLines(): int;
abstract public function numberOfExecutableBranches(): int;
abstract public function numberOfExecutedBranches(): int;
abstract public function numberOfExecutablePaths(): int;
abstract public function numberOfExecutedPaths(): int;
abstract public function numberOfClasses(): int;
abstract public function numberOfTestedClasses(): int;
abstract public function numberOfTraits(): int;
abstract public function numberOfTestedTraits(): int;
abstract public function numberOfMethods(): int;
abstract public function numberOfTestedMethods(): int;
abstract public function numberOfFunctions(): int;
abstract public function numberOfTestedFunctions(): int; }
|