summaryrefslogtreecommitdiff
path: root/vendor/phpunit/php-code-coverage/src/Node/AbstractNode.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpunit/php-code-coverage/src/Node/AbstractNode.php')
-rw-r--r--vendor/phpunit/php-code-coverage/src/Node/AbstractNode.php253
1 files changed, 253 insertions, 0 deletions
diff --git a/vendor/phpunit/php-code-coverage/src/Node/AbstractNode.php b/vendor/phpunit/php-code-coverage/src/Node/AbstractNode.php
new file mode 100644
index 000000000..60d6391d3
--- /dev/null
+++ b/vendor/phpunit/php-code-coverage/src/Node/AbstractNode.php
@@ -0,0 +1,253 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of phpunit/php-code-coverage.
+ *
+ * (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 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;
+}