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

Breadcrumb

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

function File::calculateStatistics

@psalm-param array<string, CodeUnitClassType> $classes @psalm-param array<string, CodeUnitTraitType> $traits @psalm-param array<string, CodeUnitFunctionType> $functions

1 call to File::calculateStatistics()
File::__construct in vendor/phpunit/php-code-coverage/src/Node/File.php
@psalm-param array<int, ?list<non-empty-string>> $lineCoverageData @psalm-param LinesOfCodeType $linesOfCode @psalm-param array<string, CodeUnitClassType> $classes @psalm-param array<string, CodeUnitTraitType>…

File

vendor/phpunit/php-code-coverage/src/Node/File.php, line 358

Class

File
@internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage

Namespace

SebastianBergmann\CodeCoverage\Node

Code

private function calculateStatistics(array $classes, array $traits, array $functions) : void {
    foreach (range(1, $this->linesOfCode['linesOfCode']) as $lineNumber) {
        $this->codeUnitsByLine[$lineNumber] = [];
    }
    $this->processClasses($classes);
    $this->processTraits($traits);
    $this->processFunctions($functions);
    foreach (range(1, $this->linesOfCode['linesOfCode']) as $lineNumber) {
        if (isset($this->lineCoverageData[$lineNumber])) {
            foreach ($this->codeUnitsByLine[$lineNumber] as &$codeUnit) {
                $codeUnit['executableLines']++;
            }
            unset($codeUnit);
            $this->numExecutableLines++;
            if (count($this->lineCoverageData[$lineNumber]) > 0) {
                foreach ($this->codeUnitsByLine[$lineNumber] as &$codeUnit) {
                    $codeUnit['executedLines']++;
                }
                unset($codeUnit);
                $this->numExecutedLines++;
            }
        }
    }
    foreach ($this->traits as &$trait) {
        foreach ($trait['methods'] as &$method) {
            $methodLineCoverage = $method['executableLines'] ? $method['executedLines'] / $method['executableLines'] * 100 : 100;
            $methodBranchCoverage = $method['executableBranches'] ? $method['executedBranches'] / $method['executableBranches'] * 100 : 0;
            $methodPathCoverage = $method['executablePaths'] ? $method['executedPaths'] / $method['executablePaths'] * 100 : 0;
            $method['coverage'] = $methodBranchCoverage ?: $methodLineCoverage;
            $method['crap'] = (new CrapIndex($method['ccn'], $methodPathCoverage ?: $methodLineCoverage))->asString();
            $trait['ccn'] += $method['ccn'];
        }
        unset($method);
        $traitLineCoverage = $trait['executableLines'] ? $trait['executedLines'] / $trait['executableLines'] * 100 : 100;
        $traitBranchCoverage = $trait['executableBranches'] ? $trait['executedBranches'] / $trait['executableBranches'] * 100 : 0;
        $traitPathCoverage = $trait['executablePaths'] ? $trait['executedPaths'] / $trait['executablePaths'] * 100 : 0;
        $trait['coverage'] = $traitBranchCoverage ?: $traitLineCoverage;
        $trait['crap'] = (new CrapIndex($trait['ccn'], $traitPathCoverage ?: $traitLineCoverage))->asString();
        if ($trait['executableLines'] > 0 && $trait['coverage'] === 100) {
            $this->numTestedClasses++;
        }
    }
    unset($trait);
    foreach ($this->classes as &$class) {
        foreach ($class['methods'] as &$method) {
            $methodLineCoverage = $method['executableLines'] ? $method['executedLines'] / $method['executableLines'] * 100 : 100;
            $methodBranchCoverage = $method['executableBranches'] ? $method['executedBranches'] / $method['executableBranches'] * 100 : 0;
            $methodPathCoverage = $method['executablePaths'] ? $method['executedPaths'] / $method['executablePaths'] * 100 : 0;
            $method['coverage'] = $methodBranchCoverage ?: $methodLineCoverage;
            $method['crap'] = (new CrapIndex($method['ccn'], $methodPathCoverage ?: $methodLineCoverage))->asString();
            $class['ccn'] += $method['ccn'];
        }
        unset($method);
        $classLineCoverage = $class['executableLines'] ? $class['executedLines'] / $class['executableLines'] * 100 : 100;
        $classBranchCoverage = $class['executableBranches'] ? $class['executedBranches'] / $class['executableBranches'] * 100 : 0;
        $classPathCoverage = $class['executablePaths'] ? $class['executedPaths'] / $class['executablePaths'] * 100 : 0;
        $class['coverage'] = $classBranchCoverage ?: $classLineCoverage;
        $class['crap'] = (new CrapIndex($class['ccn'], $classPathCoverage ?: $classLineCoverage))->asString();
        if ($class['executableLines'] > 0 && $class['coverage'] === 100) {
            $this->numTestedClasses++;
        }
    }
    unset($class);
    foreach ($this->functions as &$function) {
        $functionLineCoverage = $function['executableLines'] ? $function['executedLines'] / $function['executableLines'] * 100 : 100;
        $functionBranchCoverage = $function['executableBranches'] ? $function['executedBranches'] / $function['executableBranches'] * 100 : 0;
        $functionPathCoverage = $function['executablePaths'] ? $function['executedPaths'] / $function['executablePaths'] * 100 : 0;
        $function['coverage'] = $functionBranchCoverage ?: $functionLineCoverage;
        $function['crap'] = (new CrapIndex($function['ccn'], $functionPathCoverage ?: $functionLineCoverage))->asString();
        if ($function['coverage'] === 100) {
            $this->numTestedFunctions++;
        }
    }
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal