Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. CodeCoverage.php

function CodeCoverage::linesToBeCovered

@psalm-param class-string $className @psalm-param non-empty-string $methodName

@psalm-return array<string,list<int>>|false

Throws

CodeCoverageException

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\Api

Code

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);
}
RSS feed
Powered by Drupal