Chris@14: Chris@14: * Chris@14: * For the full copyright and license information, please view the LICENSE Chris@14: * file that was distributed with this source code. Chris@14: */ Chris@14: Chris@14: namespace SebastianBergmann\CodeCoverage\Node; Chris@14: Chris@14: use SebastianBergmann\CodeCoverage\Util; Chris@14: Chris@14: /** Chris@14: * Base class for nodes in the code coverage information tree. Chris@14: */ Chris@14: abstract class AbstractNode implements \Countable Chris@14: { Chris@14: /** Chris@14: * @var string Chris@14: */ Chris@14: private $name; Chris@14: Chris@14: /** Chris@14: * @var string Chris@14: */ Chris@14: private $path; Chris@14: Chris@14: /** Chris@14: * @var array Chris@14: */ Chris@14: private $pathArray; Chris@14: Chris@14: /** Chris@14: * @var AbstractNode Chris@14: */ Chris@14: private $parent; Chris@14: Chris@14: /** Chris@14: * @var string Chris@14: */ Chris@14: private $id; Chris@14: Chris@14: /** Chris@14: * Constructor. Chris@14: * Chris@14: * @param string $name Chris@14: * @param AbstractNode $parent Chris@14: */ Chris@14: public function __construct($name, self $parent = null) Chris@14: { Chris@14: if (\substr($name, -1) == '/') { Chris@14: $name = \substr($name, 0, -1); Chris@14: } Chris@14: Chris@14: $this->name = $name; Chris@14: $this->parent = $parent; Chris@14: } Chris@14: Chris@14: /** Chris@14: * @return string Chris@14: */ Chris@14: public function getName() Chris@14: { Chris@14: return $this->name; Chris@14: } Chris@14: Chris@14: /** Chris@14: * @return string Chris@14: */ Chris@14: public function getId() Chris@14: { Chris@14: if ($this->id === null) { Chris@14: $parent = $this->getParent(); Chris@14: Chris@14: if ($parent === null) { Chris@14: $this->id = 'index'; Chris@14: } else { Chris@14: $parentId = $parent->getId(); Chris@14: Chris@14: if ($parentId == 'index') { Chris@14: $this->id = \str_replace(':', '_', $this->name); Chris@14: } else { Chris@14: $this->id = $parentId . '/' . $this->name; Chris@14: } Chris@14: } Chris@14: } Chris@14: Chris@14: return $this->id; Chris@14: } Chris@14: Chris@14: /** Chris@14: * @return string Chris@14: */ Chris@14: public function getPath() Chris@14: { Chris@14: if ($this->path === null) { Chris@14: if ($this->parent === null || $this->parent->getPath() === null || $this->parent->getPath() === false) { Chris@14: $this->path = $this->name; Chris@14: } else { Chris@14: $this->path = $this->parent->getPath() . '/' . $this->name; Chris@14: } Chris@14: } Chris@14: Chris@14: return $this->path; Chris@14: } Chris@14: Chris@14: /** Chris@14: * @return array Chris@14: */ Chris@14: public function getPathAsArray() Chris@14: { Chris@14: if ($this->pathArray === null) { Chris@14: if ($this->parent === null) { Chris@14: $this->pathArray = []; Chris@14: } else { Chris@14: $this->pathArray = $this->parent->getPathAsArray(); Chris@14: } Chris@14: Chris@14: $this->pathArray[] = $this; Chris@14: } Chris@14: Chris@14: return $this->pathArray; Chris@14: } Chris@14: Chris@14: /** Chris@14: * @return AbstractNode Chris@14: */ Chris@14: public function getParent() Chris@14: { Chris@14: return $this->parent; Chris@14: } Chris@14: Chris@14: /** Chris@14: * Returns the percentage of classes that has been tested. Chris@14: * Chris@14: * @param bool $asString Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: public function getTestedClassesPercent($asString = true) Chris@14: { Chris@14: return Util::percent( Chris@14: $this->getNumTestedClasses(), Chris@14: $this->getNumClasses(), Chris@14: $asString Chris@14: ); Chris@14: } Chris@14: Chris@14: /** Chris@14: * Returns the percentage of traits that has been tested. Chris@14: * Chris@14: * @param bool $asString Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: public function getTestedTraitsPercent($asString = true) Chris@14: { Chris@14: return Util::percent( Chris@14: $this->getNumTestedTraits(), Chris@14: $this->getNumTraits(), Chris@14: $asString Chris@14: ); Chris@14: } Chris@14: Chris@14: /** Chris@14: * Returns the percentage of classes and traits that has been tested. Chris@14: * Chris@14: * @param bool $asString Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: public function getTestedClassesAndTraitsPercent($asString = true) Chris@14: { Chris@14: return Util::percent( Chris@14: $this->getNumTestedClassesAndTraits(), Chris@14: $this->getNumClassesAndTraits(), Chris@14: $asString Chris@14: ); Chris@14: } Chris@14: Chris@14: /** Chris@14: * Returns the percentage of functions that has been tested. Chris@14: * Chris@14: * @param bool $asString Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: public function getTestedFunctionsPercent($asString = true) Chris@14: { Chris@14: return Util::percent( Chris@14: $this->getNumTestedFunctions(), Chris@14: $this->getNumFunctions(), Chris@14: $asString Chris@14: ); Chris@14: } Chris@14: Chris@14: /** Chris@14: * Returns the percentage of methods that has been tested. Chris@14: * Chris@14: * @param bool $asString Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: public function getTestedMethodsPercent($asString = true) Chris@14: { Chris@14: return Util::percent( Chris@14: $this->getNumTestedMethods(), Chris@14: $this->getNumMethods(), Chris@14: $asString Chris@14: ); Chris@14: } Chris@14: Chris@14: /** Chris@14: * Returns the percentage of functions and methods that has been tested. Chris@14: * Chris@14: * @param bool $asString Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: public function getTestedFunctionsAndMethodsPercent($asString = true) Chris@14: { Chris@14: return Util::percent( Chris@14: $this->getNumTestedFunctionsAndMethods(), Chris@14: $this->getNumFunctionsAndMethods(), Chris@14: $asString Chris@14: ); Chris@14: } Chris@14: Chris@14: /** Chris@14: * Returns the percentage of executed lines. Chris@14: * Chris@14: * @param bool $asString Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: public function getLineExecutedPercent($asString = true) Chris@14: { Chris@14: return Util::percent( Chris@14: $this->getNumExecutedLines(), Chris@14: $this->getNumExecutableLines(), Chris@14: $asString Chris@14: ); Chris@14: } Chris@14: Chris@14: /** Chris@14: * Returns the number of classes and traits. Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: public function getNumClassesAndTraits() Chris@14: { Chris@14: return $this->getNumClasses() + $this->getNumTraits(); Chris@14: } Chris@14: Chris@14: /** Chris@14: * Returns the number of tested classes and traits. Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: public function getNumTestedClassesAndTraits() Chris@14: { Chris@14: return $this->getNumTestedClasses() + $this->getNumTestedTraits(); Chris@14: } Chris@14: Chris@14: /** Chris@14: * Returns the classes and traits of this node. Chris@14: * Chris@14: * @return array Chris@14: */ Chris@14: public function getClassesAndTraits() Chris@14: { Chris@14: return \array_merge($this->getClasses(), $this->getTraits()); Chris@14: } Chris@14: Chris@14: /** Chris@14: * Returns the number of functions and methods. Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: public function getNumFunctionsAndMethods() Chris@14: { Chris@14: return $this->getNumFunctions() + $this->getNumMethods(); Chris@14: } Chris@14: Chris@14: /** Chris@14: * Returns the number of tested functions and methods. Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: public function getNumTestedFunctionsAndMethods() Chris@14: { Chris@14: return $this->getNumTestedFunctions() + $this->getNumTestedMethods(); Chris@14: } Chris@14: Chris@14: /** Chris@14: * Returns the functions and methods of this node. Chris@14: * Chris@14: * @return array Chris@14: */ Chris@14: public function getFunctionsAndMethods() Chris@14: { Chris@14: return \array_merge($this->getFunctions(), $this->getMethods()); Chris@14: } Chris@14: Chris@14: /** Chris@14: * Returns the classes of this node. Chris@14: * Chris@14: * @return array Chris@14: */ Chris@14: abstract public function getClasses(); Chris@14: Chris@14: /** Chris@14: * Returns the traits of this node. Chris@14: * Chris@14: * @return array Chris@14: */ Chris@14: abstract public function getTraits(); Chris@14: Chris@14: /** Chris@14: * Returns the functions of this node. Chris@14: * Chris@14: * @return array Chris@14: */ Chris@14: abstract public function getFunctions(); Chris@14: Chris@14: /** Chris@14: * Returns the LOC/CLOC/NCLOC of this node. Chris@14: * Chris@14: * @return array Chris@14: */ Chris@14: abstract public function getLinesOfCode(); Chris@14: Chris@14: /** Chris@14: * Returns the number of executable lines. Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: abstract public function getNumExecutableLines(); Chris@14: Chris@14: /** Chris@14: * Returns the number of executed lines. Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: abstract public function getNumExecutedLines(); Chris@14: Chris@14: /** Chris@14: * Returns the number of classes. Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: abstract public function getNumClasses(); Chris@14: Chris@14: /** Chris@14: * Returns the number of tested classes. Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: abstract public function getNumTestedClasses(); Chris@14: Chris@14: /** Chris@14: * Returns the number of traits. Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: abstract public function getNumTraits(); Chris@14: Chris@14: /** Chris@14: * Returns the number of tested traits. Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: abstract public function getNumTestedTraits(); Chris@14: Chris@14: /** Chris@14: * Returns the number of methods. Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: abstract public function getNumMethods(); Chris@14: Chris@14: /** Chris@14: * Returns the number of tested methods. Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: abstract public function getNumTestedMethods(); Chris@14: Chris@14: /** Chris@14: * Returns the number of functions. Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: abstract public function getNumFunctions(); Chris@14: Chris@14: /** Chris@14: * Returns the number of tested functions. Chris@14: * Chris@14: * @return int Chris@14: */ Chris@14: abstract public function getNumTestedFunctions(); Chris@14: }