function CodeCoverage::linesToBeCovered
@psalm-param class-string $className @psalm-param non-empty-string $methodName
@psalm-return array<string,list<int>>|false
Throws
File
-
vendor/
phpunit/ phpunit/ src/ Metadata/ Api/ CodeCoverage.php, line 55
Class
- CodeCoverage
- @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
Namespace
PHPUnit\Metadata\ApiCode
public function linesToBeCovered(string $className, string $methodName) : array|false {
if (!$this->shouldCodeCoverageBeCollectedFor($className, $methodName)) {
return false;
}
$metadataForClass = Registry::parser()->forClass($className);
$classShortcut = null;
if ($metadataForClass->isCoversDefaultClass()
->isNotEmpty()) {
if (count($metadataForClass->isCoversDefaultClass()) > 1) {
throw new CodeCoverageException(sprintf('More than one @coversDefaultClass annotation for class or interface "%s"', $className));
}
$metadata = $metadataForClass->isCoversDefaultClass()
->asArray()[0];
assert($metadata instanceof CoversDefaultClass);
$classShortcut = $metadata->className();
}
$codeUnits = CodeUnitCollection::fromList();
$mapper = new Mapper();
foreach (Registry::parser()->forClassAndMethod($className, $methodName) as $metadata) {
if (!$metadata->isCoversClass() && !$metadata->isCoversFunction() && !$metadata->isCovers()) {
continue;
}
assert($metadata instanceof CoversClass || $metadata instanceof CoversFunction || $metadata instanceof Covers);
if ($metadata->isCoversClass() || $metadata->isCoversFunction()) {
$codeUnits = $codeUnits->mergeWith($this->mapToCodeUnits($metadata));
}
elseif ($metadata->isCovers()) {
assert($metadata instanceof Covers);
$target = $metadata->target();
if (interface_exists($target)) {
throw new InvalidCoversTargetException(sprintf('Trying to @cover interface "%s".', $target));
}
if ($classShortcut !== null && str_starts_with($target, '::')) {
$target = $classShortcut . $target;
}
try {
$codeUnits = $codeUnits->mergeWith($mapper->stringToCodeUnits($target));
} catch (InvalidCodeUnitException $e) {
throw new InvalidCoversTargetException(sprintf('"@covers %s" is invalid', $target), $e->getCode(), $e);
}
}
}
return $mapper->codeUnitsToSourceLines($codeUnits);
}